ETH Price: $3,563.40 (-0.10%)
 

Overview

Max Total Supply

1,000,000,000 BENJI

Holders

80,415

Market

Price

$0.06 @ 0.000017 ETH (-12.33%)

Onchain Market Cap

$60,506,000.00

Circulating Supply Market Cap

$61,381,845.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,047.690006412192359046 BENJI

Value
$365.92 ( ~0.102688343577452 ETH) [0.0006%]
0x193c82adf4e514d443735710Fdc79F50DE6f58A0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Basenji - oldest dog breed in history and with a name that incorporates base, Basenji was born to be the perfect dog for Base Chain.

Market

Volume (24H):$1,898,979.00
Market Capitalization:$61,381,845.00
Circulating Supply:1,000,000,000.00 BENJI
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
Basenji

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-03-23
*/

/**
 *Submitted for verification at Basescan.org on 2024-03-23
 */
// SPDX-License-Identifier: UNLICENSE

/*
The dog of Base,

Meet Basenji, the oldest dog breed in history, born to live on the Base Chain.

$BENJI

TG: https://t.me/BasenjiBaseOfficial
Website: https://www.basenjibase.com/
Twitter: https://twitter.com/basenjiofficial
*/

pragma solidity ^0.8.19;

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 Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface 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 Basenji is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public launchedAtCoefficient;

    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;

    // Blacklist Map
    mapping(address => bool) private _blacklist;

    mapping(address => uint256) private launchedAtTime;

    mapping(address => bool) private _isLiquiditySponsor;
    bool public transferDelayEnabled = true;
    bool public checkBlacklist;

    bool public maxWalletCheckStatus;

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

    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

    /******************/

    // 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
    );

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Basenji", "BENJI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 // base uniswap router
        );

        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 = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        launchedAtCoefficient = 0;

        maxWalletCheckStatus = true;

        uint256 _sellMarketingFee = 25;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;

        feeCalculationData = 0;

        maxTransactionAmount = (totalSupply * 20) / 1000; // 2% max tx
        maxWallet = (totalSupply * 20) / 1000; // 2% maxwallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;

        marketingWallet = address(0xA19bdCcd13cEc3815e8CC9ba2862982fcE899dDD); // set as marketing wallet
        devWallet = address(0xA19bdCcd13cEc3815e8CC9ba2862982fcE899dDD); // set as dev wallet

        checkBlacklist = false;

        // 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;
        launchedAt = block.number;
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function addToLaunchedAtTime(
        address temp,
        uint256 time
    ) external onlyOwner {
        launchedAtTime[temp] = time;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function getTransferDelayEnabled() public view returns (bool) {
        bool result = transferDelayEnabled;
        return result;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 15) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

    function updateLaunchedAtCoefficient(uint256 newNum) external onlyOwner {
        uint256 value = newNum * (10 ** 18);
        launchedAtCoefficient = value;
    }

    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 updateFeeCalculationData(uint256 newNum) external onlyOwner {
        if (limitsInEffect) {
            feeCalculationData = newNum;
        } else {
            feeCalculationData = 0;
        }
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }

    function getIsLimitInEffect() public view returns (bool) {
        bool isInEffect = limitsInEffect;
        return isInEffect;
    }

    function blacklistAccount(
        address account,
        bool isBlacklisted
    ) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _earlySellLiquidityFee,
        uint256 _earlySellMarketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function setIsLiqudiitySponsor(
        address account,
        bool isSponsor
    ) external onlyOwner {
        _isLiquiditySponsor[account] = isSponsor;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateMaxWalletCheckStatus(bool _status) external onlyOwner {
        maxWalletCheckStatus = _status;
    }

    function getEarlySellMarketingFee() public view returns (uint256) {
        return earlySellMarketingFee;
    }

    function setCheckBlacklist(bool _checkBlacklist) external onlyOwner {
        checkBlacklist = _checkBlacklist;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function getFirstBuyTimestamp(
        address holder
    ) public view returns (uint256) {
        uint256 timestamp = _holderFirstBuyTimestamp[holder];
        return timestamp;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    event BoughtEarly(address indexed sniper);

    function updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    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");
        require(
            !_blacklist[to] && !_blacklist[from],
            "You have been blacklisted from transfering tokens"
        );
        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"
                    );
                }
            }
        }

        // anti bot logic
        if (
            block.number <= (launchedAt + 0) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = false;
        }

        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 getBuyLiquidityFee() public view returns (uint256) {
        return buyLiquidityFee;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            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;
        }

        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        (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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"temp","type":"address"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"addToLaunchedAtTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","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":"checkBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"name":"getBuyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getFirstBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIsLimitInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"launchedAtCoefficient","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"maxWalletCheckStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_checkBlacklist","type":"bool"}],"name":"setCheckBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isSponsor","type":"bool"}],"name":"setIsLiqudiitySponsor","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":"uint256","name":"newNum","type":"uint256"}],"name":"updateFeeCalculationData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateLaunchedAtCoefficient","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":"bool","name":"_status","type":"bool"}],"name":"updateMaxWalletCheckStatus","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"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600c60036101000a81548160ff0219169083151502179055506001601260006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600781526020017f426173656e6a69000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f42454e4a49000000000000000000000000000000000000000000000000000000815250816003908162000116919062000e5f565b50806004908162000128919062000e5f565b50505060006200013d620006bc60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000734752ba5dbc23f44d87826276bf6fd6b1c372ad24905062000208816001620006c460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae919062000fb0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000fb0565b6040518363ffffffff1660e01b81526004016200035b92919062000ff3565b6020604051808303816000875af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000fb0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e960a0516001620006c460201b60201c565b620003fe60a0516001620007c160201b60201c565b6000601990506000806000600b819055506001601260026101000a81548160ff02191690831515021790555060006019905060008060008060006b033b2e3c9fd0803ce800000090506000601b819055506103e86014826200046191906200104f565b6200046d9190620010c9565b6008819055506103e86014826200048591906200104f565b620004919190620010c9565b600a81905550612710600582620004a991906200104f565b620004b59190620010c9565b600981905550886014819055508760158190555086601681905550601654601554601454620004e5919062001101565b620004f1919062001101565b601381905550856018819055508460198190555083601a81905550601a5460195460185462000521919062001101565b6200052d919062001101565b60178190555082601c8190555081601d8190555073a19bdccd13cec3815e8cc9ba2862982fce899ddd600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a19bdccd13cec3815e8cc9ba2862982fce899ddd600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260016101000a81548160ff021916908315150217905550620006286200061a6200086260201b60201c565b60016200088c60201b60201c565b6200063b3060016200088c60201b60201c565b6200065061dead60016200088c60201b60201c565b62000672620006646200086260201b60201c565b6001620006c460201b60201c565b62000685306001620006c460201b60201c565b6200069a61dead6001620006c460201b60201c565b620006ac3382620009d960201b60201c565b505050505050505050506200130b565b600033905090565b620006d4620006bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000766576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075d906200119d565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089c620006bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000925906200119d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009cd9190620011dc565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a429062001249565b60405180910390fd5b62000a5f6000838362000b7d60201b60201c565b62000a768160025462000b8260201b90919060201c565b60028190555062000acf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8260201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7191906200127c565b60405180910390a35050565b505050565b600080828462000b93919062001101565b90508381101562000bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bd290620012e9565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c6757607f821691505b60208210810362000c7d5762000c7c62000c1f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ce77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ca8565b62000cf3868362000ca8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d4062000d3a62000d348462000d0b565b62000d15565b62000d0b565b9050919050565b6000819050919050565b62000d5c8362000d1f565b62000d7462000d6b8262000d47565b84845462000cb5565b825550505050565b600090565b62000d8b62000d7c565b62000d9881848462000d51565b505050565b5b8181101562000dc05762000db460008262000d81565b60018101905062000d9e565b5050565b601f82111562000e0f5762000dd98162000c83565b62000de48462000c98565b8101602085101562000df4578190505b62000e0c62000e038562000c98565b83018262000d9d565b50505b505050565b600082821c905092915050565b600062000e346000198460080262000e14565b1980831691505092915050565b600062000e4f838362000e21565b9150826002028217905092915050565b62000e6a8262000be5565b67ffffffffffffffff81111562000e865762000e8562000bf0565b5b62000e92825462000c4e565b62000e9f82828562000dc4565b600060209050601f83116001811462000ed7576000841562000ec2578287015190505b62000ece858262000e41565b86555062000f3e565b601f19841662000ee78662000c83565b60005b8281101562000f115784890151825560018201915060208501945060208101905062000eea565b8683101562000f31578489015162000f2d601f89168262000e21565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f788262000f4b565b9050919050565b62000f8a8162000f6b565b811462000f9657600080fd5b50565b60008151905062000faa8162000f7f565b92915050565b60006020828403121562000fc95762000fc862000f46565b5b600062000fd98482850162000f99565b91505092915050565b62000fed8162000f6b565b82525050565b60006040820190506200100a600083018562000fe2565b62001019602083018462000fe2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200105c8262000d0b565b9150620010698362000d0b565b9250828202620010798162000d0b565b9150828204841483151762001093576200109262001020565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010d68262000d0b565b9150620010e38362000d0b565b925082620010f657620010f56200109a565b5b828204905092915050565b60006200110e8262000d0b565b91506200111b8362000d0b565b925082820190508082111562001136576200113562001020565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011856020836200113c565b915062001192826200114d565b602082019050919050565b60006020820190508181036000830152620011b88162001176565b9050919050565b60008115159050919050565b620011d681620011bf565b82525050565b6000602082019050620011f36000830184620011cb565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001231601f836200113c565b91506200123e82620011f9565b602082019050919050565b60006020820190508181036000830152620012648162001222565b9050919050565b620012768162000d0b565b82525050565b60006020820190506200129360008301846200126b565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012d1601b836200113c565b9150620012de8262001299565b602082019050919050565b600060208201905081810360008301526200130481620012c2565b9050919050565b60805160a051615ff2620013626000396000818161183701528181612149015281816137400152613b600152600081816111c5015281816136e80152818161492001528181614a010152614a280152615ff26000f3fe60806040526004361061041f5760003560e01c806390498eaa1161021e578063c024666811610123578063e2f45605116100ab578063f2fde38b1161007a578063f2fde38b14610ffa578063f63696bd14611023578063f63743421461104e578063f8b45b0514611079578063ff935af6146110a457610426565b8063e2f4560514610f50578063e4e513c414610f7b578063e884f26014610fa4578063f11a24d314610fcf57610426565b8063cab323d5116100f2578063cab323d514610e57578063d257b34f14610e80578063d85ba06314610ebd578063db913f8914610ee8578063dd62ed3e14610f1357610426565b8063c024666814610daf578063c18bc19514610dd8578063c876d0b914610e01578063c8c8ebe414610e2c57610426565b8063a457c2d7116101a6578063aacebbe311610175578063aacebbe314610ccc578063b14607ea14610cf5578063b181e4cf14610d1e578063b62496f514610d47578063bbc0c74214610d8457610426565b8063a457c2d714610bea578063a4d15b6414610c27578063a7fc00ec14610c52578063a9059cbb14610c8f57610426565b80639a7a23d6116101ed5780639a7a23d614610b175780639c3b4fdc14610b405780639fccce3214610b6b578063a0d82dc514610b96578063a265777814610bc157610426565b806390498eaa14610a6d5780639213691314610a98578063924de9b714610ac357806395d89b4114610aec57610426565b80633950935111610324578063751039fc116102ac5780638095d5641161027b5780638095d564146109ae5780638a8c523c146109d75780638ad30c91146109ee5780638da5cb5b14610a175780638ea5220f14610a4257610426565b8063751039fc146109045780637571336a1461092f57806375f0a874146109585780637bce5a041461098357610426565b8063541a43cf116102f3578063541a43cf1461082f5780636a486a8e1461085a5780636ddd17131461088557806370a08231146108b0578063715018a6146108ed57610426565b8063395093511461075f57806349bd5a5e1461079c5780634a62bb65146107c75780634fbee193146107f257610426565b80631f3fed8f116103a75780632bf3d42d116103765780632bf3d42d1461068a5780632d5a5d34146106b55780632f7a21bf146106de578063313ce56714610709578063354c446c1461073457610426565b80631f3fed8f146105d0578063203e727e146105fb57806323b872dd146106245780632a4fad7b1461066157610426565b80631633328d116103ee5780631633328d146104fb5780631694505e1461052657806318160ddd146105515780631816467f1461057c5780631a8145bb146105a557610426565b8063021dddc71461042b57806306fdde0314610456578063095ea7b31461048157806310d5de53146104be57610426565b3661042657005b600080fd5b34801561043757600080fd5b506104406110cd565b60405161044d9190614b3c565b60405180910390f35b34801561046257600080fd5b5061046b6110e0565b6040516104789190614be7565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614ca2565b611172565b6040516104b59190614b3c565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190614ce2565b611190565b6040516104f29190614b3c565b60405180910390f35b34801561050757600080fd5b506105106111b0565b60405161051d9190614b3c565b60405180910390f35b34801561053257600080fd5b5061053b6111c3565b6040516105489190614d6e565b60405180910390f35b34801561055d57600080fd5b506105666111e7565b6040516105739190614d98565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190614ce2565b6111f1565b005b3480156105b157600080fd5b506105ba611348565b6040516105c79190614d98565b60405180910390f35b3480156105dc57600080fd5b506105e561134e565b6040516105f29190614d98565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190614db3565b611354565b005b34801561063057600080fd5b5061064b60048036038101906106469190614de0565b61147e565b6040516106589190614b3c565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190614e5f565b611557565b005b34801561069657600080fd5b5061069f611649565b6040516106ac9190614d98565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190614e5f565b61164f565b005b3480156106ea57600080fd5b506106f3611741565b6040516107009190614b3c565b60405180910390f35b34801561071557600080fd5b5061071e61175d565b60405161072b9190614ebb565b60405180910390f35b34801561074057600080fd5b50610749611766565b6040516107569190614b3c565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190614ca2565b611782565b6040516107939190614b3c565b60405180910390f35b3480156107a857600080fd5b506107b1611835565b6040516107be9190614ee5565b60405180910390f35b3480156107d357600080fd5b506107dc611859565b6040516107e99190614b3c565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190614ce2565b61186c565b6040516108269190614b3c565b60405180910390f35b34801561083b57600080fd5b506108446118c2565b6040516108519190614d98565b60405180910390f35b34801561086657600080fd5b5061086f6118c8565b60405161087c9190614d98565b60405180910390f35b34801561089157600080fd5b5061089a6118ce565b6040516108a79190614b3c565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190614ce2565b6118e1565b6040516108e49190614d98565b60405180910390f35b3480156108f957600080fd5b50610902611929565b005b34801561091057600080fd5b50610919611a81565b6040516109269190614b3c565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614e5f565b611b3c565b005b34801561096457600080fd5b5061096d611c2e565b60405161097a9190614ee5565b60405180910390f35b34801561098f57600080fd5b50610998611c54565b6040516109a59190614d98565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190614f00565b611c5a565b005b3480156109e357600080fd5b506109ec611d74565b005b3480156109fa57600080fd5b50610a156004803603810190610a109190614db3565b611e4a565b005b348015610a2357600080fd5b50610a2c611f0e565b604051610a399190614ee5565b60405180910390f35b348015610a4e57600080fd5b50610a57611f38565b604051610a649190614ee5565b60405180910390f35b348015610a7957600080fd5b50610a82611f5e565b604051610a8f9190614d98565b60405180910390f35b348015610aa457600080fd5b50610aad611f64565b604051610aba9190614d98565b60405180910390f35b348015610acf57600080fd5b50610aea6004803603810190610ae59190614f53565b611f6a565b005b348015610af857600080fd5b50610b0161201e565b604051610b0e9190614be7565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b399190614e5f565b6120b0565b005b348015610b4c57600080fd5b50610b556121e3565b604051610b629190614d98565b60405180910390f35b348015610b7757600080fd5b50610b806121e9565b604051610b8d9190614d98565b60405180910390f35b348015610ba257600080fd5b50610bab6121ef565b604051610bb89190614d98565b60405180910390f35b348015610bcd57600080fd5b50610be86004803603810190610be39190614f53565b6121f5565b005b348015610bf657600080fd5b50610c116004803603810190610c0c9190614ca2565b6122a9565b604051610c1e9190614b3c565b60405180910390f35b348015610c3357600080fd5b50610c3c612376565b604051610c499190614b3c565b60405180910390f35b348015610c5e57600080fd5b50610c796004803603810190610c749190614ce2565b612389565b604051610c869190614d98565b60405180910390f35b348015610c9b57600080fd5b50610cb66004803603810190610cb19190614ca2565b6123d7565b604051610cc39190614b3c565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190614ce2565b6123f5565b005b348015610d0157600080fd5b50610d1c6004803603810190610d179190614f53565b61254c565b005b348015610d2a57600080fd5b50610d456004803603810190610d409190614f53565b612600565b005b348015610d5357600080fd5b50610d6e6004803603810190610d699190614ce2565b6126b4565b604051610d7b9190614b3c565b60405180910390f35b348015610d9057600080fd5b50610d996126d4565b604051610da69190614b3c565b60405180910390f35b348015610dbb57600080fd5b50610dd66004803603810190610dd19190614e5f565b6126e7565b005b348015610de457600080fd5b50610dff6004803603810190610dfa9190614db3565b612827565b005b348015610e0d57600080fd5b50610e16612951565b604051610e239190614b3c565b60405180910390f35b348015610e3857600080fd5b50610e41612964565b604051610e4e9190614d98565b60405180910390f35b348015610e6357600080fd5b50610e7e6004803603810190610e799190614ca2565b61296a565b005b348015610e8c57600080fd5b50610ea76004803603810190610ea29190614db3565b612a49565b604051610eb49190614b3c565b60405180910390f35b348015610ec957600080fd5b50610ed2612bb9565b604051610edf9190614d98565b60405180910390f35b348015610ef457600080fd5b50610efd612bbf565b604051610f0a9190614d98565b60405180910390f35b348015610f1f57600080fd5b50610f3a6004803603810190610f359190614f80565b612bc9565b604051610f479190614d98565b60405180910390f35b348015610f5c57600080fd5b50610f65612c50565b604051610f729190614d98565b60405180910390f35b348015610f8757600080fd5b50610fa26004803603810190610f9d9190614db3565b612c56565b005b348015610fb057600080fd5b50610fb9612d10565b604051610fc69190614b3c565b60405180910390f35b348015610fdb57600080fd5b50610fe4612dcb565b604051610ff19190614d98565b60405180910390f35b34801561100657600080fd5b50611021600480360381019061101c9190614ce2565b612dd1565b005b34801561102f57600080fd5b50611038612f97565b6040516110459190614d98565b60405180910390f35b34801561105a57600080fd5b50611063612fa1565b6040516110709190614d98565b60405180910390f35b34801561108557600080fd5b5061108e612fa7565b60405161109b9190614d98565b60405180910390f35b3480156110b057600080fd5b506110cb60048036038101906110c69190614fc0565b612fad565b005b601260019054906101000a900460ff1681565b6060600380546110ef9061506a565b80601f016020809104026020016040519081016040528092919081815260200182805461111b9061506a565b80156111685780601f1061113d57610100808354040283529160200191611168565b820191906000526020600020905b81548152906001019060200180831161114b57829003601f168201915b5050505050905090565b600061118661117f6130d7565b84846130df565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601260029054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6111f96130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f906150e7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f5481565b601e5481565b61135c6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906150e7565b60405180910390fd5b670de0b6b3a76400006103e860056114016111e7565b61140b9190615136565b61141591906151a7565b61141f91906151a7565b811015611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061524a565b60405180910390fd5b670de0b6b3a7640000816114759190615136565b60088190555050565b600061148b8484846132a8565b61154c846114976130d7565b61154785604051806060016040528060288152602001615f7060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114fd6130d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141369092919063ffffffff16565b6130df565b600190509392505050565b61155f6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906150e7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d5481565b6116576130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd906150e7565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080600c60009054906101000a900460ff1690508091505090565b60006012905090565b600080601260009054906101000a900460ff1690508091505090565b600061182b61178f6130d7565b8461182685600160006117a06130d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419a90919063ffffffff16565b6130df565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c5481565b60175481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119316130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906150e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611a8b6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906150e7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b611b446130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906150e7565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611c626130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce8906150e7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611d19919061526a565b611d23919061526a565b60138190555060326013541115611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d66906152ea565b60405180910390fd5b505050565b611d7c6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e02906150e7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555043602181905550565b611e526130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed8906150e7565b60405180910390fd5b600c60009054906101000a900460ff1615611f025780601b81905550611f0b565b6000601b819055505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60185481565b611f726130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff8906150e7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461202d9061506a565b80601f01602080910402602001604051908101604052809291908181526020018280546120599061506a565b80156120a65780601f1061207b576101008083540402835291602001916120a6565b820191906000526020600020905b81548152906001019060200180831161208957829003601f168201915b5050505050905090565b6120b86130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e906150e7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc9061537c565b60405180910390fd5b6121df82826141f8565b5050565b60165481565b60205481565b601a5481565b6121fd6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612283906150e7565b60405180910390fd5b80600c60036101000a81548160ff02191690831515021790555050565b600061236c6122b66130d7565b8461236785604051806060016040528060258152602001615f9860259139600160006122e06130d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141369092919063ffffffff16565b6130df565b6001905092915050565b600c60039054906101000a900460ff1681565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080915050919050565b60006123eb6123e46130d7565b84846132a8565b6001905092915050565b6123fd6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461248c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612483906150e7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125546130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da906150e7565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6126086130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e906150e7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60246020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6126ef6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612775906150e7565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161281b9190614b3c565b60405180910390a25050565b61282f6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906150e7565b60405180910390fd5b670de0b6b3a76400006103e8600f6128d46111e7565b6128de9190615136565b6128e891906151a7565b6128f291906151a7565b811015612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b9061540e565b60405180910390fd5b670de0b6b3a7640000816129489190615136565b600a8190555050565b601260009054906101000a900460ff1681565b60085481565b6129726130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f8906150e7565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000612a536130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad9906150e7565b60405180910390fd5b620186a06001612af06111e7565b612afa9190615136565b612b0491906151a7565b821015612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d906154a0565b60405180910390fd5b6103e86005612b536111e7565b612b5d9190615136565b612b6791906151a7565b821115612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba090615532565b60405180910390fd5b8160098190555060019050919050565b60135481565b6000601d54905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b612c5e6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce4906150e7565b60405180910390fd5b6000670de0b6b3a764000082612d039190615136565b905080600b819055505050565b6000612d1a6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da0906150e7565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b60155481565b612dd96130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5f906150e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece906155c4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601554905090565b60195481565b600a5481565b612fb56130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303b906150e7565b60405180910390fd5b846018819055508360198190555082601a8190555081601c8190555080601d81905550601a5460195460185461307a919061526a565b613084919061526a565b601781905550606360175411156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c790615630565b60405180910390fd5b5050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361314e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613145906156c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b490615754565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161329b9190614d98565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e906157e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337d90615878565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561342a5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134609061590a565b60405180910390fd5b600081036134825761347d83836000614299565b614131565b600c60009054906101000a900460ff1615613b455761349f611f0e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561350d57506134dd611f0e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135465750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613580575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135995750600560149054906101000a900460ff16155b15613b4457600c60019054906101000a900460ff1661369357602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136535750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368990615976565b60405180910390fd5b5b601260009054906101000a900460ff161561385b576136b0611f0e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561373757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561378f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561385a5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380c90615a2e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138fe5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139a557600854811115613948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393f90615ac0565b60405180910390fd5b600a54613954836118e1565b8261395f919061526a565b11156139a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399790615b2c565b60405180910390fd5b613b43565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a485750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a9757600854811115613a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8990615bbe565b60405180910390fd5b613b42565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613b4157600a54613af4836118e1565b82613aff919061526a565b1115613b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3790615b2c565b60405180910390fd5b5b5b5b5b5b6000602154613b54919061526a565b4311158015613baf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613bfb5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613c59576000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000613c64306118e1565b905060006009548210159050808015613c895750600c60029054906101000a900460ff165b8015613ca25750600560149054906101000a900460ff16155b8015613cf85750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613d4e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613da45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613de8576001600560146101000a81548160ff021916908315150217905550613dcc61452c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613e9e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ea857600090505b6000811561412157602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613f0b57506000601754115b15613fd857613f386064613f2a6017548861476e90919063ffffffff16565b6147e890919063ffffffff16565b905060175460195482613f4b9190615136565b613f5591906151a7565b601f6000828254613f66919061526a565b92505081905550601754601a5482613f7e9190615136565b613f8891906151a7565b60206000828254613f99919061526a565b9250508190555060175460185482613fb19190615136565b613fbb91906151a7565b601e6000828254613fcc919061526a565b925050819055506140fd565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561403357506000601354115b156140fc5761406060646140526013548861476e90919063ffffffff16565b6147e890919063ffffffff16565b9050601354601554826140739190615136565b61407d91906151a7565b601f600082825461408e919061526a565b92505081905550601354601654826140a69190615136565b6140b091906151a7565b602060008282546140c1919061526a565b92505081905550601354601454826140d99190615136565b6140e391906151a7565b601e60008282546140f4919061526a565b925050819055505b5b600081111561411257614111873083614299565b5b808561411e9190615bde565b94505b61412c878787614299565b505050505b505050565b600083831115829061417e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141759190614be7565b60405180910390fd5b506000838561418d9190615bde565b9050809150509392505050565b60008082846141a9919061526a565b9050838110156141ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141e590615c5e565b60405180910390fd5b8091505092915050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142ff906157e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436e90615878565b60405180910390fd5b614382838383614832565b6143ed81604051806060016040528060268152602001615f4a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141369092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614480816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161451f9190614d98565b60405180910390a3505050565b6000614537306118e1565b90506000602054601e54601f5461454e919061526a565b614558919061526a565b905060008083148061456a5750600082145b156145775750505061476c565b60146009546145869190615136565b83111561459f57601460095461459c9190615136565b92505b6000600283601f54866145b29190615136565b6145bc91906151a7565b6145c691906151a7565b905060006145dd828661483790919063ffffffff16565b905060004790506145ed82614881565b6000614602824761483790919063ffffffff16565b9050600061462d8761461f6020548561476e90919063ffffffff16565b6147e890919063ffffffff16565b90506000601f819055506000601e819055506000602081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161468d90615caf565b60006040518083038185875af1925050503d80600081146146ca576040519150601f19603f3d011682016040523d82523d6000602084013e6146cf565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161471b90615caf565b60006040518083038185875af1925050503d8060008114614758576040519150601f19603f3d011682016040523d82523d6000602084013e61475d565b606091505b50508096505050505050505050505b565b600080830361478057600090506147e2565b6000828461478e9190615136565b905082848261479d91906151a7565b146147dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147d490615d36565b60405180910390fd5b809150505b92915050565b600061482a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614abe565b905092915050565b505050565b600061487983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614136565b905092915050565b6000600267ffffffffffffffff81111561489e5761489d615d56565b5b6040519080825280602002602001820160405280156148cc5781602001602082028036833780820191505090505b50905030816000815181106148e4576148e3615d85565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ad9190615dc9565b816001815181106149c1576149c0615d85565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614a26307f0000000000000000000000000000000000000000000000000000000000000000846130df565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614a88959493929190615eef565b600060405180830381600087803b158015614aa257600080fd5b505af1158015614ab6573d6000803e3d6000fd5b505050505050565b60008083118290614b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614afc9190614be7565b60405180910390fd5b5060008385614b1491906151a7565b9050809150509392505050565b60008115159050919050565b614b3681614b21565b82525050565b6000602082019050614b516000830184614b2d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b91578082015181840152602081019050614b76565b60008484015250505050565b6000601f19601f8301169050919050565b6000614bb982614b57565b614bc38185614b62565b9350614bd3818560208601614b73565b614bdc81614b9d565b840191505092915050565b60006020820190508181036000830152614c018184614bae565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c3982614c0e565b9050919050565b614c4981614c2e565b8114614c5457600080fd5b50565b600081359050614c6681614c40565b92915050565b6000819050919050565b614c7f81614c6c565b8114614c8a57600080fd5b50565b600081359050614c9c81614c76565b92915050565b60008060408385031215614cb957614cb8614c09565b5b6000614cc785828601614c57565b9250506020614cd885828601614c8d565b9150509250929050565b600060208284031215614cf857614cf7614c09565b5b6000614d0684828501614c57565b91505092915050565b6000819050919050565b6000614d34614d2f614d2a84614c0e565b614d0f565b614c0e565b9050919050565b6000614d4682614d19565b9050919050565b6000614d5882614d3b565b9050919050565b614d6881614d4d565b82525050565b6000602082019050614d836000830184614d5f565b92915050565b614d9281614c6c565b82525050565b6000602082019050614dad6000830184614d89565b92915050565b600060208284031215614dc957614dc8614c09565b5b6000614dd784828501614c8d565b91505092915050565b600080600060608486031215614df957614df8614c09565b5b6000614e0786828701614c57565b9350506020614e1886828701614c57565b9250506040614e2986828701614c8d565b9150509250925092565b614e3c81614b21565b8114614e4757600080fd5b50565b600081359050614e5981614e33565b92915050565b60008060408385031215614e7657614e75614c09565b5b6000614e8485828601614c57565b9250506020614e9585828601614e4a565b9150509250929050565b600060ff82169050919050565b614eb581614e9f565b82525050565b6000602082019050614ed06000830184614eac565b92915050565b614edf81614c2e565b82525050565b6000602082019050614efa6000830184614ed6565b92915050565b600080600060608486031215614f1957614f18614c09565b5b6000614f2786828701614c8d565b9350506020614f3886828701614c8d565b9250506040614f4986828701614c8d565b9150509250925092565b600060208284031215614f6957614f68614c09565b5b6000614f7784828501614e4a565b91505092915050565b60008060408385031215614f9757614f96614c09565b5b6000614fa585828601614c57565b9250506020614fb685828601614c57565b9150509250929050565b600080600080600060a08688031215614fdc57614fdb614c09565b5b6000614fea88828901614c8d565b9550506020614ffb88828901614c8d565b945050604061500c88828901614c8d565b935050606061501d88828901614c8d565b925050608061502e88828901614c8d565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061508257607f821691505b6020821081036150955761509461503b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150d1602083614b62565b91506150dc8261509b565b602082019050919050565b60006020820190508181036000830152615100816150c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061514182614c6c565b915061514c83614c6c565b925082820261515a81614c6c565b9150828204841483151761517157615170615107565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151b282614c6c565b91506151bd83614c6c565b9250826151cd576151cc615178565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000615234602f83614b62565b915061523f826151d8565b604082019050919050565b6000602082019050818103600083015261526381615227565b9050919050565b600061527582614c6c565b915061528083614c6c565b925082820190508082111561529857615297615107565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b60006152d4601d83614b62565b91506152df8261529e565b602082019050919050565b60006020820190508181036000830152615303816152c7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615366603983614b62565b91506153718261530a565b604082019050919050565b6000602082019050818103600083015261539581615359565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153f8602483614b62565b91506154038261539c565b604082019050919050565b60006020820190508181036000830152615427816153eb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061548a603583614b62565b91506154958261542e565b604082019050919050565b600060208201905081810360008301526154b98161547d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061551c603483614b62565b9150615527826154c0565b604082019050919050565b6000602082019050818103600083015261554b8161550f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155ae602683614b62565b91506155b982615552565b604082019050919050565b600060208201905081810360008301526155dd816155a1565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b600061561a601d83614b62565b9150615625826155e4565b602082019050919050565b600060208201905081810360008301526156498161560d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156ac602483614b62565b91506156b782615650565b604082019050919050565b600060208201905081810360008301526156db8161569f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061573e602283614b62565b9150615749826156e2565b604082019050919050565b6000602082019050818103600083015261576d81615731565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157d0602583614b62565b91506157db82615774565b604082019050919050565b600060208201905081810360008301526157ff816157c3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615862602383614b62565b915061586d82615806565b604082019050919050565b6000602082019050818103600083015261589181615855565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006158f4603183614b62565b91506158ff82615898565b604082019050919050565b60006020820190508181036000830152615923816158e7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615960601683614b62565b915061596b8261592a565b602082019050919050565b6000602082019050818103600083015261598f81615953565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a18604983614b62565b9150615a2382615996565b606082019050919050565b60006020820190508181036000830152615a4781615a0b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615aaa603583614b62565b9150615ab582615a4e565b604082019050919050565b60006020820190508181036000830152615ad981615a9d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b16601383614b62565b9150615b2182615ae0565b602082019050919050565b60006020820190508181036000830152615b4581615b09565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615ba8603683614b62565b9150615bb382615b4c565b604082019050919050565b60006020820190508181036000830152615bd781615b9b565b9050919050565b6000615be982614c6c565b9150615bf483614c6c565b9250828203905081811115615c0c57615c0b615107565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615c48601b83614b62565b9150615c5382615c12565b602082019050919050565b60006020820190508181036000830152615c7781615c3b565b9050919050565b600081905092915050565b50565b6000615c99600083615c7e565b9150615ca482615c89565b600082019050919050565b6000615cba82615c8c565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615d20602183614b62565b9150615d2b82615cc4565b604082019050919050565b60006020820190508181036000830152615d4f81615d13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615dc381614c40565b92915050565b600060208284031215615ddf57615dde614c09565b5b6000615ded84828501615db4565b91505092915050565b6000819050919050565b6000615e1b615e16615e1184615df6565b614d0f565b614c6c565b9050919050565b615e2b81615e00565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615e6681614c2e565b82525050565b6000615e788383615e5d565b60208301905092915050565b6000602082019050919050565b6000615e9c82615e31565b615ea68185615e3c565b9350615eb183615e4d565b8060005b83811015615ee2578151615ec98882615e6c565b9750615ed483615e84565b925050600181019050615eb5565b5085935050505092915050565b600060a082019050615f046000830188614d89565b615f116020830187615e22565b8181036040830152615f238186615e91565b9050615f326060830185614ed6565b615f3f6080830184614d89565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e5e045e61332aac41316fdf42abc1fc8fbf67a1e374c3dcba8550006b5bf1bf464736f6c63430008130033

Deployed Bytecode

0x60806040526004361061041f5760003560e01c806390498eaa1161021e578063c024666811610123578063e2f45605116100ab578063f2fde38b1161007a578063f2fde38b14610ffa578063f63696bd14611023578063f63743421461104e578063f8b45b0514611079578063ff935af6146110a457610426565b8063e2f4560514610f50578063e4e513c414610f7b578063e884f26014610fa4578063f11a24d314610fcf57610426565b8063cab323d5116100f2578063cab323d514610e57578063d257b34f14610e80578063d85ba06314610ebd578063db913f8914610ee8578063dd62ed3e14610f1357610426565b8063c024666814610daf578063c18bc19514610dd8578063c876d0b914610e01578063c8c8ebe414610e2c57610426565b8063a457c2d7116101a6578063aacebbe311610175578063aacebbe314610ccc578063b14607ea14610cf5578063b181e4cf14610d1e578063b62496f514610d47578063bbc0c74214610d8457610426565b8063a457c2d714610bea578063a4d15b6414610c27578063a7fc00ec14610c52578063a9059cbb14610c8f57610426565b80639a7a23d6116101ed5780639a7a23d614610b175780639c3b4fdc14610b405780639fccce3214610b6b578063a0d82dc514610b96578063a265777814610bc157610426565b806390498eaa14610a6d5780639213691314610a98578063924de9b714610ac357806395d89b4114610aec57610426565b80633950935111610324578063751039fc116102ac5780638095d5641161027b5780638095d564146109ae5780638a8c523c146109d75780638ad30c91146109ee5780638da5cb5b14610a175780638ea5220f14610a4257610426565b8063751039fc146109045780637571336a1461092f57806375f0a874146109585780637bce5a041461098357610426565b8063541a43cf116102f3578063541a43cf1461082f5780636a486a8e1461085a5780636ddd17131461088557806370a08231146108b0578063715018a6146108ed57610426565b8063395093511461075f57806349bd5a5e1461079c5780634a62bb65146107c75780634fbee193146107f257610426565b80631f3fed8f116103a75780632bf3d42d116103765780632bf3d42d1461068a5780632d5a5d34146106b55780632f7a21bf146106de578063313ce56714610709578063354c446c1461073457610426565b80631f3fed8f146105d0578063203e727e146105fb57806323b872dd146106245780632a4fad7b1461066157610426565b80631633328d116103ee5780631633328d146104fb5780631694505e1461052657806318160ddd146105515780631816467f1461057c5780631a8145bb146105a557610426565b8063021dddc71461042b57806306fdde0314610456578063095ea7b31461048157806310d5de53146104be57610426565b3661042657005b600080fd5b34801561043757600080fd5b506104406110cd565b60405161044d9190614b3c565b60405180910390f35b34801561046257600080fd5b5061046b6110e0565b6040516104789190614be7565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614ca2565b611172565b6040516104b59190614b3c565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190614ce2565b611190565b6040516104f29190614b3c565b60405180910390f35b34801561050757600080fd5b506105106111b0565b60405161051d9190614b3c565b60405180910390f35b34801561053257600080fd5b5061053b6111c3565b6040516105489190614d6e565b60405180910390f35b34801561055d57600080fd5b506105666111e7565b6040516105739190614d98565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190614ce2565b6111f1565b005b3480156105b157600080fd5b506105ba611348565b6040516105c79190614d98565b60405180910390f35b3480156105dc57600080fd5b506105e561134e565b6040516105f29190614d98565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190614db3565b611354565b005b34801561063057600080fd5b5061064b60048036038101906106469190614de0565b61147e565b6040516106589190614b3c565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190614e5f565b611557565b005b34801561069657600080fd5b5061069f611649565b6040516106ac9190614d98565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190614e5f565b61164f565b005b3480156106ea57600080fd5b506106f3611741565b6040516107009190614b3c565b60405180910390f35b34801561071557600080fd5b5061071e61175d565b60405161072b9190614ebb565b60405180910390f35b34801561074057600080fd5b50610749611766565b6040516107569190614b3c565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190614ca2565b611782565b6040516107939190614b3c565b60405180910390f35b3480156107a857600080fd5b506107b1611835565b6040516107be9190614ee5565b60405180910390f35b3480156107d357600080fd5b506107dc611859565b6040516107e99190614b3c565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190614ce2565b61186c565b6040516108269190614b3c565b60405180910390f35b34801561083b57600080fd5b506108446118c2565b6040516108519190614d98565b60405180910390f35b34801561086657600080fd5b5061086f6118c8565b60405161087c9190614d98565b60405180910390f35b34801561089157600080fd5b5061089a6118ce565b6040516108a79190614b3c565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190614ce2565b6118e1565b6040516108e49190614d98565b60405180910390f35b3480156108f957600080fd5b50610902611929565b005b34801561091057600080fd5b50610919611a81565b6040516109269190614b3c565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190614e5f565b611b3c565b005b34801561096457600080fd5b5061096d611c2e565b60405161097a9190614ee5565b60405180910390f35b34801561098f57600080fd5b50610998611c54565b6040516109a59190614d98565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190614f00565b611c5a565b005b3480156109e357600080fd5b506109ec611d74565b005b3480156109fa57600080fd5b50610a156004803603810190610a109190614db3565b611e4a565b005b348015610a2357600080fd5b50610a2c611f0e565b604051610a399190614ee5565b60405180910390f35b348015610a4e57600080fd5b50610a57611f38565b604051610a649190614ee5565b60405180910390f35b348015610a7957600080fd5b50610a82611f5e565b604051610a8f9190614d98565b60405180910390f35b348015610aa457600080fd5b50610aad611f64565b604051610aba9190614d98565b60405180910390f35b348015610acf57600080fd5b50610aea6004803603810190610ae59190614f53565b611f6a565b005b348015610af857600080fd5b50610b0161201e565b604051610b0e9190614be7565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b399190614e5f565b6120b0565b005b348015610b4c57600080fd5b50610b556121e3565b604051610b629190614d98565b60405180910390f35b348015610b7757600080fd5b50610b806121e9565b604051610b8d9190614d98565b60405180910390f35b348015610ba257600080fd5b50610bab6121ef565b604051610bb89190614d98565b60405180910390f35b348015610bcd57600080fd5b50610be86004803603810190610be39190614f53565b6121f5565b005b348015610bf657600080fd5b50610c116004803603810190610c0c9190614ca2565b6122a9565b604051610c1e9190614b3c565b60405180910390f35b348015610c3357600080fd5b50610c3c612376565b604051610c499190614b3c565b60405180910390f35b348015610c5e57600080fd5b50610c796004803603810190610c749190614ce2565b612389565b604051610c869190614d98565b60405180910390f35b348015610c9b57600080fd5b50610cb66004803603810190610cb19190614ca2565b6123d7565b604051610cc39190614b3c565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190614ce2565b6123f5565b005b348015610d0157600080fd5b50610d1c6004803603810190610d179190614f53565b61254c565b005b348015610d2a57600080fd5b50610d456004803603810190610d409190614f53565b612600565b005b348015610d5357600080fd5b50610d6e6004803603810190610d699190614ce2565b6126b4565b604051610d7b9190614b3c565b60405180910390f35b348015610d9057600080fd5b50610d996126d4565b604051610da69190614b3c565b60405180910390f35b348015610dbb57600080fd5b50610dd66004803603810190610dd19190614e5f565b6126e7565b005b348015610de457600080fd5b50610dff6004803603810190610dfa9190614db3565b612827565b005b348015610e0d57600080fd5b50610e16612951565b604051610e239190614b3c565b60405180910390f35b348015610e3857600080fd5b50610e41612964565b604051610e4e9190614d98565b60405180910390f35b348015610e6357600080fd5b50610e7e6004803603810190610e799190614ca2565b61296a565b005b348015610e8c57600080fd5b50610ea76004803603810190610ea29190614db3565b612a49565b604051610eb49190614b3c565b60405180910390f35b348015610ec957600080fd5b50610ed2612bb9565b604051610edf9190614d98565b60405180910390f35b348015610ef457600080fd5b50610efd612bbf565b604051610f0a9190614d98565b60405180910390f35b348015610f1f57600080fd5b50610f3a6004803603810190610f359190614f80565b612bc9565b604051610f479190614d98565b60405180910390f35b348015610f5c57600080fd5b50610f65612c50565b604051610f729190614d98565b60405180910390f35b348015610f8757600080fd5b50610fa26004803603810190610f9d9190614db3565b612c56565b005b348015610fb057600080fd5b50610fb9612d10565b604051610fc69190614b3c565b60405180910390f35b348015610fdb57600080fd5b50610fe4612dcb565b604051610ff19190614d98565b60405180910390f35b34801561100657600080fd5b50611021600480360381019061101c9190614ce2565b612dd1565b005b34801561102f57600080fd5b50611038612f97565b6040516110459190614d98565b60405180910390f35b34801561105a57600080fd5b50611063612fa1565b6040516110709190614d98565b60405180910390f35b34801561108557600080fd5b5061108e612fa7565b60405161109b9190614d98565b60405180910390f35b3480156110b057600080fd5b506110cb60048036038101906110c69190614fc0565b612fad565b005b601260019054906101000a900460ff1681565b6060600380546110ef9061506a565b80601f016020809104026020016040519081016040528092919081815260200182805461111b9061506a565b80156111685780601f1061113d57610100808354040283529160200191611168565b820191906000526020600020905b81548152906001019060200180831161114b57829003601f168201915b5050505050905090565b600061118661117f6130d7565b84846130df565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601260029054906101000a900460ff1681565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2481565b6000600254905090565b6111f96130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f906150e7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f5481565b601e5481565b61135c6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906150e7565b60405180910390fd5b670de0b6b3a76400006103e860056114016111e7565b61140b9190615136565b61141591906151a7565b61141f91906151a7565b811015611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061524a565b60405180910390fd5b670de0b6b3a7640000816114759190615136565b60088190555050565b600061148b8484846132a8565b61154c846114976130d7565b61154785604051806060016040528060288152602001615f7060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114fd6130d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141369092919063ffffffff16565b6130df565b600190509392505050565b61155f6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906150e7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d5481565b6116576130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd906150e7565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080600c60009054906101000a900460ff1690508091505090565b60006012905090565b600080601260009054906101000a900460ff1690508091505090565b600061182b61178f6130d7565b8461182685600160006117a06130d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419a90919063ffffffff16565b6130df565b6001905092915050565b7f00000000000000000000000016905890a1d02b6f824387419319bf4188b961b081565b600c60009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c5481565b60175481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119316130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906150e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611a8b6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906150e7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b611b446130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906150e7565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611c626130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce8906150e7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611d19919061526a565b611d23919061526a565b60138190555060326013541115611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d66906152ea565b60405180910390fd5b505050565b611d7c6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e02906150e7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555043602181905550565b611e526130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed8906150e7565b60405180910390fd5b600c60009054906101000a900460ff1615611f025780601b81905550611f0b565b6000601b819055505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60185481565b611f726130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff8906150e7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461202d9061506a565b80601f01602080910402602001604051908101604052809291908181526020018280546120599061506a565b80156120a65780601f1061207b576101008083540402835291602001916120a6565b820191906000526020600020905b81548152906001019060200180831161208957829003601f168201915b5050505050905090565b6120b86130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e906150e7565b60405180910390fd5b7f00000000000000000000000016905890a1d02b6f824387419319bf4188b961b073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc9061537c565b60405180910390fd5b6121df82826141f8565b5050565b60165481565b60205481565b601a5481565b6121fd6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612283906150e7565b60405180910390fd5b80600c60036101000a81548160ff02191690831515021790555050565b600061236c6122b66130d7565b8461236785604051806060016040528060258152602001615f9860259139600160006122e06130d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141369092919063ffffffff16565b6130df565b6001905092915050565b600c60039054906101000a900460ff1681565b600080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080915050919050565b60006123eb6123e46130d7565b84846132a8565b6001905092915050565b6123fd6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461248c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612483906150e7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125546130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da906150e7565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6126086130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e906150e7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60246020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6126ef6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612775906150e7565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161281b9190614b3c565b60405180910390a25050565b61282f6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906150e7565b60405180910390fd5b670de0b6b3a76400006103e8600f6128d46111e7565b6128de9190615136565b6128e891906151a7565b6128f291906151a7565b811015612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b9061540e565b60405180910390fd5b670de0b6b3a7640000816129489190615136565b600a8190555050565b601260009054906101000a900460ff1681565b60085481565b6129726130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f8906150e7565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000612a536130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad9906150e7565b60405180910390fd5b620186a06001612af06111e7565b612afa9190615136565b612b0491906151a7565b821015612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d906154a0565b60405180910390fd5b6103e86005612b536111e7565b612b5d9190615136565b612b6791906151a7565b821115612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba090615532565b60405180910390fd5b8160098190555060019050919050565b60135481565b6000601d54905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b612c5e6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce4906150e7565b60405180910390fd5b6000670de0b6b3a764000082612d039190615136565b905080600b819055505050565b6000612d1a6130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da0906150e7565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b60155481565b612dd96130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5f906150e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece906155c4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601554905090565b60195481565b600a5481565b612fb56130d7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303b906150e7565b60405180910390fd5b846018819055508360198190555082601a8190555081601c8190555080601d81905550601a5460195460185461307a919061526a565b613084919061526a565b601781905550606360175411156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c790615630565b60405180910390fd5b5050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361314e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613145906156c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b490615754565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161329b9190614d98565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e906157e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337d90615878565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561342a5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134609061590a565b60405180910390fd5b600081036134825761347d83836000614299565b614131565b600c60009054906101000a900460ff1615613b455761349f611f0e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561350d57506134dd611f0e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135465750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613580575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156135995750600560149054906101000a900460ff16155b15613b4457600c60019054906101000a900460ff1661369357602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136535750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368990615976565b60405180910390fd5b5b601260009054906101000a900460ff161561385b576136b0611f0e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561373757507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561378f57507f00000000000000000000000016905890a1d02b6f824387419319bf4188b961b073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561385a5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380c90615a2e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138fe5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139a557600854811115613948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393f90615ac0565b60405180910390fd5b600a54613954836118e1565b8261395f919061526a565b11156139a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399790615b2c565b60405180910390fd5b613b43565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a485750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a9757600854811115613a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8990615bbe565b60405180910390fd5b613b42565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613b4157600a54613af4836118e1565b82613aff919061526a565b1115613b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3790615b2c565b60405180910390fd5b5b5b5b5b5b6000602154613b54919061526a565b4311158015613baf57507f00000000000000000000000016905890a1d02b6f824387419319bf4188b961b073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613bfb5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613c59576000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000613c64306118e1565b905060006009548210159050808015613c895750600c60029054906101000a900460ff165b8015613ca25750600560149054906101000a900460ff16155b8015613cf85750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613d4e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613da45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613de8576001600560146101000a81548160ff021916908315150217905550613dcc61452c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613e9e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ea857600090505b6000811561412157602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613f0b57506000601754115b15613fd857613f386064613f2a6017548861476e90919063ffffffff16565b6147e890919063ffffffff16565b905060175460195482613f4b9190615136565b613f5591906151a7565b601f6000828254613f66919061526a565b92505081905550601754601a5482613f7e9190615136565b613f8891906151a7565b60206000828254613f99919061526a565b9250508190555060175460185482613fb19190615136565b613fbb91906151a7565b601e6000828254613fcc919061526a565b925050819055506140fd565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561403357506000601354115b156140fc5761406060646140526013548861476e90919063ffffffff16565b6147e890919063ffffffff16565b9050601354601554826140739190615136565b61407d91906151a7565b601f600082825461408e919061526a565b92505081905550601354601654826140a69190615136565b6140b091906151a7565b602060008282546140c1919061526a565b92505081905550601354601454826140d99190615136565b6140e391906151a7565b601e60008282546140f4919061526a565b925050819055505b5b600081111561411257614111873083614299565b5b808561411e9190615bde565b94505b61412c878787614299565b505050505b505050565b600083831115829061417e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141759190614be7565b60405180910390fd5b506000838561418d9190615bde565b9050809150509392505050565b60008082846141a9919061526a565b9050838110156141ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141e590615c5e565b60405180910390fd5b8091505092915050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142ff906157e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436e90615878565b60405180910390fd5b614382838383614832565b6143ed81604051806060016040528060268152602001615f4a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141369092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614480816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461419a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161451f9190614d98565b60405180910390a3505050565b6000614537306118e1565b90506000602054601e54601f5461454e919061526a565b614558919061526a565b905060008083148061456a5750600082145b156145775750505061476c565b60146009546145869190615136565b83111561459f57601460095461459c9190615136565b92505b6000600283601f54866145b29190615136565b6145bc91906151a7565b6145c691906151a7565b905060006145dd828661483790919063ffffffff16565b905060004790506145ed82614881565b6000614602824761483790919063ffffffff16565b9050600061462d8761461f6020548561476e90919063ffffffff16565b6147e890919063ffffffff16565b90506000601f819055506000601e819055506000602081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161468d90615caf565b60006040518083038185875af1925050503d80600081146146ca576040519150601f19603f3d011682016040523d82523d6000602084013e6146cf565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161471b90615caf565b60006040518083038185875af1925050503d8060008114614758576040519150601f19603f3d011682016040523d82523d6000602084013e61475d565b606091505b50508096505050505050505050505b565b600080830361478057600090506147e2565b6000828461478e9190615136565b905082848261479d91906151a7565b146147dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147d490615d36565b60405180910390fd5b809150505b92915050565b600061482a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614abe565b905092915050565b505050565b600061487983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614136565b905092915050565b6000600267ffffffffffffffff81111561489e5761489d615d56565b5b6040519080825280602002602001820160405280156148cc5781602001602082028036833780820191505090505b50905030816000815181106148e4576148e3615d85565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ad9190615dc9565b816001815181106149c1576149c0615d85565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614a26307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24846130df565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614a88959493929190615eef565b600060405180830381600087803b158015614aa257600080fd5b505af1158015614ab6573d6000803e3d6000fd5b505050505050565b60008083118290614b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614afc9190614be7565b60405180910390fd5b5060008385614b1491906151a7565b9050809150509392505050565b60008115159050919050565b614b3681614b21565b82525050565b6000602082019050614b516000830184614b2d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b91578082015181840152602081019050614b76565b60008484015250505050565b6000601f19601f8301169050919050565b6000614bb982614b57565b614bc38185614b62565b9350614bd3818560208601614b73565b614bdc81614b9d565b840191505092915050565b60006020820190508181036000830152614c018184614bae565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c3982614c0e565b9050919050565b614c4981614c2e565b8114614c5457600080fd5b50565b600081359050614c6681614c40565b92915050565b6000819050919050565b614c7f81614c6c565b8114614c8a57600080fd5b50565b600081359050614c9c81614c76565b92915050565b60008060408385031215614cb957614cb8614c09565b5b6000614cc785828601614c57565b9250506020614cd885828601614c8d565b9150509250929050565b600060208284031215614cf857614cf7614c09565b5b6000614d0684828501614c57565b91505092915050565b6000819050919050565b6000614d34614d2f614d2a84614c0e565b614d0f565b614c0e565b9050919050565b6000614d4682614d19565b9050919050565b6000614d5882614d3b565b9050919050565b614d6881614d4d565b82525050565b6000602082019050614d836000830184614d5f565b92915050565b614d9281614c6c565b82525050565b6000602082019050614dad6000830184614d89565b92915050565b600060208284031215614dc957614dc8614c09565b5b6000614dd784828501614c8d565b91505092915050565b600080600060608486031215614df957614df8614c09565b5b6000614e0786828701614c57565b9350506020614e1886828701614c57565b9250506040614e2986828701614c8d565b9150509250925092565b614e3c81614b21565b8114614e4757600080fd5b50565b600081359050614e5981614e33565b92915050565b60008060408385031215614e7657614e75614c09565b5b6000614e8485828601614c57565b9250506020614e9585828601614e4a565b9150509250929050565b600060ff82169050919050565b614eb581614e9f565b82525050565b6000602082019050614ed06000830184614eac565b92915050565b614edf81614c2e565b82525050565b6000602082019050614efa6000830184614ed6565b92915050565b600080600060608486031215614f1957614f18614c09565b5b6000614f2786828701614c8d565b9350506020614f3886828701614c8d565b9250506040614f4986828701614c8d565b9150509250925092565b600060208284031215614f6957614f68614c09565b5b6000614f7784828501614e4a565b91505092915050565b60008060408385031215614f9757614f96614c09565b5b6000614fa585828601614c57565b9250506020614fb685828601614c57565b9150509250929050565b600080600080600060a08688031215614fdc57614fdb614c09565b5b6000614fea88828901614c8d565b9550506020614ffb88828901614c8d565b945050604061500c88828901614c8d565b935050606061501d88828901614c8d565b925050608061502e88828901614c8d565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061508257607f821691505b6020821081036150955761509461503b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150d1602083614b62565b91506150dc8261509b565b602082019050919050565b60006020820190508181036000830152615100816150c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061514182614c6c565b915061514c83614c6c565b925082820261515a81614c6c565b9150828204841483151761517157615170615107565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151b282614c6c565b91506151bd83614c6c565b9250826151cd576151cc615178565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000615234602f83614b62565b915061523f826151d8565b604082019050919050565b6000602082019050818103600083015261526381615227565b9050919050565b600061527582614c6c565b915061528083614c6c565b925082820190508082111561529857615297615107565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b60006152d4601d83614b62565b91506152df8261529e565b602082019050919050565b60006020820190508181036000830152615303816152c7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615366603983614b62565b91506153718261530a565b604082019050919050565b6000602082019050818103600083015261539581615359565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153f8602483614b62565b91506154038261539c565b604082019050919050565b60006020820190508181036000830152615427816153eb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061548a603583614b62565b91506154958261542e565b604082019050919050565b600060208201905081810360008301526154b98161547d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061551c603483614b62565b9150615527826154c0565b604082019050919050565b6000602082019050818103600083015261554b8161550f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155ae602683614b62565b91506155b982615552565b604082019050919050565b600060208201905081810360008301526155dd816155a1565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b600061561a601d83614b62565b9150615625826155e4565b602082019050919050565b600060208201905081810360008301526156498161560d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156ac602483614b62565b91506156b782615650565b604082019050919050565b600060208201905081810360008301526156db8161569f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061573e602283614b62565b9150615749826156e2565b604082019050919050565b6000602082019050818103600083015261576d81615731565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157d0602583614b62565b91506157db82615774565b604082019050919050565b600060208201905081810360008301526157ff816157c3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615862602383614b62565b915061586d82615806565b604082019050919050565b6000602082019050818103600083015261589181615855565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006158f4603183614b62565b91506158ff82615898565b604082019050919050565b60006020820190508181036000830152615923816158e7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615960601683614b62565b915061596b8261592a565b602082019050919050565b6000602082019050818103600083015261598f81615953565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a18604983614b62565b9150615a2382615996565b606082019050919050565b60006020820190508181036000830152615a4781615a0b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615aaa603583614b62565b9150615ab582615a4e565b604082019050919050565b60006020820190508181036000830152615ad981615a9d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b16601383614b62565b9150615b2182615ae0565b602082019050919050565b60006020820190508181036000830152615b4581615b09565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615ba8603683614b62565b9150615bb382615b4c565b604082019050919050565b60006020820190508181036000830152615bd781615b9b565b9050919050565b6000615be982614c6c565b9150615bf483614c6c565b9250828203905081811115615c0c57615c0b615107565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615c48601b83614b62565b9150615c5382615c12565b602082019050919050565b60006020820190508181036000830152615c7781615c3b565b9050919050565b600081905092915050565b50565b6000615c99600083615c7e565b9150615ca482615c89565b600082019050919050565b6000615cba82615c8c565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615d20602183614b62565b9150615d2b82615cc4565b604082019050919050565b60006020820190508181036000830152615d4f81615d13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615dc381614c40565b92915050565b600060208284031215615ddf57615dde614c09565b5b6000615ded84828501615db4565b91505092915050565b6000819050919050565b6000615e1b615e16615e1184615df6565b614d0f565b614c6c565b9050919050565b615e2b81615e00565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615e6681614c2e565b82525050565b6000615e788383615e5d565b60208301905092915050565b6000602082019050919050565b6000615e9c82615e31565b615ea68185615e3c565b9350615eb183615e4d565b8060005b83811015615ee2578151615ec98882615e6c565b9750615ed483615e84565b925050600181019050615eb5565b5085935050505092915050565b600060a082019050615f046000830188614d89565b615f116020830187615e22565b8181036040830152615f238186615e91565b9050615f326060830185614ed6565b615f3f6080830184614d89565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e5e045e61332aac41316fdf42abc1fc8fbf67a1e374c3dcba8550006b5bf1bf464736f6c63430008130033

Deployed Bytecode Sourcemap

31118:18759:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32230:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8246:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10479:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33035:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32265:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31195:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9366:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42740:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32753:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32713;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38069:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11155:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40877:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32670:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40094:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39950:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9208:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38354:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12018:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31253:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31560:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42324:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32627:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32447:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31640:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9537:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23296:148;;;;;;;;;;;;;:::i;:::-;;36929:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38942:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31330:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32340;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39539:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36729:148;;;;;;;;;;;;;:::i;:::-;;39315:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22654:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31367:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31515:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32482:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39207:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8465:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41616:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32414:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32793:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32558:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37254:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12814:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31678:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41930:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9893:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42508:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41489:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41242:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33256:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31600:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41052:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38501:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32184:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31400:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37914:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37425:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32306:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41368:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10156:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31442:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38768:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37111:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32377:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23599:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48034:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32520:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31482:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40261:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32230:26;;;;;;;;;;;;;:::o;8246:100::-;8300:13;8333:5;8326:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8246:100;:::o;10479:194::-;10587:4;10604:39;10613:12;:10;:12::i;:::-;10627:7;10636:6;10604:8;:39::i;:::-;10661:4;10654:11;;10479:194;;;;:::o;33035:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32265:32::-;;;;;;;;;;;;;:::o;31195:51::-;;;:::o;9366:108::-;9427:7;9454:12;;9447:19;;9366:108;:::o;42740:157::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42847:9:::1;;;;;;;;;;;42819:38;;42836:9;42819:38;;;;;;;;;;;;42880:9;42868;;:21;;;;;;;;;;;;;;;;;;42740:157:::0;:::o;32753:33::-;;;;:::o;32713:::-;;;;:::o;38069:277::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38206:4:::1;38198;38193:1;38177:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38176:26;;;;:::i;:::-;38175:35;;;;:::i;:::-;38165:6;:45;;38143:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38329:8;38319:6;:19;;;;:::i;:::-;38296:20;:42;;;;38069:277:::0;:::o;11155:454::-;11295:4;11312:36;11322:6;11330:9;11341:6;11312:9;:36::i;:::-;11359:220;11382:6;11403:12;:10;:12::i;:::-;11430:138;11486:6;11430:138;;;;;;;;;;;;;;;;;:11;:19;11442:6;11430:19;;;;;;;;;;;;;;;:33;11450:12;:10;:12::i;:::-;11430:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11359:8;:220::i;:::-;11597:4;11590:11;;11155:454;;;;;:::o;40877:167::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41027:9:::1;40996:19;:28;41016:7;40996:28;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40877:167:::0;;:::o;32670:36::-;;;;:::o;40094:159::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40232:13:::1;40210:10;:19;40221:7;40210:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40094:159:::0;;:::o;39950:136::-;40001:4;40018:15;40036:14;;;;;;;;;;;40018:32;;40068:10;40061:17;;;39950:136;:::o;9208:93::-;9266:5;9291:2;9284:9;;9208:93;:::o;38354:139::-;38410:4;38427:11;38441:20;;;;;;;;;;;38427:34;;38479:6;38472:13;;;38354:139;:::o;12018:293::-;12131:4;12148:133;12171:12;:10;:12::i;:::-;12198:7;12220:50;12259:10;12220:11;:25;12232:12;:10;:12::i;:::-;12220:25;;;;;;;;;;;;;;;:34;12246:7;12220:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12148:8;:133::i;:::-;12299:4;12292:11;;12018:293;;;;:::o;31253:38::-;;;:::o;31560:33::-;;;;;;;;;;;;;:::o;42324:126::-;42390:4;42414:19;:28;42434:7;42414:28;;;;;;;;;;;;;;;;;;;;;;;;;42407:35;;42324:126;;;:::o;32627:36::-;;;;:::o;32447:28::-;;;;:::o;31640:31::-;;;;;;;;;;;;;:::o;9537:143::-;9627:7;9654:9;:18;9664:7;9654:18;;;;;;;;;;;;;;;;9647:25;;9537:143;;;:::o;23296:148::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23403:1:::1;23366:40;;23387:6;;;;;;;;;;;23366:40;;;;;;;;;;;;23434:1;23417:6;;:19;;;;;;;;;;;;;;;;;;23296:148::o:0;36929:121::-;36981:4;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37015:5:::1;36998:14;;:22;;;;;;;;;;;;;;;;;;37038:4;37031:11;;36929:121:::0;:::o;38942:169::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39099:4:::1;39057:31;:39;39089:6;39057:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38942:169:::0;;:::o;31330:30::-;;;;;;;;;;;;;:::o;32340:::-;;;;:::o;39539:403::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39707:13:::1;39689:15;:31;;;;39749:13;39731:15;:31;;;;39785:7;39773:9;:19;;;;39854:9;;39836:15;;39818;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;39803:12;:60;;;;39898:2;39882:12;;:18;;39874:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39539:403:::0;;;:::o;36729:148::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36800:4:::1;36784:13;;:20;;;;;;;;;;;;;;;;;;36829:4;36815:11;;:18;;;;;;;;;;;;;;;;;;36857:12;36844:10;:25;;;;36729:148::o:0;39315:216::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39399:14:::1;;;;;;;;;;;39395:129;;;39451:6;39430:18;:27;;;;39395:129;;;39511:1;39490:18;:22;;;;39395:129;39315:216:::0;:::o;22654:79::-;22692:7;22719:6;;;;;;;;;;;22712:13;;22654:79;:::o;31367:24::-;;;;;;;;;;;;;:::o;31515:36::-;;;;:::o;32482:31::-;;;;:::o;39207:100::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39292:7:::1;39278:11;;:21;;;;;;;;;;;;;;;;;;39207:100:::0;:::o;8465:104::-;8521:13;8554:7;8547:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8465:104;:::o;41616:306::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41762:13:::1;41754:21;;:4;:21;;::::0;41732:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41873:41;41902:4;41908:5;41873:28;:41::i;:::-;41616:306:::0;;:::o;32414:24::-;;;;:::o;32793:27::-;;;;:::o;32558:25::-;;;;:::o;37254:101::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37342:5:::1;37321:18;;:26;;;;;;;;;;;;;;;;;;37254:101:::0;:::o;12814:393::-;12932:4;12949:228;12972:12;:10;:12::i;:::-;12999:7;13021:145;13078:15;13021:145;;;;;;;;;;;;;;;;;:11;:25;13033:12;:10;:12::i;:::-;13021:25;;;;;;;;;;;;;;;:34;13047:7;13021:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12949:8;:228::i;:::-;13195:4;13188:11;;12814:393;;;;:::o;31678:37::-;;;;;;;;;;;;;:::o;41930:190::-;42013:7;42033:17;42053:24;:32;42078:6;42053:32;;;;;;;;;;;;;;;;42033:52;;42103:9;42096:16;;;41930:190;;;:::o;9893:200::-;10004:4;10021:42;10031:12;:10;:12::i;:::-;10045:9;10056:6;10021:9;:42::i;:::-;10081:4;10074:11;;9893:200;;;;:::o;42508:224::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42661:15:::1;;;;;;;;;;;42618:59;;42641:18;42618:59;;;;;;;;;;;;42706:18;42688:15;;:36;;;;;;;;;;;;;;;;;;42508:224:::0;:::o;41489:119::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41585:15:::1;41568:14;;:32;;;;;;;;;;;;;;;;;;41489:119:::0;:::o;41242:118::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41345:7:::1;41322:20;;:30;;;;;;;;;;;;;;;;;;41242:118:::0;:::o;33256:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31600:33::-;;;;;;;;;;;;;:::o;41052:182::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41168:8:::1;41137:19;:28;41157:7;41137:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41208:7;41192:34;;;41217:8;41192:34;;;;;;:::i;:::-;;;;;;;;41052:182:::0;;:::o;38501:259::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38642:4:::1;38634;38628:2;38612:13;:11;:13::i;:::-;:18;;;;:::i;:::-;38611:27;;;;:::i;:::-;38610:36;;;;:::i;:::-;38600:6;:46;;38578:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;38743:8;38733:6;:19;;;;:::i;:::-;38721:9;:31;;;;38501:259:::0;:::o;32184:39::-;;;;;;;;;;;;;:::o;31400:35::-;;;;:::o;37914:147::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38049:4:::1;38026:14;:20;38041:4;38026:20;;;;;;;;;;;;;;;:27;;;;37914:147:::0;;:::o;37425:481::-;37522:4;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37596:6:::1;37591:1;37575:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37574:28;;;;:::i;:::-;37561:9;:41;;37539:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37751:4;37746:1;37730:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37729:26;;;;:::i;:::-;37716:9;:39;;37694:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37867:9;37846:18;:30;;;;37894:4;37887:11;;37425:481:::0;;;:::o;32306:27::-;;;;:::o;41368:113::-;41425:7;41452:21;;41445:28;;41368:113;:::o;10156:176::-;10270:7;10297:11;:18;10309:5;10297:18;;;;;;;;;;;;;;;:27;10316:7;10297:27;;;;;;;;;;;;;;;;10290:34;;10156:176;;;;:::o;31442:33::-;;;;:::o;38768:166::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38851:13:::1;38877:8;38867:6;:19;;;;:::i;:::-;38851:35;;38921:5;38897:21;:29;;;;38840:94;38768:166:::0;:::o;37111:135::-;37171:4;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37211:5:::1;37188:20;;:28;;;;;;;;;;;;;;;;;;37234:4;37227:11;;37111:135:::0;:::o;32377:30::-;;;;:::o;23599:281::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23722:1:::1;23702:22;;:8;:22;;::::0;23680:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23835:8;23806:38;;23827:6;;;;;;;;;;;23806:38;;;;;;;;;;;;23864:8;23855:6;;:17;;;;;;;;;;;;;;;;;;23599:281:::0;:::o;48034:101::-;48085:7;48112:15;;48105:22;;48034:101;:::o;32520:31::-;;;;:::o;31482:24::-;;;;:::o;40261:608::-;22876:12;:10;:12::i;:::-;22866:22;;:6;;;;;;;;;;;:22;;;22858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40513:13:::1;40494:16;:32;;;;40556:13;40537:16;:32;;;;40593:7;40580:10;:20;;;;40635:22;40611:21;:46;;;;40692:22;40668:21;:46;;;;40779:10;;40760:16;;40741;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;40725:13;:64;;;;40825:2;40808:13;;:19;;40800:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40261:608:::0;;;;;:::o;417:98::-;470:7;497:10;490:17;;417:98;:::o;16198:380::-;16351:1;16334:19;;:5;:19;;;16326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16432:1;16413:21;;:7;:21;;;16405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16516:6;16486:11;:18;16498:5;16486:18;;;;;;;;;;;;;;;:27;16505:7;16486:27;;;;;;;;;;;;;;;:36;;;;16554:7;16538:32;;16547:5;16538:32;;;16563:6;16538:32;;;;;;:::i;:::-;;;;;;;;16198:380;;;:::o;42905:5121::-;43053:1;43037:18;;:4;:18;;;43029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43130:1;43116:16;;:2;:16;;;43108:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43206:10;:14;43217:2;43206:14;;;;;;;;;;;;;;;;;;;;;;;;;43205:15;:36;;;;;43225:10;:16;43236:4;43225:16;;;;;;;;;;;;;;;;;;;;;;;;;43224:17;43205:36;43183:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;43343:1;43333:6;:11;43329:93;;43361:28;43377:4;43383:2;43387:1;43361:15;:28::i;:::-;43404:7;;43329:93;43438:14;;;;;;;;;;;43434:2487;;;43499:7;:5;:7::i;:::-;43491:15;;:4;:15;;;;:49;;;;;43533:7;:5;:7::i;:::-;43527:13;;:2;:13;;;;43491:49;:86;;;;;43575:1;43561:16;;:2;:16;;;;43491:86;:128;;;;;43612:6;43598:21;;:2;:21;;;;43491:128;:158;;;;;43641:8;;;;;;;;;;;43640:9;43491:158;43469:2441;;;43689:13;;;;;;;;;;;43684:223;;43761:19;:25;43781:4;43761:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43790:19;:23;43810:2;43790:23;;;;;;;;;;;;;;;;;;;;;;;;;43761:52;43727:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;43684:223;44063:20;;;;;;;;;;;44059:641;;;44144:7;:5;:7::i;:::-;44138:13;;:2;:13;;;;:72;;;;;44194:15;44180:30;;:2;:30;;;;44138:72;:129;;;;;44253:13;44239:28;;:2;:28;;;;44138:129;44108:573;;;44431:12;44356:28;:39;44385:9;44356:39;;;;;;;;;;;;;;;;:87;44318:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;44645:12;44603:28;:39;44632:9;44603:39;;;;;;;;;;;;;;;:54;;;;44108:573;44059:641;44774:25;:31;44800:4;44774:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44831:31;:35;44863:2;44831:35;;;;;;;;;;;;;;;;;;;;;;;;;44830:36;44774:92;44748:1147;;;44953:20;;44943:6;:30;;44909:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;45161:9;;45144:13;45154:2;45144:9;:13::i;:::-;45135:6;:22;;;;:::i;:::-;:35;;45101:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44748:1147;;;45339:25;:29;45365:2;45339:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;45394:31;:37;45426:4;45394:37;;;;;;;;;;;;;;;;;;;;;;;;;45393:38;45339:92;45313:582;;;45518:20;;45508:6;:30;;45474:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;45313:582;;;45675:31;:35;45707:2;45675:35;;;;;;;;;;;;;;;;;;;;;;;;;45670:225;;45795:9;;45778:13;45788:2;45778:9;:13::i;:::-;45769:6;:22;;;;:::i;:::-;:35;;45735:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45670:225;45313:582;44748:1147;43469:2441;43434:2487;46008:1;45995:10;;:14;;;;:::i;:::-;45978:12;:32;;:68;;;;;46033:13;46027:19;;:2;:19;;;;45978:68;:142;;;;;46077:42;46063:57;;:2;:57;;;;45978:142;45960:221;;;46164:5;46147:10;:14;46158:2;46147:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;45960:221;46193:28;46224:24;46242:4;46224:9;:24::i;:::-;46193:55;;46261:12;46300:18;;46276:20;:42;;46261:57;;46349:7;:35;;;;;46373:11;;;;;;;;;;;46349:35;:61;;;;;46402:8;;;;;;;;;;;46401:9;46349:61;:110;;;;;46428:25;:31;46454:4;46428:31;;;;;;;;;;;;;;;;;;;;;;;;;46427:32;46349:110;:153;;;;;46477:19;:25;46497:4;46477:25;;;;;;;;;;;;;;;;;;;;;;;;;46476:26;46349:153;:194;;;;;46520:19;:23;46540:2;46520:23;;;;;;;;;;;;;;;;;;;;;;;;;46519:24;46349:194;46331:326;;;46581:4;46570:8;;:15;;;;;;;;;;;;;;;;;;46602:10;:8;:10::i;:::-;46640:5;46629:8;;:16;;;;;;;;;;;;;;;;;;46331:326;46669:12;46685:8;;;;;;;;;;;46684:9;46669:24;;46795:19;:25;46815:4;46795:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46824:19;:23;46844:2;46824:23;;;;;;;;;;;;;;;;;;;;;;;;;46795:52;46791:100;;;46874:5;46864:15;;46791:100;46903:12;47008:7;47004:969;;;47060:25;:29;47086:2;47060:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;47109:1;47093:13;;:17;47060:50;47056:768;;;47138:34;47168:3;47138:25;47149:13;;47138:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;47131:41;;47241:13;;47221:16;;47214:4;:23;;;;:::i;:::-;47213:41;;;;:::i;:::-;47191:18;;:63;;;;;;;:::i;:::-;;;;;;;;47311:13;;47297:10;;47290:4;:17;;;;:::i;:::-;47289:35;;;;:::i;:::-;47273:12;;:51;;;;;;;:::i;:::-;;;;;;;;47393:13;;47373:16;;47366:4;:23;;;;:::i;:::-;47365:41;;;;:::i;:::-;47343:18;;:63;;;;;;;:::i;:::-;;;;;;;;47056:768;;;47468:25;:31;47494:4;47468:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;47518:1;47503:12;;:16;47468:51;47464:360;;;47547:33;47576:3;47547:24;47558:12;;47547:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;47540:40;;47648:12;;47629:15;;47622:4;:22;;;;:::i;:::-;47621:39;;;;:::i;:::-;47599:18;;:61;;;;;;;:::i;:::-;;;;;;;;47716:12;;47703:9;;47696:4;:16;;;;:::i;:::-;47695:33;;;;:::i;:::-;47679:12;;:49;;;;;;;:::i;:::-;;;;;;;;47796:12;;47777:15;;47770:4;:22;;;;:::i;:::-;47769:39;;;;:::i;:::-;47747:18;;:61;;;;;;;:::i;:::-;;;;;;;;47464:360;47056:768;47851:1;47844:4;:8;47840:91;;;47873:42;47889:4;47903;47910;47873:15;:42::i;:::-;47840:91;47957:4;47947:14;;;;;:::i;:::-;;;47004:969;47985:33;48001:4;48007:2;48011:6;47985:15;:33::i;:::-;43018:5008;;;;42905:5121;;;;:::o;18479:226::-;18599:7;18632:1;18627;:6;;18635:12;18619:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18659:9;18675:1;18671;:5;;;;:::i;:::-;18659:17;;18696:1;18689:8;;;18479:226;;;;;:::o;17576:181::-;17634:7;17654:9;17670:1;17666;:5;;;;:::i;:::-;17654:17;;17695:1;17690;:6;;17682:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17748:1;17741:8;;;17576:181;;;;:::o;42128:188::-;42245:5;42211:25;:31;42237:4;42211:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42302:5;42268:40;;42296:4;42268:40;;;;;;;;;;;;42128:188;;:::o;13697:610::-;13855:1;13837:20;;:6;:20;;;13829:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13939:1;13918:23;;:9;:23;;;13910:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13994:47;14015:6;14023:9;14034:6;13994:20;:47::i;:::-;14074:108;14110:6;14074:108;;;;;;;;;;;;;;;;;:9;:17;14084:6;14074:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;14054:9;:17;14064:6;14054:17;;;;;;;;;;;;;;;:128;;;;14216:32;14241:6;14216:9;:20;14226:9;14216:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14193:9;:20;14203:9;14193:20;;;;;;;;;;;;;;;:55;;;;14281:9;14264:35;;14273:6;14264:35;;;14292:6;14264:35;;;;;;:::i;:::-;;;;;;;;13697:610;;;:::o;48654:1220::-;48693:23;48719:24;48737:4;48719:9;:24::i;:::-;48693:50;;48754:25;48850:12;;48816:18;;48782;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;48754:108;;48873:12;48921:1;48902:15;:20;:46;;;;48947:1;48926:17;:22;48902:46;48898:85;;;48965:7;;;;;48898:85;49038:2;49017:18;;:23;;;;:::i;:::-;48999:15;:41;48995:115;;;49096:2;49075:18;;:23;;;;:::i;:::-;49057:41;;48995:115;49122:23;49235:1;49202:17;49167:18;;49149:15;:36;;;;:::i;:::-;49148:71;;;;:::i;:::-;:88;;;;:::i;:::-;49122:114;;49247:26;49276:36;49296:15;49276;:19;;:36;;;;:::i;:::-;49247:65;;49325:25;49353:21;49325:49;;49387:36;49404:18;49387:16;:36::i;:::-;49436:18;49457:44;49483:17;49457:21;:25;;:44;;;;:::i;:::-;49436:65;;49514:17;49534:51;49567:17;49534:28;49549:12;;49534:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;49514:71;;49619:1;49598:18;:22;;;;49652:1;49631:18;:22;;;;49679:1;49664:12;:16;;;;49715:9;;;;;;;;;;;49707:23;;49738:9;49707:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49693:59;;;;;49787:15;;;;;;;;;;;49779:29;;49830:21;49779:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49765:101;;;;;48682:1192;;;;;;;;48654:1220;:::o;18964:471::-;19022:7;19272:1;19267;:6;19263:47;;19297:1;19290:8;;;;19263:47;19322:9;19338:1;19334;:5;;;;:::i;:::-;19322:17;;19367:1;19362;19358;:5;;;;:::i;:::-;:10;19350:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19426:1;19419:8;;;18964:471;;;;;:::o;19911:132::-;19969:7;19996:39;20000:1;20003;19996:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19989:46;;19911:132;;;;:::o;17181:125::-;;;;:::o;18040:136::-;18098:7;18125:43;18129:1;18132;18125:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18118:50;;18040:136;;;;:::o;48143:503::-;48209:21;48247:1;48233:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48209:40;;48278:4;48260;48265:1;48260:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48304:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48294:4;48299:1;48294:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48339:62;48356:4;48371:15;48389:11;48339:8;:62::i;:::-;48414:15;:66;;;48495:11;48521:1;48565:4;48592;48612:15;48414:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48198:448;48143:503;:::o;20539:312::-;20659:7;20691:1;20687;:5;20694:12;20679:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20718:9;20734:1;20730;:5;;;;:::i;:::-;20718:17;;20842:1;20835:8;;;20539:312;;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1857:117::-;1966:1;1963;1956:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:116::-;6141:21;6156:5;6141:21;:::i;:::-;6134:5;6131:32;6121:60;;6177:1;6174;6167:12;6121:60;6071:116;:::o;6193:133::-;6236:5;6274:6;6261:20;6252:29;;6290:30;6314:5;6290:30;:::i;:::-;6193:133;;;;:::o;6332:468::-;6397:6;6405;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6580:1;6605:53;6650:7;6641:6;6630:9;6626:22;6605:53;:::i;:::-;6595:63;;6551:117;6707:2;6733:50;6775:7;6766:6;6755:9;6751:22;6733:50;:::i;:::-;6723:60;;6678:115;6332:468;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:911::-;9117:6;9125;9133;9141;9149;9198:3;9186:9;9177:7;9173:23;9169:33;9166:120;;;9205:79;;:::i;:::-;9166:120;9325:1;9350:53;9395:7;9386:6;9375:9;9371:22;9350:53;:::i;:::-;9340:63;;9296:117;9452:2;9478:53;9523:7;9514:6;9503:9;9499:22;9478:53;:::i;:::-;9468:63;;9423:118;9580:2;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9551:118;9708:2;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9679:118;9836:3;9863:53;9908:7;9899:6;9888:9;9884:22;9863:53;:::i;:::-;9853:63;;9807:119;9022:911;;;;;;;;:::o;9939:180::-;9987:77;9984:1;9977:88;10084:4;10081:1;10074:15;10108:4;10105:1;10098:15;10125:320;10169:6;10206:1;10200:4;10196:12;10186:22;;10253:1;10247:4;10243:12;10274:18;10264:81;;10330:4;10322:6;10318:17;10308:27;;10264:81;10392:2;10384:6;10381:14;10361:18;10358:38;10355:84;;10411:18;;:::i;:::-;10355:84;10176:269;10125:320;;;:::o;10451:182::-;10591:34;10587:1;10579:6;10575:14;10568:58;10451:182;:::o;10639:366::-;10781:3;10802:67;10866:2;10861:3;10802:67;:::i;:::-;10795:74;;10878:93;10967:3;10878:93;:::i;:::-;10996:2;10991:3;10987:12;10980:19;;10639:366;;;:::o;11011:419::-;11177:4;11215:2;11204:9;11200:18;11192:26;;11264:9;11258:4;11254:20;11250:1;11239:9;11235:17;11228:47;11292:131;11418:4;11292:131;:::i;:::-;11284:139;;11011:419;;;:::o;11436:180::-;11484:77;11481:1;11474:88;11581:4;11578:1;11571:15;11605:4;11602:1;11595:15;11622:410;11662:7;11685:20;11703:1;11685:20;:::i;:::-;11680:25;;11719:20;11737:1;11719:20;:::i;:::-;11714:25;;11774:1;11771;11767:9;11796:30;11814:11;11796:30;:::i;:::-;11785:41;;11975:1;11966:7;11962:15;11959:1;11956:22;11936:1;11929:9;11909:83;11886:139;;12005:18;;:::i;:::-;11886:139;11670:362;11622:410;;;;:::o;12038:180::-;12086:77;12083:1;12076:88;12183:4;12180:1;12173:15;12207:4;12204:1;12197:15;12224:185;12264:1;12281:20;12299:1;12281:20;:::i;:::-;12276:25;;12315:20;12333:1;12315:20;:::i;:::-;12310:25;;12354:1;12344:35;;12359:18;;:::i;:::-;12344:35;12401:1;12398;12394:9;12389:14;;12224:185;;;;:::o;12415:234::-;12555:34;12551:1;12543:6;12539:14;12532:58;12624:17;12619:2;12611:6;12607:15;12600:42;12415:234;:::o;12655:366::-;12797:3;12818:67;12882:2;12877:3;12818:67;:::i;:::-;12811:74;;12894:93;12983:3;12894:93;:::i;:::-;13012:2;13007:3;13003:12;12996:19;;12655:366;;;:::o;13027:419::-;13193:4;13231:2;13220:9;13216:18;13208:26;;13280:9;13274:4;13270:20;13266:1;13255:9;13251:17;13244:47;13308:131;13434:4;13308:131;:::i;:::-;13300:139;;13027:419;;;:::o;13452:191::-;13492:3;13511:20;13529:1;13511:20;:::i;:::-;13506:25;;13545:20;13563:1;13545:20;:::i;:::-;13540:25;;13588:1;13585;13581:9;13574:16;;13609:3;13606:1;13603:10;13600:36;;;13616:18;;:::i;:::-;13600:36;13452:191;;;;:::o;13649:179::-;13789:31;13785:1;13777:6;13773:14;13766:55;13649:179;:::o;13834:366::-;13976:3;13997:67;14061:2;14056:3;13997:67;:::i;:::-;13990:74;;14073:93;14162:3;14073:93;:::i;:::-;14191:2;14186:3;14182:12;14175:19;;13834:366;;;:::o;14206:419::-;14372:4;14410:2;14399:9;14395:18;14387:26;;14459:9;14453:4;14449:20;14445:1;14434:9;14430:17;14423:47;14487:131;14613:4;14487:131;:::i;:::-;14479:139;;14206:419;;;:::o;14631:244::-;14771:34;14767:1;14759:6;14755:14;14748:58;14840:27;14835:2;14827:6;14823:15;14816:52;14631:244;:::o;14881:366::-;15023:3;15044:67;15108:2;15103:3;15044:67;:::i;:::-;15037:74;;15120:93;15209:3;15120:93;:::i;:::-;15238:2;15233:3;15229:12;15222:19;;14881:366;;;:::o;15253:419::-;15419:4;15457:2;15446:9;15442:18;15434:26;;15506:9;15500:4;15496:20;15492:1;15481:9;15477:17;15470:47;15534:131;15660:4;15534:131;:::i;:::-;15526:139;;15253:419;;;:::o;15678:223::-;15818:34;15814:1;15806:6;15802:14;15795:58;15887:6;15882:2;15874:6;15870:15;15863:31;15678:223;:::o;15907:366::-;16049:3;16070:67;16134:2;16129:3;16070:67;:::i;:::-;16063:74;;16146:93;16235:3;16146:93;:::i;:::-;16264:2;16259:3;16255:12;16248:19;;15907:366;;;:::o;16279:419::-;16445:4;16483:2;16472:9;16468:18;16460:26;;16532:9;16526:4;16522:20;16518:1;16507:9;16503:17;16496:47;16560:131;16686:4;16560:131;:::i;:::-;16552:139;;16279:419;;;:::o;16704:240::-;16844:34;16840:1;16832:6;16828:14;16821:58;16913:23;16908:2;16900:6;16896:15;16889:48;16704:240;:::o;16950:366::-;17092:3;17113:67;17177:2;17172:3;17113:67;:::i;:::-;17106:74;;17189:93;17278:3;17189:93;:::i;:::-;17307:2;17302:3;17298:12;17291:19;;16950:366;;;:::o;17322:419::-;17488:4;17526:2;17515:9;17511:18;17503:26;;17575:9;17569:4;17565:20;17561:1;17550:9;17546:17;17539:47;17603:131;17729:4;17603:131;:::i;:::-;17595:139;;17322:419;;;:::o;17747:239::-;17887:34;17883:1;17875:6;17871:14;17864:58;17956:22;17951:2;17943:6;17939:15;17932:47;17747:239;:::o;17992:366::-;18134:3;18155:67;18219:2;18214:3;18155:67;:::i;:::-;18148:74;;18231:93;18320:3;18231:93;:::i;:::-;18349:2;18344:3;18340:12;18333:19;;17992:366;;;:::o;18364:419::-;18530:4;18568:2;18557:9;18553:18;18545:26;;18617:9;18611:4;18607:20;18603:1;18592:9;18588:17;18581:47;18645:131;18771:4;18645:131;:::i;:::-;18637:139;;18364:419;;;:::o;18789:225::-;18929:34;18925:1;18917:6;18913:14;18906:58;18998:8;18993:2;18985:6;18981:15;18974:33;18789:225;:::o;19020:366::-;19162:3;19183:67;19247:2;19242:3;19183:67;:::i;:::-;19176:74;;19259:93;19348:3;19259:93;:::i;:::-;19377:2;19372:3;19368:12;19361:19;;19020:366;;;:::o;19392:419::-;19558:4;19596:2;19585:9;19581:18;19573:26;;19645:9;19639:4;19635:20;19631:1;19620:9;19616:17;19609:47;19673:131;19799:4;19673:131;:::i;:::-;19665:139;;19392:419;;;:::o;19817:179::-;19957:31;19953:1;19945:6;19941:14;19934:55;19817:179;:::o;20002:366::-;20144:3;20165:67;20229:2;20224:3;20165:67;:::i;:::-;20158:74;;20241:93;20330:3;20241:93;:::i;:::-;20359:2;20354:3;20350:12;20343:19;;20002:366;;;:::o;20374:419::-;20540:4;20578:2;20567:9;20563:18;20555:26;;20627:9;20621:4;20617:20;20613:1;20602:9;20598:17;20591:47;20655:131;20781:4;20655:131;:::i;:::-;20647:139;;20374:419;;;:::o;20799:223::-;20939:34;20935:1;20927:6;20923:14;20916:58;21008:6;21003:2;20995:6;20991:15;20984:31;20799:223;:::o;21028:366::-;21170:3;21191:67;21255:2;21250:3;21191:67;:::i;:::-;21184:74;;21267:93;21356:3;21267:93;:::i;:::-;21385:2;21380:3;21376:12;21369:19;;21028:366;;;:::o;21400:419::-;21566:4;21604:2;21593:9;21589:18;21581:26;;21653:9;21647:4;21643:20;21639:1;21628:9;21624:17;21617:47;21681:131;21807:4;21681:131;:::i;:::-;21673:139;;21400:419;;;:::o;21825:221::-;21965:34;21961:1;21953:6;21949:14;21942:58;22034:4;22029:2;22021:6;22017:15;22010:29;21825:221;:::o;22052:366::-;22194:3;22215:67;22279:2;22274:3;22215:67;:::i;:::-;22208:74;;22291:93;22380:3;22291:93;:::i;:::-;22409:2;22404:3;22400:12;22393:19;;22052:366;;;:::o;22424:419::-;22590:4;22628:2;22617:9;22613:18;22605:26;;22677:9;22671:4;22667:20;22663:1;22652:9;22648:17;22641:47;22705:131;22831:4;22705:131;:::i;:::-;22697:139;;22424:419;;;:::o;22849:224::-;22989:34;22985:1;22977:6;22973:14;22966:58;23058:7;23053:2;23045:6;23041:15;23034:32;22849:224;:::o;23079:366::-;23221:3;23242:67;23306:2;23301:3;23242:67;:::i;:::-;23235:74;;23318:93;23407:3;23318:93;:::i;:::-;23436:2;23431:3;23427:12;23420:19;;23079:366;;;:::o;23451:419::-;23617:4;23655:2;23644:9;23640:18;23632:26;;23704:9;23698:4;23694:20;23690:1;23679:9;23675:17;23668:47;23732:131;23858:4;23732:131;:::i;:::-;23724:139;;23451:419;;;:::o;23876:222::-;24016:34;24012:1;24004:6;24000:14;23993:58;24085:5;24080:2;24072:6;24068:15;24061:30;23876:222;:::o;24104:366::-;24246:3;24267:67;24331:2;24326:3;24267:67;:::i;:::-;24260:74;;24343:93;24432:3;24343:93;:::i;:::-;24461:2;24456:3;24452:12;24445:19;;24104:366;;;:::o;24476:419::-;24642:4;24680:2;24669:9;24665:18;24657:26;;24729:9;24723:4;24719:20;24715:1;24704:9;24700:17;24693:47;24757:131;24883:4;24757:131;:::i;:::-;24749:139;;24476:419;;;:::o;24901:236::-;25041:34;25037:1;25029:6;25025:14;25018:58;25110:19;25105:2;25097:6;25093:15;25086:44;24901:236;:::o;25143:366::-;25285:3;25306:67;25370:2;25365:3;25306:67;:::i;:::-;25299:74;;25382:93;25471:3;25382:93;:::i;:::-;25500:2;25495:3;25491:12;25484:19;;25143:366;;;:::o;25515:419::-;25681:4;25719:2;25708:9;25704:18;25696:26;;25768:9;25762:4;25758:20;25754:1;25743:9;25739:17;25732:47;25796:131;25922:4;25796:131;:::i;:::-;25788:139;;25515:419;;;:::o;25940:172::-;26080:24;26076:1;26068:6;26064:14;26057:48;25940:172;:::o;26118:366::-;26260:3;26281:67;26345:2;26340:3;26281:67;:::i;:::-;26274:74;;26357:93;26446:3;26357:93;:::i;:::-;26475:2;26470:3;26466:12;26459:19;;26118:366;;;:::o;26490:419::-;26656:4;26694:2;26683:9;26679:18;26671:26;;26743:9;26737:4;26733:20;26729:1;26718:9;26714:17;26707:47;26771:131;26897:4;26771:131;:::i;:::-;26763:139;;26490:419;;;:::o;26915:297::-;27055:34;27051:1;27043:6;27039:14;27032:58;27124:34;27119:2;27111:6;27107:15;27100:59;27193:11;27188:2;27180:6;27176:15;27169:36;26915:297;:::o;27218:366::-;27360:3;27381:67;27445:2;27440:3;27381:67;:::i;:::-;27374:74;;27457:93;27546:3;27457:93;:::i;:::-;27575:2;27570:3;27566:12;27559:19;;27218:366;;;:::o;27590:419::-;27756:4;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27590:419;;;:::o;28015:240::-;28155:34;28151:1;28143:6;28139:14;28132:58;28224:23;28219:2;28211:6;28207:15;28200:48;28015:240;:::o;28261:366::-;28403:3;28424:67;28488:2;28483:3;28424:67;:::i;:::-;28417:74;;28500:93;28589:3;28500:93;:::i;:::-;28618:2;28613:3;28609:12;28602:19;;28261:366;;;:::o;28633:419::-;28799:4;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28633:419;;;:::o;29058:169::-;29198:21;29194:1;29186:6;29182:14;29175:45;29058:169;:::o;29233:366::-;29375:3;29396:67;29460:2;29455:3;29396:67;:::i;:::-;29389:74;;29472:93;29561:3;29472:93;:::i;:::-;29590:2;29585:3;29581:12;29574:19;;29233:366;;;:::o;29605:419::-;29771:4;29809:2;29798:9;29794:18;29786:26;;29858:9;29852:4;29848:20;29844:1;29833:9;29829:17;29822:47;29886:131;30012:4;29886:131;:::i;:::-;29878:139;;29605:419;;;:::o;30030:241::-;30170:34;30166:1;30158:6;30154:14;30147:58;30239:24;30234:2;30226:6;30222:15;30215:49;30030:241;:::o;30277:366::-;30419:3;30440:67;30504:2;30499:3;30440:67;:::i;:::-;30433:74;;30516:93;30605:3;30516:93;:::i;:::-;30634:2;30629:3;30625:12;30618:19;;30277:366;;;:::o;30649:419::-;30815:4;30853:2;30842:9;30838:18;30830:26;;30902:9;30896:4;30892:20;30888:1;30877:9;30873:17;30866:47;30930:131;31056:4;30930:131;:::i;:::-;30922:139;;30649:419;;;:::o;31074:194::-;31114:4;31134:20;31152:1;31134:20;:::i;:::-;31129:25;;31168:20;31186:1;31168:20;:::i;:::-;31163:25;;31212:1;31209;31205:9;31197:17;;31236:1;31230:4;31227:11;31224:37;;;31241:18;;:::i;:::-;31224:37;31074:194;;;;:::o;31274:177::-;31414:29;31410:1;31402:6;31398:14;31391:53;31274:177;:::o;31457:366::-;31599:3;31620:67;31684:2;31679:3;31620:67;:::i;:::-;31613:74;;31696:93;31785:3;31696:93;:::i;:::-;31814:2;31809:3;31805:12;31798:19;;31457:366;;;:::o;31829:419::-;31995:4;32033:2;32022:9;32018:18;32010:26;;32082:9;32076:4;32072:20;32068:1;32057:9;32053:17;32046:47;32110:131;32236:4;32110:131;:::i;:::-;32102:139;;31829:419;;;:::o;32254:147::-;32355:11;32392:3;32377:18;;32254:147;;;;:::o;32407:114::-;;:::o;32527:398::-;32686:3;32707:83;32788:1;32783:3;32707:83;:::i;:::-;32700:90;;32799:93;32888:3;32799:93;:::i;:::-;32917:1;32912:3;32908:11;32901:18;;32527:398;;;:::o;32931:379::-;33115:3;33137:147;33280:3;33137:147;:::i;:::-;33130:154;;33301:3;33294:10;;32931:379;;;:::o;33316:220::-;33456:34;33452:1;33444:6;33440:14;33433:58;33525:3;33520:2;33512:6;33508:15;33501:28;33316:220;:::o;33542:366::-;33684:3;33705:67;33769:2;33764:3;33705:67;:::i;:::-;33698:74;;33781:93;33870:3;33781:93;:::i;:::-;33899:2;33894:3;33890:12;33883:19;;33542:366;;;:::o;33914:419::-;34080:4;34118:2;34107:9;34103:18;34095:26;;34167:9;34161:4;34157:20;34153:1;34142:9;34138:17;34131:47;34195:131;34321:4;34195:131;:::i;:::-;34187:139;;33914:419;;;:::o;34339:180::-;34387:77;34384:1;34377:88;34484:4;34481:1;34474:15;34508:4;34505:1;34498:15;34525:180;34573:77;34570:1;34563:88;34670:4;34667:1;34660:15;34694:4;34691:1;34684:15;34711:143;34768:5;34799:6;34793:13;34784:22;;34815:33;34842:5;34815:33;:::i;:::-;34711:143;;;;:::o;34860:351::-;34930:6;34979:2;34967:9;34958:7;34954:23;34950:32;34947:119;;;34985:79;;:::i;:::-;34947:119;35105:1;35130:64;35186:7;35177:6;35166:9;35162:22;35130:64;:::i;:::-;35120:74;;35076:128;34860:351;;;;:::o;35217:85::-;35262:7;35291:5;35280:16;;35217:85;;;:::o;35308:158::-;35366:9;35399:61;35417:42;35426:32;35452:5;35426:32;:::i;:::-;35417:42;:::i;:::-;35399:61;:::i;:::-;35386:74;;35308:158;;;:::o;35472:147::-;35567:45;35606:5;35567:45;:::i;:::-;35562:3;35555:58;35472:147;;:::o;35625:114::-;35692:6;35726:5;35720:12;35710:22;;35625:114;;;:::o;35745:184::-;35844:11;35878:6;35873:3;35866:19;35918:4;35913:3;35909:14;35894:29;;35745:184;;;;:::o;35935:132::-;36002:4;36025:3;36017:11;;36055:4;36050:3;36046:14;36038:22;;35935:132;;;:::o;36073:108::-;36150:24;36168:5;36150:24;:::i;:::-;36145:3;36138:37;36073:108;;:::o;36187:179::-;36256:10;36277:46;36319:3;36311:6;36277:46;:::i;:::-;36355:4;36350:3;36346:14;36332:28;;36187:179;;;;:::o;36372:113::-;36442:4;36474;36469:3;36465:14;36457:22;;36372:113;;;:::o;36521:732::-;36640:3;36669:54;36717:5;36669:54;:::i;:::-;36739:86;36818:6;36813:3;36739:86;:::i;:::-;36732:93;;36849:56;36899:5;36849:56;:::i;:::-;36928:7;36959:1;36944:284;36969:6;36966:1;36963:13;36944:284;;;37045:6;37039:13;37072:63;37131:3;37116:13;37072:63;:::i;:::-;37065:70;;37158:60;37211:6;37158:60;:::i;:::-;37148:70;;37004:224;36991:1;36988;36984:9;36979:14;;36944:284;;;36948:14;37244:3;37237:10;;36645:608;;;36521:732;;;;:::o;37259:831::-;37522:4;37560:3;37549:9;37545:19;37537:27;;37574:71;37642:1;37631:9;37627:17;37618:6;37574:71;:::i;:::-;37655:80;37731:2;37720:9;37716:18;37707:6;37655:80;:::i;:::-;37782:9;37776:4;37772:20;37767:2;37756:9;37752:18;37745:48;37810:108;37913:4;37904:6;37810:108;:::i;:::-;37802:116;;37928:72;37996:2;37985:9;37981:18;37972:6;37928:72;:::i;:::-;38010:73;38078:3;38067:9;38063:19;38054:6;38010:73;:::i;:::-;37259:831;;;;;;;;:::o

Swarm Source

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