ETH Price: $2,378.33 (-0.21%)
Gas: 6.4 Gwei

Token

Lawyer Ai ($Ai)
 

Overview

Max Total Supply

1,000,000,000 $Ai

Holders

188

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,614,991.016203411232268073 $Ai

Value
$0.00
0x65298cadc37f1673186d922679a682452838d173
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Lawyer

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-08
*/

/**

website https://lawyerai.org/

*/
// SPDX-License-Identifier: MIT
pragma solidity = 0.8.16;

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 swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

pragma solidity >= 0.8.16;


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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public liquidityAddress;

    bool private swapping;

    uint256 public maxSellTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet = 1;

    uint256 public supply;

    address public marketingAddress = 0x5A8Dc4b3EB57e71ddaD90a10b317fB138232b297;

    bool public tradingActive = true;
    bool public liquidityFeeActive = true;

    bool public limitsInEffect = true;
    bool public swapEnabled = true;


    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public bots;

    uint256 public buyBurnFee = 0;
    uint256 public buyMarketingFee = 20;
    uint256 public buyLiquidityFee = 0;
    uint256 public buyTotalFees = buyBurnFee + buyMarketingFee + buyLiquidityFee;

    uint256 public sellBurnFee = 0;
    uint256 public sellMarketingFee = 40;
    uint256 public sellLiquidityFee = 0;
    uint256 public sellTotalFees = sellBurnFee + sellMarketingFee + sellLiquidityFee;

    uint256 public feeUnits = 100;

    uint256 public tokensForBurn;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    uint256 private _previousBuyLiquidityFee = 0;
    uint256 private _previousSellLiquidityFee = 0;

    uint256 public maxWalletTotal;
    uint256 public maxSellTransaction = 1;

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

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxSellTransactionAmount;

    // Store the automatic market maker pair addresses. 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 SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event updateHolderLastTransferTimestamp(address indexed account, uint256 timestamp);


    constructor() ERC20("Lawyer Ai ", "$Ai") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxSellTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxSellTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

    
        uint256 totalSupply = 1000000000 * (10 ** 18);
        supply += totalSupply;

        maxSellTransactionAmount = supply * maxSellTransaction / 100;
        swapTokensAtAmount = supply / 10000; // 0.1% swap wallet;
        maxWalletTotal = supply * maxWallet / 100;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxSellTransaction(owner(), true);
        excludeFromMaxSellTransaction(address(this), true);
        excludeFromMaxSellTransaction(address(0xdead), true);

        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function toggleLiquidityFeeActive () external onlyOwner {
        if (liquidityFeeActive) {
        _previousBuyLiquidityFee = buyLiquidityFee;
        _previousSellLiquidityFee = sellLiquidityFee;
        }
        buyLiquidityFee = liquidityFeeActive ? 0 : _previousBuyLiquidityFee;
        sellLiquidityFee = liquidityFeeActive ? 0 : _previousSellLiquidityFee;
        liquidityFeeActive = !liquidityFeeActive;
    }


    function updateMaxSellTransaction(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        maxSellTransaction = newNum;
        updateLimits();
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        maxWallet = newNum;
        updateLimits();
    }

    function updateLimits() private {
        maxSellTransactionAmount = supply * maxSellTransaction / 100;
        swapTokensAtAmount = supply / 1000; // 0.1% swap wallet;
        maxWalletTotal = supply * maxWallet / 100;
    }


    function excludeFromMaxSellTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxSellTransactionAmount[updAds] = isEx;
    }

    // if want fractional % in future, need to increase the fee units
    function updateFeeUnits(uint256 newNum) external onlyOwner {
        feeUnits = newNum;
    }

    function manualSend() external {
        uint256 contractBalance = address(this).balance;
        payable(marketingAddress).transfer(contractBalance);
    }

    function updateBuyFees(uint256 _burnFee, uint256 _marketingFee, uint256 _buyLiquidityFee) external onlyOwner {
        buyBurnFee = _burnFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyBurnFee + buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 15 * feeUnits / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _burnFee, uint256 _marketingFee, uint256 _sellLiquidityFee) external onlyOwner {
        sellBurnFee = _burnFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellBurnFee + sellMarketingFee + sellLiquidityFee;
        require(sellTotalFees <= 25 * feeUnits / 100, "Must keep fees at 25% or less");
    }

    function updateMarketingAddress(address newWallet) external onlyOwner {
        marketingAddress = newWallet;
    }

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

    function includeInFees(address account) public onlyOwner {
        excludeFromFees(account, false);
    }

    function setLiquidityAddress(address newAddress) public onlyOwner {
        liquidityAddress = newAddress;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!bots[from] && !bots[to], "Account is blacklisted!");

         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.");
                }

                // add the wallet to the _holderLastTransferTimestamp(address, timestamp) map
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                emit updateHolderLastTransferTimestamp(tx.origin, block.timestamp);

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxSellTransactionAmount[to] && !automatedMarketMakerPairs[to]){
                        require(amount + balanceOf(to) <= maxWalletTotal, "Max wallet exceeded");
                }

                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxSellTransactionAmount[from] && !automatedMarketMakerPairs[from]){
                        require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
                }
                else if(!_isExcludedMaxSellTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletTotal, "Max wallet exceeded");
                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(
            canSwap &&
            !swapping &&
            swapEnabled &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(feeUnits);
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                if (liquidityFeeActive) {
                    tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                }
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(feeUnits);
        	    tokensForBurn += fees * buyBurnFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                if (liquidityFeeActive) {
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                }
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
                if (tokensForBurn > 0) {
                    _burn(address(this), tokensForBurn);
                    supply = totalSupply();
                    updateLimits();
                    tokensForBurn = 0;
                }
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
                tokensForLiquidity = 0;
            }
        	amount -= fees;
        }

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

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

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

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

    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if(contractBalance == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 5){
          contractBalance = swapTokensAtAmount * 5;
        }

        swapTokensForEth(contractBalance);

        tokensForMarketing = 0;
        if (address(this).balance > 50000000000000000)
        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }

    function blockBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"updateHolderLastTransferTimestamp","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxSellTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"excludeFromMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","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":"maxWalletTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"address","name":"newAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"toggleLiquidityFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForBurn","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":[{"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":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBot","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":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateFeeUnits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600955735a8dc4b3eb57e71ddad90a10b317fb138232b297600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60146101000a81548160ff0219169083151502179055506001600b60156101000a81548160ff0219169083151502179055506001600b60166101000a81548160ff0219169083151502179055506001600b60176101000a81548160ff0219169083151502179055506000600e556014600f556000601055601054600f54600e54620000ee919062000d56565b620000fa919062000d56565b60115560006012556028601355600060145560145460135460125462000121919062000d56565b6200012d919062000d56565b60155560646016556000601a556000601b556001601d553480156200015157600080fd5b506040518060400160405280600a81526020017f4c617779657220416920000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f24416900000000000000000000000000000000000000000000000000000000008152508160039081620001cf919062001001565b508060049081620001e1919062001001565b5050506000620001f66200061960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002c18160016200062160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000367919062001152565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f5919062001152565b6040518363ffffffff1660e01b81526004016200041492919062001195565b6020604051808303816000875af115801562000434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045a919062001152565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004a260a05160016200062160201b60201c565b620004b760a05160016200071e60201b60201c565b60006b033b2e3c9fd0803ce8000000905080600a6000828254620004dc919062000d56565b925050819055506064601d54600a54620004f79190620011c2565b62000503919062001252565b600781905550612710600a546200051b919062001252565b6008819055506064600954600a54620005359190620011c2565b62000541919062001252565b601c81905550620005696200055b620007bf60201b60201c565b6001620007e960201b60201c565b6200057c306001620007e960201b60201c565b6200059161dead6001620007e960201b60201c565b620005b3620005a5620007bf60201b60201c565b60016200062160201b60201c565b620005c63060016200062160201b60201c565b620005db61dead60016200062160201b60201c565b620005ff620005ef620007bf60201b60201c565b608051836200093660201b60201c565b62000611338262000b0760201b60201c565b505062001589565b600033905090565b620006316200061960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ba90620012eb565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007f96200061960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200088b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088290620012eb565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200092a91906200132a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620009a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099f90620013bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a119062001455565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000afa919062001488565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7090620014f5565b60405180910390fd5b62000b8d6000838362000cb560201b60201c565b62000ba98160025462000cba60201b6200260b1790919060201c565b60028190555062000c07816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cba60201b6200260b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ca9919062001488565b60405180910390a35050565b505050565b600080828462000ccb919062000d56565b90508381101562000d13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0a9062001567565b60405180910390fd5b8091505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d638262000d1d565b915062000d708362000d1d565b925082820190508082111562000d8b5762000d8a62000d27565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e1357607f821691505b60208210810362000e295762000e2862000dcb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e54565b62000e9f868362000e54565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000ee262000edc62000ed68462000d1d565b62000eb7565b62000d1d565b9050919050565b6000819050919050565b62000efe8362000ec1565b62000f1662000f0d8262000ee9565b84845462000e61565b825550505050565b600090565b62000f2d62000f1e565b62000f3a81848462000ef3565b505050565b5b8181101562000f625762000f5660008262000f23565b60018101905062000f40565b5050565b601f82111562000fb15762000f7b8162000e2f565b62000f868462000e44565b8101602085101562000f96578190505b62000fae62000fa58562000e44565b83018262000f3f565b50505b505050565b600082821c905092915050565b600062000fd66000198460080262000fb6565b1980831691505092915050565b600062000ff1838362000fc3565b9150826002028217905092915050565b6200100c8262000d91565b67ffffffffffffffff81111562001028576200102762000d9c565b5b62001034825462000dfa565b6200104182828562000f66565b600060209050601f83116001811462001079576000841562001064578287015190505b62001070858262000fe3565b865550620010e0565b601f198416620010898662000e2f565b60005b82811015620010b3578489015182556001820191506020850194506020810190506200108c565b86831015620010d35784890151620010cf601f89168262000fc3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200111a82620010ed565b9050919050565b6200112c816200110d565b81146200113857600080fd5b50565b6000815190506200114c8162001121565b92915050565b6000602082840312156200116b576200116a620010e8565b5b60006200117b848285016200113b565b91505092915050565b6200118f816200110d565b82525050565b6000604082019050620011ac600083018562001184565b620011bb602083018462001184565b9392505050565b6000620011cf8262000d1d565b9150620011dc8362000d1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001218576200121762000d27565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200125f8262000d1d565b91506200126c8362000d1d565b9250826200127f576200127e62001223565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012d36020836200128a565b9150620012e0826200129b565b602082019050919050565b600060208201905081810360008301526200130681620012c4565b9050919050565b60008115159050919050565b62001324816200130d565b82525050565b600060208201905062001341600083018462001319565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620013a56024836200128a565b9150620013b28262001347565b604082019050919050565b60006020820190508181036000830152620013d88162001396565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200143d6022836200128a565b91506200144a82620013df565b604082019050919050565b6000602082019050818103600083015262001470816200142e565b9050919050565b620014828162000d1d565b82525050565b60006020820190506200149f600083018462001477565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620014dd601f836200128a565b9150620014ea82620014a5565b602082019050919050565b600060208201905081810360008301526200151081620014ce565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200154f601b836200128a565b91506200155c8262001517565b602082019050919050565b60006020820190508181036000830152620015828162001540565b9050919050565b60805160a0516152cd620015d26000396000818161148901528181611d1a015261359201526000818161104b01528181613d8c01528181613e6d0152613e9401526152cd6000f3fe60806040526004361061039a5760003560e01c80636ddd1713116101dc578063bbc0c74211610102578063e2f45605116100a0578063f42938901161006f578063f429389014610d90578063f637434214610da7578063f680f79914610dd2578063f8b45b0514610dfd576103a1565b8063e2f4560514610ce6578063e71dc3f514610d11578063f11a24d314610d3c578063f2fde38b14610d67576103a1565b8063c17b5b8c116100dc578063c17b5b8c14610c2c578063d85ba06314610c55578063dd62ed3e14610c80578063e18fc22414610cbd576103a1565b8063bbc0c74214610b9b578063bfd7928414610bc6578063c024666814610c03576103a1565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610acd578063ac819f5414610b0a578063adb873bd14610b33578063b62496f514610b5e576103a1565b806395d89b4114610a115780639a7a23d614610a3c578063a457c2d714610a65578063a5ece94114610aa2576103a1565b80637bce5a04116101b65780637bce5a04146109675780638095d564146109925780638da5cb5b146109bb57806392136913146109e6576103a1565b80636ddd1713146108e857806370a0823114610913578063715018a614610950576103a1565b80632369bf83116102c157806349bd5a5e1161025f5780635dc083151161022e5780635dc0831514610854578063637845c61461087d5780636a486a8e146108945780636b999053146108bf576103a1565b806349bd5a5e146107985780634a62bb65146107c35780634fbee193146107ee578063525fa81f1461082b576103a1565b8063313ce5671161029b578063313ce567146106da5780633221c93f1461070557806339509351146107305780633b13cc161461076d576103a1565b80632369bf831461064957806323b872dd1461067257806327c8f835146106af576103a1565b8063095ea7b3116103395780631a8145bb116103085780631a8145bb1461059f5780631c499ab0146105ca5780631d777856146105f35780631f3fed8f1461061e576103a1565b8063095ea7b3146104e35780631694505e1461052057806316a2f82a1461054b57806318160ddd14610574576103a1565b8063047fc9aa11610375578063047fc9aa14610425578063064f22051461045057806306fdde031461047b5780630855f25d146104a6576103a1565b8062b8cf2a146103a657806302259e9e146103cf578063023ad581146103fa576103a1565b366103a157005b600080fd5b3480156103b257600080fd5b506103cd60048036038101906103c891906141a2565b610e28565b005b3480156103db57600080fd5b506103e4610f54565b6040516103f19190614204565b60405180910390f35b34801561040657600080fd5b5061040f610f5a565b60405161041c9190614204565b60405180910390f35b34801561043157600080fd5b5061043a610f60565b6040516104479190614204565b60405180910390f35b34801561045c57600080fd5b50610465610f66565b604051610472919061423a565b60405180910390f35b34801561048757600080fd5b50610490610f79565b60405161049d91906142d4565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906142f6565b61100b565b6040516104da919061423a565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061434f565b61102b565b604051610517919061423a565b60405180910390f35b34801561052c57600080fd5b50610535611049565b60405161054291906143ee565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d91906142f6565b61106d565b005b34801561058057600080fd5b50610589611112565b6040516105969190614204565b60405180910390f35b3480156105ab57600080fd5b506105b461111c565b6040516105c19190614204565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614409565b611122565b005b3480156105ff57600080fd5b506106086111d9565b6040516106159190614204565b60405180910390f35b34801561062a57600080fd5b506106336111df565b6040516106409190614204565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b91906142f6565b6111e5565b005b34801561067e57600080fd5b5061069960048036038101906106949190614436565b6112c0565b6040516106a6919061423a565b60405180910390f35b3480156106bb57600080fd5b506106c4611399565b6040516106d19190614498565b60405180910390f35b3480156106e657600080fd5b506106ef61139f565b6040516106fc91906144cf565b60405180910390f35b34801561071157600080fd5b5061071a6113a8565b6040516107279190614498565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061434f565b6113ce565b604051610764919061423a565b60405180910390f35b34801561077957600080fd5b50610782611481565b60405161078f9190614204565b60405180910390f35b3480156107a457600080fd5b506107ad611487565b6040516107ba9190614498565b60405180910390f35b3480156107cf57600080fd5b506107d86114ab565b6040516107e5919061423a565b60405180910390f35b3480156107fa57600080fd5b50610815600480360381019061081091906142f6565b6114be565b604051610822919061423a565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d91906142f6565b611514565b005b34801561086057600080fd5b5061087b60048036038101906108769190614409565b6115ef565b005b34801561088957600080fd5b506108926116a6565b005b3480156108a057600080fd5b506108a96117db565b6040516108b69190614204565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906142f6565b6117e1565b005b3480156108f457600080fd5b506108fd6118d3565b60405161090a919061423a565b60405180910390f35b34801561091f57600080fd5b5061093a600480360381019061093591906142f6565b6118e6565b6040516109479190614204565b60405180910390f35b34801561095c57600080fd5b5061096561192e565b005b34801561097357600080fd5b5061097c611a86565b6040516109899190614204565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b491906144ea565b611a8c565b005b3480156109c757600080fd5b506109d0611bbf565b6040516109dd9190614498565b60405180910390f35b3480156109f257600080fd5b506109fb611be9565b604051610a089190614204565b60405180910390f35b348015610a1d57600080fd5b50610a26611bef565b604051610a3391906142d4565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614569565b611c81565b005b348015610a7157600080fd5b50610a8c6004803603810190610a87919061434f565b611db4565b604051610a99919061423a565b60405180910390f35b348015610aae57600080fd5b50610ab7611e81565b604051610ac49190614498565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef919061434f565b611ea7565b604051610b01919061423a565b60405180910390f35b348015610b1657600080fd5b50610b316004803603810190610b2c9190614569565b611ec5565b005b348015610b3f57600080fd5b50610b48611fb7565b604051610b559190614204565b60405180910390f35b348015610b6a57600080fd5b50610b856004803603810190610b8091906142f6565b611fbd565b604051610b92919061423a565b60405180910390f35b348015610ba757600080fd5b50610bb0611fdc565b604051610bbd919061423a565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be891906142f6565b611fef565b604051610bfa919061423a565b60405180910390f35b348015610c0f57600080fd5b50610c2a6004803603810190610c259190614569565b61200f565b005b348015610c3857600080fd5b50610c536004803603810190610c4e91906144ea565b61214f565b005b348015610c6157600080fd5b50610c6a612282565b604051610c779190614204565b60405180910390f35b348015610c8c57600080fd5b50610ca76004803603810190610ca291906145a9565b612288565b604051610cb49190614204565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf9190614409565b61230f565b005b348015610cf257600080fd5b50610cfb6123b0565b604051610d089190614204565b60405180910390f35b348015610d1d57600080fd5b50610d266123b6565b604051610d339190614204565b60405180910390f35b348015610d4857600080fd5b50610d516123bc565b604051610d5e9190614204565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d8991906142f6565b6123c2565b005b348015610d9c57600080fd5b50610da5612588565b005b348015610db357600080fd5b50610dbc6125f9565b604051610dc99190614204565b60405180910390f35b348015610dde57600080fd5b50610de76125ff565b604051610df49190614204565b60405180910390f35b348015610e0957600080fd5b50610e12612605565b604051610e1f9190614204565b60405180910390f35b610e30612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614635565b60405180910390fd5b60005b8151811015610f50576001600d6000848481518110610ee457610ee3614655565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f48906146b3565b915050610ec2565b5050565b60075481565b601c5481565b600a5481565b600b60159054906101000a900460ff1681565b606060038054610f889061472a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb49061472a565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b600061103f611038612669565b8484612671565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611075612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90614635565b60405180910390fd5b61110f81600061200f565b50565b6000600254905090565b60195481565b61112a612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090614635565b60405180910390fd5b60018110156111c757600080fd5b806009819055506111d661283a565b50565b60175481565b60185481565b6111ed612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390614635565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112cd848484612896565b61138e846112d9612669565b6113898560405180606001604052806028815260200161524b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061133f612669565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b612671565b600190509392505050565b61dead81565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114776113db612669565b8461147285600160006113ec612669565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260b90919063ffffffff16565b612671565b6001905092915050565b601d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60169054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61151c612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290614635565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115f7612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90614635565b60405180910390fd5b600181101561169457600080fd5b80601d819055506116a361283a565b50565b6116ae612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614635565b60405180910390fd5b600b60159054906101000a900460ff161561176557601054601a81905550601454601b819055505b600b60159054906101000a900460ff1661178157601a54611784565b60005b601081905550600b60159054906101000a900460ff166117a657601b546117a9565b60005b601481905550600b60159054906101000a900460ff1615600b60156101000a81548160ff021916908315150217905550565b60155481565b6117e9612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614635565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b60179054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611936612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5481565b611a94612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614635565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611b4b919061475b565b611b55919061475b565b6011819055506064601654600f611b6c919061478f565b611b769190614818565b6011541115611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614895565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b606060048054611bfe9061472a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2a9061472a565b8015611c775780601f10611c4c57610100808354040283529160200191611c77565b820191906000526020600020905b815481529060010190602001808311611c5a57829003601f168201915b5050505050905090565b611c89612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f90614635565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614927565b60405180910390fd5b611db0828261364a565b5050565b6000611e77611dc1612669565b84611e72856040518060600160405280602581526020016152736025913960016000611deb612669565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b612671565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ebb611eb4612669565b8484612896565b6001905092915050565b611ecd612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614635565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b602080528060005260406000206000915054906101000a900460ff1681565b600b60149054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b612017612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90614635565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612143919061423a565b60405180910390a25050565b612157612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614635565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461220e919061475b565b612218919061475b565b6015819055506064601654601961222f919061478f565b6122399190614818565b601554111561227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227490614993565b60405180910390fd5b505050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612317612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614635565b60405180910390fd5b8060168190555050565b60085481565b600e5481565b60105481565b6123ca612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245090614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bf90614a25565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000479050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156125f5573d6000803e3d6000fd5b5050565b60145481565b60165481565b60095481565b600080828461261a919061475b565b90508381101561265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265690614a91565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d790614b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361274f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274690614bb5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161282d9190614204565b60405180910390a3505050565b6064601d54600a5461284c919061478f565b6128569190614818565b6007819055506103e8600a5461286c9190614818565b6008819055506064600954600a54612884919061478f565b61288e9190614818565b601c81905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fc90614c47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90614cd9565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a185750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90614d45565b60405180910390fd5b60008103612a7057612a6b838360006136eb565b6135e1565b600b60169054906101000a900460ff161561306457612a8d611bbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612afb5750612acb611bbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b345750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b875750600660149054906101000a900460ff16155b1561306357600b60149054906101000a900460ff16612c8157601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c415750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790614db1565b60405180910390fd5b5b42600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503273ffffffffffffffffffffffffffffffffffffffff167fff12548a3ebb8257a10ea929ff01f69da0424c5bb36050f8d6df03452cbd4d0042604051612d0b9190614204565b60405180910390a2602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db65750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e0c5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6e57601c54612e1d836118e6565b82612e28919061475b565b1115612e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6090614e1d565b60405180910390fd5b613062565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f115750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f675750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb657600754811115612fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa890614eaf565b60405180910390fd5b613061565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661306057601c54613013836118e6565b8261301e919061475b565b111561305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305690614e1d565b60405180910390fd5b5b5b5b5b5b600061306f306118e6565b9050600060085482101590508080156130955750600660149054906101000a900460ff16155b80156130ad5750600b60179054906101000a900460ff165b80156131035750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131595750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131af5750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f3576001600660146101000a81548160ff0219169083151502179055506131d761397e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132a95750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132b357600090505b600081156135d157602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331657506000601554115b156133fa5761334460165461333660155488613a7790919063ffffffff16565b613af190919063ffffffff16565b905060155460125482613357919061478f565b6133619190614818565b60176000828254613372919061475b565b925050819055506015546013548261338a919061478f565b6133949190614818565b601860008282546133a5919061475b565b92505081905550600b60159054906101000a900460ff16156133f557601554601454826133d2919061478f565b6133dc9190614818565b601960008282546133ed919061475b565b925050819055505b613536565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561345557506000601154115b156135355761348360165461347560115488613a7790919063ffffffff16565b613af190919063ffffffff16565b9050601154600e5482613496919061478f565b6134a09190614818565b601760008282546134b1919061475b565b92505081905550601154600f54826134c9919061478f565b6134d39190614818565b601860008282546134e4919061475b565b92505081905550600b60159054906101000a900460ff16156135345760115460105482613511919061478f565b61351b9190614818565b6019600082825461352c919061475b565b925050819055505b5b5b60008111156135815761354a8730836136eb565b600060175411156135805761356130601754613b3b565b613569611112565b600a8190555061357761283a565b60006017819055505b5b600060195411156135c2576135b9307f00000000000000000000000000000000000000000000000000000000000000006019546136eb565b60006019819055505b80856135ce9190614ecf565b94505b6135dc8787876136eb565b505050505b505050565b600083831115829061362e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362591906142d4565b60405180910390fd5b506000838561363d9190614ecf565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190614c47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036137c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c090614cd9565b60405180910390fd5b6137d4838383613ce8565b61383f81604051806060016040528060268152602001615225602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139719190614204565b60405180910390a3505050565b6000613989306118e6565b9050600080820361399b575050613a75565b60056008546139aa919061478f565b8211156139c35760056008546139c0919061478f565b91505b6139cc82613ced565b600060188190555066b1a2bc2ec50000471115613a7257600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2990614f34565b60006040518083038185875af1925050503d8060008114613a66576040519150601f19603f3d011682016040523d82523d6000602084013e613a6b565b606091505b5050809150505b50505b565b6000808303613a895760009050613aeb565b60008284613a97919061478f565b9050828482613aa69190614818565b14613ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613add90614fbb565b60405180910390fd5b809150505b92915050565b6000613b3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f2a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba19061504d565b60405180910390fd5b613bb682600083613ce8565b613c2181604051806060016040528060228152602001615203602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c7881600254613f8d90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cdc9190614204565b60405180910390a35050565b505050565b6000600267ffffffffffffffff811115613d0a57613d09614001565b5b604051908082528060200260200182016040528015613d385781602001602082028036833780820191505090505b5090503081600081518110613d5057613d4f614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e199190615082565b81600181518110613e2d57613e2c614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e92307f000000000000000000000000000000000000000000000000000000000000000084612671565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ef49594939291906151a8565b600060405180830381600087803b158015613f0e57600080fd5b505af1158015613f22573d6000803e3d6000fd5b505050505050565b60008083118290613f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f6891906142d4565b60405180910390fd5b5060008385613f809190614818565b9050809150509392505050565b6000613fcf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135e6565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61403982613ff0565b810181811067ffffffffffffffff8211171561405857614057614001565b5b80604052505050565b600061406b613fd7565b90506140778282614030565b919050565b600067ffffffffffffffff82111561409757614096614001565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140d8826140ad565b9050919050565b6140e8816140cd565b81146140f357600080fd5b50565b600081359050614105816140df565b92915050565b600061411e6141198461407c565b614061565b90508083825260208201905060208402830185811115614141576141406140a8565b5b835b8181101561416a578061415688826140f6565b845260208401935050602081019050614143565b5050509392505050565b600082601f83011261418957614188613feb565b5b813561419984826020860161410b565b91505092915050565b6000602082840312156141b8576141b7613fe1565b5b600082013567ffffffffffffffff8111156141d6576141d5613fe6565b5b6141e284828501614174565b91505092915050565b6000819050919050565b6141fe816141eb565b82525050565b600060208201905061421960008301846141f5565b92915050565b60008115159050919050565b6142348161421f565b82525050565b600060208201905061424f600083018461422b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561428f578082015181840152602081019050614274565b60008484015250505050565b60006142a682614255565b6142b08185614260565b93506142c0818560208601614271565b6142c981613ff0565b840191505092915050565b600060208201905081810360008301526142ee818461429b565b905092915050565b60006020828403121561430c5761430b613fe1565b5b600061431a848285016140f6565b91505092915050565b61432c816141eb565b811461433757600080fd5b50565b60008135905061434981614323565b92915050565b6000806040838503121561436657614365613fe1565b5b6000614374858286016140f6565b92505060206143858582860161433a565b9150509250929050565b6000819050919050565b60006143b46143af6143aa846140ad565b61438f565b6140ad565b9050919050565b60006143c682614399565b9050919050565b60006143d8826143bb565b9050919050565b6143e8816143cd565b82525050565b600060208201905061440360008301846143df565b92915050565b60006020828403121561441f5761441e613fe1565b5b600061442d8482850161433a565b91505092915050565b60008060006060848603121561444f5761444e613fe1565b5b600061445d868287016140f6565b935050602061446e868287016140f6565b925050604061447f8682870161433a565b9150509250925092565b614492816140cd565b82525050565b60006020820190506144ad6000830184614489565b92915050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b60008060006060848603121561450357614502613fe1565b5b60006145118682870161433a565b93505060206145228682870161433a565b92505060406145338682870161433a565b9150509250925092565b6145468161421f565b811461455157600080fd5b50565b6000813590506145638161453d565b92915050565b600080604083850312156145805761457f613fe1565b5b600061458e858286016140f6565b925050602061459f85828601614554565b9150509250929050565b600080604083850312156145c0576145bf613fe1565b5b60006145ce858286016140f6565b92505060206145df858286016140f6565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061461f602083614260565b915061462a826145e9565b602082019050919050565b6000602082019050818103600083015261464e81614612565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146be826141eb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146f0576146ef614684565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061474257607f821691505b602082108103614755576147546146fb565b5b50919050565b6000614766826141eb565b9150614771836141eb565b925082820190508082111561478957614788614684565b5b92915050565b600061479a826141eb565b91506147a5836141eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147de576147dd614684565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614823826141eb565b915061482e836141eb565b92508261483e5761483d6147e9565b5b828204905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061487f601d83614260565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614911603983614260565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061497d601d83614260565b915061498882614947565b602082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602683614260565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a7b601b83614260565b9150614a8682614a45565b602082019050919050565b60006020820190508181036000830152614aaa81614a6e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b0d602483614260565b9150614b1882614ab1565b604082019050919050565b60006020820190508181036000830152614b3c81614b00565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9f602283614260565b9150614baa82614b43565b604082019050919050565b60006020820190508181036000830152614bce81614b92565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c31602583614260565b9150614c3c82614bd5565b604082019050919050565b60006020820190508181036000830152614c6081614c24565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc3602383614260565b9150614cce82614c67565b604082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656421000000000000000000600082015250565b6000614d2f601783614260565b9150614d3a82614cf9565b602082019050919050565b60006020820190508181036000830152614d5e81614d22565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d9b601683614260565b9150614da682614d65565b602082019050919050565b60006020820190508181036000830152614dca81614d8e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614e07601383614260565b9150614e1282614dd1565b602082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e000000000000602082015250565b6000614e99603a83614260565b9150614ea482614e3d565b604082019050919050565b60006020820190508181036000830152614ec881614e8c565b9050919050565b6000614eda826141eb565b9150614ee5836141eb565b9250828203905081811115614efd57614efc614684565b5b92915050565b600081905092915050565b50565b6000614f1e600083614f03565b9150614f2982614f0e565b600082019050919050565b6000614f3f82614f11565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa5602183614260565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615037602183614260565b915061504282614fdb565b604082019050919050565b600060208201905081810360008301526150668161502a565b9050919050565b60008151905061507c816140df565b92915050565b60006020828403121561509857615097613fe1565b5b60006150a68482850161506d565b91505092915050565b6000819050919050565b60006150d46150cf6150ca846150af565b61438f565b6141eb565b9050919050565b6150e4816150b9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61511f816140cd565b82525050565b60006151318383615116565b60208301905092915050565b6000602082019050919050565b6000615155826150ea565b61515f81856150f5565b935061516a83615106565b8060005b8381101561519b5781516151828882615125565b975061518d8361513d565b92505060018101905061516e565b5085935050505092915050565b600060a0820190506151bd60008301886141f5565b6151ca60208301876150db565b81810360408301526151dc818661514a565b90506151eb6060830185614489565b6151f860808301846141f5565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dd4dc7be93c76db3872661244e4b0cdb2e8ba5ef372839248311aeefaa6ce1c264736f6c63430008100033

Deployed Bytecode

0x60806040526004361061039a5760003560e01c80636ddd1713116101dc578063bbc0c74211610102578063e2f45605116100a0578063f42938901161006f578063f429389014610d90578063f637434214610da7578063f680f79914610dd2578063f8b45b0514610dfd576103a1565b8063e2f4560514610ce6578063e71dc3f514610d11578063f11a24d314610d3c578063f2fde38b14610d67576103a1565b8063c17b5b8c116100dc578063c17b5b8c14610c2c578063d85ba06314610c55578063dd62ed3e14610c80578063e18fc22414610cbd576103a1565b8063bbc0c74214610b9b578063bfd7928414610bc6578063c024666814610c03576103a1565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610acd578063ac819f5414610b0a578063adb873bd14610b33578063b62496f514610b5e576103a1565b806395d89b4114610a115780639a7a23d614610a3c578063a457c2d714610a65578063a5ece94114610aa2576103a1565b80637bce5a04116101b65780637bce5a04146109675780638095d564146109925780638da5cb5b146109bb57806392136913146109e6576103a1565b80636ddd1713146108e857806370a0823114610913578063715018a614610950576103a1565b80632369bf83116102c157806349bd5a5e1161025f5780635dc083151161022e5780635dc0831514610854578063637845c61461087d5780636a486a8e146108945780636b999053146108bf576103a1565b806349bd5a5e146107985780634a62bb65146107c35780634fbee193146107ee578063525fa81f1461082b576103a1565b8063313ce5671161029b578063313ce567146106da5780633221c93f1461070557806339509351146107305780633b13cc161461076d576103a1565b80632369bf831461064957806323b872dd1461067257806327c8f835146106af576103a1565b8063095ea7b3116103395780631a8145bb116103085780631a8145bb1461059f5780631c499ab0146105ca5780631d777856146105f35780631f3fed8f1461061e576103a1565b8063095ea7b3146104e35780631694505e1461052057806316a2f82a1461054b57806318160ddd14610574576103a1565b8063047fc9aa11610375578063047fc9aa14610425578063064f22051461045057806306fdde031461047b5780630855f25d146104a6576103a1565b8062b8cf2a146103a657806302259e9e146103cf578063023ad581146103fa576103a1565b366103a157005b600080fd5b3480156103b257600080fd5b506103cd60048036038101906103c891906141a2565b610e28565b005b3480156103db57600080fd5b506103e4610f54565b6040516103f19190614204565b60405180910390f35b34801561040657600080fd5b5061040f610f5a565b60405161041c9190614204565b60405180910390f35b34801561043157600080fd5b5061043a610f60565b6040516104479190614204565b60405180910390f35b34801561045c57600080fd5b50610465610f66565b604051610472919061423a565b60405180910390f35b34801561048757600080fd5b50610490610f79565b60405161049d91906142d4565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906142f6565b61100b565b6040516104da919061423a565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061434f565b61102b565b604051610517919061423a565b60405180910390f35b34801561052c57600080fd5b50610535611049565b60405161054291906143ee565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d91906142f6565b61106d565b005b34801561058057600080fd5b50610589611112565b6040516105969190614204565b60405180910390f35b3480156105ab57600080fd5b506105b461111c565b6040516105c19190614204565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190614409565b611122565b005b3480156105ff57600080fd5b506106086111d9565b6040516106159190614204565b60405180910390f35b34801561062a57600080fd5b506106336111df565b6040516106409190614204565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b91906142f6565b6111e5565b005b34801561067e57600080fd5b5061069960048036038101906106949190614436565b6112c0565b6040516106a6919061423a565b60405180910390f35b3480156106bb57600080fd5b506106c4611399565b6040516106d19190614498565b60405180910390f35b3480156106e657600080fd5b506106ef61139f565b6040516106fc91906144cf565b60405180910390f35b34801561071157600080fd5b5061071a6113a8565b6040516107279190614498565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061434f565b6113ce565b604051610764919061423a565b60405180910390f35b34801561077957600080fd5b50610782611481565b60405161078f9190614204565b60405180910390f35b3480156107a457600080fd5b506107ad611487565b6040516107ba9190614498565b60405180910390f35b3480156107cf57600080fd5b506107d86114ab565b6040516107e5919061423a565b60405180910390f35b3480156107fa57600080fd5b50610815600480360381019061081091906142f6565b6114be565b604051610822919061423a565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d91906142f6565b611514565b005b34801561086057600080fd5b5061087b60048036038101906108769190614409565b6115ef565b005b34801561088957600080fd5b506108926116a6565b005b3480156108a057600080fd5b506108a96117db565b6040516108b69190614204565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906142f6565b6117e1565b005b3480156108f457600080fd5b506108fd6118d3565b60405161090a919061423a565b60405180910390f35b34801561091f57600080fd5b5061093a600480360381019061093591906142f6565b6118e6565b6040516109479190614204565b60405180910390f35b34801561095c57600080fd5b5061096561192e565b005b34801561097357600080fd5b5061097c611a86565b6040516109899190614204565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b491906144ea565b611a8c565b005b3480156109c757600080fd5b506109d0611bbf565b6040516109dd9190614498565b60405180910390f35b3480156109f257600080fd5b506109fb611be9565b604051610a089190614204565b60405180910390f35b348015610a1d57600080fd5b50610a26611bef565b604051610a3391906142d4565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614569565b611c81565b005b348015610a7157600080fd5b50610a8c6004803603810190610a87919061434f565b611db4565b604051610a99919061423a565b60405180910390f35b348015610aae57600080fd5b50610ab7611e81565b604051610ac49190614498565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef919061434f565b611ea7565b604051610b01919061423a565b60405180910390f35b348015610b1657600080fd5b50610b316004803603810190610b2c9190614569565b611ec5565b005b348015610b3f57600080fd5b50610b48611fb7565b604051610b559190614204565b60405180910390f35b348015610b6a57600080fd5b50610b856004803603810190610b8091906142f6565b611fbd565b604051610b92919061423a565b60405180910390f35b348015610ba757600080fd5b50610bb0611fdc565b604051610bbd919061423a565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be891906142f6565b611fef565b604051610bfa919061423a565b60405180910390f35b348015610c0f57600080fd5b50610c2a6004803603810190610c259190614569565b61200f565b005b348015610c3857600080fd5b50610c536004803603810190610c4e91906144ea565b61214f565b005b348015610c6157600080fd5b50610c6a612282565b604051610c779190614204565b60405180910390f35b348015610c8c57600080fd5b50610ca76004803603810190610ca291906145a9565b612288565b604051610cb49190614204565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf9190614409565b61230f565b005b348015610cf257600080fd5b50610cfb6123b0565b604051610d089190614204565b60405180910390f35b348015610d1d57600080fd5b50610d266123b6565b604051610d339190614204565b60405180910390f35b348015610d4857600080fd5b50610d516123bc565b604051610d5e9190614204565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d8991906142f6565b6123c2565b005b348015610d9c57600080fd5b50610da5612588565b005b348015610db357600080fd5b50610dbc6125f9565b604051610dc99190614204565b60405180910390f35b348015610dde57600080fd5b50610de76125ff565b604051610df49190614204565b60405180910390f35b348015610e0957600080fd5b50610e12612605565b604051610e1f9190614204565b60405180910390f35b610e30612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614635565b60405180910390fd5b60005b8151811015610f50576001600d6000848481518110610ee457610ee3614655565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f48906146b3565b915050610ec2565b5050565b60075481565b601c5481565b600a5481565b600b60159054906101000a900460ff1681565b606060038054610f889061472a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb49061472a565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b600061103f611038612669565b8484612671565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b611075612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90614635565b60405180910390fd5b61110f81600061200f565b50565b6000600254905090565b60195481565b61112a612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090614635565b60405180910390fd5b60018110156111c757600080fd5b806009819055506111d661283a565b50565b60175481565b60185481565b6111ed612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390614635565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112cd848484612896565b61138e846112d9612669565b6113898560405180606001604052806028815260200161524b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061133f612669565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b612671565b600190509392505050565b61dead81565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114776113db612669565b8461147285600160006113ec612669565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260b90919063ffffffff16565b612671565b6001905092915050565b601d5481565b7f000000000000000000000000a7214ef7b12eb7445a78fd5e31ed0dd7120f4dce81565b600b60169054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61151c612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290614635565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115f7612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90614635565b60405180910390fd5b600181101561169457600080fd5b80601d819055506116a361283a565b50565b6116ae612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614635565b60405180910390fd5b600b60159054906101000a900460ff161561176557601054601a81905550601454601b819055505b600b60159054906101000a900460ff1661178157601a54611784565b60005b601081905550600b60159054906101000a900460ff166117a657601b546117a9565b60005b601481905550600b60159054906101000a900460ff1615600b60156101000a81548160ff021916908315150217905550565b60155481565b6117e9612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614635565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b60179054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611936612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5481565b611a94612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614635565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611b4b919061475b565b611b55919061475b565b6011819055506064601654600f611b6c919061478f565b611b769190614818565b6011541115611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614895565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b606060048054611bfe9061472a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2a9061472a565b8015611c775780601f10611c4c57610100808354040283529160200191611c77565b820191906000526020600020905b815481529060010190602001808311611c5a57829003601f168201915b5050505050905090565b611c89612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f90614635565b60405180910390fd5b7f000000000000000000000000a7214ef7b12eb7445a78fd5e31ed0dd7120f4dce73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614927565b60405180910390fd5b611db0828261364a565b5050565b6000611e77611dc1612669565b84611e72856040518060600160405280602581526020016152736025913960016000611deb612669565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b612671565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ebb611eb4612669565b8484612896565b6001905092915050565b611ecd612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614635565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b602080528060005260406000206000915054906101000a900460ff1681565b600b60149054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b612017612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90614635565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612143919061423a565b60405180910390a25050565b612157612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614635565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461220e919061475b565b612218919061475b565b6015819055506064601654601961222f919061478f565b6122399190614818565b601554111561227d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227490614993565b60405180910390fd5b505050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612317612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614635565b60405180910390fd5b8060168190555050565b60085481565b600e5481565b60105481565b6123ca612669565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245090614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bf90614a25565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000479050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156125f5573d6000803e3d6000fd5b5050565b60145481565b60165481565b60095481565b600080828461261a919061475b565b90508381101561265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265690614a91565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d790614b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361274f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274690614bb5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161282d9190614204565b60405180910390a3505050565b6064601d54600a5461284c919061478f565b6128569190614818565b6007819055506103e8600a5461286c9190614818565b6008819055506064600954600a54612884919061478f565b61288e9190614818565b601c81905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fc90614c47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90614cd9565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a185750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90614d45565b60405180910390fd5b60008103612a7057612a6b838360006136eb565b6135e1565b600b60169054906101000a900460ff161561306457612a8d611bbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612afb5750612acb611bbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b345750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b875750600660149054906101000a900460ff16155b1561306357600b60149054906101000a900460ff16612c8157601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c415750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790614db1565b60405180910390fd5b5b42600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503273ffffffffffffffffffffffffffffffffffffffff167fff12548a3ebb8257a10ea929ff01f69da0424c5bb36050f8d6df03452cbd4d0042604051612d0b9190614204565b60405180910390a2602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db65750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e0c5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6e57601c54612e1d836118e6565b82612e28919061475b565b1115612e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6090614e1d565b60405180910390fd5b613062565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f115750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f675750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb657600754811115612fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa890614eaf565b60405180910390fd5b613061565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661306057601c54613013836118e6565b8261301e919061475b565b111561305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305690614e1d565b60405180910390fd5b5b5b5b5b5b600061306f306118e6565b9050600060085482101590508080156130955750600660149054906101000a900460ff16155b80156130ad5750600b60179054906101000a900460ff165b80156131035750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131595750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131af5750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f3576001600660146101000a81548160ff0219169083151502179055506131d761397e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132a95750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132b357600090505b600081156135d157602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331657506000601554115b156133fa5761334460165461333660155488613a7790919063ffffffff16565b613af190919063ffffffff16565b905060155460125482613357919061478f565b6133619190614818565b60176000828254613372919061475b565b925050819055506015546013548261338a919061478f565b6133949190614818565b601860008282546133a5919061475b565b92505081905550600b60159054906101000a900460ff16156133f557601554601454826133d2919061478f565b6133dc9190614818565b601960008282546133ed919061475b565b925050819055505b613536565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561345557506000601154115b156135355761348360165461347560115488613a7790919063ffffffff16565b613af190919063ffffffff16565b9050601154600e5482613496919061478f565b6134a09190614818565b601760008282546134b1919061475b565b92505081905550601154600f54826134c9919061478f565b6134d39190614818565b601860008282546134e4919061475b565b92505081905550600b60159054906101000a900460ff16156135345760115460105482613511919061478f565b61351b9190614818565b6019600082825461352c919061475b565b925050819055505b5b5b60008111156135815761354a8730836136eb565b600060175411156135805761356130601754613b3b565b613569611112565b600a8190555061357761283a565b60006017819055505b5b600060195411156135c2576135b9307f000000000000000000000000a7214ef7b12eb7445a78fd5e31ed0dd7120f4dce6019546136eb565b60006019819055505b80856135ce9190614ecf565b94505b6135dc8787876136eb565b505050505b505050565b600083831115829061362e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362591906142d4565b60405180910390fd5b506000838561363d9190614ecf565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190614c47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036137c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c090614cd9565b60405180910390fd5b6137d4838383613ce8565b61383f81604051806060016040528060268152602001615225602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139719190614204565b60405180910390a3505050565b6000613989306118e6565b9050600080820361399b575050613a75565b60056008546139aa919061478f565b8211156139c35760056008546139c0919061478f565b91505b6139cc82613ced565b600060188190555066b1a2bc2ec50000471115613a7257600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2990614f34565b60006040518083038185875af1925050503d8060008114613a66576040519150601f19603f3d011682016040523d82523d6000602084013e613a6b565b606091505b5050809150505b50505b565b6000808303613a895760009050613aeb565b60008284613a97919061478f565b9050828482613aa69190614818565b14613ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613add90614fbb565b60405180910390fd5b809150505b92915050565b6000613b3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f2a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba19061504d565b60405180910390fd5b613bb682600083613ce8565b613c2181604051806060016040528060228152602001615203602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e69092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c7881600254613f8d90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cdc9190614204565b60405180910390a35050565b505050565b6000600267ffffffffffffffff811115613d0a57613d09614001565b5b604051908082528060200260200182016040528015613d385781602001602082028036833780820191505090505b5090503081600081518110613d5057613d4f614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e199190615082565b81600181518110613e2d57613e2c614655565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e92307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612671565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ef49594939291906151a8565b600060405180830381600087803b158015613f0e57600080fd5b505af1158015613f22573d6000803e3d6000fd5b505050505050565b60008083118290613f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f6891906142d4565b60405180910390fd5b5060008385613f809190614818565b9050809150509392505050565b6000613fcf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135e6565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61403982613ff0565b810181811067ffffffffffffffff8211171561405857614057614001565b5b80604052505050565b600061406b613fd7565b90506140778282614030565b919050565b600067ffffffffffffffff82111561409757614096614001565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140d8826140ad565b9050919050565b6140e8816140cd565b81146140f357600080fd5b50565b600081359050614105816140df565b92915050565b600061411e6141198461407c565b614061565b90508083825260208201905060208402830185811115614141576141406140a8565b5b835b8181101561416a578061415688826140f6565b845260208401935050602081019050614143565b5050509392505050565b600082601f83011261418957614188613feb565b5b813561419984826020860161410b565b91505092915050565b6000602082840312156141b8576141b7613fe1565b5b600082013567ffffffffffffffff8111156141d6576141d5613fe6565b5b6141e284828501614174565b91505092915050565b6000819050919050565b6141fe816141eb565b82525050565b600060208201905061421960008301846141f5565b92915050565b60008115159050919050565b6142348161421f565b82525050565b600060208201905061424f600083018461422b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561428f578082015181840152602081019050614274565b60008484015250505050565b60006142a682614255565b6142b08185614260565b93506142c0818560208601614271565b6142c981613ff0565b840191505092915050565b600060208201905081810360008301526142ee818461429b565b905092915050565b60006020828403121561430c5761430b613fe1565b5b600061431a848285016140f6565b91505092915050565b61432c816141eb565b811461433757600080fd5b50565b60008135905061434981614323565b92915050565b6000806040838503121561436657614365613fe1565b5b6000614374858286016140f6565b92505060206143858582860161433a565b9150509250929050565b6000819050919050565b60006143b46143af6143aa846140ad565b61438f565b6140ad565b9050919050565b60006143c682614399565b9050919050565b60006143d8826143bb565b9050919050565b6143e8816143cd565b82525050565b600060208201905061440360008301846143df565b92915050565b60006020828403121561441f5761441e613fe1565b5b600061442d8482850161433a565b91505092915050565b60008060006060848603121561444f5761444e613fe1565b5b600061445d868287016140f6565b935050602061446e868287016140f6565b925050604061447f8682870161433a565b9150509250925092565b614492816140cd565b82525050565b60006020820190506144ad6000830184614489565b92915050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b60008060006060848603121561450357614502613fe1565b5b60006145118682870161433a565b93505060206145228682870161433a565b92505060406145338682870161433a565b9150509250925092565b6145468161421f565b811461455157600080fd5b50565b6000813590506145638161453d565b92915050565b600080604083850312156145805761457f613fe1565b5b600061458e858286016140f6565b925050602061459f85828601614554565b9150509250929050565b600080604083850312156145c0576145bf613fe1565b5b60006145ce858286016140f6565b92505060206145df858286016140f6565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061461f602083614260565b915061462a826145e9565b602082019050919050565b6000602082019050818103600083015261464e81614612565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146be826141eb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146f0576146ef614684565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061474257607f821691505b602082108103614755576147546146fb565b5b50919050565b6000614766826141eb565b9150614771836141eb565b925082820190508082111561478957614788614684565b5b92915050565b600061479a826141eb565b91506147a5836141eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147de576147dd614684565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614823826141eb565b915061482e836141eb565b92508261483e5761483d6147e9565b5b828204905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061487f601d83614260565b915061488a82614849565b602082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614911603983614260565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061497d601d83614260565b915061498882614947565b602082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602683614260565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a7b601b83614260565b9150614a8682614a45565b602082019050919050565b60006020820190508181036000830152614aaa81614a6e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b0d602483614260565b9150614b1882614ab1565b604082019050919050565b60006020820190508181036000830152614b3c81614b00565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9f602283614260565b9150614baa82614b43565b604082019050919050565b60006020820190508181036000830152614bce81614b92565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c31602583614260565b9150614c3c82614bd5565b604082019050919050565b60006020820190508181036000830152614c6081614c24565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cc3602383614260565b9150614cce82614c67565b604082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656421000000000000000000600082015250565b6000614d2f601783614260565b9150614d3a82614cf9565b602082019050919050565b60006020820190508181036000830152614d5e81614d22565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d9b601683614260565b9150614da682614d65565b602082019050919050565b60006020820190508181036000830152614dca81614d8e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614e07601383614260565b9150614e1282614dd1565b602082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e000000000000602082015250565b6000614e99603a83614260565b9150614ea482614e3d565b604082019050919050565b60006020820190508181036000830152614ec881614e8c565b9050919050565b6000614eda826141eb565b9150614ee5836141eb565b9250828203905081811115614efd57614efc614684565b5b92915050565b600081905092915050565b50565b6000614f1e600083614f03565b9150614f2982614f0e565b600082019050919050565b6000614f3f82614f11565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa5602183614260565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615037602183614260565b915061504282614fdb565b604082019050919050565b600060208201905081810360008301526150668161502a565b9050919050565b60008151905061507c816140df565b92915050565b60006020828403121561509857615097613fe1565b5b60006150a68482850161506d565b91505092915050565b6000819050919050565b60006150d46150cf6150ca846150af565b61438f565b6141eb565b9050919050565b6150e4816150b9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61511f816140cd565b82525050565b60006151318383615116565b60208301905092915050565b6000602082019050919050565b6000615155826150ea565b61515f81856150f5565b935061516a83615106565b8060005b8381101561519b5781516151828882615125565b975061518d8361513d565b92505060018101905061516e565b5085935050505092915050565b600060a0820190506151bd60008301886141f5565b6151ca60208301876150db565b81810360408301526151dc818661514a565b90506151eb6060830185614489565b6151f860808301846141f5565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dd4dc7be93c76db3872661244e4b0cdb2e8ba5ef372839248311aeefaa6ce1c264736f6c63430008100033

Deployed Bytecode Sourcemap

25112:12783:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37621:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25421:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26616:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25544:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25698:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7503:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26839:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9670:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25188:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31527:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8623:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26469:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29492:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26394:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26429:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31212:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10321:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25291:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8465:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25351:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11085:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26652:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25246:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25744:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32212:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31642:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29313:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28876:427;;;;;;;;;;;;;:::i;:::-;;26267:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37798:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25784:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8794:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21964:148;;;;;;;;;;;;;:::i;:::-;;25977:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30393:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21322:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26182:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7722:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31764:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11806:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25574:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9134:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29892:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26145:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27061:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25659:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25896:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30797:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26060:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9372:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30123:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25467:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26019:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22267:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30226:159;;;;;;;;;;;;;:::i;:::-;;26225:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26356:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25507:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37621:169;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37697:9:::1;37692:91;37716:5;:12;37712:1;:16;37692:91;;;37767:4;37750;:14;37755:5;37761:1;37755:8;;;;;;;;:::i;:::-;;;;;;;;37750:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37730:3;;;;;:::i;:::-;;;;37692:91;;;;37621:169:::0;:::o;25421:39::-;;;;:::o;26616:29::-;;;;:::o;25544:21::-;;;;:::o;25698:37::-;;;;;;;;;;;;;:::o;7503:100::-;7557:13;7590:5;7583:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7503:100;:::o;26839:68::-;;;;;;;;;;;;;;;;;;;;;;:::o;9670:169::-;9753:4;9770:39;9779:12;:10;:12::i;:::-;9793:7;9802:6;9770:8;:39::i;:::-;9827:4;9820:11;;9670:169;;;;:::o;25188:51::-;;;:::o;31527:107::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31595:31:::1;31611:7;31620:5;31595:15;:31::i;:::-;31527:107:::0;:::o;8623:108::-;8684:7;8711:12;;8704:19;;8623:108;:::o;26469:33::-;;;;:::o;29492:153::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29581:1:::1;29571:6;:11;;29563:20;;;::::0;::::1;;29606:6;29594:9;:18;;;;29623:14;:12;:14::i;:::-;29492:153:::0;:::o;26394:28::-;;;;:::o;26429:33::-;;;;:::o;31212:117::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31312:9:::1;31293:16;;:28;;;;;;;;;;;;;;;;;;31212:117:::0;:::o;10321:355::-;10461:4;10478:36;10488:6;10496:9;10507:6;10478:9;:36::i;:::-;10525:121;10534:6;10542:12;:10;:12::i;:::-;10556:89;10594:6;10556:89;;;;;;;;;;;;;;;;;:11;:19;10568:6;10556:19;;;;;;;;;;;;;;;:33;10576:12;:10;:12::i;:::-;10556:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10525:8;:121::i;:::-;10664:4;10657:11;;10321:355;;;;;:::o;25291:53::-;25337:6;25291:53;:::o;8465:93::-;8523:5;8548:2;8541:9;;8465:93;:::o;25351:31::-;;;;;;;;;;;;;:::o;11085:218::-;11173:4;11190:83;11199:12;:10;:12::i;:::-;11213:7;11222:50;11261:10;11222:11;:25;11234:12;:10;:12::i;:::-;11222:25;;;;;;;;;;;;;;;:34;11248:7;11222:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11190:8;:83::i;:::-;11291:4;11284:11;;11085:218;;;;:::o;26652:37::-;;;;:::o;25246:38::-;;;:::o;25744:33::-;;;;;;;;;;;;;:::o;32212:125::-;32277:4;32301:19;:28;32321:7;32301:28;;;;;;;;;;;;;;;;;;;;;;;;;32294:35;;32212:125;;;:::o;31642:114::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31738:10:::1;31719:16;;:29;;;;;;;;;;;;;;;;;;31642:114:::0;:::o;29313:171::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29411:1:::1;29401:6;:11;;29393:20;;;::::0;::::1;;29445:6;29424:18;:27;;;;29462:14;:12;:14::i;:::-;29313:171:::0;:::o;28876:427::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28947:18:::1;;;;;;;;;;;28943:144;;;29005:15;;28978:24;:42;;;;29059:16;;29031:25;:44;;;;28943:144;29115:18;;;;;;;;;;;:49;;29140:24;;29115:49;;;29136:1;29115:49;29097:15;:67;;;;29194:18;;;;;;;;;;;:50;;29219:25;;29194:50;;;29215:1;29194:50;29175:16;:69;;;;29277:18;;;;;;;;;;;29276:19;29255:18;;:40;;;;;;;;;;;;;;;;;;28876:427::o:0;26267:80::-;;;;:::o;37798:92::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37877:5:::1;37862:4;:12;37867:6;37862:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;37798:92:::0;:::o;25784:30::-;;;;;;;;;;;;;:::o;8794:127::-;8868:7;8895:9;:18;8905:7;8895:18;;;;;;;;;;;;;;;;8888:25;;8794:127;;;:::o;21964:148::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22071:1:::1;22034:40;;22055:6;;;;;;;;;;;22034:40;;;;;;;;;;;;22102:1;22085:6;;:19;;;;;;;;;;;;;;;;;;21964:148::o:0;25977:35::-;;;;:::o;30393:396::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30526:8:::1;30513:10;:21;;;;30563:13;30545:15;:31;;;;30605:16;30587:15;:34;;;;30678:15;;30660;;30647:10;;:28;;;;:::i;:::-;:46;;;;:::i;:::-;30632:12;:61;;;;30744:3;30733:8;;30728:2;:13;;;;:::i;:::-;:19;;;;:::i;:::-;30712:12;;:35;;30704:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30393:396:::0;;;:::o;21322:79::-;21360:7;21387:6;;;;;;;;;;;21380:13;;21322:79;:::o;26182:36::-;;;;:::o;7722:104::-;7778:13;7811:7;7804:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7722:104;:::o;31764:244::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31871:13:::1;31863:21;;:4;:21;;::::0;31855:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31959:41;31988:4;31994:5;31959:28;:41::i;:::-;31764:244:::0;;:::o;11806:269::-;11899:4;11916:129;11925:12;:10;:12::i;:::-;11939:7;11948:96;11987:15;11948:96;;;;;;;;;;;;;;;;;:11;:25;11960:12;:10;:12::i;:::-;11948:25;;;;;;;;;;;;;;;:34;11974:7;11948:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11916:8;:129::i;:::-;12063:4;12056:11;;11806:269;;;;:::o;25574:76::-;;;;;;;;;;;;;:::o;9134:175::-;9220:4;9237:42;9247:12;:10;:12::i;:::-;9261:9;9272:6;9237:9;:42::i;:::-;9297:4;9290:11;;9134:175;;;;:::o;29892:152::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30032:4:::1;29986:35;:43;30022:6;29986:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;29892:152:::0;;:::o;26145:30::-;;;;:::o;27061:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25659:32::-;;;;;;;;;;;;;:::o;25896:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;31337:182::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:8:::1;31422:19;:28;31442:7;31422:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31493:7;31477:34;;;31502:8;31477:34;;;;;;:::i;:::-;;;;;;;;31337:182:::0;;:::o;30797:407::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30933:8:::1;30919:11;:22;;;;30971:13;30952:16;:32;;;;31014:17;30995:16;:36;;;;31091:16;;31072;;31058:11;;:30;;;;:::i;:::-;:49;;;;:::i;:::-;31042:13;:65;;;;31159:3;31148:8;;31143:2;:13;;;;:::i;:::-;:19;;;;:::i;:::-;31126:13;;:36;;31118:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;30797:407:::0;;;:::o;26060:76::-;;;;:::o;9372:151::-;9461:7;9488:11;:18;9500:5;9488:18;;;;;;;;;;;;;;;:27;9507:7;9488:27;;;;;;;;;;;;;;;;9481:34;;9372:151;;;;:::o;30123:95::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30204:6:::1;30193:8;:17;;;;30123:95:::0;:::o;25467:33::-;;;;:::o;25941:29::-;;;;:::o;26019:34::-;;;;:::o;22267:244::-;21544:12;:10;:12::i;:::-;21534:22;;:6;;;;;;;;;;;:22;;;21526:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22376:1:::1;22356:22;;:8;:22;;::::0;22348:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22466:8;22437:38;;22458:6;;;;;;;;;;;22437:38;;;;;;;;;;;;22495:8;22486:6;;:17;;;;;;;;;;;;;;;;;;22267:244:::0;:::o;30226:159::-;30268:23;30294:21;30268:47;;30334:16;;;;;;;;;;;30326:34;;:51;30361:15;30326:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30257:128;30226:159::o;26225:35::-;;;;:::o;26356:29::-;;;;:::o;25507:28::-;;;;:::o;16370:181::-;16428:7;16448:9;16464:1;16460;:5;;;;:::i;:::-;16448:17;;16489:1;16484;:6;;16476:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16542:1;16535:8;;;16370:181;;;;:::o;139:98::-;192:7;219:10;212:17;;139:98;:::o;14992:380::-;15145:1;15128:19;;:5;:19;;;15120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15226:1;15207:21;;:7;:21;;;15199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15310:6;15280:11;:18;15292:5;15280:18;;;;;;;;;;;;;;;:27;15299:7;15280:27;;;;;;;;;;;;;;;:36;;;;15348:7;15332:32;;15341:5;15332:32;;;15357:6;15332:32;;;;;;:::i;:::-;;;;;;;;14992:380;;;:::o;29653:229::-;29753:3;29732:18;;29723:6;;:27;;;;:::i;:::-;:33;;;;:::i;:::-;29696:24;:60;;;;29797:4;29788:6;;:13;;;;:::i;:::-;29767:18;:34;;;;29871:3;29859:9;;29850:6;;:18;;;;:::i;:::-;:24;;;;:::i;:::-;29833:14;:41;;;;29653:229::o;32345:4149::-;32493:1;32477:18;;:4;:18;;;32469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32570:1;32556:16;;:2;:16;;;32548:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32632:4;:10;32637:4;32632:10;;;;;;;;;;;;;;;;;;;;;;;;;32631:11;:24;;;;;32647:4;:8;32652:2;32647:8;;;;;;;;;;;;;;;;;;;;;;;;;32646:9;32631:24;32623:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32710:1;32700:6;:11;32697:92;;32728:28;32744:4;32750:2;32754:1;32728:15;:28::i;:::-;32771:7;;32697:92;32804:14;;;;;;;;;;;32801:1464;;;32864:7;:5;:7::i;:::-;32856:15;;:4;:15;;;;:49;;;;;32898:7;:5;:7::i;:::-;32892:13;;:2;:13;;;;32856:49;:86;;;;;32940:1;32926:16;;:2;:16;;;;32856:86;:128;;;;;32977:6;32963:21;;:2;:21;;;;32856:128;:158;;;;;33006:8;;;;;;;;;;;33005:9;32856:158;32834:1420;;;33052:13;;;;;;;;;;;33048:148;;33097:19;:25;33117:4;33097:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33126:19;:23;33146:2;33126:23;;;;;;;;;;;;;;;;;;;;;;;;;33097:52;33089:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33048:148;33353:15;33311:28;:39;33340:9;33311:39;;;;;;;;;;;;;;;:57;;;;33426:9;33392:61;;;33437:15;33392:61;;;;;;:::i;:::-;;;;;;;;33506:25;:31;33532:4;33506:31;;;;;;;;;;;;;;;;;;;;;;;;;:75;;;;;33542:35;:39;33578:2;33542:39;;;;;;;;;;;;;;;;;;;;;;;;;33541:40;33506:75;:109;;;;;33586:25;:29;33612:2;33586:29;;;;;;;;;;;;;;;;;;;;;;;;;33585:30;33506:109;33502:737;;;33677:14;;33660:13;33670:2;33660:9;:13::i;:::-;33651:6;:22;;;;:::i;:::-;:40;;33643:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33502:737;;;33793:25;:29;33819:2;33793:29;;;;;;;;;;;;;;;;;;;;;;;;;:75;;;;;33827:35;:41;33863:4;33827:41;;;;;;;;;;;;;;;;;;;;;;;;;33826:42;33793:75;:111;;;;;33873:25;:31;33899:4;33873:31;;;;;;;;;;;;;;;;;;;;;;;;;33872:32;33793:111;33789:450;;;33950:24;;33940:6;:34;;33932:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;33789:450;;;34084:35;:39;34120:2;34084:39;;;;;;;;;;;;;;;;;;;;;;;;;34080:159;;34181:14;;34164:13;34174:2;34164:9;:13::i;:::-;34155:6;:22;;;;:::i;:::-;:40;;34147:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34080:159;33789:450;33502:737;32834:1420;32801:1464;34275:28;34306:24;34324:4;34306:9;:24::i;:::-;34275:55;;34343:12;34382:18;;34358:20;:42;;34343:57;;34430:7;:33;;;;;34455:8;;;;;;;;;;;34454:9;34430:33;:61;;;;;34480:11;;;;;;;;;;;34430:61;:110;;;;;34509:25;:31;34535:4;34509:31;;;;;;;;;;;;;;;;;;;;;;;;;34508:32;34430:110;:153;;;;;34558:19;:25;34578:4;34558:25;;;;;;;;;;;;;;;;;;;;;;;;;34557:26;34430:153;:194;;;;;34601:19;:23;34621:2;34601:23;;;;;;;;;;;;;;;;;;;;;;;;;34600:24;34430:194;34413:325;;;34662:4;34651:8;;:15;;;;;;;;;;;;;;;;;;34683:10;:8;:10::i;:::-;34721:5;34710:8;;:16;;;;;;;;;;;;;;;;;;34413:325;34750:12;34766:8;;;;;;;;;;;34765:9;34750:24;;34790:19;:25;34810:4;34790:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34819:19;:23;34839:2;34819:23;;;;;;;;;;;;;;;;;;;;;;;;;34790:52;34787:99;;;34869:5;34859:15;;34787:99;34898:12;34930:7;34927:1512;;;34981:25;:29;35007:2;34981:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35030:1;35014:13;;:17;34981:50;34977:896;;;35058:39;35088:8;;35058:25;35069:13;;35058:6;:10;;:25;;;;:::i;:::-;:29;;:39;;;;:::i;:::-;35051:46;;35154:13;;35140:11;;35133:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;35116:13;;:51;;;;;;;:::i;:::-;;;;;;;;35234:13;;35215:16;;35208:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35186:18;;:61;;;;;;;:::i;:::-;;;;;;;;35270:18;;;;;;;;;;;35266:128;;;35361:13;;35342:16;;35335:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35313:18;;:61;;;;;;;:::i;:::-;;;;;;;;35266:128;34977:896;;;35456:25;:31;35482:4;35456:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;35506:1;35491:12;;:16;35456:51;35453:420;;;35532:38;35561:8;;35532:24;35543:12;;35532:6;:10;;:24;;;;:::i;:::-;:28;;:38;;;;:::i;:::-;35525:45;;35623:12;;35610:10;;35603:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;35586:13;;:49;;;;;;;:::i;:::-;;;;;;;;35701:12;;35683:15;;35676:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;35654:18;;:59;;;;;;;:::i;:::-;;;;;;;;35736:18;;;;;;;;;;;35732:126;;;35826:12;;35808:15;;35801:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;35779:18;;:59;;;;;;;:::i;:::-;;;;;;;;35732:126;35453:420;34977:896;35899:1;35892:4;:8;35889:330;;;35920:42;35936:4;35950;35957;35920:15;:42::i;:::-;36001:1;35985:13;;:17;35981:223;;;36027:35;36041:4;36048:13;;36027:5;:35::i;:::-;36094:13;:11;:13::i;:::-;36085:6;:22;;;;36130:14;:12;:14::i;:::-;36183:1;36167:13;:17;;;;35981:223;35889:330;36258:1;36237:18;;:22;36233:169;;;36280:65;36304:4;36311:13;36326:18;;36280:15;:65::i;:::-;36385:1;36364:18;:22;;;;36233:169;36423:4;36413:14;;;;;:::i;:::-;;;34927:1512;36451:33;36467:4;36473:2;36477:6;36451:15;:33::i;:::-;32458:4036;;;;32345:4149;;;;:::o;17273:192::-;17359:7;17392:1;17387;:6;;17395:12;17379:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17419:9;17435:1;17431;:5;;;;:::i;:::-;17419:17;;17456:1;17449:8;;;17273:192;;;;;:::o;32016:188::-;32133:5;32099:25;:31;32125:4;32099:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32190:5;32156:40;;32184:4;32156:40;;;;;;;;;;;;32016:188;;:::o;12565:573::-;12723:1;12705:20;;:6;:20;;;12697:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12807:1;12786:23;;:9;:23;;;12778:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12862:47;12883:6;12891:9;12902:6;12862:20;:47::i;:::-;12942:71;12964:6;12942:71;;;;;;;;;;;;;;;;;:9;:17;12952:6;12942:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12922:9;:17;12932:6;12922:17;;;;;;;;;;;;;;;:91;;;;13047:32;13072:6;13047:9;:20;13057:9;13047:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13024:9;:20;13034:9;13024:20;;;;;;;;;;;;;;;:55;;;;13112:9;13095:35;;13104:6;13095:35;;;13123:6;13095:35;;;;;;:::i;:::-;;;;;;;;12565:573;;;:::o;37101:512::-;37140:23;37166:24;37184:4;37166:9;:24::i;:::-;37140:50;;37201:12;37248:1;37229:15;:20;37226:34;;37252:7;;;;37226:34;37314:1;37293:18;;:22;;;;:::i;:::-;37275:15;:40;37272:109;;;37368:1;37347:18;;:22;;;;:::i;:::-;37329:40;;37272:109;37393:33;37410:15;37393:16;:33::i;:::-;37460:1;37439:18;:22;;;;37500:17;37476:21;:41;37472:133;;;37549:16;;;;;;;;;;;37541:30;;37579:21;37541:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37528:77;;;;;37472:133;37129:484;;37101:512;:::o;17724:471::-;17782:7;18032:1;18027;:6;18023:47;;18057:1;18050:8;;;;18023:47;18082:9;18098:1;18094;:5;;;;:::i;:::-;18082:17;;18127:1;18122;18118;:5;;;;:::i;:::-;:10;18110:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18186:1;18179:8;;;17724:471;;;;;:::o;18671:132::-;18729:7;18756:39;18760:1;18763;18756:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18749:46;;18671:132;;;;:::o;14136:418::-;14239:1;14220:21;;:7;:21;;;14212:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14292:49;14313:7;14330:1;14334:6;14292:20;:49::i;:::-;14375:68;14398:6;14375:68;;;;;;;;;;;;;;;;;:9;:18;14385:7;14375:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14354:9;:18;14364:7;14354:18;;;;;;;;;;;;;;;:89;;;;14469:24;14486:6;14469:12;;:16;;:24;;;;:::i;:::-;14454:12;:39;;;;14535:1;14509:37;;14518:7;14509:37;;;14539:6;14509:37;;;;;;:::i;:::-;;;;;;;;14136:418;;:::o;15975:125::-;;;;:::o;36502:591::-;36628:21;36666:1;36652:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36628:40;;36697:4;36679;36684:1;36679:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36723:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36713:4;36718:1;36713:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36758:62;36775:4;36790:15;36808:11;36758:8;:62::i;:::-;36859:15;:66;;;36940:11;36966:1;37010:4;37037;37057:15;36859:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36557:536;36502:591;:::o;19299:278::-;19385:7;19417:1;19413;:5;19420:12;19405:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19444:9;19460:1;19456;:5;;;;:::i;:::-;19444:17;;19568:1;19561:8;;;19299:278;;;;;:::o;16834:136::-;16892:7;16919:43;16923:1;16926;16919:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16912:50;;16834:136;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:77::-;3828:7;3857:5;3846:16;;3791:77;;;:::o;3874:118::-;3961:24;3979:5;3961:24;:::i;:::-;3956:3;3949:37;3874:118;;:::o;3998:222::-;4091:4;4129:2;4118:9;4114:18;4106:26;;4142:71;4210:1;4199:9;4195:17;4186:6;4142:71;:::i;:::-;3998:222;;;;:::o;4226:90::-;4260:7;4303:5;4296:13;4289:21;4278:32;;4226:90;;;:::o;4322:109::-;4403:21;4418:5;4403:21;:::i;:::-;4398:3;4391:34;4322:109;;:::o;4437:210::-;4524:4;4562:2;4551:9;4547:18;4539:26;;4575:65;4637:1;4626:9;4622:17;4613:6;4575:65;:::i;:::-;4437:210;;;;:::o;4653:99::-;4705:6;4739:5;4733:12;4723:22;;4653:99;;;:::o;4758:169::-;4842:11;4876:6;4871:3;4864:19;4916:4;4911:3;4907:14;4892:29;;4758:169;;;;:::o;4933:246::-;5014:1;5024:113;5038:6;5035:1;5032:13;5024:113;;;5123:1;5118:3;5114:11;5108:18;5104:1;5099:3;5095:11;5088:39;5060:2;5057:1;5053:10;5048:15;;5024:113;;;5171:1;5162:6;5157:3;5153:16;5146:27;4995:184;4933:246;;;:::o;5185:377::-;5273:3;5301:39;5334:5;5301:39;:::i;:::-;5356:71;5420:6;5415:3;5356:71;:::i;:::-;5349:78;;5436:65;5494:6;5489:3;5482:4;5475:5;5471:16;5436:65;:::i;:::-;5526:29;5548:6;5526:29;:::i;:::-;5521:3;5517:39;5510:46;;5277:285;5185:377;;;;:::o;5568:313::-;5681:4;5719:2;5708:9;5704:18;5696:26;;5768:9;5762:4;5758:20;5754:1;5743:9;5739:17;5732:47;5796:78;5869:4;5860:6;5796:78;:::i;:::-;5788:86;;5568:313;;;;:::o;5887:329::-;5946:6;5995:2;5983:9;5974:7;5970:23;5966:32;5963:119;;;6001:79;;:::i;:::-;5963:119;6121:1;6146:53;6191:7;6182:6;6171:9;6167:22;6146:53;:::i;:::-;6136:63;;6092:117;5887:329;;;;:::o;6222:122::-;6295:24;6313:5;6295:24;:::i;:::-;6288:5;6285:35;6275:63;;6334:1;6331;6324:12;6275:63;6222:122;:::o;6350:139::-;6396:5;6434:6;6421:20;6412:29;;6450:33;6477:5;6450:33;:::i;:::-;6350:139;;;;:::o;6495:474::-;6563:6;6571;6620:2;6608:9;6599:7;6595:23;6591:32;6588:119;;;6626:79;;:::i;:::-;6588:119;6746:1;6771:53;6816:7;6807:6;6796:9;6792:22;6771:53;:::i;:::-;6761:63;;6717:117;6873:2;6899:53;6944:7;6935:6;6924:9;6920:22;6899:53;:::i;:::-;6889:63;;6844:118;6495:474;;;;;:::o;6975:60::-;7003:3;7024:5;7017:12;;6975:60;;;:::o;7041:142::-;7091:9;7124:53;7142:34;7151:24;7169:5;7151:24;:::i;:::-;7142:34;:::i;:::-;7124:53;:::i;:::-;7111:66;;7041:142;;;:::o;7189:126::-;7239:9;7272:37;7303:5;7272:37;:::i;:::-;7259:50;;7189:126;;;:::o;7321:153::-;7398:9;7431:37;7462:5;7431:37;:::i;:::-;7418:50;;7321:153;;;:::o;7480:185::-;7594:64;7652:5;7594:64;:::i;:::-;7589:3;7582:77;7480:185;;:::o;7671:276::-;7791:4;7829:2;7818:9;7814:18;7806:26;;7842:98;7937:1;7926:9;7922:17;7913:6;7842:98;:::i;:::-;7671:276;;;;:::o;7953:329::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:53;8257:7;8248:6;8237:9;8233:22;8212:53;:::i;:::-;8202:63;;8158:117;7953:329;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:118::-;9000:24;9018:5;9000:24;:::i;:::-;8995:3;8988:37;8913:118;;:::o;9037:222::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9181:71;9249:1;9238:9;9234:17;9225:6;9181:71;:::i;:::-;9037:222;;;;:::o;9265:86::-;9300:7;9340:4;9333:5;9329:16;9318:27;;9265:86;;;:::o;9357:112::-;9440:22;9456:5;9440:22;:::i;:::-;9435:3;9428:35;9357:112;;:::o;9475:214::-;9564:4;9602:2;9591:9;9587:18;9579:26;;9615:67;9679:1;9668:9;9664:17;9655:6;9615:67;:::i;:::-;9475:214;;;;:::o;9695:619::-;9772:6;9780;9788;9837:2;9825:9;9816:7;9812:23;9808:32;9805:119;;;9843:79;;:::i;:::-;9805:119;9963:1;9988:53;10033:7;10024:6;10013:9;10009:22;9988:53;:::i;:::-;9978:63;;9934:117;10090:2;10116:53;10161:7;10152:6;10141:9;10137:22;10116:53;:::i;:::-;10106:63;;10061:118;10218:2;10244:53;10289:7;10280:6;10269:9;10265:22;10244:53;:::i;:::-;10234:63;;10189:118;9695:619;;;;;:::o;10320:116::-;10390:21;10405:5;10390:21;:::i;:::-;10383:5;10380:32;10370:60;;10426:1;10423;10416:12;10370:60;10320:116;:::o;10442:133::-;10485:5;10523:6;10510:20;10501:29;;10539:30;10563:5;10539:30;:::i;:::-;10442:133;;;;:::o;10581:468::-;10646:6;10654;10703:2;10691:9;10682:7;10678:23;10674:32;10671:119;;;10709:79;;:::i;:::-;10671:119;10829:1;10854:53;10899:7;10890:6;10879:9;10875:22;10854:53;:::i;:::-;10844:63;;10800:117;10956:2;10982:50;11024:7;11015:6;11004:9;11000:22;10982:50;:::i;:::-;10972:60;;10927:115;10581:468;;;;;:::o;11055:474::-;11123:6;11131;11180:2;11168:9;11159:7;11155:23;11151:32;11148:119;;;11186:79;;:::i;:::-;11148:119;11306:1;11331:53;11376:7;11367:6;11356:9;11352:22;11331:53;:::i;:::-;11321:63;;11277:117;11433:2;11459:53;11504:7;11495:6;11484:9;11480:22;11459:53;:::i;:::-;11449:63;;11404:118;11055:474;;;;;:::o;11535:182::-;11675:34;11671:1;11663:6;11659:14;11652:58;11535:182;:::o;11723:366::-;11865:3;11886:67;11950:2;11945:3;11886:67;:::i;:::-;11879:74;;11962:93;12051:3;11962:93;:::i;:::-;12080:2;12075:3;12071:12;12064:19;;11723:366;;;:::o;12095:419::-;12261:4;12299:2;12288:9;12284:18;12276:26;;12348:9;12342:4;12338:20;12334:1;12323:9;12319:17;12312:47;12376:131;12502:4;12376:131;:::i;:::-;12368:139;;12095:419;;;:::o;12520:180::-;12568:77;12565:1;12558:88;12665:4;12662:1;12655:15;12689:4;12686:1;12679:15;12706:180;12754:77;12751:1;12744:88;12851:4;12848:1;12841:15;12875:4;12872:1;12865:15;12892:233;12931:3;12954:24;12972:5;12954:24;:::i;:::-;12945:33;;13000:66;12993:5;12990:77;12987:103;;13070:18;;:::i;:::-;12987:103;13117:1;13110:5;13106:13;13099:20;;12892:233;;;:::o;13131:180::-;13179:77;13176:1;13169:88;13276:4;13273:1;13266:15;13300:4;13297:1;13290:15;13317:320;13361:6;13398:1;13392:4;13388:12;13378:22;;13445:1;13439:4;13435:12;13466:18;13456:81;;13522:4;13514:6;13510:17;13500:27;;13456:81;13584:2;13576:6;13573:14;13553:18;13550:38;13547:84;;13603:18;;:::i;:::-;13547:84;13368:269;13317:320;;;:::o;13643:191::-;13683:3;13702:20;13720:1;13702:20;:::i;:::-;13697:25;;13736:20;13754:1;13736:20;:::i;:::-;13731:25;;13779:1;13776;13772:9;13765:16;;13800:3;13797:1;13794:10;13791:36;;;13807:18;;:::i;:::-;13791:36;13643:191;;;;:::o;13840:348::-;13880:7;13903:20;13921:1;13903:20;:::i;:::-;13898:25;;13937:20;13955:1;13937:20;:::i;:::-;13932:25;;14125:1;14057:66;14053:74;14050:1;14047:81;14042:1;14035:9;14028:17;14024:105;14021:131;;;14132:18;;:::i;:::-;14021:131;14180:1;14177;14173:9;14162:20;;13840:348;;;;:::o;14194:180::-;14242:77;14239:1;14232:88;14339:4;14336:1;14329:15;14363:4;14360:1;14353:15;14380:185;14420:1;14437:20;14455:1;14437:20;:::i;:::-;14432:25;;14471:20;14489:1;14471:20;:::i;:::-;14466:25;;14510:1;14500:35;;14515:18;;:::i;:::-;14500:35;14557:1;14554;14550:9;14545:14;;14380:185;;;;:::o;14571:179::-;14711:31;14707:1;14699:6;14695:14;14688:55;14571:179;:::o;14756:366::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14756:366;;;:::o;15128:419::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15381:9;15375:4;15371:20;15367:1;15356:9;15352:17;15345:47;15409:131;15535:4;15409:131;:::i;:::-;15401:139;;15128:419;;;:::o;15553:244::-;15693:34;15689:1;15681:6;15677:14;15670:58;15762:27;15757:2;15749:6;15745:15;15738:52;15553:244;:::o;15803:366::-;15945:3;15966:67;16030:2;16025:3;15966:67;:::i;:::-;15959:74;;16042:93;16131:3;16042:93;:::i;:::-;16160:2;16155:3;16151:12;16144:19;;15803:366;;;:::o;16175:419::-;16341:4;16379:2;16368:9;16364:18;16356:26;;16428:9;16422:4;16418:20;16414:1;16403:9;16399:17;16392:47;16456:131;16582:4;16456:131;:::i;:::-;16448:139;;16175:419;;;:::o;16600:179::-;16740:31;16736:1;16728:6;16724:14;16717:55;16600:179;:::o;16785:366::-;16927:3;16948:67;17012:2;17007:3;16948:67;:::i;:::-;16941:74;;17024:93;17113:3;17024:93;:::i;:::-;17142:2;17137:3;17133:12;17126:19;;16785:366;;;:::o;17157:419::-;17323:4;17361:2;17350:9;17346:18;17338:26;;17410:9;17404:4;17400:20;17396:1;17385:9;17381:17;17374:47;17438:131;17564:4;17438:131;:::i;:::-;17430:139;;17157:419;;;:::o;17582:225::-;17722:34;17718:1;17710:6;17706:14;17699:58;17791:8;17786:2;17778:6;17774:15;17767:33;17582:225;:::o;17813:366::-;17955:3;17976:67;18040:2;18035:3;17976:67;:::i;:::-;17969:74;;18052:93;18141:3;18052:93;:::i;:::-;18170:2;18165:3;18161:12;18154:19;;17813:366;;;:::o;18185:419::-;18351:4;18389:2;18378:9;18374:18;18366:26;;18438:9;18432:4;18428:20;18424:1;18413:9;18409:17;18402:47;18466:131;18592:4;18466:131;:::i;:::-;18458:139;;18185:419;;;:::o;18610:177::-;18750:29;18746:1;18738:6;18734:14;18727:53;18610:177;:::o;18793:366::-;18935:3;18956:67;19020:2;19015:3;18956:67;:::i;:::-;18949:74;;19032:93;19121:3;19032:93;:::i;:::-;19150:2;19145:3;19141:12;19134:19;;18793:366;;;:::o;19165:419::-;19331:4;19369:2;19358:9;19354:18;19346:26;;19418:9;19412:4;19408:20;19404:1;19393:9;19389:17;19382:47;19446:131;19572:4;19446:131;:::i;:::-;19438:139;;19165:419;;;:::o;19590:223::-;19730:34;19726:1;19718:6;19714:14;19707:58;19799:6;19794:2;19786:6;19782:15;19775:31;19590:223;:::o;19819:366::-;19961:3;19982:67;20046:2;20041:3;19982:67;:::i;:::-;19975:74;;20058:93;20147:3;20058:93;:::i;:::-;20176:2;20171:3;20167:12;20160:19;;19819:366;;;:::o;20191:419::-;20357:4;20395:2;20384:9;20380:18;20372:26;;20444:9;20438:4;20434:20;20430:1;20419:9;20415:17;20408:47;20472:131;20598:4;20472:131;:::i;:::-;20464:139;;20191:419;;;:::o;20616:221::-;20756:34;20752:1;20744:6;20740:14;20733:58;20825:4;20820:2;20812:6;20808:15;20801:29;20616:221;:::o;20843:366::-;20985:3;21006:67;21070:2;21065:3;21006:67;:::i;:::-;20999:74;;21082:93;21171:3;21082:93;:::i;:::-;21200:2;21195:3;21191:12;21184:19;;20843:366;;;:::o;21215:419::-;21381:4;21419:2;21408:9;21404:18;21396:26;;21468:9;21462:4;21458:20;21454:1;21443:9;21439:17;21432:47;21496:131;21622:4;21496:131;:::i;:::-;21488:139;;21215:419;;;:::o;21640:224::-;21780:34;21776:1;21768:6;21764:14;21757:58;21849:7;21844:2;21836:6;21832:15;21825:32;21640:224;:::o;21870:366::-;22012:3;22033:67;22097:2;22092:3;22033:67;:::i;:::-;22026:74;;22109:93;22198:3;22109:93;:::i;:::-;22227:2;22222:3;22218:12;22211:19;;21870:366;;;:::o;22242:419::-;22408:4;22446:2;22435:9;22431:18;22423:26;;22495:9;22489:4;22485:20;22481:1;22470:9;22466:17;22459:47;22523:131;22649:4;22523:131;:::i;:::-;22515:139;;22242:419;;;:::o;22667:222::-;22807:34;22803:1;22795:6;22791:14;22784:58;22876:5;22871:2;22863:6;22859:15;22852:30;22667:222;:::o;22895:366::-;23037:3;23058:67;23122:2;23117:3;23058:67;:::i;:::-;23051:74;;23134:93;23223:3;23134:93;:::i;:::-;23252:2;23247:3;23243:12;23236:19;;22895:366;;;:::o;23267:419::-;23433:4;23471:2;23460:9;23456:18;23448:26;;23520:9;23514:4;23510:20;23506:1;23495:9;23491:17;23484:47;23548:131;23674:4;23548:131;:::i;:::-;23540:139;;23267:419;;;:::o;23692:173::-;23832:25;23828:1;23820:6;23816:14;23809:49;23692:173;:::o;23871:366::-;24013:3;24034:67;24098:2;24093:3;24034:67;:::i;:::-;24027:74;;24110:93;24199:3;24110:93;:::i;:::-;24228:2;24223:3;24219:12;24212:19;;23871:366;;;:::o;24243:419::-;24409:4;24447:2;24436:9;24432:18;24424:26;;24496:9;24490:4;24486:20;24482:1;24471:9;24467:17;24460:47;24524:131;24650:4;24524:131;:::i;:::-;24516:139;;24243:419;;;:::o;24668:172::-;24808:24;24804:1;24796:6;24792:14;24785:48;24668:172;:::o;24846:366::-;24988:3;25009:67;25073:2;25068:3;25009:67;:::i;:::-;25002:74;;25085:93;25174:3;25085:93;:::i;:::-;25203:2;25198:3;25194:12;25187:19;;24846:366;;;:::o;25218:419::-;25384:4;25422:2;25411:9;25407:18;25399:26;;25471:9;25465:4;25461:20;25457:1;25446:9;25442:17;25435:47;25499:131;25625:4;25499:131;:::i;:::-;25491:139;;25218:419;;;:::o;25643:169::-;25783:21;25779:1;25771:6;25767:14;25760:45;25643:169;:::o;25818:366::-;25960:3;25981:67;26045:2;26040:3;25981:67;:::i;:::-;25974:74;;26057:93;26146:3;26057:93;:::i;:::-;26175:2;26170:3;26166:12;26159:19;;25818:366;;;:::o;26190:419::-;26356:4;26394:2;26383:9;26379:18;26371:26;;26443:9;26437:4;26433:20;26429:1;26418:9;26414:17;26407:47;26471:131;26597:4;26471:131;:::i;:::-;26463:139;;26190:419;;;:::o;26615:245::-;26755:34;26751:1;26743:6;26739:14;26732:58;26824:28;26819:2;26811:6;26807:15;26800:53;26615:245;:::o;26866:366::-;27008:3;27029:67;27093:2;27088:3;27029:67;:::i;:::-;27022:74;;27105:93;27194:3;27105:93;:::i;:::-;27223:2;27218:3;27214:12;27207:19;;26866:366;;;:::o;27238:419::-;27404:4;27442:2;27431:9;27427:18;27419:26;;27491:9;27485:4;27481:20;27477:1;27466:9;27462:17;27455:47;27519:131;27645:4;27519:131;:::i;:::-;27511:139;;27238:419;;;:::o;27663:194::-;27703:4;27723:20;27741:1;27723:20;:::i;:::-;27718:25;;27757:20;27775:1;27757:20;:::i;:::-;27752:25;;27801:1;27798;27794:9;27786:17;;27825:1;27819:4;27816:11;27813:37;;;27830:18;;:::i;:::-;27813:37;27663:194;;;;:::o;27863:147::-;27964:11;28001:3;27986:18;;27863:147;;;;:::o;28016:114::-;;:::o;28136:398::-;28295:3;28316:83;28397:1;28392:3;28316:83;:::i;:::-;28309:90;;28408:93;28497:3;28408:93;:::i;:::-;28526:1;28521:3;28517:11;28510:18;;28136:398;;;:::o;28540:379::-;28724:3;28746:147;28889:3;28746:147;:::i;:::-;28739:154;;28910:3;28903:10;;28540:379;;;:::o;28925:220::-;29065:34;29061:1;29053:6;29049:14;29042:58;29134:3;29129:2;29121:6;29117:15;29110:28;28925:220;:::o;29151:366::-;29293:3;29314:67;29378:2;29373:3;29314:67;:::i;:::-;29307:74;;29390:93;29479:3;29390:93;:::i;:::-;29508:2;29503:3;29499:12;29492:19;;29151:366;;;:::o;29523:419::-;29689:4;29727:2;29716:9;29712:18;29704:26;;29776:9;29770:4;29766:20;29762:1;29751:9;29747:17;29740:47;29804:131;29930:4;29804:131;:::i;:::-;29796:139;;29523:419;;;:::o;29948:220::-;30088:34;30084:1;30076:6;30072:14;30065:58;30157:3;30152:2;30144:6;30140:15;30133:28;29948:220;:::o;30174:366::-;30316:3;30337:67;30401:2;30396:3;30337:67;:::i;:::-;30330:74;;30413:93;30502:3;30413:93;:::i;:::-;30531:2;30526:3;30522:12;30515:19;;30174:366;;;:::o;30546:419::-;30712:4;30750:2;30739:9;30735:18;30727:26;;30799:9;30793:4;30789:20;30785:1;30774:9;30770:17;30763:47;30827:131;30953:4;30827:131;:::i;:::-;30819:139;;30546:419;;;:::o;30971:143::-;31028:5;31059:6;31053:13;31044:22;;31075:33;31102:5;31075:33;:::i;:::-;30971:143;;;;:::o;31120:351::-;31190:6;31239:2;31227:9;31218:7;31214:23;31210:32;31207:119;;;31245:79;;:::i;:::-;31207:119;31365:1;31390:64;31446:7;31437:6;31426:9;31422:22;31390:64;:::i;:::-;31380:74;;31336:128;31120:351;;;;:::o;31477:85::-;31522:7;31551:5;31540:16;;31477:85;;;:::o;31568:158::-;31626:9;31659:61;31677:42;31686:32;31712:5;31686:32;:::i;:::-;31677:42;:::i;:::-;31659:61;:::i;:::-;31646:74;;31568:158;;;:::o;31732:147::-;31827:45;31866:5;31827:45;:::i;:::-;31822:3;31815:58;31732:147;;:::o;31885:114::-;31952:6;31986:5;31980:12;31970:22;;31885:114;;;:::o;32005:184::-;32104:11;32138:6;32133:3;32126:19;32178:4;32173:3;32169:14;32154:29;;32005:184;;;;:::o;32195:132::-;32262:4;32285:3;32277:11;;32315:4;32310:3;32306:14;32298:22;;32195:132;;;:::o;32333:108::-;32410:24;32428:5;32410:24;:::i;:::-;32405:3;32398:37;32333:108;;:::o;32447:179::-;32516:10;32537:46;32579:3;32571:6;32537:46;:::i;:::-;32615:4;32610:3;32606:14;32592:28;;32447:179;;;;:::o;32632:113::-;32702:4;32734;32729:3;32725:14;32717:22;;32632:113;;;:::o;32781:732::-;32900:3;32929:54;32977:5;32929:54;:::i;:::-;32999:86;33078:6;33073:3;32999:86;:::i;:::-;32992:93;;33109:56;33159:5;33109:56;:::i;:::-;33188:7;33219:1;33204:284;33229:6;33226:1;33223:13;33204:284;;;33305:6;33299:13;33332:63;33391:3;33376:13;33332:63;:::i;:::-;33325:70;;33418:60;33471:6;33418:60;:::i;:::-;33408:70;;33264:224;33251:1;33248;33244:9;33239:14;;33204:284;;;33208:14;33504:3;33497:10;;32905:608;;;32781:732;;;;:::o;33519:831::-;33782:4;33820:3;33809:9;33805:19;33797:27;;33834:71;33902:1;33891:9;33887:17;33878:6;33834:71;:::i;:::-;33915:80;33991:2;33980:9;33976:18;33967:6;33915:80;:::i;:::-;34042:9;34036:4;34032:20;34027:2;34016:9;34012:18;34005:48;34070:108;34173:4;34164:6;34070:108;:::i;:::-;34062:116;;34188:72;34256:2;34245:9;34241:18;34232:6;34188:72;:::i;:::-;34270:73;34338:3;34327:9;34323:19;34314:6;34270:73;:::i;:::-;33519:831;;;;;;;;:::o

Swarm Source

ipfs://dd4dc7be93c76db3872661244e4b0cdb2e8ba5ef372839248311aeefaa6ce1c2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.