ETH Price: $3,460.11 (-1.33%)
Gas: 4 Gwei

Token

Solar Eclipse (SOLAR)
 

Overview

Max Total Supply

1,000,000,000,000 SOLAR

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
shinkohaven.eth
Balance
10,000 SOLAR

Value
$0.00
0x8ADD70024a5673bE5fFdD952239Ef2Ccbd6a7152
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:
Solareclipse

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

███─████─█───████─████────███─████─█───███─████─███─███
█───█──█─█───█──█─█──█────█───█──█─█────█──█──█─█───█──
███─█──█─█───████─████────███─█────█────█──████─███─███
──█─█──█─█───█──█─█─█─────█───█──█─█────█──█──────█─█──
███─████─███─█──█─█─█─────███─████─███─███─█────███─███


https://t.me/SolarEclipseETH

*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.17;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    bool public swapEnabled = true;
    

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    
    /******************/

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyBackTriggered(uint256 amount);

    constructor() ERC20("Solar Eclipse", "SOLAR") {

        address newOwner = address(owner());
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;

        
        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 0;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        maxWallet = totalSupply * 3 / 100; // 1% max wallet
        
        swapTokensAtAmount = 1000000000 *1e18; // 0.1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        
    	marketingWallet = address(0xFEfc098540Eeeb0f41866698257Af008c7228940); // set as marketing wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee ;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function setMaxWalletTokend(uint256 _maxToken) external onlyOwner {
  	    require(_maxToken <= totalSupply() * 3 / 100, "Smax token cannot be lower than 1% total supply.");
        maxWallet = _maxToken * (10**18);
  	}
    

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            to != uniswapV2Pair
        ) {

            uint256 contractBalanceRecepient = balanceOf(to);
            require(
                contractBalanceRecepient + amount <= maxWallet,
                "Exceeds maximum wallet token amount."
            );
            
        }
        
        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        payable(marketingWallet).transfer(ethForMarketing);
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }
    
}

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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletTokend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600960006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600d81526020017f536f6c61722045636c69707365000000000000000000000000000000000000008152506040518060400160405280600581526020017f534f4c41520000000000000000000000000000000000000000000000000000008152508160039081620000aa919062000d64565b508060049081620000bc919062000d64565b5050506000620000d1620004e060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600062000182620004e860201b60201c565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000243919062000eb5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000eb5565b6040518363ffffffff1660e01b8152600401620002f092919062000ef8565b6020604051808303816000875af115801562000310573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000336919062000eb5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037e60a05160016200051260201b60201c565b600060019050600080600190506000806c0c9f2c9cd04674edea4000000090506064600382620003af919062000f54565b620003bb919062000fce565b6007819055506b033b2e3c9fd0803ce800000060088190555084600b8190555083600c81905550600c54600b54620003f4919062001006565b600a8190555082600e8190555081600f81905550600f54600e546200041a919062001006565b600d8190555073fefc098540eeeb0f41866698257af008c7228940600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000488876001620005b360201b60201c565b6200049b306001620005b360201b60201c565b620004b061dead6001620005b360201b60201c565b620004c287826200070060201b60201c565b620004d387620008ae60201b60201c565b50505050505050620012a8565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620005c3620004e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000655576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064c90620010a2565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006f49190620010e1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000769906200114e565b60405180910390fd5b620007866000838362000a8260201b60201c565b620007a28160025462000a8760201b62001b871790919060201c565b60028190555062000800816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a8760201b62001b871790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008a2919062001181565b60405180910390a35050565b620008be620004e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094790620010a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620009c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b99062001214565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000a98919062001006565b90508381101562000ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad79062001286565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6c57607f821691505b60208210810362000b825762000b8162000b24565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bad565b62000bf8868362000bad565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c4562000c3f62000c398462000c10565b62000c1a565b62000c10565b9050919050565b6000819050919050565b62000c618362000c24565b62000c7962000c708262000c4c565b84845462000bba565b825550505050565b600090565b62000c9062000c81565b62000c9d81848462000c56565b505050565b5b8181101562000cc55762000cb960008262000c86565b60018101905062000ca3565b5050565b601f82111562000d145762000cde8162000b88565b62000ce98462000b9d565b8101602085101562000cf9578190505b62000d1162000d088562000b9d565b83018262000ca2565b50505b505050565b600082821c905092915050565b600062000d396000198460080262000d19565b1980831691505092915050565b600062000d54838362000d26565b9150826002028217905092915050565b62000d6f8262000aea565b67ffffffffffffffff81111562000d8b5762000d8a62000af5565b5b62000d97825462000b53565b62000da482828562000cc9565b600060209050601f83116001811462000ddc576000841562000dc7578287015190505b62000dd3858262000d46565b86555062000e43565b601f19841662000dec8662000b88565b60005b8281101562000e165784890151825560018201915060208501945060208101905062000def565b8683101562000e36578489015162000e32601f89168262000d26565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e7d8262000e50565b9050919050565b62000e8f8162000e70565b811462000e9b57600080fd5b50565b60008151905062000eaf8162000e84565b92915050565b60006020828403121562000ece5762000ecd62000e4b565b5b600062000ede8482850162000e9e565b91505092915050565b62000ef28162000e70565b82525050565b600060408201905062000f0f600083018562000ee7565b62000f1e602083018462000ee7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f618262000c10565b915062000f6e8362000c10565b925082820262000f7e8162000c10565b9150828204841483151762000f985762000f9762000f25565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fdb8262000c10565b915062000fe88362000c10565b92508262000ffb5762000ffa62000f9f565b5b828204905092915050565b6000620010138262000c10565b9150620010208362000c10565b92508282019050808211156200103b576200103a62000f25565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200108a60208362001041565b9150620010978262001052565b602082019050919050565b60006020820190508181036000830152620010bd816200107b565b9050919050565b60008115159050919050565b620010db81620010c4565b82525050565b6000602082019050620010f86000830184620010d0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001136601f8362001041565b91506200114382620010fe565b602082019050919050565b60006020820190508181036000830152620011698162001127565b9050919050565b6200117b8162000c10565b82525050565b600060208201905062001198600083018462001170565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620011fc60268362001041565b915062001209826200119e565b604082019050919050565b600060208201905081810360008301526200122f81620011ed565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200126e601b8362001041565b91506200127b8262001236565b602082019050919050565b60006020820190508181036000830152620012a1816200125f565b9050919050565b60805160a051613ff8620012ff60003960008181610ce90152818161125a0152611f86015260008181610b1401528181612bd001528181612cb101528181612cd801528181612d740152612d9b0152613ff86000f3fe6080604052600436106102345760003560e01c80637bce5a041161012e578063b62496f5116100ab578063e2f456051161006f578063e2f4560514610888578063f11a24d3146108b3578063f2fde38b146108de578063f637434214610907578063f8b45b05146109325761023b565b8063b62496f51461077d578063c0246668146107ba578063d257b34f146107e3578063d85ba06314610820578063dd62ed3e1461084b5761023b565b80639a7a23d6116100f25780639a7a23d6146106885780639f34a5b4146106b1578063a457c2d7146106da578063a9059cbb14610717578063aacebbe3146107545761023b565b80637bce5a04146105b35780638da5cb5b146105de5780639213691314610609578063924de9b71461063457806395d89b411461065d5761023b565b8063313ce567116101bc5780636a486a8e116101805780636a486a8e146104de5780636ddd17131461050957806370a0823114610534578063715018a61461057157806375f0a874146105885761023b565b8063313ce567146103e5578063395093511461041057806349bd5a5e1461044d5780634fbee1931461047857806366ca9b83146104b55761023b565b806318160ddd1161020357806318160ddd146102fc5780631a8145bb146103275780631f3fed8f1461035257806323b872dd1461037d57806327c8f835146103ba5761023b565b806302dbd8f81461024057806306fdde0314610269578063095ea7b3146102945780631694505e146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612ee8565b61095d565b005b34801561027557600080fd5b5061027e610a62565b60405161028b9190612fb8565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190613038565b610af4565b6040516102c89190613093565b60405180910390f35b3480156102dd57600080fd5b506102e6610b12565b6040516102f3919061310d565b60405180910390f35b34801561030857600080fd5b50610311610b36565b60405161031e9190613137565b60405180910390f35b34801561033357600080fd5b5061033c610b40565b6040516103499190613137565b60405180910390f35b34801561035e57600080fd5b50610367610b46565b6040516103749190613137565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613152565b610b4c565b6040516103b19190613093565b60405180910390f35b3480156103c657600080fd5b506103cf610c25565b6040516103dc91906131b4565b60405180910390f35b3480156103f157600080fd5b506103fa610c2b565b60405161040791906131eb565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613038565b610c34565b6040516104449190613093565b60405180910390f35b34801561045957600080fd5b50610462610ce7565b60405161046f91906131b4565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613206565b610d0b565b6040516104ac9190613093565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612ee8565b610d61565b005b3480156104ea57600080fd5b506104f3610e66565b6040516105009190613137565b60405180910390f35b34801561051557600080fd5b5061051e610e6c565b60405161052b9190613093565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190613206565b610e7f565b6040516105689190613137565b60405180910390f35b34801561057d57600080fd5b50610586610ec7565b005b34801561059457600080fd5b5061059d61101f565b6040516105aa91906131b4565b60405180910390f35b3480156105bf57600080fd5b506105c8611045565b6040516105d59190613137565b60405180910390f35b3480156105ea57600080fd5b506105f361104b565b60405161060091906131b4565b60405180910390f35b34801561061557600080fd5b5061061e611075565b60405161062b9190613137565b60405180910390f35b34801561064057600080fd5b5061065b6004803603810190610656919061325f565b61107b565b005b34801561066957600080fd5b5061067261112f565b60405161067f9190612fb8565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa919061328c565b6111c1565b005b3480156106bd57600080fd5b506106d860048036038101906106d391906132cc565b6112f4565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190613038565b61140a565b60405161070e9190613093565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190613038565b6114d7565b60405161074b9190613093565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613206565b6114f5565b005b34801561078957600080fd5b506107a4600480360381019061079f9190613206565b61164c565b6040516107b19190613093565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061328c565b61166c565b005b3480156107ef57600080fd5b5061080a600480360381019061080591906132cc565b6117ac565b6040516108179190613093565b60405180910390f35b34801561082c57600080fd5b5061083561191c565b6040516108429190613137565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906132f9565b611922565b60405161087f9190613137565b60405180910390f35b34801561089457600080fd5b5061089d6119a9565b6040516108aa9190613137565b60405180910390f35b3480156108bf57600080fd5b506108c86119af565b6040516108d59190613137565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613206565b6119b5565b005b34801561091357600080fd5b5061091c611b7b565b6040516109299190613137565b60405180910390f35b34801561093e57600080fd5b50610947611b81565b6040516109549190613137565b60405180910390f35b610965611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90613385565b60405180910390fd5b81600e8190555080600f81905550600f54600e54610a1291906133d4565b600d819055506019600d541115610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590613454565b60405180910390fd5b5050565b606060038054610a71906134a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906134a3565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000610b08610b01611be5565b8484611bed565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60115481565b60105481565b6000610b59848484611db6565b610c1a84610b65611be5565b610c1585604051806060016040528060288152602001613f7660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bcb611be5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c99092919063ffffffff16565b611bed565b600190509392505050565b61dead81565b60006012905090565b6000610cdd610c41611be5565b84610cd88560016000610c52611be5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8790919063ffffffff16565b611bed565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d69611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90613385565b60405180910390fd5b81600b8190555080600c81905550600c54600b54610e1691906133d4565b600a819055506019600a541115610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990613454565b60405180910390fd5b5050565b600d5481565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ecf611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613385565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611083611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613385565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606004805461113e906134a3565b80601f016020809104026020016040519081016040528092919081815260200182805461116a906134a3565b80156111b75780601f1061118c576101008083540402835291602001916111b7565b820191906000526020600020905b81548152906001019060200180831161119a57829003601f168201915b5050505050905090565b6111c9611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90613385565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613546565b60405180910390fd5b6112f0828261252d565b5050565b6112fc611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138290613385565b60405180910390fd5b60646003611397610b36565b6113a19190613566565b6113ab91906135d7565b8111156113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e49061367a565b60405180910390fd5b670de0b6b3a7640000816114019190613566565b60078190555050565b60006114cd611417611be5565b846114c885604051806060016040528060258152602001613f9e6025913960016000611441611be5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c99092919063ffffffff16565b611bed565b6001905092915050565b60006114eb6114e4611be5565b8484611db6565b6001905092915050565b6114fd611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390613385565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b611674611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90613385565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117a09190613093565b60405180910390a25050565b60006117b6611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90613385565b60405180910390fd5b620186a06001611853610b36565b61185d9190613566565b61186791906135d7565b8210156118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a09061370c565b60405180910390fd5b6103e860056118b6610b36565b6118c09190613566565b6118ca91906135d7565b82111561190c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119039061379e565b60405180910390fd5b8160088190555060019050919050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600c5481565b6119bd611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390613385565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab290613830565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60075481565b6000808284611b9691906133d4565b905083811015611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd29061389c565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c539061392e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906139c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611da99190613137565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90613a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613ae4565b60405180910390fd5b611e9c61104b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f0a5750611eda61104b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f435750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f7d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fd557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612039576000611fe583610e7f565b90506007548282611ff691906133d4565b1115612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90613b76565b60405180910390fd5b505b600081036120525761204d838360006125ce565b6124c4565b600061205d30610e7f565b9050600060085482101590508080156120825750600960009054906101000a900460ff165b801561209b5750600560149054906101000a900460ff16155b80156120f15750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121475750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561219d5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121e1576001600560146101000a81548160ff0219169083151502179055506121c5612861565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122975750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122a157600090505b600081156124b457601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561230457506000600d54115b1561239e576123316064612323600d5488612a1e90919063ffffffff16565b612a9890919063ffffffff16565b9050600d54600f54826123449190613566565b61234e91906135d7565b6011600082825461235f91906133d4565b92505081905550600d54600e54826123779190613566565b61238191906135d7565b6010600082825461239291906133d4565b92505081905550612490565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123f957506000600a54115b1561248f576124266064612418600a5488612a1e90919063ffffffff16565b612a9890919063ffffffff16565b9050600a54600c54826124399190613566565b61244391906135d7565b6011600082825461245491906133d4565b92505081905550600a54600b548261246c9190613566565b61247691906135d7565b6010600082825461248791906133d4565b925050819055505b5b60008111156124a5576124a48730836125ce565b5b80856124b19190613b96565b94505b6124bf8787876125ce565b505050505b505050565b6000838311158290612511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125089190612fb8565b60405180910390fd5b50600083856125209190613b96565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263490613a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390613ae4565b60405180910390fd5b6126b7838383612ae2565b61272281604051806060016040528060268152602001613f50602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127b5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128549190613137565b60405180910390a3505050565b600061286c30610e7f565b9050600060105460115461288091906133d4565b905060008214806128915750600081145b1561289d575050612a1c565b6000600282601154856128b09190613566565b6128ba91906135d7565b6128c491906135d7565b905060006128db8285612ae790919063ffffffff16565b905060004790506128eb82612b31565b60006129008247612ae790919063ffffffff16565b9050600061292b8661291d60105485612a1e90919063ffffffff16565b612a9890919063ffffffff16565b90506000818361293b9190613b96565b905060006011819055506000601081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129b5573d6000803e3d6000fd5b506000861180156129c65750600081115b15612a13576129d58682612d6e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612a0a93929190613bca565b60405180910390a15b50505050505050505b565b6000808303612a305760009050612a92565b60008284612a3e9190613566565b9050828482612a4d91906135d7565b14612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8490613c73565b60405180910390fd5b809150505b92915050565b6000612ada83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e4a565b905092915050565b505050565b6000612b2983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c9565b905092915050565b6000600267ffffffffffffffff811115612b4e57612b4d613c93565b5b604051908082528060200260200182016040528015612b7c5781602001602082028036833780820191505090505b5090503081600081518110612b9457612b93613cc2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5d9190613d06565b81600181518110612c7157612c70613cc2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cd6307f000000000000000000000000000000000000000000000000000000000000000084611bed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d38959493929190613e2c565b600060405180830381600087803b158015612d5257600080fd5b505af1158015612d66573d6000803e3d6000fd5b505050505050565b612d99307f000000000000000000000000000000000000000000000000000000000000000084611bed565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612e0096959493929190613e86565b60606040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e439190613efc565b5050505050565b60008083118290612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e889190612fb8565b60405180910390fd5b5060008385612ea091906135d7565b9050809150509392505050565b600080fd5b6000819050919050565b612ec581612eb2565b8114612ed057600080fd5b50565b600081359050612ee281612ebc565b92915050565b60008060408385031215612eff57612efe612ead565b5b6000612f0d85828601612ed3565b9250506020612f1e85828601612ed3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f62578082015181840152602081019050612f47565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f8a82612f28565b612f948185612f33565b9350612fa4818560208601612f44565b612fad81612f6e565b840191505092915050565b60006020820190508181036000830152612fd28184612f7f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061300582612fda565b9050919050565b61301581612ffa565b811461302057600080fd5b50565b6000813590506130328161300c565b92915050565b6000806040838503121561304f5761304e612ead565b5b600061305d85828601613023565b925050602061306e85828601612ed3565b9150509250929050565b60008115159050919050565b61308d81613078565b82525050565b60006020820190506130a86000830184613084565b92915050565b6000819050919050565b60006130d36130ce6130c984612fda565b6130ae565b612fda565b9050919050565b60006130e5826130b8565b9050919050565b60006130f7826130da565b9050919050565b613107816130ec565b82525050565b600060208201905061312260008301846130fe565b92915050565b61313181612eb2565b82525050565b600060208201905061314c6000830184613128565b92915050565b60008060006060848603121561316b5761316a612ead565b5b600061317986828701613023565b935050602061318a86828701613023565b925050604061319b86828701612ed3565b9150509250925092565b6131ae81612ffa565b82525050565b60006020820190506131c960008301846131a5565b92915050565b600060ff82169050919050565b6131e5816131cf565b82525050565b600060208201905061320060008301846131dc565b92915050565b60006020828403121561321c5761321b612ead565b5b600061322a84828501613023565b91505092915050565b61323c81613078565b811461324757600080fd5b50565b60008135905061325981613233565b92915050565b60006020828403121561327557613274612ead565b5b60006132838482850161324a565b91505092915050565b600080604083850312156132a3576132a2612ead565b5b60006132b185828601613023565b92505060206132c28582860161324a565b9150509250929050565b6000602082840312156132e2576132e1612ead565b5b60006132f084828501612ed3565b91505092915050565b600080604083850312156133105761330f612ead565b5b600061331e85828601613023565b925050602061332f85828601613023565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061336f602083612f33565b915061337a82613339565b602082019050919050565b6000602082019050818103600083015261339e81613362565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133df82612eb2565b91506133ea83612eb2565b9250828201905080821115613402576134016133a5565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061343e601d83612f33565b915061344982613408565b602082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134bb57607f821691505b6020821081036134ce576134cd613474565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613530603983612f33565b915061353b826134d4565b604082019050919050565b6000602082019050818103600083015261355f81613523565b9050919050565b600061357182612eb2565b915061357c83612eb2565b925082820261358a81612eb2565b915082820484148315176135a1576135a06133a5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135e282612eb2565b91506135ed83612eb2565b9250826135fd576135fc6135a8565b5b828204905092915050565b7f536d617820746f6b656e2063616e6e6f74206265206c6f776572207468616e2060008201527f312520746f74616c20737570706c792e00000000000000000000000000000000602082015250565b6000613664603083612f33565b915061366f82613608565b604082019050919050565b6000602082019050818103600083015261369381613657565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006136f6603583612f33565b91506137018261369a565b604082019050919050565b60006020820190508181036000830152613725816136e9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613788603483612f33565b91506137938261372c565b604082019050919050565b600060208201905081810360008301526137b78161377b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061381a602683612f33565b9150613825826137be565b604082019050919050565b600060208201905081810360008301526138498161380d565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613886601b83612f33565b915061389182613850565b602082019050919050565b600060208201905081810360008301526138b581613879565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613918602483612f33565b9150613923826138bc565b604082019050919050565b600060208201905081810360008301526139478161390b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139aa602283612f33565b91506139b58261394e565b604082019050919050565b600060208201905081810360008301526139d98161399d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a3c602583612f33565b9150613a47826139e0565b604082019050919050565b60006020820190508181036000830152613a6b81613a2f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ace602383612f33565b9150613ad982613a72565b604082019050919050565b60006020820190508181036000830152613afd81613ac1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613b60602483612f33565b9150613b6b82613b04565b604082019050919050565b60006020820190508181036000830152613b8f81613b53565b9050919050565b6000613ba182612eb2565b9150613bac83612eb2565b9250828203905081811115613bc457613bc36133a5565b5b92915050565b6000606082019050613bdf6000830186613128565b613bec6020830185613128565b613bf96040830184613128565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c5d602183612f33565b9150613c6882613c01565b604082019050919050565b60006020820190508181036000830152613c8c81613c50565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613d008161300c565b92915050565b600060208284031215613d1c57613d1b612ead565b5b6000613d2a84828501613cf1565b91505092915050565b6000819050919050565b6000613d58613d53613d4e84613d33565b6130ae565b612eb2565b9050919050565b613d6881613d3d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613da381612ffa565b82525050565b6000613db58383613d9a565b60208301905092915050565b6000602082019050919050565b6000613dd982613d6e565b613de38185613d79565b9350613dee83613d8a565b8060005b83811015613e1f578151613e068882613da9565b9750613e1183613dc1565b925050600181019050613df2565b5085935050505092915050565b600060a082019050613e416000830188613128565b613e4e6020830187613d5f565b8181036040830152613e608186613dce565b9050613e6f60608301856131a5565b613e7c6080830184613128565b9695505050505050565b600060c082019050613e9b60008301896131a5565b613ea86020830188613128565b613eb56040830187613d5f565b613ec26060830186613d5f565b613ecf60808301856131a5565b613edc60a0830184613128565b979650505050505050565b600081519050613ef681612ebc565b92915050565b600080600060608486031215613f1557613f14612ead565b5b6000613f2386828701613ee7565b9350506020613f3486828701613ee7565b9250506040613f4586828701613ee7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209d09731bc26c1ea605539277052601c1834451d0c7dcb9378985fb88d8e01d9a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80637bce5a041161012e578063b62496f5116100ab578063e2f456051161006f578063e2f4560514610888578063f11a24d3146108b3578063f2fde38b146108de578063f637434214610907578063f8b45b05146109325761023b565b8063b62496f51461077d578063c0246668146107ba578063d257b34f146107e3578063d85ba06314610820578063dd62ed3e1461084b5761023b565b80639a7a23d6116100f25780639a7a23d6146106885780639f34a5b4146106b1578063a457c2d7146106da578063a9059cbb14610717578063aacebbe3146107545761023b565b80637bce5a04146105b35780638da5cb5b146105de5780639213691314610609578063924de9b71461063457806395d89b411461065d5761023b565b8063313ce567116101bc5780636a486a8e116101805780636a486a8e146104de5780636ddd17131461050957806370a0823114610534578063715018a61461057157806375f0a874146105885761023b565b8063313ce567146103e5578063395093511461041057806349bd5a5e1461044d5780634fbee1931461047857806366ca9b83146104b55761023b565b806318160ddd1161020357806318160ddd146102fc5780631a8145bb146103275780631f3fed8f1461035257806323b872dd1461037d57806327c8f835146103ba5761023b565b806302dbd8f81461024057806306fdde0314610269578063095ea7b3146102945780631694505e146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612ee8565b61095d565b005b34801561027557600080fd5b5061027e610a62565b60405161028b9190612fb8565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190613038565b610af4565b6040516102c89190613093565b60405180910390f35b3480156102dd57600080fd5b506102e6610b12565b6040516102f3919061310d565b60405180910390f35b34801561030857600080fd5b50610311610b36565b60405161031e9190613137565b60405180910390f35b34801561033357600080fd5b5061033c610b40565b6040516103499190613137565b60405180910390f35b34801561035e57600080fd5b50610367610b46565b6040516103749190613137565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613152565b610b4c565b6040516103b19190613093565b60405180910390f35b3480156103c657600080fd5b506103cf610c25565b6040516103dc91906131b4565b60405180910390f35b3480156103f157600080fd5b506103fa610c2b565b60405161040791906131eb565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613038565b610c34565b6040516104449190613093565b60405180910390f35b34801561045957600080fd5b50610462610ce7565b60405161046f91906131b4565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613206565b610d0b565b6040516104ac9190613093565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612ee8565b610d61565b005b3480156104ea57600080fd5b506104f3610e66565b6040516105009190613137565b60405180910390f35b34801561051557600080fd5b5061051e610e6c565b60405161052b9190613093565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190613206565b610e7f565b6040516105689190613137565b60405180910390f35b34801561057d57600080fd5b50610586610ec7565b005b34801561059457600080fd5b5061059d61101f565b6040516105aa91906131b4565b60405180910390f35b3480156105bf57600080fd5b506105c8611045565b6040516105d59190613137565b60405180910390f35b3480156105ea57600080fd5b506105f361104b565b60405161060091906131b4565b60405180910390f35b34801561061557600080fd5b5061061e611075565b60405161062b9190613137565b60405180910390f35b34801561064057600080fd5b5061065b6004803603810190610656919061325f565b61107b565b005b34801561066957600080fd5b5061067261112f565b60405161067f9190612fb8565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa919061328c565b6111c1565b005b3480156106bd57600080fd5b506106d860048036038101906106d391906132cc565b6112f4565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190613038565b61140a565b60405161070e9190613093565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190613038565b6114d7565b60405161074b9190613093565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613206565b6114f5565b005b34801561078957600080fd5b506107a4600480360381019061079f9190613206565b61164c565b6040516107b19190613093565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061328c565b61166c565b005b3480156107ef57600080fd5b5061080a600480360381019061080591906132cc565b6117ac565b6040516108179190613093565b60405180910390f35b34801561082c57600080fd5b5061083561191c565b6040516108429190613137565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906132f9565b611922565b60405161087f9190613137565b60405180910390f35b34801561089457600080fd5b5061089d6119a9565b6040516108aa9190613137565b60405180910390f35b3480156108bf57600080fd5b506108c86119af565b6040516108d59190613137565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613206565b6119b5565b005b34801561091357600080fd5b5061091c611b7b565b6040516109299190613137565b60405180910390f35b34801561093e57600080fd5b50610947611b81565b6040516109549190613137565b60405180910390f35b610965611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90613385565b60405180910390fd5b81600e8190555080600f81905550600f54600e54610a1291906133d4565b600d819055506019600d541115610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590613454565b60405180910390fd5b5050565b606060038054610a71906134a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906134a3565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000610b08610b01611be5565b8484611bed565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60115481565b60105481565b6000610b59848484611db6565b610c1a84610b65611be5565b610c1585604051806060016040528060288152602001613f7660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bcb611be5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c99092919063ffffffff16565b611bed565b600190509392505050565b61dead81565b60006012905090565b6000610cdd610c41611be5565b84610cd88560016000610c52611be5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8790919063ffffffff16565b611bed565b6001905092915050565b7f0000000000000000000000002c69cda4a9921a34dc1cb531d6368e6e96af445f81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d69611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def90613385565b60405180910390fd5b81600b8190555080600c81905550600c54600b54610e1691906133d4565b600a819055506019600a541115610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990613454565b60405180910390fd5b5050565b600d5481565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ecf611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613385565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611083611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613385565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606004805461113e906134a3565b80601f016020809104026020016040519081016040528092919081815260200182805461116a906134a3565b80156111b75780601f1061118c576101008083540402835291602001916111b7565b820191906000526020600020905b81548152906001019060200180831161119a57829003601f168201915b5050505050905090565b6111c9611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90613385565b60405180910390fd5b7f0000000000000000000000002c69cda4a9921a34dc1cb531d6368e6e96af445f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613546565b60405180910390fd5b6112f0828261252d565b5050565b6112fc611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138290613385565b60405180910390fd5b60646003611397610b36565b6113a19190613566565b6113ab91906135d7565b8111156113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e49061367a565b60405180910390fd5b670de0b6b3a7640000816114019190613566565b60078190555050565b60006114cd611417611be5565b846114c885604051806060016040528060258152602001613f9e6025913960016000611441611be5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c99092919063ffffffff16565b611bed565b6001905092915050565b60006114eb6114e4611be5565b8484611db6565b6001905092915050565b6114fd611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390613385565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b611674611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90613385565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117a09190613093565b60405180910390a25050565b60006117b6611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90613385565b60405180910390fd5b620186a06001611853610b36565b61185d9190613566565b61186791906135d7565b8210156118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a09061370c565b60405180910390fd5b6103e860056118b6610b36565b6118c09190613566565b6118ca91906135d7565b82111561190c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119039061379e565b60405180910390fd5b8160088190555060019050919050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600c5481565b6119bd611be5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4390613385565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab290613830565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60075481565b6000808284611b9691906133d4565b905083811015611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd29061389c565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c539061392e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906139c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611da99190613137565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90613a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613ae4565b60405180910390fd5b611e9c61104b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f0a5750611eda61104b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f435750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f7d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fd557507f0000000000000000000000002c69cda4a9921a34dc1cb531d6368e6e96af445f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612039576000611fe583610e7f565b90506007548282611ff691906133d4565b1115612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90613b76565b60405180910390fd5b505b600081036120525761204d838360006125ce565b6124c4565b600061205d30610e7f565b9050600060085482101590508080156120825750600960009054906101000a900460ff165b801561209b5750600560149054906101000a900460ff16155b80156120f15750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121475750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561219d5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121e1576001600560146101000a81548160ff0219169083151502179055506121c5612861565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122975750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122a157600090505b600081156124b457601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561230457506000600d54115b1561239e576123316064612323600d5488612a1e90919063ffffffff16565b612a9890919063ffffffff16565b9050600d54600f54826123449190613566565b61234e91906135d7565b6011600082825461235f91906133d4565b92505081905550600d54600e54826123779190613566565b61238191906135d7565b6010600082825461239291906133d4565b92505081905550612490565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123f957506000600a54115b1561248f576124266064612418600a5488612a1e90919063ffffffff16565b612a9890919063ffffffff16565b9050600a54600c54826124399190613566565b61244391906135d7565b6011600082825461245491906133d4565b92505081905550600a54600b548261246c9190613566565b61247691906135d7565b6010600082825461248791906133d4565b925050819055505b5b60008111156124a5576124a48730836125ce565b5b80856124b19190613b96565b94505b6124bf8787876125ce565b505050505b505050565b6000838311158290612511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125089190612fb8565b60405180910390fd5b50600083856125209190613b96565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263490613a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390613ae4565b60405180910390fd5b6126b7838383612ae2565b61272281604051806060016040528060268152602001613f50602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127b5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128549190613137565b60405180910390a3505050565b600061286c30610e7f565b9050600060105460115461288091906133d4565b905060008214806128915750600081145b1561289d575050612a1c565b6000600282601154856128b09190613566565b6128ba91906135d7565b6128c491906135d7565b905060006128db8285612ae790919063ffffffff16565b905060004790506128eb82612b31565b60006129008247612ae790919063ffffffff16565b9050600061292b8661291d60105485612a1e90919063ffffffff16565b612a9890919063ffffffff16565b90506000818361293b9190613b96565b905060006011819055506000601081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129b5573d6000803e3d6000fd5b506000861180156129c65750600081115b15612a13576129d58682612d6e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612a0a93929190613bca565b60405180910390a15b50505050505050505b565b6000808303612a305760009050612a92565b60008284612a3e9190613566565b9050828482612a4d91906135d7565b14612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8490613c73565b60405180910390fd5b809150505b92915050565b6000612ada83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e4a565b905092915050565b505050565b6000612b2983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c9565b905092915050565b6000600267ffffffffffffffff811115612b4e57612b4d613c93565b5b604051908082528060200260200182016040528015612b7c5781602001602082028036833780820191505090505b5090503081600081518110612b9457612b93613cc2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5d9190613d06565b81600181518110612c7157612c70613cc2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cd6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bed565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d38959493929190613e2c565b600060405180830381600087803b158015612d5257600080fd5b505af1158015612d66573d6000803e3d6000fd5b505050505050565b612d99307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bed565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612e0096959493929190613e86565b60606040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e439190613efc565b5050505050565b60008083118290612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e889190612fb8565b60405180910390fd5b5060008385612ea091906135d7565b9050809150509392505050565b600080fd5b6000819050919050565b612ec581612eb2565b8114612ed057600080fd5b50565b600081359050612ee281612ebc565b92915050565b60008060408385031215612eff57612efe612ead565b5b6000612f0d85828601612ed3565b9250506020612f1e85828601612ed3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f62578082015181840152602081019050612f47565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f8a82612f28565b612f948185612f33565b9350612fa4818560208601612f44565b612fad81612f6e565b840191505092915050565b60006020820190508181036000830152612fd28184612f7f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061300582612fda565b9050919050565b61301581612ffa565b811461302057600080fd5b50565b6000813590506130328161300c565b92915050565b6000806040838503121561304f5761304e612ead565b5b600061305d85828601613023565b925050602061306e85828601612ed3565b9150509250929050565b60008115159050919050565b61308d81613078565b82525050565b60006020820190506130a86000830184613084565b92915050565b6000819050919050565b60006130d36130ce6130c984612fda565b6130ae565b612fda565b9050919050565b60006130e5826130b8565b9050919050565b60006130f7826130da565b9050919050565b613107816130ec565b82525050565b600060208201905061312260008301846130fe565b92915050565b61313181612eb2565b82525050565b600060208201905061314c6000830184613128565b92915050565b60008060006060848603121561316b5761316a612ead565b5b600061317986828701613023565b935050602061318a86828701613023565b925050604061319b86828701612ed3565b9150509250925092565b6131ae81612ffa565b82525050565b60006020820190506131c960008301846131a5565b92915050565b600060ff82169050919050565b6131e5816131cf565b82525050565b600060208201905061320060008301846131dc565b92915050565b60006020828403121561321c5761321b612ead565b5b600061322a84828501613023565b91505092915050565b61323c81613078565b811461324757600080fd5b50565b60008135905061325981613233565b92915050565b60006020828403121561327557613274612ead565b5b60006132838482850161324a565b91505092915050565b600080604083850312156132a3576132a2612ead565b5b60006132b185828601613023565b92505060206132c28582860161324a565b9150509250929050565b6000602082840312156132e2576132e1612ead565b5b60006132f084828501612ed3565b91505092915050565b600080604083850312156133105761330f612ead565b5b600061331e85828601613023565b925050602061332f85828601613023565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061336f602083612f33565b915061337a82613339565b602082019050919050565b6000602082019050818103600083015261339e81613362565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133df82612eb2565b91506133ea83612eb2565b9250828201905080821115613402576134016133a5565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061343e601d83612f33565b915061344982613408565b602082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134bb57607f821691505b6020821081036134ce576134cd613474565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613530603983612f33565b915061353b826134d4565b604082019050919050565b6000602082019050818103600083015261355f81613523565b9050919050565b600061357182612eb2565b915061357c83612eb2565b925082820261358a81612eb2565b915082820484148315176135a1576135a06133a5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135e282612eb2565b91506135ed83612eb2565b9250826135fd576135fc6135a8565b5b828204905092915050565b7f536d617820746f6b656e2063616e6e6f74206265206c6f776572207468616e2060008201527f312520746f74616c20737570706c792e00000000000000000000000000000000602082015250565b6000613664603083612f33565b915061366f82613608565b604082019050919050565b6000602082019050818103600083015261369381613657565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006136f6603583612f33565b91506137018261369a565b604082019050919050565b60006020820190508181036000830152613725816136e9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613788603483612f33565b91506137938261372c565b604082019050919050565b600060208201905081810360008301526137b78161377b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061381a602683612f33565b9150613825826137be565b604082019050919050565b600060208201905081810360008301526138498161380d565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613886601b83612f33565b915061389182613850565b602082019050919050565b600060208201905081810360008301526138b581613879565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613918602483612f33565b9150613923826138bc565b604082019050919050565b600060208201905081810360008301526139478161390b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139aa602283612f33565b91506139b58261394e565b604082019050919050565b600060208201905081810360008301526139d98161399d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a3c602583612f33565b9150613a47826139e0565b604082019050919050565b60006020820190508181036000830152613a6b81613a2f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ace602383612f33565b9150613ad982613a72565b604082019050919050565b60006020820190508181036000830152613afd81613ac1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613b60602483612f33565b9150613b6b82613b04565b604082019050919050565b60006020820190508181036000830152613b8f81613b53565b9050919050565b6000613ba182612eb2565b9150613bac83612eb2565b9250828203905081811115613bc457613bc36133a5565b5b92915050565b6000606082019050613bdf6000830186613128565b613bec6020830185613128565b613bf96040830184613128565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c5d602183612f33565b9150613c6882613c01565b604082019050919050565b60006020820190508181036000830152613c8c81613c50565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613d008161300c565b92915050565b600060208284031215613d1c57613d1b612ead565b5b6000613d2a84828501613cf1565b91505092915050565b6000819050919050565b6000613d58613d53613d4e84613d33565b6130ae565b612eb2565b9050919050565b613d6881613d3d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613da381612ffa565b82525050565b6000613db58383613d9a565b60208301905092915050565b6000602082019050919050565b6000613dd982613d6e565b613de38185613d79565b9350613dee83613d8a565b8060005b83811015613e1f578151613e068882613da9565b9750613e1183613dc1565b925050600181019050613df2565b5085935050505092915050565b600060a082019050613e416000830188613128565b613e4e6020830187613d5f565b8181036040830152613e608186613dce565b9050613e6f60608301856131a5565b613e7c6080830184613128565b9695505050505050565b600060c082019050613e9b60008301896131a5565b613ea86020830188613128565b613eb56040830187613d5f565b613ec26060830186613d5f565b613ecf60808301856131a5565b613edc60a0830184613128565b979650505050505050565b600081519050613ef681612ebc565b92915050565b600080600060608486031215613f1557613f14612ead565b5b6000613f2386828701613ee7565b9350506020613f3486828701613ee7565b9250506040613f4586828701613ee7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209d09731bc26c1ea605539277052601c1834451d0c7dcb9378985fb88d8e01d9a64736f6c63430008110033

Deployed Bytecode Sourcemap

30318:10939:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34719:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8474:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10641:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9594:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31021:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30981;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11292:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30503:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9436:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12056:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30458:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36136:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34397:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30864:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30705:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9765:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22939:148;;;;;;;;;;;;;:::i;:::-;;30595:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30784;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22297:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30899:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34284:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8693:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35235:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35899:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12777:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10105:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35683:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31359:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35045:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33803:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30750:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10343:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30663:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30821:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23242:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30937:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30632:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34719:318;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34838:13:::1;34819:16;:32;;;;34881:13;34862:16;:32;;;;34940:16;;34921;;:35;;;;:::i;:::-;34905:13;:51;;;;34993:2;34976:13;;:19;;34968:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34719:318:::0;;:::o;8474:100::-;8528:13;8561:5;8554:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8474:100;:::o;10641:169::-;10724:4;10741:39;10750:12;:10;:12::i;:::-;10764:7;10773:6;10741:8;:39::i;:::-;10798:4;10791:11;;10641:169;;;;:::o;30400:51::-;;;:::o;9594:108::-;9655:7;9682:12;;9675:19;;9594:108;:::o;31021:33::-;;;;:::o;30981:::-;;;;:::o;11292:355::-;11432:4;11449:36;11459:6;11467:9;11478:6;11449:9;:36::i;:::-;11496:121;11505:6;11513:12;:10;:12::i;:::-;11527:89;11565:6;11527:89;;;;;;;;;;;;;;;;;:11;:19;11539:6;11527:19;;;;;;;;;;;;;;;:33;11547:12;:10;:12::i;:::-;11527:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11496:8;:121::i;:::-;11635:4;11628:11;;11292:355;;;;;:::o;30503:53::-;30549:6;30503:53;:::o;9436:93::-;9494:5;9519:2;9512:9;;9436:93;:::o;12056:218::-;12144:4;12161:83;12170:12;:10;:12::i;:::-;12184:7;12193:50;12232:10;12193:11;:25;12205:12;:10;:12::i;:::-;12193:25;;;;;;;;;;;;;;;:34;12219:7;12193:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12161:8;:83::i;:::-;12262:4;12255:11;;12056:218;;;;:::o;30458:38::-;;;:::o;36136:125::-;36201:4;36225:19;:28;36245:7;36225:28;;;;;;;;;;;;;;;;;;;;;;;;;36218:35;;36136:125;;;:::o;34397:310::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34514:13:::1;34496:15;:31;;;;34556:13;34538:15;:31;;;;34613:15;;34595;;:33;;;;:::i;:::-;34580:12;:48;;;;34663:2;34647:12;;:18;;34639:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34397:310:::0;;:::o;30864:28::-;;;;:::o;30705:30::-;;;;;;;;;;;;;:::o;9765:127::-;9839:7;9866:9;:18;9876:7;9866:18;;;;;;;;;;;;;;;;9859:25;;9765:127;;;:::o;22939:148::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23046:1:::1;23009:40;;23030:6;;;;;;;;;;;23009:40;;;;;;;;;;;;23077:1;23060:6;;:19;;;;;;;;;;;;;;;;;;22939:148::o:0;30595:30::-;;;;;;;;;;;;;:::o;30784:::-;;;;:::o;22297:79::-;22335:7;22362:6;;;;;;;;;;;22355:13;;22297:79;:::o;30899:31::-;;;;:::o;34284:101::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34370:7:::1;34356:11;;:21;;;;;;;;;;;;;;;;;;34284:101:::0;:::o;8693:104::-;8749:13;8782:7;8775:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8693:104;:::o;35235:244::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35342:13:::1;35334:21;;:4;:21;;::::0;35326:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35430:41;35459:4;35465:5;35430:28;:41::i;:::-;35235:244:::0;;:::o;35899:223::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36016:3:::1;36012:1;35996:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;35983:9;:36;;35975:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36108:6;36095:9;:20;;;;:::i;:::-;36083:9;:32;;;;35899:223:::0;:::o;12777:269::-;12870:4;12887:129;12896:12;:10;:12::i;:::-;12910:7;12919:96;12958:15;12919:96;;;;;;;;;;;;;;;;;:11;:25;12931:12;:10;:12::i;:::-;12919:25;;;;;;;;;;;;;;;:34;12945:7;12919:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12887:8;:129::i;:::-;13034:4;13027:11;;12777:269;;;;:::o;10105:175::-;10191:4;10208:42;10218:12;:10;:12::i;:::-;10232:9;10243:6;10208:9;:42::i;:::-;10268:4;10261:11;;10105:175;;;;:::o;35683:208::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35820:15:::1;;;;;;;;;;;35777:59;;35800:18;35777:59;;;;;;;;;;;;35865:18;35847:15;;:36;;;;;;;;;;;;;;;;;;35683:208:::0;:::o;31359:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;35045:182::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35161:8:::1;35130:19;:28;35150:7;35130:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35201:7;35185:34;;;35210:8;35185:34;;;;;;:::i;:::-;;;;;;;;35045:182:::0;;:::o;33803:381::-;33884:4;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33940:6:::1;33936:1;33920:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33907:9;:39;;33899:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34055:4;34051:1;34035:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34022:9;:37;;34014:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34147:9;34126:18;:30;;;;34173:4;34166:11;;33803:381:::0;;;:::o;30750:27::-;;;;:::o;10343:151::-;10432:7;10459:11;:18;10471:5;10459:18;;;;;;;;;;;;;;;:27;10478:7;10459:27;;;;;;;;;;;;;;;;10452:34;;10343:151;;;;:::o;30663:33::-;;;;:::o;30821:30::-;;;;:::o;23242:244::-;22519:12;:10;:12::i;:::-;22509:22;;:6;;;;;;;;;;;:22;;;22501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:1:::1;23331:22;;:8;:22;;::::0;23323:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23441:8;23412:38;;23433:6;;;;;;;;;;;23412:38;;;;;;;;;;;;23470:8;23461:6;;:17;;;;;;;;;;;;;;;;;;23242:244:::0;:::o;30937:31::-;;;;:::o;30632:24::-;;;;:::o;17341:181::-;17399:7;17419:9;17435:1;17431;:5;;;;:::i;:::-;17419:17;;17460:1;17455;:6;;17447:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17513:1;17506:8;;;17341:181;;;;:::o;1110:98::-;1163:7;1190:10;1183:17;;1110:98;:::o;15963:380::-;16116:1;16099:19;;:5;:19;;;16091:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16197:1;16178:21;;:7;:21;;;16170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16281:6;16251:11;:18;16263:5;16251:18;;;;;;;;;;;;;;;:27;16270:7;16251:27;;;;;;;;;;;;;;;:36;;;;16319:7;16303:32;;16312:5;16303:32;;;16328:6;16303:32;;;;;;:::i;:::-;;;;;;;;15963:380;;;:::o;36269:2578::-;36417:1;36401:18;;:4;:18;;;36393:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36494:1;36480:16;;:2;:16;;;36472:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36583:7;:5;:7::i;:::-;36575:15;;:4;:15;;;;:45;;;;;36613:7;:5;:7::i;:::-;36607:13;;:2;:13;;;;36575:45;:78;;;;;36651:1;36637:16;;:2;:16;;;;36575:78;:116;;;;;36684:6;36670:21;;:2;:21;;;;36575:116;:152;;;;;36714:13;36708:19;;:2;:19;;;;36575:152;36557:432;;;36756:32;36791:13;36801:2;36791:9;:13::i;:::-;36756:48;;36882:9;;36872:6;36845:24;:33;;;;:::i;:::-;:46;;36819:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;36739:250;36557:432;37022:1;37012:6;:11;37009:92;;37040:28;37056:4;37062:2;37066:1;37040:15;:28::i;:::-;37083:7;;37009:92;37115:28;37146:24;37164:4;37146:9;:24::i;:::-;37115:55;;37191:12;37230:18;;37206:20;:42;;37191:57;;37279:7;:35;;;;;37303:11;;;;;;;;;;;37279:35;:61;;;;;37332:8;;;;;;;;;;;37331:9;37279:61;:110;;;;;37358:25;:31;37384:4;37358:31;;;;;;;;;;;;;;;;;;;;;;;;;37357:32;37279:110;:153;;;;;37407:19;:25;37427:4;37407:25;;;;;;;;;;;;;;;;;;;;;;;;;37406:26;37279:153;:194;;;;;37450:19;:23;37470:2;37450:23;;;;;;;;;;;;;;;;;;;;;;;;;37449:24;37279:194;37261:338;;;37511:4;37500:8;;:15;;;;;;;;;;;;;;;;;;37544:10;:8;:10::i;:::-;37582:5;37571:8;;:16;;;;;;;;;;;;;;;;;;37261:338;37619:12;37635:8;;;;;;;;;;;37634:9;37619:24;;37744:19;:25;37764:4;37744:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37773:19;:23;37793:2;37773:23;;;;;;;;;;;;;;;;;;;;;;;;;37744:52;37741:99;;;37823:5;37813:15;;37741:99;37860:12;37964:7;37961:833;;;38015:25;:29;38041:2;38015:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38064:1;38048:13;;:17;38015:50;38011:614;;;38092:34;38122:3;38092:25;38103:13;;38092:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38085:41;;38193:13;;38174:16;;38167:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38145:18;;:61;;;;;;;:::i;:::-;;;;;;;;38273:13;;38254:16;;38247:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38225:18;;:61;;;;;;;:::i;:::-;;;;;;;;38011:614;;;38347:25;:31;38373:4;38347:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38397:1;38382:12;;:16;38347:51;38344:281;;;38423:33;38452:3;38423:24;38434:12;;38423:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38416:40;;38519:12;;38501:15;;38494:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38472:18;;:59;;;;;;;:::i;:::-;;;;;;;;38597:12;;38579:15;;38572:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38550:18;;:59;;;;;;;:::i;:::-;;;;;;;;38344:281;38011:614;38663:1;38656:4;:8;38653:93;;;38688:42;38704:4;38718;38725;38688:15;:42::i;:::-;38653:93;38778:4;38768:14;;;;;:::i;:::-;;;37961:833;38806:33;38822:4;38828:2;38832:6;38806:15;:33::i;:::-;36382:2465;;;;36269:2578;;;;:::o;18244:192::-;18330:7;18363:1;18358;:6;;18366:12;18350:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18390:9;18406:1;18402;:5;;;;:::i;:::-;18390:17;;18427:1;18420:8;;;18244:192;;;;;:::o;35487:188::-;35604:5;35570:25;:31;35596:4;35570:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35661:5;35627:40;;35655:4;35627:40;;;;;;;;;;;;35487:188;;:::o;13536:573::-;13694:1;13676:20;;:6;:20;;;13668:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13778:1;13757:23;;:9;:23;;;13749:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13833:47;13854:6;13862:9;13873:6;13833:20;:47::i;:::-;13913:71;13935:6;13913:71;;;;;;;;;;;;;;;;;:9;:17;13923:6;13913:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13893:9;:17;13903:6;13893:17;;;;;;;;;;;;;;;:91;;;;14018:32;14043:6;14018:9;:20;14028:9;14018:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13995:9;:20;14005:9;13995:20;;;;;;;;;;;;;;;:55;;;;14083:9;14066:35;;14075:6;14066:35;;;14094:6;14066:35;;;;;;:::i;:::-;;;;;;;;13536:573;;;:::o;39989:1259::-;40028:23;40054:24;40072:4;40054:9;:24::i;:::-;40028:50;;40089:25;40138:18;;40117;;:39;;;;:::i;:::-;40089:67;;40199:1;40180:15;:20;:46;;;;40225:1;40204:17;:22;40180:46;40177:60;;;40229:7;;;;40177:60;40306:23;40391:1;40371:17;40350:18;;40332:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40306:86;;40403:26;40432:36;40452:15;40432;:19;;:36;;;;:::i;:::-;40403:65;;40489:25;40517:21;40489:49;;40551:36;40568:18;40551:16;:36::i;:::-;40609:18;40630:44;40656:17;40630:21;:25;;:44;;;;:::i;:::-;40609:65;;40695:23;40721:57;40760:17;40721:34;40736:18;;40721:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40695:83;;40809:23;40848:15;40835:10;:28;;;;:::i;:::-;40809:54;;40915:1;40894:18;:22;;;;40948:1;40927:18;:22;;;;40978:15;;;;;;;;;;;40970:33;;:50;41004:15;40970:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41052:1;41034:15;:19;:42;;;;;41075:1;41057:15;:19;41034:42;41031:210;;;41092:46;41105:15;41122;41092:12;:46::i;:::-;41158:71;41173:18;41193:15;41210:18;;41158:71;;;;;;;;:::i;:::-;;;;;;;;41031:210;40017:1231;;;;;;;;39989:1259;:::o;18695:471::-;18753:7;19003:1;18998;:6;18994:47;;19028:1;19021:8;;;;18994:47;19053:9;19069:1;19065;:5;;;;:::i;:::-;19053:17;;19098:1;19093;19089;:5;;;;:::i;:::-;:10;19081:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19157:1;19150:8;;;18695:471;;;;;:::o;19642:132::-;19700:7;19727:39;19731:1;19734;19727:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19720:46;;19642:132;;;;:::o;16946:125::-;;;;:::o;17805:136::-;17863:7;17890:43;17894:1;17897;17890:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17883:50;;17805:136;;;;:::o;38855:601::-;38983:21;39021:1;39007:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38983:40;;39052:4;39034;39039:1;39034:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39078:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39068:4;39073:1;39068:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39113:62;39130:4;39145:15;39163:11;39113:8;:62::i;:::-;39214:15;:66;;;39295:11;39321:1;39365:4;39392;39412:15;39214:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38910:546;38855:601;:::o;39464:517::-;39612:62;39629:4;39644:15;39662:11;39612:8;:62::i;:::-;39717:15;:31;;;39756:9;39789:4;39809:11;39835:1;39878;30549:6;39947:15;39717:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39464:517;;:::o;20270:278::-;20356:7;20388:1;20384;:5;20391:12;20376:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20415:9;20431:1;20427;:5;;;;:::i;:::-;20415:17;;20539:1;20532:8;;;20270:278;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:118::-;5968:24;5986:5;5968:24;:::i;:::-;5963:3;5956:37;5881:118;;:::o;6005:222::-;6098:4;6136:2;6125:9;6121:18;6113:26;;6149:71;6217:1;6206:9;6202:17;6193:6;6149:71;:::i;:::-;6005:222;;;;:::o;6233:86::-;6268:7;6308:4;6301:5;6297:16;6286:27;;6233:86;;;:::o;6325:112::-;6408:22;6424:5;6408:22;:::i;:::-;6403:3;6396:35;6325:112;;:::o;6443:214::-;6532:4;6570:2;6559:9;6555:18;6547:26;;6583:67;6647:1;6636:9;6632:17;6623:6;6583:67;:::i;:::-;6443:214;;;;:::o;6663:329::-;6722:6;6771:2;6759:9;6750:7;6746:23;6742:32;6739:119;;;6777:79;;:::i;:::-;6739:119;6897:1;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6868:117;6663:329;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:323::-;7315:6;7364:2;7352:9;7343:7;7339:23;7335:32;7332:119;;;7370:79;;:::i;:::-;7332:119;7490:1;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7461:114;7259:323;;;;:::o;7588:468::-;7653:6;7661;7710:2;7698:9;7689:7;7685:23;7681:32;7678:119;;;7716:79;;:::i;:::-;7678:119;7836:1;7861:53;7906:7;7897:6;7886:9;7882:22;7861:53;:::i;:::-;7851:63;;7807:117;7963:2;7989:50;8031:7;8022:6;8011:9;8007:22;7989:50;:::i;:::-;7979:60;;7934:115;7588:468;;;;;:::o;8062:329::-;8121:6;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8062:329;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:179::-;10385:31;10381:1;10373:6;10369:14;10362:55;10245:179;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:180::-;11275:77;11272:1;11265:88;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11413:320;11457:6;11494:1;11488:4;11484:12;11474:22;;11541:1;11535:4;11531:12;11562:18;11552:81;;11618:4;11610:6;11606:17;11596:27;;11552:81;11680:2;11672:6;11669:14;11649:18;11646:38;11643:84;;11699:18;;:::i;:::-;11643:84;11464:269;11413:320;;;:::o;11739:244::-;11879:34;11875:1;11867:6;11863:14;11856:58;11948:27;11943:2;11935:6;11931:15;11924:52;11739:244;:::o;11989:366::-;12131:3;12152:67;12216:2;12211:3;12152:67;:::i;:::-;12145:74;;12228:93;12317:3;12228:93;:::i;:::-;12346:2;12341:3;12337:12;12330:19;;11989:366;;;:::o;12361:419::-;12527:4;12565:2;12554:9;12550:18;12542:26;;12614:9;12608:4;12604:20;12600:1;12589:9;12585:17;12578:47;12642:131;12768:4;12642:131;:::i;:::-;12634:139;;12361:419;;;:::o;12786:410::-;12826:7;12849:20;12867:1;12849:20;:::i;:::-;12844:25;;12883:20;12901:1;12883:20;:::i;:::-;12878:25;;12938:1;12935;12931:9;12960:30;12978:11;12960:30;:::i;:::-;12949:41;;13139:1;13130:7;13126:15;13123:1;13120:22;13100:1;13093:9;13073:83;13050:139;;13169:18;;:::i;:::-;13050:139;12834:362;12786:410;;;;:::o;13202:180::-;13250:77;13247:1;13240:88;13347:4;13344:1;13337:15;13371:4;13368:1;13361:15;13388:185;13428:1;13445:20;13463:1;13445:20;:::i;:::-;13440:25;;13479:20;13497:1;13479:20;:::i;:::-;13474:25;;13518:1;13508:35;;13523:18;;:::i;:::-;13508:35;13565:1;13562;13558:9;13553:14;;13388:185;;;;:::o;13579:235::-;13719:34;13715:1;13707:6;13703:14;13696:58;13788:18;13783:2;13775:6;13771:15;13764:43;13579:235;:::o;13820:366::-;13962:3;13983:67;14047:2;14042:3;13983:67;:::i;:::-;13976:74;;14059:93;14148:3;14059:93;:::i;:::-;14177:2;14172:3;14168:12;14161:19;;13820:366;;;:::o;14192:419::-;14358:4;14396:2;14385:9;14381:18;14373:26;;14445:9;14439:4;14435:20;14431:1;14420:9;14416:17;14409:47;14473:131;14599:4;14473:131;:::i;:::-;14465:139;;14192:419;;;:::o;14617:240::-;14757:34;14753:1;14745:6;14741:14;14734:58;14826:23;14821:2;14813:6;14809:15;14802:48;14617:240;:::o;14863:366::-;15005:3;15026:67;15090:2;15085:3;15026:67;:::i;:::-;15019:74;;15102:93;15191:3;15102:93;:::i;:::-;15220:2;15215:3;15211:12;15204:19;;14863:366;;;:::o;15235:419::-;15401:4;15439:2;15428:9;15424:18;15416:26;;15488:9;15482:4;15478:20;15474:1;15463:9;15459:17;15452:47;15516:131;15642:4;15516:131;:::i;:::-;15508:139;;15235:419;;;:::o;15660:239::-;15800:34;15796:1;15788:6;15784:14;15777:58;15869:22;15864:2;15856:6;15852:15;15845:47;15660:239;:::o;15905:366::-;16047:3;16068:67;16132:2;16127:3;16068:67;:::i;:::-;16061:74;;16144:93;16233:3;16144:93;:::i;:::-;16262:2;16257:3;16253:12;16246:19;;15905:366;;;:::o;16277:419::-;16443:4;16481:2;16470:9;16466:18;16458:26;;16530:9;16524:4;16520:20;16516:1;16505:9;16501:17;16494:47;16558:131;16684:4;16558:131;:::i;:::-;16550:139;;16277:419;;;:::o;16702:225::-;16842:34;16838:1;16830:6;16826:14;16819:58;16911:8;16906:2;16898:6;16894:15;16887:33;16702:225;:::o;16933:366::-;17075:3;17096:67;17160:2;17155:3;17096:67;:::i;:::-;17089:74;;17172:93;17261:3;17172:93;:::i;:::-;17290:2;17285:3;17281:12;17274:19;;16933:366;;;:::o;17305:419::-;17471:4;17509:2;17498:9;17494:18;17486:26;;17558:9;17552:4;17548:20;17544:1;17533:9;17529:17;17522:47;17586:131;17712:4;17586:131;:::i;:::-;17578:139;;17305:419;;;:::o;17730:177::-;17870:29;17866:1;17858:6;17854:14;17847:53;17730:177;:::o;17913:366::-;18055:3;18076:67;18140:2;18135:3;18076:67;:::i;:::-;18069:74;;18152:93;18241:3;18152:93;:::i;:::-;18270:2;18265:3;18261:12;18254:19;;17913:366;;;:::o;18285:419::-;18451:4;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18285:419;;;:::o;18710:223::-;18850:34;18846:1;18838:6;18834:14;18827:58;18919:6;18914:2;18906:6;18902:15;18895:31;18710:223;:::o;18939:366::-;19081:3;19102:67;19166:2;19161:3;19102:67;:::i;:::-;19095:74;;19178:93;19267:3;19178:93;:::i;:::-;19296:2;19291:3;19287:12;19280:19;;18939:366;;;:::o;19311:419::-;19477:4;19515:2;19504:9;19500:18;19492:26;;19564:9;19558:4;19554:20;19550:1;19539:9;19535:17;19528:47;19592:131;19718:4;19592:131;:::i;:::-;19584:139;;19311:419;;;:::o;19736:221::-;19876:34;19872:1;19864:6;19860:14;19853:58;19945:4;19940:2;19932:6;19928:15;19921:29;19736:221;:::o;19963:366::-;20105:3;20126:67;20190:2;20185:3;20126:67;:::i;:::-;20119:74;;20202:93;20291:3;20202:93;:::i;:::-;20320:2;20315:3;20311:12;20304:19;;19963:366;;;:::o;20335:419::-;20501:4;20539:2;20528:9;20524:18;20516:26;;20588:9;20582:4;20578:20;20574:1;20563:9;20559:17;20552:47;20616:131;20742:4;20616:131;:::i;:::-;20608:139;;20335:419;;;:::o;20760:224::-;20900:34;20896:1;20888:6;20884:14;20877:58;20969:7;20964:2;20956:6;20952:15;20945:32;20760:224;:::o;20990:366::-;21132:3;21153:67;21217:2;21212:3;21153:67;:::i;:::-;21146:74;;21229:93;21318:3;21229:93;:::i;:::-;21347:2;21342:3;21338:12;21331:19;;20990:366;;;:::o;21362:419::-;21528:4;21566:2;21555:9;21551:18;21543:26;;21615:9;21609:4;21605:20;21601:1;21590:9;21586:17;21579:47;21643:131;21769:4;21643:131;:::i;:::-;21635:139;;21362:419;;;:::o;21787:222::-;21927:34;21923:1;21915:6;21911:14;21904:58;21996:5;21991:2;21983:6;21979:15;21972:30;21787:222;:::o;22015:366::-;22157:3;22178:67;22242:2;22237:3;22178:67;:::i;:::-;22171:74;;22254:93;22343:3;22254:93;:::i;:::-;22372:2;22367:3;22363:12;22356:19;;22015:366;;;:::o;22387:419::-;22553:4;22591:2;22580:9;22576:18;22568:26;;22640:9;22634:4;22630:20;22626:1;22615:9;22611:17;22604:47;22668:131;22794:4;22668:131;:::i;:::-;22660:139;;22387:419;;;:::o;22812:223::-;22952:34;22948:1;22940:6;22936:14;22929:58;23021:6;23016:2;23008:6;23004:15;22997:31;22812:223;:::o;23041:366::-;23183:3;23204:67;23268:2;23263:3;23204:67;:::i;:::-;23197:74;;23280:93;23369:3;23280:93;:::i;:::-;23398:2;23393:3;23389:12;23382:19;;23041:366;;;:::o;23413:419::-;23579:4;23617:2;23606:9;23602:18;23594:26;;23666:9;23660:4;23656:20;23652:1;23641:9;23637:17;23630:47;23694:131;23820:4;23694:131;:::i;:::-;23686:139;;23413:419;;;:::o;23838:194::-;23878:4;23898:20;23916:1;23898:20;:::i;:::-;23893:25;;23932:20;23950:1;23932:20;:::i;:::-;23927:25;;23976:1;23973;23969:9;23961:17;;24000:1;23994:4;23991:11;23988:37;;;24005:18;;:::i;:::-;23988:37;23838:194;;;;:::o;24038:442::-;24187:4;24225:2;24214:9;24210:18;24202:26;;24238:71;24306:1;24295:9;24291:17;24282:6;24238:71;:::i;:::-;24319:72;24387:2;24376:9;24372:18;24363:6;24319:72;:::i;:::-;24401;24469:2;24458:9;24454:18;24445:6;24401:72;:::i;:::-;24038:442;;;;;;:::o;24486:220::-;24626:34;24622:1;24614:6;24610:14;24603:58;24695:3;24690:2;24682:6;24678:15;24671:28;24486:220;:::o;24712:366::-;24854:3;24875:67;24939:2;24934:3;24875:67;:::i;:::-;24868:74;;24951:93;25040:3;24951:93;:::i;:::-;25069:2;25064:3;25060:12;25053:19;;24712:366;;;:::o;25084:419::-;25250:4;25288:2;25277:9;25273:18;25265:26;;25337:9;25331:4;25327:20;25323:1;25312:9;25308:17;25301:47;25365:131;25491:4;25365:131;:::i;:::-;25357:139;;25084:419;;;:::o;25509:180::-;25557:77;25554:1;25547:88;25654:4;25651:1;25644:15;25678:4;25675:1;25668:15;25695:180;25743:77;25740:1;25733:88;25840:4;25837:1;25830:15;25864:4;25861:1;25854:15;25881:143;25938:5;25969:6;25963:13;25954:22;;25985:33;26012:5;25985:33;:::i;:::-;25881:143;;;;:::o;26030:351::-;26100:6;26149:2;26137:9;26128:7;26124:23;26120:32;26117:119;;;26155:79;;:::i;:::-;26117:119;26275:1;26300:64;26356:7;26347:6;26336:9;26332:22;26300:64;:::i;:::-;26290:74;;26246:128;26030:351;;;;:::o;26387:85::-;26432:7;26461:5;26450:16;;26387:85;;;:::o;26478:158::-;26536:9;26569:61;26587:42;26596:32;26622:5;26596:32;:::i;:::-;26587:42;:::i;:::-;26569:61;:::i;:::-;26556:74;;26478:158;;;:::o;26642:147::-;26737:45;26776:5;26737:45;:::i;:::-;26732:3;26725:58;26642:147;;:::o;26795:114::-;26862:6;26896:5;26890:12;26880:22;;26795:114;;;:::o;26915:184::-;27014:11;27048:6;27043:3;27036:19;27088:4;27083:3;27079:14;27064:29;;26915:184;;;;:::o;27105:132::-;27172:4;27195:3;27187:11;;27225:4;27220:3;27216:14;27208:22;;27105:132;;;:::o;27243:108::-;27320:24;27338:5;27320:24;:::i;:::-;27315:3;27308:37;27243:108;;:::o;27357:179::-;27426:10;27447:46;27489:3;27481:6;27447:46;:::i;:::-;27525:4;27520:3;27516:14;27502:28;;27357:179;;;;:::o;27542:113::-;27612:4;27644;27639:3;27635:14;27627:22;;27542:113;;;:::o;27691:732::-;27810:3;27839:54;27887:5;27839:54;:::i;:::-;27909:86;27988:6;27983:3;27909:86;:::i;:::-;27902:93;;28019:56;28069:5;28019:56;:::i;:::-;28098:7;28129:1;28114:284;28139:6;28136:1;28133:13;28114:284;;;28215:6;28209:13;28242:63;28301:3;28286:13;28242:63;:::i;:::-;28235:70;;28328:60;28381:6;28328:60;:::i;:::-;28318:70;;28174:224;28161:1;28158;28154:9;28149:14;;28114:284;;;28118:14;28414:3;28407:10;;27815:608;;;27691:732;;;;:::o;28429:831::-;28692:4;28730:3;28719:9;28715:19;28707:27;;28744:71;28812:1;28801:9;28797:17;28788:6;28744:71;:::i;:::-;28825:80;28901:2;28890:9;28886:18;28877:6;28825:80;:::i;:::-;28952:9;28946:4;28942:20;28937:2;28926:9;28922:18;28915:48;28980:108;29083:4;29074:6;28980:108;:::i;:::-;28972:116;;29098:72;29166:2;29155:9;29151:18;29142:6;29098:72;:::i;:::-;29180:73;29248:3;29237:9;29233:19;29224:6;29180:73;:::i;:::-;28429:831;;;;;;;;:::o;29266:807::-;29515:4;29553:3;29542:9;29538:19;29530:27;;29567:71;29635:1;29624:9;29620:17;29611:6;29567:71;:::i;:::-;29648:72;29716:2;29705:9;29701:18;29692:6;29648:72;:::i;:::-;29730:80;29806:2;29795:9;29791:18;29782:6;29730:80;:::i;:::-;29820;29896:2;29885:9;29881:18;29872:6;29820:80;:::i;:::-;29910:73;29978:3;29967:9;29963:19;29954:6;29910:73;:::i;:::-;29993;30061:3;30050:9;30046:19;30037:6;29993:73;:::i;:::-;29266:807;;;;;;;;;:::o;30079:143::-;30136:5;30167:6;30161:13;30152:22;;30183:33;30210:5;30183:33;:::i;:::-;30079:143;;;;:::o;30228:663::-;30316:6;30324;30332;30381:2;30369:9;30360:7;30356:23;30352:32;30349:119;;;30387:79;;:::i;:::-;30349:119;30507:1;30532:64;30588:7;30579:6;30568:9;30564:22;30532:64;:::i;:::-;30522:74;;30478:128;30645:2;30671:64;30727:7;30718:6;30707:9;30703:22;30671:64;:::i;:::-;30661:74;;30616:129;30784:2;30810:64;30866:7;30857:6;30846:9;30842:22;30810:64;:::i;:::-;30800:74;;30755:129;30228:663;;;;;:::o

Swarm Source

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