ETH Price: $3,409.68 (+2.69%)

Token

Mauve Finance (Mauve)
 

Overview

Max Total Supply

100,000,000 Mauve

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
22,001.217844707171060912 Mauve

Value
$0.00
0x5a1b2bc070c62d9fd3c1c7a3e57b409c390ddb97
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:
MauveFinance

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-21
*/

// SPDX-License-Identifier: MIT

/**

Telegram: https://t.me/MauveFinancePortal
Website: https://mauvefinance.com
Twitter: https://x.com/0xMauveFinance

**/

pragma solidity ^0.8.10;

pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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


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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD);
    address public ETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    bool private swapping;
    
    uint256 public genesis_block;

    address public deployerAddress;
    address public lpLocker;

    address private devWallet;
    address private MarketingWallet;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buydevfee;
    uint256 public buyMarketingfee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public selldevfee;
    uint256 public sellMarketingfee;
    uint256 public sellLiquidityFee;

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

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


    event ExcludeFromFees(address indexed account, bool isExcluded);

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
        event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );


    constructor() ERC20("Mauve Finance", "Mauve") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), ETH);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);


        uint256 _buydevfee = 25;
        uint256 _buyMarketingfee = 0;
        uint256 _buyLiquidityFee = 0;

        uint256 _selldevfee = 25;
        uint256 _sellMarketingfee = 0;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 10 / 1000; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buydevfee = _buydevfee;
        buyMarketingfee = _buyMarketingfee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buydevfee + buyMarketingfee + buyLiquidityFee;

        selldevfee = _selldevfee;
        sellMarketingfee = _sellMarketingfee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = selldevfee + sellMarketingfee + sellLiquidityFee;

        devWallet = address(0xd349c823154F63497CE7C6516eD557Ef446F8d53); // set as dev wallet
        MarketingWallet = address(0xd349c823154F63497CE7C6516eD557Ef446F8d53);
        deployerAddress = address(0xd349c823154F63497CE7C6516eD557Ef446F8d53); 
        lpLocker = address(msg.sender); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdEaD), true);
        excludeFromFees(deployerAddress, true); // Deployer Address
        excludeFromFees(lpLocker, true); // LP Locker

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdEaD), true);
        excludeFromMaxTransaction(deployerAddress, true); // Deployer Address
        excludeFromMaxTransaction(lpLocker, true); // LP Locker

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

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

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

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _devfee,
        uint256 _marketingfee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buydevfee = _devfee;
        buyMarketingfee = _marketingfee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buydevfee  + buyMarketingfee + buyLiquidityFee;
        require(buyTotalFees <= 99, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _devfee,
        uint256 _marketingfee,
        uint256 _liquidityFee
    ) external onlyOwner {
        selldevfee = _devfee;
        sellMarketingfee = _marketingfee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = selldevfee  + sellMarketingfee + sellLiquidityFee;
        require(sellTotalFees <= 99, "Must keep fees at 10% or less");
    }

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

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

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }


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

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0x000000000000000000000000000000000000dEaD) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            to == uniswapV2Pair &&
            !_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;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        uint256 tokensForMarketing = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev = (fees * selldevfee) / sellTotalFees;
                tokensForMarketing = (fees * sellMarketingfee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; 
                tokensForDev = (fees * buydevfee) / buyTotalFees;
                tokensForMarketing = (fees * buyMarketingfee) / buyTotalFees;
            }

            if (fees> 0) {
                super._transfer(from, address(this), fees);
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            }

            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] = ETH;

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

    // make the swap
    uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
        tokenAmount,
        0, // accept any amount of WETH
        path,
        devWallet,
        block.timestamp
    );


    payable(MarketingWallet).transfer(address(this).balance);
}


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForETH(contractBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","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":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"buydevfee","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":[],"name":"deployerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"selldevfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"_devfee","type":"uint256"},{"internalType":"uint256","name":"_marketingfee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devfee","type":"uint256"},{"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"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055503480156100b2575f5ffd5b506040518060400160405280600d81526020017f4d617576652046696e616e6365000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d61757665000000000000000000000000000000000000000000000000000000815250816003908161012e9190610d50565b50806004908161013e9190610d50565b50505061015d6101526106a660201b60201c565b6106ad60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061018681600161077060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610203573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102279190610e7d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610282929190610eb7565b6020604051808303815f875af115801561029e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c29190610e7d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061030860a051600161077060201b60201c565b5f601990505f5f90505f5f90505f601990505f5f90505f5f90505f6a52b7d2dcc80cd2e400000090506103e8600a826103419190610f0b565b61034b9190610f79565b600c819055506103e86014826103619190610f0b565b61036b9190610f79565b600e819055506127106005826103819190610f0b565b61038b9190610f79565b600d819055508660118190555085601281905550846013819055506013546012546011546103b99190610fa9565b6103c39190610fa9565b6010819055508360158190555082601681905550816017819055506017546016546015546103f19190610fa9565b6103fb9190610fa9565b60148190555073d349c823154f63497ce7c6516ed557ef446f8d53600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d349c823154f63497ce7c6516ed557ef446f8d53600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d349c823154f63497ce7c6516ed557ef446f8d5360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061055b61054e61085060201b60201c565b600161087860201b60201c565b61056c30600161087860201b60201c565b61057f61dead600161087860201b60201c565b6105b160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087860201b60201c565b6105e360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087860201b60201c565b6106016105f461085060201b60201c565b600161077060201b60201c565b61061230600161077060201b60201c565b61062561dead600161077060201b60201c565b61065760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161077060201b60201c565b61068960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161077060201b60201c565b61069933826109a660201b60201c565b5050505050505050611117565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61077e6106a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166107a261085060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ef90611036565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108866106a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108aa61085060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790611036565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161099a919061106e565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906110d1565b60405180910390fd5b610a255f8383610b0960201b60201c565b8060025f828254610a369190610fa9565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a889190610fa9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aec91906110fe565b60405180910390a3610b055f8383610b0e60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b8e57607f821691505b602082108103610ba157610ba0610b4a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610bc8565b610c0d8683610bc8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c51610c4c610c4784610c25565b610c2e565b610c25565b9050919050565b5f819050919050565b610c6a83610c37565b610c7e610c7682610c58565b848454610bd4565b825550505050565b5f5f905090565b610c95610c86565b610ca0818484610c61565b505050565b5b81811015610cc357610cb85f82610c8d565b600181019050610ca6565b5050565b601f821115610d0857610cd981610ba7565b610ce284610bb9565b81016020851015610cf1578190505b610d05610cfd85610bb9565b830182610ca5565b50505b505050565b5f82821c905092915050565b5f610d285f1984600802610d0d565b1980831691505092915050565b5f610d408383610d19565b9150826002028217905092915050565b610d5982610b13565b67ffffffffffffffff811115610d7257610d71610b1d565b5b610d7c8254610b77565b610d87828285610cc7565b5f60209050601f831160018114610db8575f8415610da6578287015190505b610db08582610d35565b865550610e17565b601f198416610dc686610ba7565b5f5b82811015610ded57848901518255600182019150602085019450602081019050610dc8565b86831015610e0a5784890151610e06601f891682610d19565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e4c82610e23565b9050919050565b610e5c81610e42565b8114610e66575f5ffd5b50565b5f81519050610e7781610e53565b92915050565b5f60208284031215610e9257610e91610e1f565b5b5f610e9f84828501610e69565b91505092915050565b610eb181610e42565b82525050565b5f604082019050610eca5f830185610ea8565b610ed76020830184610ea8565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f1582610c25565b9150610f2083610c25565b9250828202610f2e81610c25565b91508282048414831517610f4557610f44610ede565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610f8382610c25565b9150610f8e83610c25565b925082610f9e57610f9d610f4c565b5b828204905092915050565b5f610fb382610c25565b9150610fbe83610c25565b9250828201905080821115610fd657610fd5610ede565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611020602083610fdc565b915061102b82610fec565b602082019050919050565b5f6020820190508181035f83015261104d81611014565b9050919050565b5f8115159050919050565b61106881611054565b82525050565b5f6020820190506110815f83018461105f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6110bb601f83610fdc565b91506110c682611087565b602082019050919050565b5f6020820190508181035f8301526110e8816110af565b9050919050565b6110f881610c25565b82525050565b5f6020820190506111115f8301846110ef565b92915050565b60805160a051613e286111695f395f8181610f1f015281816121a1015281816123e2015281816125e9015281816126d001526127d401525f8181610b9101528181612cec0152612d130152613e285ff3fe60806040526004361061028b575f3560e01c8063751039fc11610159578063c17b5b8c116100c0578063e2f4560511610079578063e2f45605146109a6578063efdee94f146109d0578063f11a24d3146109fa578063f2fde38b14610a24578063f637434214610a4c578063f8b45b0514610a7657610292565b8063c17b5b8c1461088a578063c18bc195146108b2578063c8c8ebe4146108da578063d257b34f14610904578063d85ba06314610940578063dd62ed3e1461096a57610292565b8063924de9b711610112578063924de9b71461078257806395d89b41146107aa578063a9059cbb146107d4578063aacebbe314610810578063bbc0c74214610838578063c02466681461086257610292565b8063751039fc1461069e5780637571336a146106c85780638095d564146106f05780638322fff2146107185780638a8c523c146107425780638da5cb5b1461075857610292565b8063313ce567116101fd5780634fbee193116101b65780634fbee1931461059257806365c1bef8146105ce5780636a486a8e146105f85780636ddd17131461062257806370a082311461064c578063715018a61461068857610292565b8063313ce567146104965780634853e7d9146104c0578063489ae78d146104ea57806348c492d61461051457806349bd5a5e1461053e5780634a62bb651461056857610292565b806318160ddd1161024f57806318160ddd1461038c5780631816467f146103b6578063203e727e146103de57806323b872dd14610406578063274a533c1461044257806327c8f8351461046c57610292565b806303fc20131461029657806306fdde03146102c0578063095ea7b3146102ea57806310d5de53146103265780631694505e1461036257610292565b3661029257005b5f5ffd5b3480156102a1575f5ffd5b506102aa610aa0565b6040516102b79190612e68565b60405180910390f35b3480156102cb575f5ffd5b506102d4610ac5565b6040516102e19190612ef1565b60405180910390f35b3480156102f5575f5ffd5b50610310600480360381019061030b9190612f72565b610b55565b60405161031d9190612fca565b60405180910390f35b348015610331575f5ffd5b5061034c60048036038101906103479190612fe3565b610b72565b6040516103599190612fca565b60405180910390f35b34801561036d575f5ffd5b50610376610b8f565b6040516103839190613069565b60405180910390f35b348015610397575f5ffd5b506103a0610bb3565b6040516103ad9190613091565b60405180910390f35b3480156103c1575f5ffd5b506103dc60048036038101906103d79190612fe3565b610bbc565b005b3480156103e9575f5ffd5b5061040460048036038101906103ff91906130aa565b610cf6565b005b348015610411575f5ffd5b5061042c600480360381019061042791906130d5565b610e05565b6040516104399190612fca565b60405180910390f35b34801561044d575f5ffd5b50610456610ef7565b6040516104639190613091565b60405180910390f35b348015610477575f5ffd5b50610480610efd565b60405161048d9190612e68565b60405180910390f35b3480156104a1575f5ffd5b506104aa610f03565b6040516104b79190613140565b60405180910390f35b3480156104cb575f5ffd5b506104d4610f0b565b6040516104e19190613091565b60405180910390f35b3480156104f5575f5ffd5b506104fe610f11565b60405161050b9190613091565b60405180910390f35b34801561051f575f5ffd5b50610528610f17565b6040516105359190613091565b60405180910390f35b348015610549575f5ffd5b50610552610f1d565b60405161055f9190612e68565b60405180910390f35b348015610573575f5ffd5b5061057c610f41565b6040516105899190612fca565b60405180910390f35b34801561059d575f5ffd5b506105b860048036038101906105b39190612fe3565b610f53565b6040516105c59190612fca565b60405180910390f35b3480156105d9575f5ffd5b506105e2610fa5565b6040516105ef9190613091565b60405180910390f35b348015610603575f5ffd5b5061060c610fab565b6040516106199190613091565b60405180910390f35b34801561062d575f5ffd5b50610636610fb1565b6040516106439190612fca565b60405180910390f35b348015610657575f5ffd5b50610672600480360381019061066d9190612fe3565b610fc4565b60405161067f9190613091565b60405180910390f35b348015610693575f5ffd5b5061069c611009565b005b3480156106a9575f5ffd5b506106b2611090565b6040516106bf9190612fca565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e99190613183565b61112d565b005b3480156106fb575f5ffd5b50610716600480360381019061071191906131c1565b611201565b005b348015610723575f5ffd5b5061072c611300565b6040516107399190612e68565b60405180910390f35b34801561074d575f5ffd5b50610756611325565b005b348015610763575f5ffd5b5061076c6113d9565b6040516107799190612e68565b60405180910390f35b34801561078d575f5ffd5b506107a860048036038101906107a39190613211565b611401565b005b3480156107b5575f5ffd5b506107be61149a565b6040516107cb9190612ef1565b60405180910390f35b3480156107df575f5ffd5b506107fa60048036038101906107f59190612f72565b61152a565b6040516108079190612fca565b60405180910390f35b34801561081b575f5ffd5b5061083660048036038101906108319190612fe3565b611547565b005b348015610843575f5ffd5b5061084c611681565b6040516108599190612fca565b60405180910390f35b34801561086d575f5ffd5b5061088860048036038101906108839190613183565b611694565b005b348015610895575f5ffd5b506108b060048036038101906108ab91906131c1565b6117b6565b005b3480156108bd575f5ffd5b506108d860048036038101906108d391906130aa565b6118b5565b005b3480156108e5575f5ffd5b506108ee6119c4565b6040516108fb9190613091565b60405180910390f35b34801561090f575f5ffd5b5061092a600480360381019061092591906130aa565b6119ca565b6040516109379190612fca565b60405180910390f35b34801561094b575f5ffd5b50610954611b1e565b6040516109619190613091565b60405180910390f35b348015610975575f5ffd5b50610990600480360381019061098b919061323c565b611b24565b60405161099d9190613091565b60405180910390f35b3480156109b1575f5ffd5b506109ba611ba6565b6040516109c79190613091565b60405180910390f35b3480156109db575f5ffd5b506109e4611bac565b6040516109f19190612e68565b60405180910390f35b348015610a05575f5ffd5b50610a0e611bd1565b604051610a1b9190613091565b60405180910390f35b348015610a2f575f5ffd5b50610a4a6004803603810190610a459190612fe3565b611bd7565b005b348015610a57575f5ffd5b50610a60611ccd565b604051610a6d9190613091565b60405180910390f35b348015610a81575f5ffd5b50610a8a611cd3565b604051610a979190613091565b60405180910390f35b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ad4906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b00906132a7565b8015610b4b5780601f10610b2257610100808354040283529160200191610b4b565b820191905f5260205f20905b815481529060010190602001808311610b2e57829003601f168201915b5050505050905090565b5f610b68610b61611cd9565b8484611ce0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610bc4611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610be26113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90613321565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cfe611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610d1c6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613321565b60405180910390fd5b670de0b6b3a76400006103e86005610d88610bb3565b610d92919061336c565b610d9c91906133da565b610da691906133da565b811015610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf9061347a565b60405180910390fd5b670de0b6b3a764000081610dfc919061336c565b600c8190555050565b5f610e11848484611ea3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e58611cd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613508565b60405180910390fd5b610eeb85610ee3611cd9565b858403611ce0565b60019150509392505050565b60075481565b61dead81565b5f6012905090565b60125481565b60115481565b60165481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b60145481565b600f60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611011611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661102f6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613321565b60405180910390fd5b61108e5f612821565b565b5f611099611cd9565b73ffffffffffffffffffffffffffffffffffffffff166110b76113d9565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613321565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b611135611cd9565b73ffffffffffffffffffffffffffffffffffffffff166111536113d9565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090613321565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611209611cd9565b73ffffffffffffffffffffffffffffffffffffffff166112276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613321565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546112a59190613526565b6112af9190613526565b601081905550606360105411156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f2906135a3565b60405180910390fd5b505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61132d611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661134b6113d9565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613321565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611409611cd9565b73ffffffffffffffffffffffffffffffffffffffff166114276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613321565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546114a9906132a7565b80601f01602080910402602001604051908101604052809291908181526020018280546114d5906132a7565b80156115205780601f106114f757610100808354040283529160200191611520565b820191905f5260205f20905b81548152906001019060200180831161150357829003601f168201915b5050505050905090565b5f61153d611536611cd9565b8484611ea3565b6001905092915050565b61154f611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661156d6113d9565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613321565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b61169c611cd9565b73ffffffffffffffffffffffffffffffffffffffff166116ba6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613321565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117aa9190612fca565b60405180910390a25050565b6117be611cd9565b73ffffffffffffffffffffffffffffffffffffffff166117dc6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613321565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461185a9190613526565b6118649190613526565b601481905550606360145411156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906135a3565b60405180910390fd5b505050565b6118bd611cd9565b73ffffffffffffffffffffffffffffffffffffffff166118db6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613321565b60405180910390fd5b670de0b6b3a76400006103e86005611947610bb3565b611951919061336c565b61195b91906133da565b61196591906133da565b8110156119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613631565b60405180910390fd5b670de0b6b3a7640000816119bb919061336c565b600e8190555050565b600c5481565b5f6119d3611cd9565b73ffffffffffffffffffffffffffffffffffffffff166119f16113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613321565b60405180910390fd5b620186a06001611a55610bb3565b611a5f919061336c565b611a6991906133da565b821015611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa2906136bf565b60405180910390fd5b6103e86005611ab8610bb3565b611ac2919061336c565b611acc91906133da565b821115611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b059061374d565b60405180910390fd5b81600d8190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611bdf611cd9565b73ffffffffffffffffffffffffffffffffffffffff16611bfd6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90613321565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906137db565b60405180910390fd5b611cca81612821565b50565b60175481565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613869565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906138f7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e969190613091565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613a13565b60405180910390fd5b5f8103611f9657611f9183835f6128e4565b61281c565b600f5f9054906101000a900460ff161561239257611fb26113d9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120205750611ff06113d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612092575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120ab5750600660149054906101000a900460ff16155b1561239157600f60019054906101000a900460ff1661219f5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061215f575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590613a7b565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612241575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e857600c5481111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613b09565b60405180910390fd5b600e5461229783610fc4565b826122a29190613526565b11156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90613b71565b60405180910390fd5b612390565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661238f57600e5461234283610fc4565b8261234d9190613526565b111561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613b71565b60405180910390fd5b5b5b5b5b5f61239c30610fc4565b90505f600d5482101590508080156123c05750600f60029054906101000a900460ff165b80156123d95750600660149054906101000a900460ff16155b801561243057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612483575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124d6575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612519576001600660146101000a81548160ff0219169083151502179055506124fe612b59565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125c8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125d1575f90505b5f5f90505f5f90505f5f90505f5f90508415612809577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561264357505f601454115b156126ce5761267060646126626014548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b935060145460175485612683919061336c565b61268d91906133da565b9250601454601554856126a0919061336c565b6126aa91906133da565b9150601454601654856126bd919061336c565b6126c791906133da565b90506127b2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614801561272a57505f601054115b156127b15761275760646127496010548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b93506010546013548561276a919061336c565b61277491906133da565b925060105460115485612787919061336c565b61279191906133da565b9150601054601254856127a4919061336c565b6127ae91906133da565b90505b5b5f8411156127c6576127c58a30866128e4565b5b5f8311156127fa576127f9307f0000000000000000000000000000000000000000000000000000000000000000856128e4565b5b83886128069190613b8f565b97505b6128148a8a8a6128e4565b505050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790613a13565b60405180910390fd5b6129cb838383612bd1565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4590613c32565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612adc9190613526565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b409190613091565b60405180910390a3612b53848484612bd6565b50505050565b5f612b6330610fc4565b90505f8103612b725750612ba5565b6014600d54612b81919061336c565b811115612b9a576014600d54612b97919061336c565b90505b612ba381612bdb565b505b565b5f8183612bb4919061336c565b905092915050565b5f8183612bc991906133da565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115612bf757612bf6613c50565b5b604051908082528060200260200182016040528015612c255781602001602082028036833780820191505090505b50905030815f81518110612c3c57612c3b613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612cac57612cab613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d11307f000000000000000000000000000000000000000000000000000000000000000084611ce0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d93959493929190613d9a565b5f604051808303815f87803b158015612daa575f5ffd5b505af1158015612dbc573d5f5f3e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612e24573d5f5f3e3d5ffd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e5282612e29565b9050919050565b612e6281612e48565b82525050565b5f602082019050612e7b5f830184612e59565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ec382612e81565b612ecd8185612e8b565b9350612edd818560208601612e9b565b612ee681612ea9565b840191505092915050565b5f6020820190508181035f830152612f098184612eb9565b905092915050565b5f5ffd5b612f1e81612e48565b8114612f28575f5ffd5b50565b5f81359050612f3981612f15565b92915050565b5f819050919050565b612f5181612f3f565b8114612f5b575f5ffd5b50565b5f81359050612f6c81612f48565b92915050565b5f5f60408385031215612f8857612f87612f11565b5b5f612f9585828601612f2b565b9250506020612fa685828601612f5e565b9150509250929050565b5f8115159050919050565b612fc481612fb0565b82525050565b5f602082019050612fdd5f830184612fbb565b92915050565b5f60208284031215612ff857612ff7612f11565b5b5f61300584828501612f2b565b91505092915050565b5f819050919050565b5f61303161302c61302784612e29565b61300e565b612e29565b9050919050565b5f61304282613017565b9050919050565b5f61305382613038565b9050919050565b61306381613049565b82525050565b5f60208201905061307c5f83018461305a565b92915050565b61308b81612f3f565b82525050565b5f6020820190506130a45f830184613082565b92915050565b5f602082840312156130bf576130be612f11565b5b5f6130cc84828501612f5e565b91505092915050565b5f5f5f606084860312156130ec576130eb612f11565b5b5f6130f986828701612f2b565b935050602061310a86828701612f2b565b925050604061311b86828701612f5e565b9150509250925092565b5f60ff82169050919050565b61313a81613125565b82525050565b5f6020820190506131535f830184613131565b92915050565b61316281612fb0565b811461316c575f5ffd5b50565b5f8135905061317d81613159565b92915050565b5f5f6040838503121561319957613198612f11565b5b5f6131a685828601612f2b565b92505060206131b78582860161316f565b9150509250929050565b5f5f5f606084860312156131d8576131d7612f11565b5b5f6131e586828701612f5e565b93505060206131f686828701612f5e565b925050604061320786828701612f5e565b9150509250925092565b5f6020828403121561322657613225612f11565b5b5f6132338482850161316f565b91505092915050565b5f5f6040838503121561325257613251612f11565b5b5f61325f85828601612f2b565b925050602061327085828601612f2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132be57607f821691505b6020821081036132d1576132d061327a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61330b602083612e8b565b9150613316826132d7565b602082019050919050565b5f6020820190508181035f830152613338816132ff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61337682612f3f565b915061338183612f3f565b925082820261338f81612f3f565b915082820484148315176133a6576133a561333f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6133e482612f3f565b91506133ef83612f3f565b9250826133ff576133fe6133ad565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613464602f83612e8b565b915061346f8261340a565b604082019050919050565b5f6020820190508181035f83015261349181613458565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6134f2602883612e8b565b91506134fd82613498565b604082019050919050565b5f6020820190508181035f83015261351f816134e6565b9050919050565b5f61353082612f3f565b915061353b83612f3f565b92508282019050808211156135535761355261333f565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f61358d601d83612e8b565b915061359882613559565b602082019050919050565b5f6020820190508181035f8301526135ba81613581565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61361b602483612e8b565b9150613626826135c1565b604082019050919050565b5f6020820190508181035f8301526136488161360f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6136a9603583612e8b565b91506136b48261364f565b604082019050919050565b5f6020820190508181035f8301526136d68161369d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613737603483612e8b565b9150613742826136dd565b604082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6137c5602683612e8b565b91506137d08261376b565b604082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613853602483612e8b565b915061385e826137f9565b604082019050919050565b5f6020820190508181035f83015261388081613847565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138e1602283612e8b565b91506138ec82613887565b604082019050919050565b5f6020820190508181035f83015261390e816138d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61396f602583612e8b565b915061397a82613915565b604082019050919050565b5f6020820190508181035f83015261399c81613963565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139fd602383612e8b565b9150613a08826139a3565b604082019050919050565b5f6020820190508181035f830152613a2a816139f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613a65601683612e8b565b9150613a7082613a31565b602082019050919050565b5f6020820190508181035f830152613a9281613a59565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613af3603583612e8b565b9150613afe82613a99565b604082019050919050565b5f6020820190508181035f830152613b2081613ae7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613b5b601383612e8b565b9150613b6682613b27565b602082019050919050565b5f6020820190508181035f830152613b8881613b4f565b9050919050565b5f613b9982612f3f565b9150613ba483612f3f565b9250828203905081811115613bbc57613bbb61333f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613c1c602683612e8b565b9150613c2782613bc2565b604082019050919050565b5f6020820190508181035f830152613c4981613c10565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f613ccd613cc8613cc384613caa565b61300e565b612f3f565b9050919050565b613cdd81613cb3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d1581612e48565b82525050565b5f613d268383613d0c565b60208301905092915050565b5f602082019050919050565b5f613d4882613ce3565b613d528185613ced565b9350613d5d83613cfd565b805f5b83811015613d8d578151613d748882613d1b565b9750613d7f83613d32565b925050600181019050613d60565b5085935050505092915050565b5f60a082019050613dad5f830188613082565b613dba6020830187613cd4565b8181036040830152613dcc8186613d3e565b9050613ddb6060830185612e59565b613de86080830184613082565b969550505050505056fea26469706673582212203459c43522f5667da8e7d1ebbabea140dfd41820397bf66a6a80829257294fd464736f6c634300081b0033

Deployed Bytecode

0x60806040526004361061028b575f3560e01c8063751039fc11610159578063c17b5b8c116100c0578063e2f4560511610079578063e2f45605146109a6578063efdee94f146109d0578063f11a24d3146109fa578063f2fde38b14610a24578063f637434214610a4c578063f8b45b0514610a7657610292565b8063c17b5b8c1461088a578063c18bc195146108b2578063c8c8ebe4146108da578063d257b34f14610904578063d85ba06314610940578063dd62ed3e1461096a57610292565b8063924de9b711610112578063924de9b71461078257806395d89b41146107aa578063a9059cbb146107d4578063aacebbe314610810578063bbc0c74214610838578063c02466681461086257610292565b8063751039fc1461069e5780637571336a146106c85780638095d564146106f05780638322fff2146107185780638a8c523c146107425780638da5cb5b1461075857610292565b8063313ce567116101fd5780634fbee193116101b65780634fbee1931461059257806365c1bef8146105ce5780636a486a8e146105f85780636ddd17131461062257806370a082311461064c578063715018a61461068857610292565b8063313ce567146104965780634853e7d9146104c0578063489ae78d146104ea57806348c492d61461051457806349bd5a5e1461053e5780634a62bb651461056857610292565b806318160ddd1161024f57806318160ddd1461038c5780631816467f146103b6578063203e727e146103de57806323b872dd14610406578063274a533c1461044257806327c8f8351461046c57610292565b806303fc20131461029657806306fdde03146102c0578063095ea7b3146102ea57806310d5de53146103265780631694505e1461036257610292565b3661029257005b5f5ffd5b3480156102a1575f5ffd5b506102aa610aa0565b6040516102b79190612e68565b60405180910390f35b3480156102cb575f5ffd5b506102d4610ac5565b6040516102e19190612ef1565b60405180910390f35b3480156102f5575f5ffd5b50610310600480360381019061030b9190612f72565b610b55565b60405161031d9190612fca565b60405180910390f35b348015610331575f5ffd5b5061034c60048036038101906103479190612fe3565b610b72565b6040516103599190612fca565b60405180910390f35b34801561036d575f5ffd5b50610376610b8f565b6040516103839190613069565b60405180910390f35b348015610397575f5ffd5b506103a0610bb3565b6040516103ad9190613091565b60405180910390f35b3480156103c1575f5ffd5b506103dc60048036038101906103d79190612fe3565b610bbc565b005b3480156103e9575f5ffd5b5061040460048036038101906103ff91906130aa565b610cf6565b005b348015610411575f5ffd5b5061042c600480360381019061042791906130d5565b610e05565b6040516104399190612fca565b60405180910390f35b34801561044d575f5ffd5b50610456610ef7565b6040516104639190613091565b60405180910390f35b348015610477575f5ffd5b50610480610efd565b60405161048d9190612e68565b60405180910390f35b3480156104a1575f5ffd5b506104aa610f03565b6040516104b79190613140565b60405180910390f35b3480156104cb575f5ffd5b506104d4610f0b565b6040516104e19190613091565b60405180910390f35b3480156104f5575f5ffd5b506104fe610f11565b60405161050b9190613091565b60405180910390f35b34801561051f575f5ffd5b50610528610f17565b6040516105359190613091565b60405180910390f35b348015610549575f5ffd5b50610552610f1d565b60405161055f9190612e68565b60405180910390f35b348015610573575f5ffd5b5061057c610f41565b6040516105899190612fca565b60405180910390f35b34801561059d575f5ffd5b506105b860048036038101906105b39190612fe3565b610f53565b6040516105c59190612fca565b60405180910390f35b3480156105d9575f5ffd5b506105e2610fa5565b6040516105ef9190613091565b60405180910390f35b348015610603575f5ffd5b5061060c610fab565b6040516106199190613091565b60405180910390f35b34801561062d575f5ffd5b50610636610fb1565b6040516106439190612fca565b60405180910390f35b348015610657575f5ffd5b50610672600480360381019061066d9190612fe3565b610fc4565b60405161067f9190613091565b60405180910390f35b348015610693575f5ffd5b5061069c611009565b005b3480156106a9575f5ffd5b506106b2611090565b6040516106bf9190612fca565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e99190613183565b61112d565b005b3480156106fb575f5ffd5b50610716600480360381019061071191906131c1565b611201565b005b348015610723575f5ffd5b5061072c611300565b6040516107399190612e68565b60405180910390f35b34801561074d575f5ffd5b50610756611325565b005b348015610763575f5ffd5b5061076c6113d9565b6040516107799190612e68565b60405180910390f35b34801561078d575f5ffd5b506107a860048036038101906107a39190613211565b611401565b005b3480156107b5575f5ffd5b506107be61149a565b6040516107cb9190612ef1565b60405180910390f35b3480156107df575f5ffd5b506107fa60048036038101906107f59190612f72565b61152a565b6040516108079190612fca565b60405180910390f35b34801561081b575f5ffd5b5061083660048036038101906108319190612fe3565b611547565b005b348015610843575f5ffd5b5061084c611681565b6040516108599190612fca565b60405180910390f35b34801561086d575f5ffd5b5061088860048036038101906108839190613183565b611694565b005b348015610895575f5ffd5b506108b060048036038101906108ab91906131c1565b6117b6565b005b3480156108bd575f5ffd5b506108d860048036038101906108d391906130aa565b6118b5565b005b3480156108e5575f5ffd5b506108ee6119c4565b6040516108fb9190613091565b60405180910390f35b34801561090f575f5ffd5b5061092a600480360381019061092591906130aa565b6119ca565b6040516109379190612fca565b60405180910390f35b34801561094b575f5ffd5b50610954611b1e565b6040516109619190613091565b60405180910390f35b348015610975575f5ffd5b50610990600480360381019061098b919061323c565b611b24565b60405161099d9190613091565b60405180910390f35b3480156109b1575f5ffd5b506109ba611ba6565b6040516109c79190613091565b60405180910390f35b3480156109db575f5ffd5b506109e4611bac565b6040516109f19190612e68565b60405180910390f35b348015610a05575f5ffd5b50610a0e611bd1565b604051610a1b9190613091565b60405180910390f35b348015610a2f575f5ffd5b50610a4a6004803603810190610a459190612fe3565b611bd7565b005b348015610a57575f5ffd5b50610a60611ccd565b604051610a6d9190613091565b60405180910390f35b348015610a81575f5ffd5b50610a8a611cd3565b604051610a979190613091565b60405180910390f35b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ad4906132a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b00906132a7565b8015610b4b5780601f10610b2257610100808354040283529160200191610b4b565b820191905f5260205f20905b815481529060010190602001808311610b2e57829003601f168201915b5050505050905090565b5f610b68610b61611cd9565b8484611ce0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610bc4611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610be26113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90613321565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cfe611cd9565b73ffffffffffffffffffffffffffffffffffffffff16610d1c6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613321565b60405180910390fd5b670de0b6b3a76400006103e86005610d88610bb3565b610d92919061336c565b610d9c91906133da565b610da691906133da565b811015610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf9061347a565b60405180910390fd5b670de0b6b3a764000081610dfc919061336c565b600c8190555050565b5f610e11848484611ea3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e58611cd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613508565b60405180910390fd5b610eeb85610ee3611cd9565b858403611ce0565b60019150509392505050565b60075481565b61dead81565b5f6012905090565b60125481565b60115481565b60165481565b7f000000000000000000000000f99001f22403e2f006d96e732ee5c6367f611c1b81565b600f5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b60145481565b600f60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611011611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661102f6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90613321565b60405180910390fd5b61108e5f612821565b565b5f611099611cd9565b73ffffffffffffffffffffffffffffffffffffffff166110b76113d9565b73ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613321565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b611135611cd9565b73ffffffffffffffffffffffffffffffffffffffff166111536113d9565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090613321565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611209611cd9565b73ffffffffffffffffffffffffffffffffffffffff166112276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613321565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546112a59190613526565b6112af9190613526565b601081905550606360105411156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f2906135a3565b60405180910390fd5b505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61132d611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661134b6113d9565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613321565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611409611cd9565b73ffffffffffffffffffffffffffffffffffffffff166114276113d9565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613321565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546114a9906132a7565b80601f01602080910402602001604051908101604052809291908181526020018280546114d5906132a7565b80156115205780601f106114f757610100808354040283529160200191611520565b820191905f5260205f20905b81548152906001019060200180831161150357829003601f168201915b5050505050905090565b5f61153d611536611cd9565b8484611ea3565b6001905092915050565b61154f611cd9565b73ffffffffffffffffffffffffffffffffffffffff1661156d6113d9565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613321565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b61169c611cd9565b73ffffffffffffffffffffffffffffffffffffffff166116ba6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790613321565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117aa9190612fca565b60405180910390a25050565b6117be611cd9565b73ffffffffffffffffffffffffffffffffffffffff166117dc6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613321565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461185a9190613526565b6118649190613526565b601481905550606360145411156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906135a3565b60405180910390fd5b505050565b6118bd611cd9565b73ffffffffffffffffffffffffffffffffffffffff166118db6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613321565b60405180910390fd5b670de0b6b3a76400006103e86005611947610bb3565b611951919061336c565b61195b91906133da565b61196591906133da565b8110156119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613631565b60405180910390fd5b670de0b6b3a7640000816119bb919061336c565b600e8190555050565b600c5481565b5f6119d3611cd9565b73ffffffffffffffffffffffffffffffffffffffff166119f16113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613321565b60405180910390fd5b620186a06001611a55610bb3565b611a5f919061336c565b611a6991906133da565b821015611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa2906136bf565b60405180910390fd5b6103e86005611ab8610bb3565b611ac2919061336c565b611acc91906133da565b821115611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b059061374d565b60405180910390fd5b81600d8190555060019050919050565b60105481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611bdf611cd9565b73ffffffffffffffffffffffffffffffffffffffff16611bfd6113d9565b73ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90613321565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906137db565b60405180910390fd5b611cca81612821565b50565b60175481565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613869565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906138f7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e969190613091565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613a13565b60405180910390fd5b5f8103611f9657611f9183835f6128e4565b61281c565b600f5f9054906101000a900460ff161561239257611fb26113d9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120205750611ff06113d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612092575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120ab5750600660149054906101000a900460ff16155b1561239157600f60019054906101000a900460ff1661219f5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061215f575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590613a7b565b60405180910390fd5b5b7f000000000000000000000000f99001f22403e2f006d96e732ee5c6367f611c1b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612241575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122e857600c5481111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613b09565b60405180910390fd5b600e5461229783610fc4565b826122a29190613526565b11156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90613b71565b60405180910390fd5b612390565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661238f57600e5461234283610fc4565b8261234d9190613526565b111561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613b71565b60405180910390fd5b5b5b5b5b5f61239c30610fc4565b90505f600d5482101590508080156123c05750600f60029054906101000a900460ff165b80156123d95750600660149054906101000a900460ff16155b801561243057507f000000000000000000000000f99001f22403e2f006d96e732ee5c6367f611c1b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612483575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124d6575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612519576001600660146101000a81548160ff0219169083151502179055506124fe612b59565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125c8575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156125d1575f90505b5f5f90505f5f90505f5f90505f5f90508415612809577f000000000000000000000000f99001f22403e2f006d96e732ee5c6367f611c1b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561264357505f601454115b156126ce5761267060646126626014548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b935060145460175485612683919061336c565b61268d91906133da565b9250601454601554856126a0919061336c565b6126aa91906133da565b9150601454601654856126bd919061336c565b6126c791906133da565b90506127b2565b7f000000000000000000000000f99001f22403e2f006d96e732ee5c6367f611c1b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614801561272a57505f601054115b156127b15761275760646127496010548b612ba790919063ffffffff16565b612bbc90919063ffffffff16565b93506010546013548561276a919061336c565b61277491906133da565b925060105460115485612787919061336c565b61279191906133da565b9150601054601254856127a4919061336c565b6127ae91906133da565b90505b5b5f8411156127c6576127c58a30866128e4565b5b5f8311156127fa576127f9307f000000000000000000000000f99001f22403e2f006d96e732ee5c6367f611c1b856128e4565b5b83886128069190613b8f565b97505b6128148a8a8a6128e4565b505050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990613985565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790613a13565b60405180910390fd5b6129cb838383612bd1565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4590613c32565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612adc9190613526565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b409190613091565b60405180910390a3612b53848484612bd6565b50505050565b5f612b6330610fc4565b90505f8103612b725750612ba5565b6014600d54612b81919061336c565b811115612b9a576014600d54612b97919061336c565b90505b612ba381612bdb565b505b565b5f8183612bb4919061336c565b905092915050565b5f8183612bc991906133da565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115612bf757612bf6613c50565b5b604051908082528060200260200182016040528015612c255781602001602082028036833780820191505090505b50905030815f81518110612c3c57612c3b613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612cac57612cab613c7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d11307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d93959493929190613d9a565b5f604051808303815f87803b158015612daa575f5ffd5b505af1158015612dbc573d5f5f3e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612e24573d5f5f3e3d5ffd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e5282612e29565b9050919050565b612e6281612e48565b82525050565b5f602082019050612e7b5f830184612e59565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ec382612e81565b612ecd8185612e8b565b9350612edd818560208601612e9b565b612ee681612ea9565b840191505092915050565b5f6020820190508181035f830152612f098184612eb9565b905092915050565b5f5ffd5b612f1e81612e48565b8114612f28575f5ffd5b50565b5f81359050612f3981612f15565b92915050565b5f819050919050565b612f5181612f3f565b8114612f5b575f5ffd5b50565b5f81359050612f6c81612f48565b92915050565b5f5f60408385031215612f8857612f87612f11565b5b5f612f9585828601612f2b565b9250506020612fa685828601612f5e565b9150509250929050565b5f8115159050919050565b612fc481612fb0565b82525050565b5f602082019050612fdd5f830184612fbb565b92915050565b5f60208284031215612ff857612ff7612f11565b5b5f61300584828501612f2b565b91505092915050565b5f819050919050565b5f61303161302c61302784612e29565b61300e565b612e29565b9050919050565b5f61304282613017565b9050919050565b5f61305382613038565b9050919050565b61306381613049565b82525050565b5f60208201905061307c5f83018461305a565b92915050565b61308b81612f3f565b82525050565b5f6020820190506130a45f830184613082565b92915050565b5f602082840312156130bf576130be612f11565b5b5f6130cc84828501612f5e565b91505092915050565b5f5f5f606084860312156130ec576130eb612f11565b5b5f6130f986828701612f2b565b935050602061310a86828701612f2b565b925050604061311b86828701612f5e565b9150509250925092565b5f60ff82169050919050565b61313a81613125565b82525050565b5f6020820190506131535f830184613131565b92915050565b61316281612fb0565b811461316c575f5ffd5b50565b5f8135905061317d81613159565b92915050565b5f5f6040838503121561319957613198612f11565b5b5f6131a685828601612f2b565b92505060206131b78582860161316f565b9150509250929050565b5f5f5f606084860312156131d8576131d7612f11565b5b5f6131e586828701612f5e565b93505060206131f686828701612f5e565b925050604061320786828701612f5e565b9150509250925092565b5f6020828403121561322657613225612f11565b5b5f6132338482850161316f565b91505092915050565b5f5f6040838503121561325257613251612f11565b5b5f61325f85828601612f2b565b925050602061327085828601612f2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132be57607f821691505b6020821081036132d1576132d061327a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61330b602083612e8b565b9150613316826132d7565b602082019050919050565b5f6020820190508181035f830152613338816132ff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61337682612f3f565b915061338183612f3f565b925082820261338f81612f3f565b915082820484148315176133a6576133a561333f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6133e482612f3f565b91506133ef83612f3f565b9250826133ff576133fe6133ad565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613464602f83612e8b565b915061346f8261340a565b604082019050919050565b5f6020820190508181035f83015261349181613458565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6134f2602883612e8b565b91506134fd82613498565b604082019050919050565b5f6020820190508181035f83015261351f816134e6565b9050919050565b5f61353082612f3f565b915061353b83612f3f565b92508282019050808211156135535761355261333f565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f61358d601d83612e8b565b915061359882613559565b602082019050919050565b5f6020820190508181035f8301526135ba81613581565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61361b602483612e8b565b9150613626826135c1565b604082019050919050565b5f6020820190508181035f8301526136488161360f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6136a9603583612e8b565b91506136b48261364f565b604082019050919050565b5f6020820190508181035f8301526136d68161369d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613737603483612e8b565b9150613742826136dd565b604082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6137c5602683612e8b565b91506137d08261376b565b604082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613853602483612e8b565b915061385e826137f9565b604082019050919050565b5f6020820190508181035f83015261388081613847565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138e1602283612e8b565b91506138ec82613887565b604082019050919050565b5f6020820190508181035f83015261390e816138d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61396f602583612e8b565b915061397a82613915565b604082019050919050565b5f6020820190508181035f83015261399c81613963565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139fd602383612e8b565b9150613a08826139a3565b604082019050919050565b5f6020820190508181035f830152613a2a816139f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613a65601683612e8b565b9150613a7082613a31565b602082019050919050565b5f6020820190508181035f830152613a9281613a59565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613af3603583612e8b565b9150613afe82613a99565b604082019050919050565b5f6020820190508181035f830152613b2081613ae7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613b5b601383612e8b565b9150613b6682613b27565b602082019050919050565b5f6020820190508181035f830152613b8881613b4f565b9050919050565b5f613b9982612f3f565b9150613ba483612f3f565b9250828203905081811115613bbc57613bbb61333f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613c1c602683612e8b565b9150613c2782613bc2565b604082019050919050565b5f6020820190508181035f830152613c4981613c10565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f613ccd613cc8613cc384613caa565b61300e565b612f3f565b9050919050565b613cdd81613cb3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d1581612e48565b82525050565b5f613d268383613d0c565b60208301905092915050565b5f602082019050919050565b5f613d4882613ce3565b613d528185613ced565b9350613d5d83613cfd565b805f5b83811015613d8d578151613d748882613d1b565b9750613d7f83613d32565b925050600181019050613d60565b5085935050505092915050565b5f60a082019050613dad5f830188613082565b613dba6020830187613cd4565b8181036040830152613dcc8186613d3e565b9050613ddb6060830185612e59565b613de86080830184613082565b969550505050505056fea26469706673582212203459c43522f5667da8e7d1ebbabea140dfd41820397bf66a6a80829257294fd464736f6c634300081b0033

Deployed Bytecode Sourcemap

24812:12504:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25273:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9668:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11835:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26037:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24894:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10788:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31889:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29948:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12486:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25199:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24997:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10630:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25676:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25645:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25819:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24952:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25492:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32327:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25787:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25752:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25572:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10959:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2903:103;;;;;;;;;;;;;:::i;:::-;;29252:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30495:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30866:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25093:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29088:112;;;;;;;;;;;;;:::i;:::-;;2252:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30758:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9887:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11299:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32086:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25532:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31699:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31278:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30231:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25377:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29443:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25611:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11537:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25419:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25236:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25713;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3161:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25857:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25459:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25273:23;;;;;;;;;;;;;:::o;9668:100::-;9722:13;9755:5;9748:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9668:100;:::o;11835:169::-;11918:4;11935:39;11944:12;:10;:12::i;:::-;11958:7;11967:6;11935:8;:39::i;:::-;11992:4;11985:11;;11835:169;;;;:::o;26037:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24894:51::-;;;:::o;10788:108::-;10849:7;10876:12;;10869:19;;10788:108;:::o;31889:189::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32025:9:::1;;;;;;;;;;;31994:41;;32011:12;31994:41;;;;;;;;;;;;32058:12;32046:9;;:24;;;;;;;;;;;;;;;;;;31889:189:::0;:::o;29948:275::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30085:4:::1;30077;30072:1;30056:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30055:26;;;;:::i;:::-;30054:35;;;;:::i;:::-;30044:6;:45;;30022:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30208:6;30198;:17;;;;:::i;:::-;30175:20;:40;;;;29948:275:::0;:::o;12486:492::-;12626:4;12643:36;12653:6;12661:9;12672:6;12643:9;:36::i;:::-;12692:24;12719:11;:19;12731:6;12719:19;;;;;;;;;;;;;;;:33;12739:12;:10;:12::i;:::-;12719:33;;;;;;;;;;;;;;;;12692:60;;12791:6;12771:16;:26;;12763:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12878:57;12887:6;12895:12;:10;:12::i;:::-;12928:6;12909:16;:25;12878:8;:57::i;:::-;12966:4;12959:11;;;12486:492;;;;;:::o;25199:28::-;;;;:::o;24997:89::-;25043:42;24997:89;:::o;10630:93::-;10688:5;10713:2;10706:9;;10630:93;:::o;25676:30::-;;;;:::o;25645:24::-;;;;:::o;25819:31::-;;;;:::o;24952:38::-;;;:::o;25492:33::-;;;;;;;;;;;;;:::o;32327:126::-;32393:4;32417:19;:28;32437:7;32417:28;;;;;;;;;;;;;;;;;;;;;;;;;32410:35;;32327:126;;;:::o;25787:25::-;;;;:::o;25752:28::-;;;;:::o;25572:30::-;;;;;;;;;;;;;:::o;10959:127::-;11033:7;11060:9;:18;11070:7;11060:18;;;;;;;;;;;;;;;;11053:25;;10959:127;;;:::o;2903:103::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2968:30:::1;2995:1;2968:18;:30::i;:::-;2903:103::o:0;29252:121::-;29304:4;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29338:5:::1;29321:14;;:22;;;;;;;;;;;;;;;;;;29361:4;29354:11;;29252:121:::0;:::o;30495:167::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30650:4:::1;30608:31;:39;30640:6;30608:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30495:167:::0;;:::o;30866:404::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31028:7:::1;31016:9;:19;;;;31064:13;31046:15;:31;;;;31106:13;31088:15;:31;;;;31176:15;;31158;;31145:9;;:28;;;;:::i;:::-;:46;;;;:::i;:::-;31130:12;:61;;;;31226:2;31210:12;;:18;;31202:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30866:404:::0;;;:::o;25093:63::-;;;;;;;;;;;;;:::o;29088:112::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29159:4:::1;29143:13;;:20;;;;;;;;;;;;;;;;;;29188:4;29174:11;;:18;;;;;;;;;;;;;;;;;;29088:112::o:0;2252:87::-;2298:7;2325:6;;;;;;;;;;;2318:13;;2252:87;:::o;30758:100::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30843:7:::1;30829:11;;:21;;;;;;;;;;;;;;;;;;30758:100:::0;:::o;9887:104::-;9943:13;9976:7;9969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9887:104;:::o;11299:175::-;11385:4;11402:42;11412:12;:10;:12::i;:::-;11426:9;11437:6;11402:9;:42::i;:::-;11462:4;11455:11;;11299:175;;;;:::o;32086:231::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32246:15:::1;;;;;;;;;;;32203:59;;32226:18;32203:59;;;;;;;;;;;;32291:18;32273:15;;:36;;;;;;;;;;;;;;;;;;32086:231:::0;:::o;25532:33::-;;;;;;;;;;;;;:::o;31699:182::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31815:8:::1;31784:19;:28;31804:7;31784:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31855:7;31839:34;;;31864:8;31839:34;;;;;;:::i;:::-;;;;;;;;31699:182:::0;;:::o;31278:413::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31442:7:::1;31429:10;:20;;;;31479:13;31460:16;:32;;;;31522:13;31503:16;:32;;;;31595:16;;31576;;31562:10;;:30;;;;:::i;:::-;:49;;;;:::i;:::-;31546:13;:65;;;;31647:2;31630:13;;:19;;31622:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31278:413:::0;;;:::o;30231:256::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30371:4:::1;30363;30358:1;30342:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30341:26;;;;:::i;:::-;30340:35;;;;:::i;:::-;30330:6;:45;;30308:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30472:6;30462;:17;;;;:::i;:::-;30450:9;:29;;;;30231:256:::0;:::o;25377:35::-;;;;:::o;29443:497::-;29551:4;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29630:6:::1;29625:1;29609:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29608:28;;;;:::i;:::-;29595:9;:41;;29573:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29785:4;29780:1;29764:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29763:26;;;;:::i;:::-;29750:9;:39;;29728:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29901:9;29880:18;:30;;;;29928:4;29921:11;;29443:497:::0;;;:::o;25611:27::-;;;;:::o;11537:151::-;11626:7;11653:11;:18;11665:5;11653:18;;;;;;;;;;;;;;;:27;11672:7;11653:27;;;;;;;;;;;;;;;;11646:34;;11537:151;;;;:::o;25419:33::-;;;;:::o;25236:30::-;;;;;;;;;;;;;:::o;25713:::-;;;;:::o;3161:201::-;2483:12;:10;:12::i;:::-;2472:23;;:7;:5;:7::i;:::-;:23;;;2464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3270:1:::1;3250:22;;:8;:22;;::::0;3242:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3326:28;3345:8;3326:18;:28::i;:::-;3161:201:::0;:::o;25857:31::-;;;;:::o;25459:24::-;;;;:::o;925:98::-;978:7;1005:10;998:17;;925:98;:::o;15327:380::-;15480:1;15463:19;;:5;:19;;;15455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15561:1;15542:21;;:7;:21;;;15534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15645:6;15615:11;:18;15627:5;15615:18;;;;;;;;;;;;;;;:27;15634:7;15615:27;;;;;;;;;;;;;;;:36;;;;15683:7;15667:32;;15676:5;15667:32;;;15692:6;15667:32;;;;;;:::i;:::-;;;;;;;;15327:380;;;:::o;32461:3916::-;32609:1;32593:18;;:4;:18;;;32585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32686:1;32672:16;;:2;:16;;;32664:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32755:1;32745:6;:11;32741:93;;32773:28;32789:4;32795:2;32799:1;32773:15;:28::i;:::-;32816:7;;32741:93;32850:14;;;;;;;;;;;32846:1466;;;32911:7;:5;:7::i;:::-;32903:15;;:4;:15;;;;:49;;;;;32945:7;:5;:7::i;:::-;32939:13;;:2;:13;;;;32903:49;:86;;;;;32987:1;32973:16;;:2;:16;;;;32903:86;:164;;;;;33024:42;33010:57;;:2;:57;;;;32903:164;:194;;;;;33089:8;;;;;;;;;;;33088:9;32903:194;32881:1420;;;33137:13;;;;;;;;;;;33132:223;;33209:19;:25;33229:4;33209:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33238:19;:23;33258:2;33238:23;;;;;;;;;;;;;;;;;;;;;;;;;33209:52;33175:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33132:223;33569:13;33561:21;;:4;:21;;;:82;;;;;33608:31;:35;33640:2;33608:35;;;;;;;;;;;;;;;;;;;;;;;;;33607:36;33561:82;33535:751;;;33730:20;;33720:6;:30;;33686:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33938:9;;33921:13;33931:2;33921:9;:13::i;:::-;33912:6;:22;;;;:::i;:::-;:35;;33878:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33535:751;;;34066:31;:35;34098:2;34066:35;;;;;;;;;;;;;;;;;;;;;;;;;34061:225;;34186:9;;34169:13;34179:2;34169:9;:13::i;:::-;34160:6;:22;;;;:::i;:::-;:35;;34126:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34061:225;33535:751;32881:1420;32846:1466;34324:28;34355:24;34373:4;34355:9;:24::i;:::-;34324:55;;34392:12;34431:18;;34407:20;:42;;34392:57;;34480:7;:35;;;;;34504:11;;;;;;;;;;;34480:35;:61;;;;;34533:8;;;;;;;;;;;34532:9;34480:61;:97;;;;;34564:13;34558:19;;:2;:19;;;34480:97;:140;;;;;34595:19;:25;34615:4;34595:25;;;;;;;;;;;;;;;;;;;;;;;;;34594:26;34480:140;:181;;;;;34638:19;:23;34658:2;34638:23;;;;;;;;;;;;;;;;;;;;;;;;;34637:24;34480:181;34462:313;;;34699:4;34688:8;;:15;;;;;;;;;;;;;;;;;;34720:10;:8;:10::i;:::-;34758:5;34747:8;;:16;;;;;;;;;;;;;;;;;;34462:313;34787:12;34803:8;;;;;;;;;;;34802:9;34787:24;;34913:19;:25;34933:4;34913:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34942:19;:23;34962:2;34942:23;;;;;;;;;;;;;;;;;;;;;;;;;34913:52;34909:100;;;34992:5;34982:15;;34909:100;35021:12;35036:1;35021:16;;35048:26;35077:1;35048:30;;35089:20;35112:1;35089:24;;35124:26;35153:1;35124:30;;35243:7;35239:1085;;;35301:13;35295:19;;:2;:19;;;:40;;;;;35334:1;35318:13;;:17;35295:40;35291:743;;;35363:34;35393:3;35363:25;35374:13;;35363:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35356:41;;35465:13;;35445:16;;35438:4;:23;;;;:::i;:::-;35437:41;;;;:::i;:::-;35416:62;;35534:13;;35520:10;;35513:4;:17;;;;:::i;:::-;35512:35;;;;:::i;:::-;35497:50;;35615:13;;35595:16;;35588:4;:23;;;;:::i;:::-;35587:41;;;;:::i;:::-;35566:62;;35291:743;;;35698:13;35690:21;;:4;:21;;;:41;;;;;35730:1;35715:12;;:16;35690:41;35686:348;;;35759:33;35788:3;35759:24;35770:12;;35759:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35752:40;;35859:12;;35840:15;;35833:4;:22;;;;:::i;:::-;35832:39;;;;:::i;:::-;35811:60;;35927:12;;35914:9;;35907:4;:16;;;;:::i;:::-;35906:33;;;;:::i;:::-;35891:48;;36006:12;;35987:15;;35980:4;:22;;;;:::i;:::-;35979:39;;;;:::i;:::-;35958:60;;35686:348;35291:743;36060:1;36054:4;:7;36050:90;;;36082:42;36098:4;36112;36119;36082:15;:42::i;:::-;36050:90;36179:1;36158:18;:22;36154:128;;;36201:65;36225:4;36232:13;36247:18;36201:15;:65::i;:::-;36154:128;36308:4;36298:14;;;;;:::i;:::-;;;35239:1085;36336:33;36352:4;36358:2;36362:6;36336:15;:33::i;:::-;32574:3803;;;;;;;32461:3916;;;;:::o;3522:191::-;3596:16;3615:6;;;;;;;;;;;3596:25;;3641:8;3632:6;;:17;;;;;;;;;;;;;;;;;;3696:8;3665:40;;3686:8;3665:40;;;;;;;;;;;;3585:128;3522:191;:::o;13468:733::-;13626:1;13608:20;;:6;:20;;;13600:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13710:1;13689:23;;:9;:23;;;13681:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13765:47;13786:6;13794:9;13805:6;13765:20;:47::i;:::-;13825:21;13849:9;:17;13859:6;13849:17;;;;;;;;;;;;;;;;13825:41;;13902:6;13885:13;:23;;13877:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14023:6;14007:13;:22;13987:9;:17;13997:6;13987:17;;;;;;;;;;;;;;;:42;;;;14075:6;14051:9;:20;14061:9;14051:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14116:9;14099:35;;14108:6;14099:35;;;14127:6;14099:35;;;;;;:::i;:::-;;;;;;;;14147:46;14167:6;14175:9;14186:6;14147:19;:46::i;:::-;13589:612;13468:733;;;:::o;36972:339::-;37011:23;37037:24;37055:4;37037:9;:24::i;:::-;37011:50;;37095:1;37076:15;:20;37072:59;;37113:7;;;37072:59;37186:2;37165:18;;:23;;;;:::i;:::-;37147:15;:41;37143:115;;;37244:2;37223:18;;:23;;;;:::i;:::-;37205:41;;37143:115;37270:33;37287:15;37270:16;:33::i;:::-;37000:311;36972:339;:::o;20780:98::-;20838:7;20869:1;20865;:5;;;;:::i;:::-;20858:12;;20780:98;;;;:::o;21179:::-;21237:7;21268:1;21264;:5;;;;:::i;:::-;21257:12;;21179:98;;;;:::o;16307:125::-;;;;:::o;17036:124::-;;;;:::o;36381:581::-;36499:21;36537:1;36523:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36499:40;;36564:4;36546;36551:1;36546:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36586:3;;;;;;;;;;;36576:4;36581:1;36576:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;36598:62;36615:4;36630:15;36648:11;36598:8;:62::i;:::-;36691:15;:69;;;36771:11;36793:1;36834:4;36849:9;;;;;;;;;;;36869:15;36691:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36910:15;;;;;;;;;;;36902:33;;:56;36936:21;36902:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36436:526;36381:581;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:139::-;962:6;957:3;952;946:23;1003:1;994:6;989:3;985:16;978:27;873:139;;;:::o;1018:102::-;1059:6;1110:2;1106:7;1101:2;1094:5;1090:14;1086:28;1076:38;;1018:102;;;:::o;1126:377::-;1214:3;1242:39;1275:5;1242:39;:::i;:::-;1297:71;1361:6;1356:3;1297:71;:::i;:::-;1290:78;;1377:65;1435:6;1430:3;1423:4;1416:5;1412:16;1377:65;:::i;:::-;1467:29;1489:6;1467:29;:::i;:::-;1462:3;1458:39;1451:46;;1218:285;1126:377;;;;:::o;1509:313::-;1622:4;1660:2;1649:9;1645:18;1637:26;;1709:9;1703:4;1699:20;1695:1;1684:9;1680:17;1673:47;1737:78;1810:4;1801:6;1737:78;:::i;:::-;1729:86;;1509:313;;;;:::o;1909:117::-;2018:1;2015;2008:12;2155:122;2228:24;2246:5;2228:24;:::i;:::-;2221:5;2218:35;2208:63;;2267:1;2264;2257:12;2208:63;2155:122;:::o;2283:139::-;2329:5;2367:6;2354:20;2345:29;;2383:33;2410:5;2383:33;:::i;:::-;2283:139;;;;:::o;2428:77::-;2465:7;2494:5;2483:16;;2428:77;;;:::o;2511:122::-;2584:24;2602:5;2584:24;:::i;:::-;2577:5;2574:35;2564:63;;2623:1;2620;2613:12;2564:63;2511:122;:::o;2639:139::-;2685:5;2723:6;2710:20;2701:29;;2739:33;2766:5;2739:33;:::i;:::-;2639:139;;;;:::o;2784:474::-;2852:6;2860;2909:2;2897:9;2888:7;2884:23;2880:32;2877:119;;;2915:79;;:::i;:::-;2877:119;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;3162:2;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3133:118;2784:474;;;;;:::o;3264:90::-;3298:7;3341:5;3334:13;3327:21;3316:32;;3264:90;;;:::o;3360:109::-;3441:21;3456:5;3441:21;:::i;:::-;3436:3;3429:34;3360:109;;:::o;3475:210::-;3562:4;3600:2;3589:9;3585:18;3577:26;;3613:65;3675:1;3664:9;3660:17;3651:6;3613:65;:::i;:::-;3475:210;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:60::-;4054:3;4075:5;4068:12;;4026:60;;;:::o;4092:142::-;4142:9;4175:53;4193:34;4202:24;4220:5;4202:24;:::i;:::-;4193:34;:::i;:::-;4175:53;:::i;:::-;4162:66;;4092:142;;;:::o;4240:126::-;4290:9;4323:37;4354:5;4323:37;:::i;:::-;4310:50;;4240:126;;;:::o;4372:152::-;4448:9;4481:37;4512:5;4481:37;:::i;:::-;4468:50;;4372:152;;;:::o;4530:183::-;4643:63;4700:5;4643:63;:::i;:::-;4638:3;4631:76;4530:183;;:::o;4719:274::-;4838:4;4876:2;4865:9;4861:18;4853:26;;4889:97;4983:1;4972:9;4968:17;4959:6;4889:97;:::i;:::-;4719:274;;;;:::o;4999:118::-;5086:24;5104:5;5086:24;:::i;:::-;5081:3;5074:37;4999:118;;:::o;5123:222::-;5216:4;5254:2;5243:9;5239:18;5231:26;;5267:71;5335:1;5324:9;5320:17;5311:6;5267:71;:::i;:::-;5123:222;;;;:::o;5351:329::-;5410:6;5459:2;5447:9;5438:7;5434:23;5430:32;5427:119;;;5465:79;;:::i;:::-;5427:119;5585:1;5610:53;5655:7;5646:6;5635:9;5631:22;5610:53;:::i;:::-;5600:63;;5556:117;5351:329;;;;:::o;5686:619::-;5763:6;5771;5779;5828:2;5816:9;5807:7;5803:23;5799:32;5796:119;;;5834:79;;:::i;:::-;5796:119;5954:1;5979:53;6024:7;6015:6;6004:9;6000:22;5979:53;:::i;:::-;5969:63;;5925:117;6081:2;6107:53;6152:7;6143:6;6132:9;6128:22;6107:53;:::i;:::-;6097:63;;6052:118;6209:2;6235:53;6280:7;6271:6;6260:9;6256:22;6235:53;:::i;:::-;6225:63;;6180:118;5686:619;;;;;:::o;6311:86::-;6346:7;6386:4;6379:5;6375:16;6364:27;;6311:86;;;:::o;6403:112::-;6486:22;6502:5;6486:22;:::i;:::-;6481:3;6474:35;6403:112;;:::o;6521:214::-;6610:4;6648:2;6637:9;6633:18;6625:26;;6661:67;6725:1;6714:9;6710:17;6701:6;6661:67;:::i;:::-;6521:214;;;;:::o;6741:116::-;6811:21;6826:5;6811:21;:::i;:::-;6804:5;6801:32;6791:60;;6847:1;6844;6837:12;6791:60;6741:116;:::o;6863:133::-;6906:5;6944:6;6931:20;6922:29;;6960:30;6984:5;6960:30;:::i;:::-;6863:133;;;;:::o;7002:468::-;7067:6;7075;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:53;7320:7;7311:6;7300:9;7296:22;7275:53;:::i;:::-;7265:63;;7221:117;7377:2;7403:50;7445:7;7436:6;7425:9;7421:22;7403:50;:::i;:::-;7393:60;;7348:115;7002:468;;;;;:::o;7476:619::-;7553:6;7561;7569;7618:2;7606:9;7597:7;7593:23;7589:32;7586:119;;;7624:79;;:::i;:::-;7586:119;7744:1;7769:53;7814:7;7805:6;7794:9;7790:22;7769:53;:::i;:::-;7759:63;;7715:117;7871:2;7897:53;7942:7;7933:6;7922:9;7918:22;7897:53;:::i;:::-;7887:63;;7842:118;7999:2;8025:53;8070:7;8061:6;8050:9;8046:22;8025:53;:::i;:::-;8015:63;;7970:118;7476:619;;;;;:::o;8101:323::-;8157:6;8206:2;8194:9;8185:7;8181:23;8177:32;8174:119;;;8212:79;;:::i;:::-;8174:119;8332:1;8357:50;8399:7;8390:6;8379:9;8375:22;8357:50;:::i;:::-;8347:60;;8303:114;8101:323;;;;:::o;8430:474::-;8498:6;8506;8555:2;8543:9;8534:7;8530:23;8526:32;8523:119;;;8561:79;;:::i;:::-;8523:119;8681:1;8706:53;8751:7;8742:6;8731:9;8727:22;8706:53;:::i;:::-;8696:63;;8652:117;8808:2;8834:53;8879:7;8870:6;8859:9;8855:22;8834:53;:::i;:::-;8824:63;;8779:118;8430:474;;;;;:::o;8910:180::-;8958:77;8955:1;8948:88;9055:4;9052:1;9045:15;9079:4;9076:1;9069:15;9096:320;9140:6;9177:1;9171:4;9167:12;9157:22;;9224:1;9218:4;9214:12;9245:18;9235:81;;9301:4;9293:6;9289:17;9279:27;;9235:81;9363:2;9355:6;9352:14;9332:18;9329:38;9326:84;;9382:18;;:::i;:::-;9326:84;9147:269;9096:320;;;:::o;9422:182::-;9562:34;9558:1;9550:6;9546:14;9539:58;9422:182;:::o;9610:366::-;9752:3;9773:67;9837:2;9832:3;9773:67;:::i;:::-;9766:74;;9849:93;9938:3;9849:93;:::i;:::-;9967:2;9962:3;9958:12;9951:19;;9610:366;;;:::o;9982:419::-;10148:4;10186:2;10175:9;10171:18;10163:26;;10235:9;10229:4;10225:20;10221:1;10210:9;10206:17;10199:47;10263:131;10389:4;10263:131;:::i;:::-;10255:139;;9982:419;;;:::o;10407:180::-;10455:77;10452:1;10445:88;10552:4;10549:1;10542:15;10576:4;10573:1;10566:15;10593:410;10633:7;10656:20;10674:1;10656:20;:::i;:::-;10651:25;;10690:20;10708:1;10690:20;:::i;:::-;10685:25;;10745:1;10742;10738:9;10767:30;10785:11;10767:30;:::i;:::-;10756:41;;10946:1;10937:7;10933:15;10930:1;10927:22;10907:1;10900:9;10880:83;10857:139;;10976:18;;:::i;:::-;10857:139;10641:362;10593:410;;;;:::o;11009:180::-;11057:77;11054:1;11047:88;11154:4;11151:1;11144:15;11178:4;11175:1;11168:15;11195:185;11235:1;11252:20;11270:1;11252:20;:::i;:::-;11247:25;;11286:20;11304:1;11286:20;:::i;:::-;11281:25;;11325:1;11315:35;;11330:18;;:::i;:::-;11315:35;11372:1;11369;11365:9;11360:14;;11195:185;;;;:::o;11386:234::-;11526:34;11522:1;11514:6;11510:14;11503:58;11595:17;11590:2;11582:6;11578:15;11571:42;11386:234;:::o;11626:366::-;11768:3;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11626:366;;;:::o;11998:419::-;12164:4;12202:2;12191:9;12187:18;12179:26;;12251:9;12245:4;12241:20;12237:1;12226:9;12222:17;12215:47;12279:131;12405:4;12279:131;:::i;:::-;12271:139;;11998:419;;;:::o;12423:227::-;12563:34;12559:1;12551:6;12547:14;12540:58;12632:10;12627:2;12619:6;12615:15;12608:35;12423:227;:::o;12656:366::-;12798:3;12819:67;12883:2;12878:3;12819:67;:::i;:::-;12812:74;;12895:93;12984:3;12895:93;:::i;:::-;13013:2;13008:3;13004:12;12997:19;;12656:366;;;:::o;13028:419::-;13194:4;13232:2;13221:9;13217:18;13209:26;;13281:9;13275:4;13271:20;13267:1;13256:9;13252:17;13245:47;13309:131;13435:4;13309:131;:::i;:::-;13301:139;;13028:419;;;:::o;13453:191::-;13493:3;13512:20;13530:1;13512:20;:::i;:::-;13507:25;;13546:20;13564:1;13546:20;:::i;:::-;13541:25;;13589:1;13586;13582:9;13575:16;;13610:3;13607:1;13604:10;13601:36;;;13617:18;;:::i;:::-;13601:36;13453:191;;;;:::o;13650:179::-;13790:31;13786:1;13778:6;13774:14;13767:55;13650:179;:::o;13835:366::-;13977:3;13998:67;14062:2;14057:3;13998:67;:::i;:::-;13991:74;;14074:93;14163:3;14074:93;:::i;:::-;14192:2;14187:3;14183:12;14176:19;;13835:366;;;:::o;14207:419::-;14373:4;14411:2;14400:9;14396:18;14388:26;;14460:9;14454:4;14450:20;14446:1;14435:9;14431:17;14424:47;14488:131;14614:4;14488:131;:::i;:::-;14480:139;;14207:419;;;:::o;14632:223::-;14772:34;14768:1;14760:6;14756:14;14749:58;14841:6;14836:2;14828:6;14824:15;14817:31;14632:223;:::o;14861:366::-;15003:3;15024:67;15088:2;15083:3;15024:67;:::i;:::-;15017:74;;15100:93;15189:3;15100:93;:::i;:::-;15218:2;15213:3;15209:12;15202:19;;14861:366;;;:::o;15233:419::-;15399:4;15437:2;15426:9;15422:18;15414:26;;15486:9;15480:4;15476:20;15472:1;15461:9;15457:17;15450:47;15514:131;15640:4;15514:131;:::i;:::-;15506:139;;15233:419;;;:::o;15658:240::-;15798:34;15794:1;15786:6;15782:14;15775:58;15867:23;15862:2;15854:6;15850:15;15843:48;15658:240;:::o;15904:366::-;16046:3;16067:67;16131:2;16126:3;16067:67;:::i;:::-;16060:74;;16143:93;16232:3;16143:93;:::i;:::-;16261:2;16256:3;16252:12;16245:19;;15904:366;;;:::o;16276:419::-;16442:4;16480:2;16469:9;16465:18;16457:26;;16529:9;16523:4;16519:20;16515:1;16504:9;16500:17;16493:47;16557:131;16683:4;16557:131;:::i;:::-;16549:139;;16276:419;;;:::o;16701:239::-;16841:34;16837:1;16829:6;16825:14;16818:58;16910:22;16905:2;16897:6;16893:15;16886:47;16701:239;:::o;16946:366::-;17088:3;17109:67;17173:2;17168:3;17109:67;:::i;:::-;17102:74;;17185:93;17274:3;17185:93;:::i;:::-;17303:2;17298:3;17294:12;17287:19;;16946:366;;;:::o;17318:419::-;17484:4;17522:2;17511:9;17507:18;17499:26;;17571:9;17565:4;17561:20;17557:1;17546:9;17542:17;17535:47;17599:131;17725:4;17599:131;:::i;:::-;17591:139;;17318:419;;;:::o;17743:225::-;17883:34;17879:1;17871:6;17867:14;17860:58;17952:8;17947:2;17939:6;17935:15;17928:33;17743:225;:::o;17974:366::-;18116:3;18137:67;18201:2;18196:3;18137:67;:::i;:::-;18130:74;;18213:93;18302:3;18213:93;:::i;:::-;18331:2;18326:3;18322:12;18315:19;;17974:366;;;:::o;18346:419::-;18512:4;18550:2;18539:9;18535:18;18527:26;;18599:9;18593:4;18589:20;18585:1;18574:9;18570:17;18563:47;18627:131;18753:4;18627:131;:::i;:::-;18619:139;;18346:419;;;:::o;18771:223::-;18911:34;18907:1;18899:6;18895:14;18888:58;18980:6;18975:2;18967:6;18963:15;18956:31;18771:223;:::o;19000:366::-;19142:3;19163:67;19227:2;19222:3;19163:67;:::i;:::-;19156:74;;19239:93;19328:3;19239:93;:::i;:::-;19357:2;19352:3;19348:12;19341:19;;19000:366;;;:::o;19372:419::-;19538:4;19576:2;19565:9;19561:18;19553:26;;19625:9;19619:4;19615:20;19611:1;19600:9;19596:17;19589:47;19653:131;19779:4;19653:131;:::i;:::-;19645:139;;19372:419;;;:::o;19797:221::-;19937:34;19933:1;19925:6;19921:14;19914:58;20006:4;20001:2;19993:6;19989:15;19982:29;19797:221;:::o;20024:366::-;20166:3;20187:67;20251:2;20246:3;20187:67;:::i;:::-;20180:74;;20263:93;20352:3;20263:93;:::i;:::-;20381:2;20376:3;20372:12;20365:19;;20024:366;;;:::o;20396:419::-;20562:4;20600:2;20589:9;20585:18;20577:26;;20649:9;20643:4;20639:20;20635:1;20624:9;20620:17;20613:47;20677:131;20803:4;20677:131;:::i;:::-;20669:139;;20396:419;;;:::o;20821:224::-;20961:34;20957:1;20949:6;20945:14;20938:58;21030:7;21025:2;21017:6;21013:15;21006:32;20821:224;:::o;21051:366::-;21193:3;21214:67;21278:2;21273:3;21214:67;:::i;:::-;21207:74;;21290:93;21379:3;21290:93;:::i;:::-;21408:2;21403:3;21399:12;21392:19;;21051:366;;;:::o;21423:419::-;21589:4;21627:2;21616:9;21612:18;21604:26;;21676:9;21670:4;21666:20;21662:1;21651:9;21647:17;21640:47;21704:131;21830:4;21704:131;:::i;:::-;21696:139;;21423:419;;;:::o;21848:222::-;21988:34;21984:1;21976:6;21972:14;21965:58;22057:5;22052:2;22044:6;22040:15;22033:30;21848:222;:::o;22076:366::-;22218:3;22239:67;22303:2;22298:3;22239:67;:::i;:::-;22232:74;;22315:93;22404:3;22315:93;:::i;:::-;22433:2;22428:3;22424:12;22417:19;;22076:366;;;:::o;22448:419::-;22614:4;22652:2;22641:9;22637:18;22629:26;;22701:9;22695:4;22691:20;22687:1;22676:9;22672:17;22665:47;22729:131;22855:4;22729:131;:::i;:::-;22721:139;;22448:419;;;:::o;22873:172::-;23013:24;23009:1;23001:6;22997:14;22990:48;22873:172;:::o;23051:366::-;23193:3;23214:67;23278:2;23273:3;23214:67;:::i;:::-;23207:74;;23290:93;23379:3;23290:93;:::i;:::-;23408:2;23403:3;23399:12;23392:19;;23051:366;;;:::o;23423:419::-;23589:4;23627:2;23616:9;23612:18;23604:26;;23676:9;23670:4;23666:20;23662:1;23651:9;23647:17;23640:47;23704:131;23830:4;23704:131;:::i;:::-;23696:139;;23423:419;;;:::o;23848:240::-;23988:34;23984:1;23976:6;23972:14;23965:58;24057:23;24052:2;24044:6;24040:15;24033:48;23848:240;:::o;24094:366::-;24236:3;24257:67;24321:2;24316:3;24257:67;:::i;:::-;24250:74;;24333:93;24422:3;24333:93;:::i;:::-;24451:2;24446:3;24442:12;24435:19;;24094:366;;;:::o;24466:419::-;24632:4;24670:2;24659:9;24655:18;24647:26;;24719:9;24713:4;24709:20;24705:1;24694:9;24690:17;24683:47;24747:131;24873:4;24747:131;:::i;:::-;24739:139;;24466:419;;;:::o;24891:169::-;25031:21;25027:1;25019:6;25015:14;25008:45;24891:169;:::o;25066:366::-;25208:3;25229:67;25293:2;25288:3;25229:67;:::i;:::-;25222:74;;25305:93;25394:3;25305:93;:::i;:::-;25423:2;25418:3;25414:12;25407:19;;25066:366;;;:::o;25438:419::-;25604:4;25642:2;25631:9;25627:18;25619:26;;25691:9;25685:4;25681:20;25677:1;25666:9;25662:17;25655:47;25719:131;25845:4;25719:131;:::i;:::-;25711:139;;25438:419;;;:::o;25863:194::-;25903:4;25923:20;25941:1;25923:20;:::i;:::-;25918:25;;25957:20;25975:1;25957:20;:::i;:::-;25952:25;;26001:1;25998;25994:9;25986:17;;26025:1;26019:4;26016:11;26013:37;;;26030:18;;:::i;:::-;26013:37;25863:194;;;;:::o;26063:225::-;26203:34;26199:1;26191:6;26187:14;26180:58;26272:8;26267:2;26259:6;26255:15;26248:33;26063:225;:::o;26294:366::-;26436:3;26457:67;26521:2;26516:3;26457:67;:::i;:::-;26450:74;;26533:93;26622:3;26533:93;:::i;:::-;26651:2;26646:3;26642:12;26635:19;;26294:366;;;:::o;26666:419::-;26832:4;26870:2;26859:9;26855:18;26847:26;;26919:9;26913:4;26909:20;26905:1;26894:9;26890:17;26883:47;26947:131;27073:4;26947:131;:::i;:::-;26939:139;;26666:419;;;:::o;27091:180::-;27139:77;27136:1;27129:88;27236:4;27233:1;27226:15;27260:4;27257:1;27250:15;27277:180;27325:77;27322:1;27315:88;27422:4;27419:1;27412:15;27446:4;27443:1;27436:15;27463:85;27508:7;27537:5;27526:16;;27463:85;;;:::o;27554:158::-;27612:9;27645:61;27663:42;27672:32;27698:5;27672:32;:::i;:::-;27663:42;:::i;:::-;27645:61;:::i;:::-;27632:74;;27554:158;;;:::o;27718:147::-;27813:45;27852:5;27813:45;:::i;:::-;27808:3;27801:58;27718:147;;:::o;27871:114::-;27938:6;27972:5;27966:12;27956:22;;27871:114;;;:::o;27991:184::-;28090:11;28124:6;28119:3;28112:19;28164:4;28159:3;28155:14;28140:29;;27991:184;;;;:::o;28181:132::-;28248:4;28271:3;28263:11;;28301:4;28296:3;28292:14;28284:22;;28181:132;;;:::o;28319:108::-;28396:24;28414:5;28396:24;:::i;:::-;28391:3;28384:37;28319:108;;:::o;28433:179::-;28502:10;28523:46;28565:3;28557:6;28523:46;:::i;:::-;28601:4;28596:3;28592:14;28578:28;;28433:179;;;;:::o;28618:113::-;28688:4;28720;28715:3;28711:14;28703:22;;28618:113;;;:::o;28767:732::-;28886:3;28915:54;28963:5;28915:54;:::i;:::-;28985:86;29064:6;29059:3;28985:86;:::i;:::-;28978:93;;29095:56;29145:5;29095:56;:::i;:::-;29174:7;29205:1;29190:284;29215:6;29212:1;29209:13;29190:284;;;29291:6;29285:13;29318:63;29377:3;29362:13;29318:63;:::i;:::-;29311:70;;29404:60;29457:6;29404:60;:::i;:::-;29394:70;;29250:224;29237:1;29234;29230:9;29225:14;;29190:284;;;29194:14;29490:3;29483:10;;28891:608;;;28767:732;;;;:::o;29505:831::-;29768:4;29806:3;29795:9;29791:19;29783:27;;29820:71;29888:1;29877:9;29873:17;29864:6;29820:71;:::i;:::-;29901:80;29977:2;29966:9;29962:18;29953:6;29901:80;:::i;:::-;30028:9;30022:4;30018:20;30013:2;30002:9;29998:18;29991:48;30056:108;30159:4;30150:6;30056:108;:::i;:::-;30048:116;;30174:72;30242:2;30231:9;30227:18;30218:6;30174:72;:::i;:::-;30256:73;30324:3;30313:9;30309:19;30300:6;30256:73;:::i;:::-;29505:831;;;;;;;;:::o

Swarm Source

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