ETH Price: $3,332.82 (-1.32%)

Token

0xAuto.io : Contract Auto Deployer (0xA)
 

Overview

Max Total Supply

100,000,000 0xA

Holders

536

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
chumwithnodick.eth
Balance
21,930.011501080921704212 0xA

Value
$0.00
0xB2Aadf6BFc0a5213acb9c279394B46F50aEa65a3
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:
ZeroXAuto

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-05
*/

// SPDX-License-Identifier: MIT

/** Telegram : https://t.me/ZeroXAutoPortal
Website : https://0xAuto.io
Twitter : https://twitter.com/0xAutoERC
Medium : https://medium.com/@0xAutoBot/introducing-0xswift-bot-the-fastest-token-deployer-for-uniswap-v2-and-beyond-72ec3f169ef
**/
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 ZeroXAuto is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    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("0xAuto.io : Contract Auto Deployer", "0xA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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


        uint256 _buydevfee = 10;
        uint256 _buyMarketingfee = 5;
        uint256 _buyLiquidityFee = 5;

        uint256 _selldevfee = 10;
        uint256 _sellMarketingfee = 5;
        uint256 _sellLiquidityFee = 5;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 20 / 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 + buyLiquidityFee;

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

        devWallet = address(msg.sender); // set as dev wallet
        marketingWallet = address(0x723B2E35Eb145C653cb57f210a53b744278bEF22);
        deployerAddress = address(msg.sender); 
        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 + buyLiquidityFee + buyMarketingfee;
        require(buyTotalFees <= 30, "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 + sellLiquidityFee + _marketingfee;
        require(sellTotalFees <= 50, "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(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //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 * selldevfee) / 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 * buydevfee) / 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
    );

    // Send ETH to the marketingWallet
    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":"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b5060405180606001604052806022815260200162005016602291396040518060400160405280600381526020017f307841000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012092919062000b53565b5080600490805190602001906200013992919062000b53565b5050506200015c62000150620006b460201b60201c565b620006bc60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001888160016200078260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000208573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022e919062000c6d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200028c92919062000cb0565b6020604051808303816000875af1158015620002ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d2919062000c6d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031a60a05160016200078260201b60201c565b6000600a90506000600590506000600590506000600a905060006005905060006005905060006a52b7d2dcc80cd2e400000090506103e860148262000360919062000d16565b6200036c919062000da6565b600c819055506103e860148262000384919062000d16565b62000390919062000da6565b600e81905550612710600582620003a8919062000d16565b620003b4919062000da6565b600d81905550866011819055508560128190555084601381905550601354601154620003e1919062000dde565b6010819055508360158190555082601681905550816017819055506017546015546200040e919062000dde565b60148190555033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073723b2e35eb145c653cb57f210a53b744278bef22600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054e620005406200086c60201b60201c565b60016200089660201b60201c565b620005613060016200089660201b60201c565b6200057661dead60016200089660201b60201c565b620005ab600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089660201b60201c565b620005e0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089660201b60201c565b62000602620005f46200086c60201b60201c565b60016200078260201b60201c565b620006153060016200078260201b60201c565b6200062a61dead60016200078260201b60201c565b6200065f600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200078260201b60201c565b62000694600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200078260201b60201c565b620006a63382620009d060201b60201c565b505050505050505062000ffd565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000792620006b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007b86200086c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008089062000e9c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008a6620006b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008cc6200086c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000925576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091c9062000e9c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009c4919062000edb565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3a9062000f48565b60405180910390fd5b62000a576000838362000b4960201b60201c565b806002600082825462000a6b919062000dde565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ac2919062000dde565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b29919062000f7b565b60405180910390a362000b456000838362000b4e60201b60201c565b5050565b505050565b505050565b82805462000b619062000fc7565b90600052602060002090601f01602090048101928262000b85576000855562000bd1565b82601f1062000ba057805160ff191683800117855562000bd1565b8280016001018555821562000bd1579182015b8281111562000bd057825182559160200191906001019062000bb3565b5b50905062000be0919062000be4565b5090565b5b8082111562000bff57600081600090555060010162000be5565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c358262000c08565b9050919050565b62000c478162000c28565b811462000c5357600080fd5b50565b60008151905062000c678162000c3c565b92915050565b60006020828403121562000c865762000c8562000c03565b5b600062000c968482850162000c56565b91505092915050565b62000caa8162000c28565b82525050565b600060408201905062000cc7600083018562000c9f565b62000cd6602083018462000c9f565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d238262000cdd565b915062000d308362000cdd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d6c5762000d6b62000ce7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000db38262000cdd565b915062000dc08362000cdd565b92508262000dd35762000dd262000d77565b5b828204905092915050565b600062000deb8262000cdd565b915062000df88362000cdd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e305762000e2f62000ce7565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e8460208362000e3b565b915062000e918262000e4c565b602082019050919050565b6000602082019050818103600083015262000eb78162000e75565b9050919050565b60008115159050919050565b62000ed58162000ebe565b82525050565b600060208201905062000ef2600083018462000eca565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f30601f8362000e3b565b915062000f3d8262000ef8565b602082019050919050565b6000602082019050818103600083015262000f638162000f21565b9050919050565b62000f758162000cdd565b82525050565b600060208201905062000f92600083018462000f6a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fe057607f821691505b6020821081141562000ff75762000ff662000f98565b5b50919050565b60805160a051613fc26200105460003960008181610f610152818161221c0152818161246501528181612671015281816127590152612860015260008181610bc901528181612d8f0152612db60152613fc26000f3fe60806040526004361061028c5760003560e01c8063751039fc1161015a578063c17b5b8c116100c1578063e2f456051161007a578063e2f45605146109d1578063efdee94f146109fc578063f11a24d314610a27578063f2fde38b14610a52578063f637434214610a7b578063f8b45b0514610aa657610293565b8063c17b5b8c146108af578063c18bc195146108d8578063c8c8ebe414610901578063d257b34f1461092c578063d85ba06314610969578063dd62ed3e1461099457610293565b8063924de9b711610113578063924de9b7146107a157806395d89b41146107ca578063a9059cbb146107f5578063aacebbe314610832578063bbc0c7421461085b578063c02466681461088657610293565b8063751039fc146106b75780637571336a146106e25780638095d5641461070b5780638322fff2146107345780638a8c523c1461075f5780638da5cb5b1461077657610293565b8063313ce567116101fe5780634fbee193116101b75780634fbee193146105a557806365c1bef8146105e25780636a486a8e1461060d5780636ddd17131461063857806370a0823114610663578063715018a6146106a057610293565b8063313ce567146104a35780634853e7d9146104ce578063489ae78d146104f957806348c492d61461052457806349bd5a5e1461054f5780634a62bb651461057a57610293565b806318160ddd1161025057806318160ddd146103935780631816467f146103be578063203e727e146103e757806323b872dd14610410578063274a533c1461044d57806327c8f8351461047857610293565b806303fc20131461029857806306fdde03146102c3578063095ea7b3146102ee57806310d5de531461032b5780631694505e1461036857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad1565b6040516102ba9190612f18565b60405180910390f35b3480156102cf57600080fd5b506102d8610af7565b6040516102e59190612fcc565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190613055565b610b89565b60405161032291906130b0565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906130cb565b610ba7565b60405161035f91906130b0565b60405180910390f35b34801561037457600080fd5b5061037d610bc7565b60405161038a9190613157565b60405180910390f35b34801561039f57600080fd5b506103a8610beb565b6040516103b59190613181565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906130cb565b610bf5565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061319c565b610d31565b005b34801561041c57600080fd5b50610437600480360381019061043291906131c9565b610e40565b60405161044491906130b0565b60405180910390f35b34801561045957600080fd5b50610462610f38565b60405161046f9190613181565b60405180910390f35b34801561048457600080fd5b5061048d610f3e565b60405161049a9190612f18565b60405180910390f35b3480156104af57600080fd5b506104b8610f44565b6040516104c59190613238565b60405180910390f35b3480156104da57600080fd5b506104e3610f4d565b6040516104f09190613181565b60405180910390f35b34801561050557600080fd5b5061050e610f53565b60405161051b9190613181565b60405180910390f35b34801561053057600080fd5b50610539610f59565b6040516105469190613181565b60405180910390f35b34801561055b57600080fd5b50610564610f5f565b6040516105719190612f18565b60405180910390f35b34801561058657600080fd5b5061058f610f83565b60405161059c91906130b0565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906130cb565b610f96565b6040516105d991906130b0565b60405180910390f35b3480156105ee57600080fd5b506105f7610fec565b6040516106049190613181565b60405180910390f35b34801561061957600080fd5b50610622610ff2565b60405161062f9190613181565b60405180910390f35b34801561064457600080fd5b5061064d610ff8565b60405161065a91906130b0565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906130cb565b61100b565b6040516106979190613181565b60405180910390f35b3480156106ac57600080fd5b506106b5611053565b005b3480156106c357600080fd5b506106cc6110db565b6040516106d991906130b0565b60405180910390f35b3480156106ee57600080fd5b506107096004803603810190610704919061327f565b61117b565b005b34801561071757600080fd5b50610732600480360381019061072d91906132bf565b611252565b005b34801561074057600080fd5b50610749611351565b6040516107569190612f18565b60405180910390f35b34801561076b57600080fd5b50610774611377565b005b34801561078257600080fd5b5061078b61142b565b6040516107989190612f18565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613312565b611455565b005b3480156107d657600080fd5b506107df6114ee565b6040516107ec9190612fcc565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613055565b611580565b60405161082991906130b0565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906130cb565b61159e565b005b34801561086757600080fd5b506108706116da565b60405161087d91906130b0565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061327f565b6116ed565b005b3480156108bb57600080fd5b506108d660048036038101906108d191906132bf565b611812565b005b3480156108e457600080fd5b506108ff60048036038101906108fa919061319c565b61190f565b005b34801561090d57600080fd5b50610916611a1e565b6040516109239190613181565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e919061319c565b611a24565b60405161096091906130b0565b60405180910390f35b34801561097557600080fd5b5061097e611b79565b60405161098b9190613181565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b6919061333f565b611b7f565b6040516109c89190613181565b60405180910390f35b3480156109dd57600080fd5b506109e6611c06565b6040516109f39190613181565b60405180910390f35b348015610a0857600080fd5b50610a11611c0c565b604051610a1e9190612f18565b60405180910390f35b348015610a3357600080fd5b50610a3c611c32565b604051610a499190613181565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a7491906130cb565b611c38565b005b348015610a8757600080fd5b50610a90611d30565b604051610a9d9190613181565b60405180910390f35b348015610ab257600080fd5b50610abb611d36565b604051610ac89190613181565b60405180910390f35b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610b06906133ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610b32906133ae565b8015610b7f5780601f10610b5457610100808354040283529160200191610b7f565b820191906000526020600020905b815481529060010190602001808311610b6257829003601f168201915b5050505050905090565b6000610b9d610b96611d3c565b8484611d44565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bfd611d3c565b73ffffffffffffffffffffffffffffffffffffffff16610c1b61142b565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c689061342c565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d39611d3c565b73ffffffffffffffffffffffffffffffffffffffff16610d5761142b565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da49061342c565b60405180910390fd5b670de0b6b3a76400006103e86005610dc3610beb565b610dcd919061347b565b610dd79190613504565b610de19190613504565b811015610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a906135a7565b60405180910390fd5b670de0b6b3a764000081610e37919061347b565b600c8190555050565b6000610e4d848484611f0f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e98611d3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90613639565b60405180910390fd5b610f2c85610f24611d3c565b858403611d44565b60019150509392505050565b60075481565b61dead81565b60006012905090565b60125481565b60115481565b60165481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60145481565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61105b611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661107961142b565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c69061342c565b60405180910390fd5b6110d960006128ad565b565b60006110e5611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661110361142b565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111509061342c565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611183611d3c565b73ffffffffffffffffffffffffffffffffffffffff166111a161142b565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee9061342c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61125a611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661127861142b565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c59061342c565b60405180910390fd5b8260118190555081601281905550806013819055506012546013546011546112f69190613659565b6113009190613659565b601081905550601e601054111561134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906136fb565b60405180910390fd5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61137f611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661139d61142b565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea9061342c565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61145d611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661147b61142b565b73ffffffffffffffffffffffffffffffffffffffff16146114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c89061342c565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546114fd906133ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611529906133ae565b80156115765780601f1061154b57610100808354040283529160200191611576565b820191906000526020600020905b81548152906001019060200180831161155957829003601f168201915b5050505050905090565b600061159461158d611d3c565b8484611f0f565b6001905092915050565b6115a6611d3c565b73ffffffffffffffffffffffffffffffffffffffff166115c461142b565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116119061342c565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b6116f5611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661171361142b565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117609061342c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161180691906130b0565b60405180910390a25050565b61181a611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661183861142b565b73ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118859061342c565b60405180910390fd5b826015819055508160168190555080601781905550816017546015546118b49190613659565b6118be9190613659565b6014819055506032601454111561190a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611901906136fb565b60405180910390fd5b505050565b611917611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661193561142b565b73ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061342c565b60405180910390fd5b670de0b6b3a76400006103e860056119a1610beb565b6119ab919061347b565b6119b59190613504565b6119bf9190613504565b811015611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061378d565b60405180910390fd5b670de0b6b3a764000081611a15919061347b565b600e8190555050565b600c5481565b6000611a2e611d3c565b73ffffffffffffffffffffffffffffffffffffffff16611a4c61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a999061342c565b60405180910390fd5b620186a06001611ab0610beb565b611aba919061347b565b611ac49190613504565b821015611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd9061381f565b60405180910390fd5b6103e86005611b13610beb565b611b1d919061347b565b611b279190613504565b821115611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906138b1565b60405180910390fd5b81600d8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611c40611d3c565b73ffffffffffffffffffffffffffffffffffffffff16611c5e61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061342c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90613943565b60405180910390fd5b611d2d816128ad565b50565b60175481565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab906139d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613a67565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f029190613181565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613af9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690613b8b565b60405180910390fd5b60008114156120095761200483836000612973565b6128a8565b600f60009054906101000a900460ff16156124135761202661142b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612094575061206461142b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120cd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612107575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121205750600660149054906101000a900460ff16155b1561241257600f60019054906101000a900460ff1661221a57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121da5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090613bf7565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122bf5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561236657600c54811115612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613c89565b60405180910390fd5b600e546123158361100b565b826123209190613659565b1115612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235890613cf5565b60405180910390fd5b612411565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661241057600e546123c38361100b565b826123ce9190613659565b111561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690613cf5565b60405180910390fd5b5b5b5b5b600061241e3061100b565b90506000600d5482101590508080156124435750600f60029054906101000a900460ff165b801561245c5750600660149054906101000a900460ff16155b80156124b357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156125095750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561255f5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a3576001600660146101000a81548160ff021916908315150217905550612587612bf4565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126595750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561266357600090505b6000806000808415612895577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156126cc57506000601454115b15612757576126f960646126eb6014548b612c4590919063ffffffff16565b612c5b90919063ffffffff16565b93506014546017548561270c919061347b565b6127169190613504565b925060145460155485612729919061347b565b6127339190613504565b915060145460155485612746919061347b565b6127509190613504565b905061283c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156127b457506000601054115b1561283b576127e160646127d36010548b612c4590919063ffffffff16565b612c5b90919063ffffffff16565b9350601054601354856127f4919061347b565b6127fe9190613504565b925060105460115485612811919061347b565b61281b9190613504565b91506010546011548561282e919061347b565b6128389190613504565b90505b5b6000841115612851576128508a3086612973565b5b600083111561288657612885307f000000000000000000000000000000000000000000000000000000000000000085612973565b5b83886128929190613d15565b97505b6128a08a8a8a612973565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90613af9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90613b8b565b60405180910390fd5b612a5e838383612c71565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb90613dbb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b779190613659565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bdb9190613181565b60405180910390a3612bee848484612c76565b50505050565b6000612bff3061100b565b90506000811415612c105750612c43565b6014600d54612c1f919061347b565b811115612c38576014600d54612c35919061347b565b90505b612c4181612c7b565b505b565b60008183612c53919061347b565b905092915050565b60008183612c699190613504565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612c9857612c97613ddb565b5b604051908082528060200260200182016040528015612cc65781602001602082028036833780820191505090505b5090503081600081518110612cde57612cdd613e0a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d4f57612d4e613e0a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612db4307f000000000000000000000000000000000000000000000000000000000000000084611d44565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e38959493929190613f32565b600060405180830381600087803b158015612e5257600080fd5b505af1158015612e66573d6000803e3d6000fd5b50505050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ed2573d6000803e3d6000fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f0282612ed7565b9050919050565b612f1281612ef7565b82525050565b6000602082019050612f2d6000830184612f09565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f6d578082015181840152602081019050612f52565b83811115612f7c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9e82612f33565b612fa88185612f3e565b9350612fb8818560208601612f4f565b612fc181612f82565b840191505092915050565b60006020820190508181036000830152612fe68184612f93565b905092915050565b600080fd5b612ffc81612ef7565b811461300757600080fd5b50565b60008135905061301981612ff3565b92915050565b6000819050919050565b6130328161301f565b811461303d57600080fd5b50565b60008135905061304f81613029565b92915050565b6000806040838503121561306c5761306b612fee565b5b600061307a8582860161300a565b925050602061308b85828601613040565b9150509250929050565b60008115159050919050565b6130aa81613095565b82525050565b60006020820190506130c560008301846130a1565b92915050565b6000602082840312156130e1576130e0612fee565b5b60006130ef8482850161300a565b91505092915050565b6000819050919050565b600061311d61311861311384612ed7565b6130f8565b612ed7565b9050919050565b600061312f82613102565b9050919050565b600061314182613124565b9050919050565b61315181613136565b82525050565b600060208201905061316c6000830184613148565b92915050565b61317b8161301f565b82525050565b60006020820190506131966000830184613172565b92915050565b6000602082840312156131b2576131b1612fee565b5b60006131c084828501613040565b91505092915050565b6000806000606084860312156131e2576131e1612fee565b5b60006131f08682870161300a565b93505060206132018682870161300a565b925050604061321286828701613040565b9150509250925092565b600060ff82169050919050565b6132328161321c565b82525050565b600060208201905061324d6000830184613229565b92915050565b61325c81613095565b811461326757600080fd5b50565b60008135905061327981613253565b92915050565b6000806040838503121561329657613295612fee565b5b60006132a48582860161300a565b92505060206132b58582860161326a565b9150509250929050565b6000806000606084860312156132d8576132d7612fee565b5b60006132e686828701613040565b93505060206132f786828701613040565b925050604061330886828701613040565b9150509250925092565b60006020828403121561332857613327612fee565b5b60006133368482850161326a565b91505092915050565b6000806040838503121561335657613355612fee565b5b60006133648582860161300a565b92505060206133758582860161300a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133c657607f821691505b602082108114156133da576133d961337f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613416602083612f3e565b9150613421826133e0565b602082019050919050565b6000602082019050818103600083015261344581613409565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134868261301f565b91506134918361301f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134ca576134c961344c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061350f8261301f565b915061351a8361301f565b92508261352a576135296134d5565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613591602f83612f3e565b915061359c82613535565b604082019050919050565b600060208201905081810360008301526135c081613584565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613623602883612f3e565b915061362e826135c7565b604082019050919050565b6000602082019050818103600083015261365281613616565b9050919050565b60006136648261301f565b915061366f8361301f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136a4576136a361344c565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006136e5601d83612f3e565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613777602483612f3e565b91506137828261371b565b604082019050919050565b600060208201905081810360008301526137a68161376a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613809603583612f3e565b9150613814826137ad565b604082019050919050565b60006020820190508181036000830152613838816137fc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061389b603483612f3e565b91506138a68261383f565b604082019050919050565b600060208201905081810360008301526138ca8161388e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061392d602683612f3e565b9150613938826138d1565b604082019050919050565b6000602082019050818103600083015261395c81613920565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139bf602483612f3e565b91506139ca82613963565b604082019050919050565b600060208201905081810360008301526139ee816139b2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a51602283612f3e565b9150613a5c826139f5565b604082019050919050565b60006020820190508181036000830152613a8081613a44565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ae3602583612f3e565b9150613aee82613a87565b604082019050919050565b60006020820190508181036000830152613b1281613ad6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b75602383612f3e565b9150613b8082613b19565b604082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613be1601683612f3e565b9150613bec82613bab565b602082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c73603583612f3e565b9150613c7e82613c17565b604082019050919050565b60006020820190508181036000830152613ca281613c66565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cdf601383612f3e565b9150613cea82613ca9565b602082019050919050565b60006020820190508181036000830152613d0e81613cd2565b9050919050565b6000613d208261301f565b9150613d2b8361301f565b925082821015613d3e57613d3d61344c565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613da5602683612f3e565b9150613db082613d49565b604082019050919050565b60006020820190508181036000830152613dd481613d98565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613e5e613e59613e5484613e39565b6130f8565b61301f565b9050919050565b613e6e81613e43565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ea981612ef7565b82525050565b6000613ebb8383613ea0565b60208301905092915050565b6000602082019050919050565b6000613edf82613e74565b613ee98185613e7f565b9350613ef483613e90565b8060005b83811015613f25578151613f0c8882613eaf565b9750613f1783613ec7565b925050600181019050613ef8565b5085935050505092915050565b600060a082019050613f476000830188613172565b613f546020830187613e65565b8181036040830152613f668186613ed4565b9050613f756060830185612f09565b613f826080830184613172565b969550505050505056fea2646970667358221220cc10363c3a1f870083e14180718b8751e30722ae03e21ac86aea6a3f987559f464736f6c634300080c003330784175746f2e696f203a20436f6e7472616374204175746f204465706c6f796572

Deployed Bytecode

0x60806040526004361061028c5760003560e01c8063751039fc1161015a578063c17b5b8c116100c1578063e2f456051161007a578063e2f45605146109d1578063efdee94f146109fc578063f11a24d314610a27578063f2fde38b14610a52578063f637434214610a7b578063f8b45b0514610aa657610293565b8063c17b5b8c146108af578063c18bc195146108d8578063c8c8ebe414610901578063d257b34f1461092c578063d85ba06314610969578063dd62ed3e1461099457610293565b8063924de9b711610113578063924de9b7146107a157806395d89b41146107ca578063a9059cbb146107f5578063aacebbe314610832578063bbc0c7421461085b578063c02466681461088657610293565b8063751039fc146106b75780637571336a146106e25780638095d5641461070b5780638322fff2146107345780638a8c523c1461075f5780638da5cb5b1461077657610293565b8063313ce567116101fe5780634fbee193116101b75780634fbee193146105a557806365c1bef8146105e25780636a486a8e1461060d5780636ddd17131461063857806370a0823114610663578063715018a6146106a057610293565b8063313ce567146104a35780634853e7d9146104ce578063489ae78d146104f957806348c492d61461052457806349bd5a5e1461054f5780634a62bb651461057a57610293565b806318160ddd1161025057806318160ddd146103935780631816467f146103be578063203e727e146103e757806323b872dd14610410578063274a533c1461044d57806327c8f8351461047857610293565b806303fc20131461029857806306fdde03146102c3578063095ea7b3146102ee57806310d5de531461032b5780631694505e1461036857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad1565b6040516102ba9190612f18565b60405180910390f35b3480156102cf57600080fd5b506102d8610af7565b6040516102e59190612fcc565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190613055565b610b89565b60405161032291906130b0565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906130cb565b610ba7565b60405161035f91906130b0565b60405180910390f35b34801561037457600080fd5b5061037d610bc7565b60405161038a9190613157565b60405180910390f35b34801561039f57600080fd5b506103a8610beb565b6040516103b59190613181565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906130cb565b610bf5565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061319c565b610d31565b005b34801561041c57600080fd5b50610437600480360381019061043291906131c9565b610e40565b60405161044491906130b0565b60405180910390f35b34801561045957600080fd5b50610462610f38565b60405161046f9190613181565b60405180910390f35b34801561048457600080fd5b5061048d610f3e565b60405161049a9190612f18565b60405180910390f35b3480156104af57600080fd5b506104b8610f44565b6040516104c59190613238565b60405180910390f35b3480156104da57600080fd5b506104e3610f4d565b6040516104f09190613181565b60405180910390f35b34801561050557600080fd5b5061050e610f53565b60405161051b9190613181565b60405180910390f35b34801561053057600080fd5b50610539610f59565b6040516105469190613181565b60405180910390f35b34801561055b57600080fd5b50610564610f5f565b6040516105719190612f18565b60405180910390f35b34801561058657600080fd5b5061058f610f83565b60405161059c91906130b0565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906130cb565b610f96565b6040516105d991906130b0565b60405180910390f35b3480156105ee57600080fd5b506105f7610fec565b6040516106049190613181565b60405180910390f35b34801561061957600080fd5b50610622610ff2565b60405161062f9190613181565b60405180910390f35b34801561064457600080fd5b5061064d610ff8565b60405161065a91906130b0565b60405180910390f35b34801561066f57600080fd5b5061068a600480360381019061068591906130cb565b61100b565b6040516106979190613181565b60405180910390f35b3480156106ac57600080fd5b506106b5611053565b005b3480156106c357600080fd5b506106cc6110db565b6040516106d991906130b0565b60405180910390f35b3480156106ee57600080fd5b506107096004803603810190610704919061327f565b61117b565b005b34801561071757600080fd5b50610732600480360381019061072d91906132bf565b611252565b005b34801561074057600080fd5b50610749611351565b6040516107569190612f18565b60405180910390f35b34801561076b57600080fd5b50610774611377565b005b34801561078257600080fd5b5061078b61142b565b6040516107989190612f18565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613312565b611455565b005b3480156107d657600080fd5b506107df6114ee565b6040516107ec9190612fcc565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613055565b611580565b60405161082991906130b0565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906130cb565b61159e565b005b34801561086757600080fd5b506108706116da565b60405161087d91906130b0565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061327f565b6116ed565b005b3480156108bb57600080fd5b506108d660048036038101906108d191906132bf565b611812565b005b3480156108e457600080fd5b506108ff60048036038101906108fa919061319c565b61190f565b005b34801561090d57600080fd5b50610916611a1e565b6040516109239190613181565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e919061319c565b611a24565b60405161096091906130b0565b60405180910390f35b34801561097557600080fd5b5061097e611b79565b60405161098b9190613181565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b6919061333f565b611b7f565b6040516109c89190613181565b60405180910390f35b3480156109dd57600080fd5b506109e6611c06565b6040516109f39190613181565b60405180910390f35b348015610a0857600080fd5b50610a11611c0c565b604051610a1e9190612f18565b60405180910390f35b348015610a3357600080fd5b50610a3c611c32565b604051610a499190613181565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a7491906130cb565b611c38565b005b348015610a8757600080fd5b50610a90611d30565b604051610a9d9190613181565b60405180910390f35b348015610ab257600080fd5b50610abb611d36565b604051610ac89190613181565b60405180910390f35b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610b06906133ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610b32906133ae565b8015610b7f5780601f10610b5457610100808354040283529160200191610b7f565b820191906000526020600020905b815481529060010190602001808311610b6257829003601f168201915b5050505050905090565b6000610b9d610b96611d3c565b8484611d44565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bfd611d3c565b73ffffffffffffffffffffffffffffffffffffffff16610c1b61142b565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c689061342c565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d39611d3c565b73ffffffffffffffffffffffffffffffffffffffff16610d5761142b565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da49061342c565b60405180910390fd5b670de0b6b3a76400006103e86005610dc3610beb565b610dcd919061347b565b610dd79190613504565b610de19190613504565b811015610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a906135a7565b60405180910390fd5b670de0b6b3a764000081610e37919061347b565b600c8190555050565b6000610e4d848484611f0f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e98611d3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f90613639565b60405180910390fd5b610f2c85610f24611d3c565b858403611d44565b60019150509392505050565b60075481565b61dead81565b60006012905090565b60125481565b60115481565b60165481565b7f00000000000000000000000091ebc5153726a3ed1e7866f9f24cfc4de7f891d481565b600f60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60145481565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61105b611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661107961142b565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c69061342c565b60405180910390fd5b6110d960006128ad565b565b60006110e5611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661110361142b565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111509061342c565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611183611d3c565b73ffffffffffffffffffffffffffffffffffffffff166111a161142b565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee9061342c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61125a611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661127861142b565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c59061342c565b60405180910390fd5b8260118190555081601281905550806013819055506012546013546011546112f69190613659565b6113009190613659565b601081905550601e601054111561134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906136fb565b60405180910390fd5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61137f611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661139d61142b565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea9061342c565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61145d611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661147b61142b565b73ffffffffffffffffffffffffffffffffffffffff16146114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c89061342c565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6060600480546114fd906133ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611529906133ae565b80156115765780601f1061154b57610100808354040283529160200191611576565b820191906000526020600020905b81548152906001019060200180831161155957829003601f168201915b5050505050905090565b600061159461158d611d3c565b8484611f0f565b6001905092915050565b6115a6611d3c565b73ffffffffffffffffffffffffffffffffffffffff166115c461142b565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116119061342c565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b6116f5611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661171361142b565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117609061342c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161180691906130b0565b60405180910390a25050565b61181a611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661183861142b565b73ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118859061342c565b60405180910390fd5b826015819055508160168190555080601781905550816017546015546118b49190613659565b6118be9190613659565b6014819055506032601454111561190a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611901906136fb565b60405180910390fd5b505050565b611917611d3c565b73ffffffffffffffffffffffffffffffffffffffff1661193561142b565b73ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061342c565b60405180910390fd5b670de0b6b3a76400006103e860056119a1610beb565b6119ab919061347b565b6119b59190613504565b6119bf9190613504565b811015611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061378d565b60405180910390fd5b670de0b6b3a764000081611a15919061347b565b600e8190555050565b600c5481565b6000611a2e611d3c565b73ffffffffffffffffffffffffffffffffffffffff16611a4c61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a999061342c565b60405180910390fd5b620186a06001611ab0610beb565b611aba919061347b565b611ac49190613504565b821015611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd9061381f565b60405180910390fd5b6103e86005611b13610beb565b611b1d919061347b565b611b279190613504565b821115611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906138b1565b60405180910390fd5b81600d8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b611c40611d3c565b73ffffffffffffffffffffffffffffffffffffffff16611c5e61142b565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061342c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90613943565b60405180910390fd5b611d2d816128ad565b50565b60175481565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab906139d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613a67565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f029190613181565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613af9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690613b8b565b60405180910390fd5b60008114156120095761200483836000612973565b6128a8565b600f60009054906101000a900460ff16156124135761202661142b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612094575061206461142b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120cd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612107575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121205750600660149054906101000a900460ff16155b1561241257600f60019054906101000a900460ff1661221a57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121da5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090613bf7565b60405180910390fd5b5b7f00000000000000000000000091ebc5153726a3ed1e7866f9f24cfc4de7f891d473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122bf5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561236657600c54811115612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613c89565b60405180910390fd5b600e546123158361100b565b826123209190613659565b1115612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235890613cf5565b60405180910390fd5b612411565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661241057600e546123c38361100b565b826123ce9190613659565b111561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690613cf5565b60405180910390fd5b5b5b5b5b600061241e3061100b565b90506000600d5482101590508080156124435750600f60029054906101000a900460ff165b801561245c5750600660149054906101000a900460ff16155b80156124b357507f00000000000000000000000091ebc5153726a3ed1e7866f9f24cfc4de7f891d473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156125095750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561255f5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a3576001600660146101000a81548160ff021916908315150217905550612587612bf4565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126595750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561266357600090505b6000806000808415612895577f00000000000000000000000091ebc5153726a3ed1e7866f9f24cfc4de7f891d473ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156126cc57506000601454115b15612757576126f960646126eb6014548b612c4590919063ffffffff16565b612c5b90919063ffffffff16565b93506014546017548561270c919061347b565b6127169190613504565b925060145460155485612729919061347b565b6127339190613504565b915060145460155485612746919061347b565b6127509190613504565b905061283c565b7f00000000000000000000000091ebc5153726a3ed1e7866f9f24cfc4de7f891d473ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156127b457506000601054115b1561283b576127e160646127d36010548b612c4590919063ffffffff16565b612c5b90919063ffffffff16565b9350601054601354856127f4919061347b565b6127fe9190613504565b925060105460115485612811919061347b565b61281b9190613504565b91506010546011548561282e919061347b565b6128389190613504565b90505b5b6000841115612851576128508a3086612973565b5b600083111561288657612885307f00000000000000000000000091ebc5153726a3ed1e7866f9f24cfc4de7f891d485612973565b5b83886128929190613d15565b97505b6128a08a8a8a612973565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90613af9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90613b8b565b60405180910390fd5b612a5e838383612c71565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb90613dbb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b779190613659565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bdb9190613181565b60405180910390a3612bee848484612c76565b50505050565b6000612bff3061100b565b90506000811415612c105750612c43565b6014600d54612c1f919061347b565b811115612c38576014600d54612c35919061347b565b90505b612c4181612c7b565b505b565b60008183612c53919061347b565b905092915050565b60008183612c699190613504565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612c9857612c97613ddb565b5b604051908082528060200260200182016040528015612cc65781602001602082028036833780820191505090505b5090503081600081518110612cde57612cdd613e0a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d4f57612d4e613e0a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612db4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d44565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e38959493929190613f32565b600060405180830381600087803b158015612e5257600080fd5b505af1158015612e66573d6000803e3d6000fd5b50505050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ed2573d6000803e3d6000fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f0282612ed7565b9050919050565b612f1281612ef7565b82525050565b6000602082019050612f2d6000830184612f09565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f6d578082015181840152602081019050612f52565b83811115612f7c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9e82612f33565b612fa88185612f3e565b9350612fb8818560208601612f4f565b612fc181612f82565b840191505092915050565b60006020820190508181036000830152612fe68184612f93565b905092915050565b600080fd5b612ffc81612ef7565b811461300757600080fd5b50565b60008135905061301981612ff3565b92915050565b6000819050919050565b6130328161301f565b811461303d57600080fd5b50565b60008135905061304f81613029565b92915050565b6000806040838503121561306c5761306b612fee565b5b600061307a8582860161300a565b925050602061308b85828601613040565b9150509250929050565b60008115159050919050565b6130aa81613095565b82525050565b60006020820190506130c560008301846130a1565b92915050565b6000602082840312156130e1576130e0612fee565b5b60006130ef8482850161300a565b91505092915050565b6000819050919050565b600061311d61311861311384612ed7565b6130f8565b612ed7565b9050919050565b600061312f82613102565b9050919050565b600061314182613124565b9050919050565b61315181613136565b82525050565b600060208201905061316c6000830184613148565b92915050565b61317b8161301f565b82525050565b60006020820190506131966000830184613172565b92915050565b6000602082840312156131b2576131b1612fee565b5b60006131c084828501613040565b91505092915050565b6000806000606084860312156131e2576131e1612fee565b5b60006131f08682870161300a565b93505060206132018682870161300a565b925050604061321286828701613040565b9150509250925092565b600060ff82169050919050565b6132328161321c565b82525050565b600060208201905061324d6000830184613229565b92915050565b61325c81613095565b811461326757600080fd5b50565b60008135905061327981613253565b92915050565b6000806040838503121561329657613295612fee565b5b60006132a48582860161300a565b92505060206132b58582860161326a565b9150509250929050565b6000806000606084860312156132d8576132d7612fee565b5b60006132e686828701613040565b93505060206132f786828701613040565b925050604061330886828701613040565b9150509250925092565b60006020828403121561332857613327612fee565b5b60006133368482850161326a565b91505092915050565b6000806040838503121561335657613355612fee565b5b60006133648582860161300a565b92505060206133758582860161300a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133c657607f821691505b602082108114156133da576133d961337f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613416602083612f3e565b9150613421826133e0565b602082019050919050565b6000602082019050818103600083015261344581613409565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134868261301f565b91506134918361301f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134ca576134c961344c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061350f8261301f565b915061351a8361301f565b92508261352a576135296134d5565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613591602f83612f3e565b915061359c82613535565b604082019050919050565b600060208201905081810360008301526135c081613584565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613623602883612f3e565b915061362e826135c7565b604082019050919050565b6000602082019050818103600083015261365281613616565b9050919050565b60006136648261301f565b915061366f8361301f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136a4576136a361344c565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006136e5601d83612f3e565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613777602483612f3e565b91506137828261371b565b604082019050919050565b600060208201905081810360008301526137a68161376a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613809603583612f3e565b9150613814826137ad565b604082019050919050565b60006020820190508181036000830152613838816137fc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061389b603483612f3e565b91506138a68261383f565b604082019050919050565b600060208201905081810360008301526138ca8161388e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061392d602683612f3e565b9150613938826138d1565b604082019050919050565b6000602082019050818103600083015261395c81613920565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139bf602483612f3e565b91506139ca82613963565b604082019050919050565b600060208201905081810360008301526139ee816139b2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a51602283612f3e565b9150613a5c826139f5565b604082019050919050565b60006020820190508181036000830152613a8081613a44565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ae3602583612f3e565b9150613aee82613a87565b604082019050919050565b60006020820190508181036000830152613b1281613ad6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b75602383612f3e565b9150613b8082613b19565b604082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613be1601683612f3e565b9150613bec82613bab565b602082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c73603583612f3e565b9150613c7e82613c17565b604082019050919050565b60006020820190508181036000830152613ca281613c66565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cdf601383612f3e565b9150613cea82613ca9565b602082019050919050565b60006020820190508181036000830152613d0e81613cd2565b9050919050565b6000613d208261301f565b9150613d2b8361301f565b925082821015613d3e57613d3d61344c565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613da5602683612f3e565b9150613db082613d49565b604082019050919050565b60006020820190508181036000830152613dd481613d98565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613e5e613e59613e5484613e39565b6130f8565b61301f565b9050919050565b613e6e81613e43565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ea981612ef7565b82525050565b6000613ebb8383613ea0565b60208301905092915050565b6000602082019050919050565b6000613edf82613e74565b613ee98185613e7f565b9350613ef483613e90565b8060005b83811015613f25578151613f0c8882613eaf565b9750613f1783613ec7565b925050600181019050613ef8565b5085935050505092915050565b600060a082019050613f476000830188613172565b613f546020830187613e65565b8181036040830152613f668186613ed4565b9050613f756060830185612f09565b613f826080830184613172565b969550505050505056fea2646970667358221220cc10363c3a1f870083e14180718b8751e30722ae03e21ac86aea6a3f987559f464736f6c634300080c0033

Deployed Bytecode Sourcemap

24926:12388:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25348:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9782:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11949:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26112:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25005:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10902:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31887:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29941:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12600:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25274:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25108:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10744:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25751:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25720:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25894:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25063:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25567:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32335:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25862:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25827:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25647:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11073:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3017:103;;;;;;;;;;;;;:::i;:::-;;29245:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30488:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30859:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25168:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29081:112;;;;;;;;;;;;;:::i;:::-;;2366:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30751:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10001:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11413:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32088:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25607:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31697:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31280:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30224:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25452:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29436:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25686:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11651:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25494:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25311:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25788;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3275:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25932:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25534:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25348:23;;;;;;;;;;;;;:::o;9782:100::-;9836:13;9869:5;9862:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9782:100;:::o;11949:169::-;12032:4;12049:39;12058:12;:10;:12::i;:::-;12072:7;12081:6;12049:8;:39::i;:::-;12106:4;12099:11;;11949:169;;;;:::o;26112:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25005:51::-;;;:::o;10902:108::-;10963:7;10990:12;;10983:19;;10902:108;:::o;31887:189::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32023:9:::1;;;;;;;;;;;31992:41;;32009:12;31992:41;;;;;;;;;;;;32056:12;32044:9;;:24;;;;;;;;;;;;;;;;;;31887:189:::0;:::o;29941:275::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30078:4:::1;30070;30065:1;30049:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30048:26;;;;:::i;:::-;30047:35;;;;:::i;:::-;30037:6;:45;;30015:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30201:6;30191;:17;;;;:::i;:::-;30168:20;:40;;;;29941:275:::0;:::o;12600:492::-;12740:4;12757:36;12767:6;12775:9;12786:6;12757:9;:36::i;:::-;12806:24;12833:11;:19;12845:6;12833:19;;;;;;;;;;;;;;;:33;12853:12;:10;:12::i;:::-;12833:33;;;;;;;;;;;;;;;;12806:60;;12905:6;12885:16;:26;;12877:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12992:57;13001:6;13009:12;:10;:12::i;:::-;13042:6;13023:16;:25;12992:8;:57::i;:::-;13080:4;13073:11;;;12600:492;;;;;:::o;25274:28::-;;;;:::o;25108:53::-;25154:6;25108:53;:::o;10744:93::-;10802:5;10827:2;10820:9;;10744:93;:::o;25751:30::-;;;;:::o;25720:24::-;;;;:::o;25894:31::-;;;;:::o;25063:38::-;;;:::o;25567:33::-;;;;;;;;;;;;;:::o;32335:126::-;32401:4;32425:19;:28;32445:7;32425:28;;;;;;;;;;;;;;;;;;;;;;;;;32418:35;;32335:126;;;:::o;25862:25::-;;;;:::o;25827:28::-;;;;:::o;25647:30::-;;;;;;;;;;;;;:::o;11073:127::-;11147:7;11174:9;:18;11184:7;11174:18;;;;;;;;;;;;;;;;11167:25;;11073:127;;;:::o;3017:103::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3082:30:::1;3109:1;3082:18;:30::i;:::-;3017:103::o:0;29245:121::-;29297:4;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29331:5:::1;29314:14;;:22;;;;;;;;;;;;;;;;;;29354:4;29347:11;;29245:121:::0;:::o;30488:167::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30643:4:::1;30601:31;:39;30633:6;30601:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30488:167:::0;;:::o;30859:413::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31031:7:::1;31019:9;:19;;;;31067:13;31049:15;:31;;;;31109:13;31091:15;:31;;;;31178:15;;31160;;31148:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;31133:12;:60;;;;31228:2;31212:12;;:18;;31204:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30859:413:::0;;;:::o;25168:63::-;;;;;;;;;;;;;:::o;29081:112::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29152:4:::1;29136:13;;:20;;;;;;;;;;;;;;;;;;29181:4;29167:11;;:18;;;;;;;;;;;;;;;;;;29081:112::o:0;2366:87::-;2412:7;2439:6;;;;;;;;;;;2432:13;;2366:87;:::o;30751:100::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30836:7:::1;30822:11;;:21;;;;;;;;;;;;;;;;;;30751:100:::0;:::o;10001:104::-;10057:13;10090:7;10083:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10001:104;:::o;11413:175::-;11499:4;11516:42;11526:12;:10;:12::i;:::-;11540:9;11551:6;11516:9;:42::i;:::-;11576:4;11569:11;;11413:175;;;;:::o;32088:231::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32248:15:::1;;;;;;;;;;;32205:59;;32228:18;32205:59;;;;;;;;;;;;32293:18;32275:15;;:36;;;;;;;;;;;;;;;;;;32088:231:::0;:::o;25607:33::-;;;;;;;;;;;;;:::o;31697:182::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31813:8:::1;31782:19;:28;31802:7;31782:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31853:7;31837:34;;;31862:8;31837:34;;;;;;:::i;:::-;;;;;;;;31697:182:::0;;:::o;31280:409::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31444:7:::1;31431:10;:20;;;;31481:13;31462:16;:32;;;;31524:13;31505:16;:32;;;;31596:13;31577:16;;31564:10;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;31548:13;:61;;;;31645:2;31628:13;;:19;;31620:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31280:409:::0;;;:::o;30224:256::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30364:4:::1;30356;30351:1;30335:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30334:26;;;;:::i;:::-;30333:35;;;;:::i;:::-;30323:6;:45;;30301:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30465:6;30455;:17;;;;:::i;:::-;30443:9;:29;;;;30224:256:::0;:::o;25452:35::-;;;;:::o;29436:497::-;29544:4;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29623:6:::1;29618:1;29602:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29601:28;;;;:::i;:::-;29588:9;:41;;29566:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:4;29773:1;29757:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29756:26;;;;:::i;:::-;29743:9;:39;;29721:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29894:9;29873:18;:30;;;;29921:4;29914:11;;29436:497:::0;;;:::o;25686:27::-;;;;:::o;11651:151::-;11740:7;11767:11;:18;11779:5;11767:18;;;;;;;;;;;;;;;:27;11786:7;11767:27;;;;;;;;;;;;;;;;11760:34;;11651:151;;;;:::o;25494:33::-;;;;:::o;25311:30::-;;;;;;;;;;;;;:::o;25788:::-;;;;:::o;3275:201::-;2597:12;:10;:12::i;:::-;2586:23;;:7;:5;:7::i;:::-;:23;;;2578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3384:1:::1;3364:22;;:8;:22;;;;3356:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3440:28;3459:8;3440:18;:28::i;:::-;3275:201:::0;:::o;25932:31::-;;;;:::o;25534:24::-;;;;:::o;1039:98::-;1092:7;1119:10;1112:17;;1039:98;:::o;15441:380::-;15594:1;15577:19;;:5;:19;;;;15569:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15675:1;15656:21;;:7;:21;;;;15648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15759:6;15729:11;:18;15741:5;15729:18;;;;;;;;;;;;;;;:27;15748:7;15729:27;;;;;;;;;;;;;;;:36;;;;15797:7;15781:32;;15790:5;15781:32;;;15806:6;15781:32;;;;;;:::i;:::-;;;;;;;;15441:380;;;:::o;32469:3868::-;32617:1;32601:18;;:4;:18;;;;32593:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32694:1;32680:16;;:2;:16;;;;32672:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32763:1;32753:6;:11;32749:93;;;32781:28;32797:4;32803:2;32807:1;32781:15;:28::i;:::-;32824:7;;32749:93;32858:14;;;;;;;;;;;32854:1430;;;32919:7;:5;:7::i;:::-;32911:15;;:4;:15;;;;:49;;;;;32953:7;:5;:7::i;:::-;32947:13;;:2;:13;;;;32911:49;:86;;;;;32995:1;32981:16;;:2;:16;;;;32911:86;:128;;;;;33032:6;33018:21;;:2;:21;;;;32911:128;:158;;;;;33061:8;;;;;;;;;;;33060:9;32911:158;32889:1384;;;33109:13;;;;;;;;;;;33104:223;;33181:19;:25;33201:4;33181:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33210:19;:23;33230:2;33210:23;;;;;;;;;;;;;;;;;;;;;;;;;33181:52;33147:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33104:223;33541:13;33533:21;;:4;:21;;;:82;;;;;33580:31;:35;33612:2;33580:35;;;;;;;;;;;;;;;;;;;;;;;;;33579:36;33533:82;33507:751;;;33702:20;;33692:6;:30;;33658:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33910:9;;33893:13;33903:2;33893:9;:13::i;:::-;33884:6;:22;;;;:::i;:::-;:35;;33850:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33507:751;;;34038:31;:35;34070:2;34038:35;;;;;;;;;;;;;;;;;;;;;;;;;34033:225;;34158:9;;34141:13;34151:2;34141:9;:13::i;:::-;34132:6;:22;;;;:::i;:::-;:35;;34098:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34033:225;33507:751;32889:1384;32854:1430;34296:28;34327:24;34345:4;34327:9;:24::i;:::-;34296:55;;34364:12;34403:18;;34379:20;:42;;34364:57;;34452:7;:35;;;;;34476:11;;;;;;;;;;;34452:35;:61;;;;;34505:8;;;;;;;;;;;34504:9;34452:61;:97;;;;;34536:13;34530:19;;:2;:19;;;34452:97;:140;;;;;34567:19;:25;34587:4;34567:25;;;;;;;;;;;;;;;;;;;;;;;;;34566:26;34452:140;:181;;;;;34610:19;:23;34630:2;34610:23;;;;;;;;;;;;;;;;;;;;;;;;;34609:24;34452:181;34434:313;;;34671:4;34660:8;;:15;;;;;;;;;;;;;;;;;;34692:10;:8;:10::i;:::-;34730:5;34719:8;;:16;;;;;;;;;;;;;;;;;;34434:313;34759:12;34775:8;;;;;;;;;;;34774:9;34759:24;;34885:19;:25;34905:4;34885:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34914:19;:23;34934:2;34914:23;;;;;;;;;;;;;;;;;;;;;;;;;34885:52;34881:100;;;34964:5;34954:15;;34881:100;34993:12;35020:26;35061:20;35096:26;35215:7;35211:1073;;;35273:13;35267:19;;:2;:19;;;:40;;;;;35306:1;35290:13;;:17;35267:40;35263:731;;;35335:34;35365:3;35335:25;35346:13;;35335:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35328:41;;35437:13;;35417:16;;35410:4;:23;;;;:::i;:::-;35409:41;;;;:::i;:::-;35388:62;;35506:13;;35492:10;;35485:4;:17;;;;:::i;:::-;35484:35;;;;:::i;:::-;35469:50;;35581:13;;35567:10;;35560:4;:17;;;;:::i;:::-;35559:35;;;;:::i;:::-;35538:56;;35263:731;;;35664:13;35656:21;;:4;:21;;;:41;;;;;35696:1;35681:12;;:16;35656:41;35652:342;;;35725:33;35754:3;35725:24;35736:12;;35725:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35718:40;;35825:12;;35806:15;;35799:4;:22;;;;:::i;:::-;35798:39;;;;:::i;:::-;35777:60;;35893:12;;35880:9;;35873:4;:16;;;;:::i;:::-;35872:33;;;;:::i;:::-;35857:48;;35966:12;;35953:9;;35946:4;:16;;;;:::i;:::-;35945:33;;;;:::i;:::-;35924:54;;35652:342;35263:731;36020:1;36014:4;:7;36010:90;;;36042:42;36058:4;36072;36079;36042:15;:42::i;:::-;36010:90;36139:1;36118:18;:22;36114:128;;;36161:65;36185:4;36192:13;36207:18;36161:15;:65::i;:::-;36114:128;36268:4;36258:14;;;;;:::i;:::-;;;35211:1073;36296:33;36312:4;36318:2;36322:6;36296:15;:33::i;:::-;32582:3755;;;;;;;32469:3868;;;;:::o;3636:191::-;3710:16;3729:6;;;;;;;;;;;3710:25;;3755:8;3746:6;;:17;;;;;;;;;;;;;;;;;;3810:8;3779:40;;3800:8;3779:40;;;;;;;;;;;;3699:128;3636:191;:::o;13582:733::-;13740:1;13722:20;;:6;:20;;;;13714:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13824:1;13803:23;;:9;:23;;;;13795:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13879:47;13900:6;13908:9;13919:6;13879:20;:47::i;:::-;13939:21;13963:9;:17;13973:6;13963:17;;;;;;;;;;;;;;;;13939:41;;14016:6;13999:13;:23;;13991:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14137:6;14121:13;:22;14101:9;:17;14111:6;14101:17;;;;;;;;;;;;;;;:42;;;;14189:6;14165:9;:20;14175:9;14165:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14230:9;14213:35;;14222:6;14213:35;;;14241:6;14213:35;;;;;;:::i;:::-;;;;;;;;14261:46;14281:6;14289:9;14300:6;14261:19;:46::i;:::-;13703:612;13582:733;;;:::o;36970:339::-;37009:23;37035:24;37053:4;37035:9;:24::i;:::-;37009:50;;37093:1;37074:15;:20;37070:59;;;37111:7;;;37070:59;37184:2;37163:18;;:23;;;;:::i;:::-;37145:15;:41;37141:115;;;37242:2;37221:18;;:23;;;;:::i;:::-;37203:41;;37141:115;37268:33;37285:15;37268:16;:33::i;:::-;36998:311;36970:339;:::o;20894:98::-;20952:7;20983:1;20979;:5;;;;:::i;:::-;20972:12;;20894:98;;;;:::o;21293:::-;21351:7;21382:1;21378;:5;;;;:::i;:::-;21371:12;;21293:98;;;;:::o;16421:125::-;;;;:::o;17150:124::-;;;;:::o;36341:619::-;36459:21;36497:1;36483:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36459:40;;36524:4;36506;36511:1;36506:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36546:3;;;;;;;;;;;36536:4;36541:1;36536:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;36558:62;36575:4;36590:15;36608:11;36558:8;:62::i;:::-;36651:15;:69;;;36731:11;36753:1;36794:4;36809:9;;;;;;;;;;;36829:15;36651:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36908:15;;;;;;;;;;;36900:33;;:56;36934:21;36900:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36396:564;36341:619;:::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:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:152::-;4603:9;4636:37;4667:5;4636:37;:::i;:::-;4623:50;;4527:152;;;:::o;4685:183::-;4798:63;4855:5;4798:63;:::i;:::-;4793:3;4786:76;4685:183;;:::o;4874:274::-;4993:4;5031:2;5020:9;5016:18;5008:26;;5044:97;5138:1;5127:9;5123:17;5114:6;5044:97;:::i;:::-;4874:274;;;;:::o;5154:118::-;5241:24;5259:5;5241:24;:::i;:::-;5236:3;5229:37;5154:118;;:::o;5278:222::-;5371:4;5409:2;5398:9;5394:18;5386:26;;5422:71;5490:1;5479:9;5475:17;5466:6;5422:71;:::i;:::-;5278:222;;;;:::o;5506:329::-;5565:6;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5506:329;;;;:::o;5841:619::-;5918:6;5926;5934;5983:2;5971:9;5962:7;5958:23;5954:32;5951:119;;;5989:79;;:::i;:::-;5951:119;6109:1;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6080:117;6236:2;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6207:118;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;5841:619;;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:116::-;6966:21;6981:5;6966:21;:::i;:::-;6959:5;6956:32;6946:60;;7002:1;6999;6992:12;6946:60;6896:116;:::o;7018:133::-;7061:5;7099:6;7086:20;7077:29;;7115:30;7139:5;7115:30;:::i;:::-;7018:133;;;;:::o;7157:468::-;7222:6;7230;7279:2;7267:9;7258:7;7254:23;7250:32;7247:119;;;7285:79;;:::i;:::-;7247:119;7405:1;7430:53;7475:7;7466:6;7455:9;7451:22;7430:53;:::i;:::-;7420:63;;7376:117;7532:2;7558:50;7600:7;7591:6;7580:9;7576:22;7558:50;:::i;:::-;7548:60;;7503:115;7157:468;;;;;:::o;7631:619::-;7708:6;7716;7724;7773:2;7761:9;7752:7;7748:23;7744:32;7741:119;;;7779:79;;:::i;:::-;7741:119;7899:1;7924:53;7969:7;7960:6;7949:9;7945:22;7924:53;:::i;:::-;7914:63;;7870:117;8026:2;8052:53;8097:7;8088:6;8077:9;8073:22;8052:53;:::i;:::-;8042:63;;7997:118;8154:2;8180:53;8225:7;8216:6;8205:9;8201:22;8180:53;:::i;:::-;8170:63;;8125:118;7631:619;;;;;:::o;8256:323::-;8312:6;8361:2;8349:9;8340:7;8336:23;8332:32;8329:119;;;8367:79;;:::i;:::-;8329:119;8487:1;8512:50;8554:7;8545:6;8534:9;8530:22;8512:50;:::i;:::-;8502:60;;8458:114;8256:323;;;;:::o;8585:474::-;8653:6;8661;8710:2;8698:9;8689:7;8685:23;8681:32;8678:119;;;8716:79;;:::i;:::-;8678:119;8836:1;8861:53;8906:7;8897:6;8886:9;8882:22;8861:53;:::i;:::-;8851:63;;8807:117;8963:2;8989:53;9034:7;9025:6;9014:9;9010:22;8989:53;:::i;:::-;8979:63;;8934:118;8585:474;;;;;:::o;9065:180::-;9113:77;9110:1;9103:88;9210:4;9207:1;9200:15;9234:4;9231:1;9224:15;9251:320;9295:6;9332:1;9326:4;9322:12;9312:22;;9379:1;9373:4;9369:12;9400:18;9390:81;;9456:4;9448:6;9444:17;9434:27;;9390:81;9518:2;9510:6;9507:14;9487:18;9484:38;9481:84;;;9537:18;;:::i;:::-;9481:84;9302:269;9251:320;;;:::o;9577:182::-;9717:34;9713:1;9705:6;9701:14;9694:58;9577:182;:::o;9765:366::-;9907:3;9928:67;9992:2;9987:3;9928:67;:::i;:::-;9921:74;;10004:93;10093:3;10004:93;:::i;:::-;10122:2;10117:3;10113:12;10106:19;;9765:366;;;:::o;10137:419::-;10303:4;10341:2;10330:9;10326:18;10318:26;;10390:9;10384:4;10380:20;10376:1;10365:9;10361:17;10354:47;10418:131;10544:4;10418:131;:::i;:::-;10410:139;;10137:419;;;:::o;10562:180::-;10610:77;10607:1;10600:88;10707:4;10704:1;10697:15;10731:4;10728:1;10721:15;10748:348;10788:7;10811:20;10829:1;10811:20;:::i;:::-;10806:25;;10845:20;10863:1;10845:20;:::i;:::-;10840:25;;11033:1;10965:66;10961:74;10958:1;10955:81;10950:1;10943:9;10936:17;10932:105;10929:131;;;11040:18;;:::i;:::-;10929:131;11088:1;11085;11081:9;11070:20;;10748:348;;;;:::o;11102:180::-;11150:77;11147:1;11140:88;11247:4;11244:1;11237:15;11271:4;11268:1;11261:15;11288:185;11328:1;11345:20;11363:1;11345:20;:::i;:::-;11340:25;;11379:20;11397:1;11379:20;:::i;:::-;11374:25;;11418:1;11408:35;;11423:18;;:::i;:::-;11408:35;11465:1;11462;11458:9;11453:14;;11288:185;;;;:::o;11479:234::-;11619:34;11615:1;11607:6;11603:14;11596:58;11688:17;11683:2;11675:6;11671:15;11664:42;11479:234;:::o;11719:366::-;11861:3;11882:67;11946:2;11941:3;11882:67;:::i;:::-;11875:74;;11958:93;12047:3;11958:93;:::i;:::-;12076:2;12071:3;12067:12;12060:19;;11719:366;;;:::o;12091:419::-;12257:4;12295:2;12284:9;12280:18;12272:26;;12344:9;12338:4;12334:20;12330:1;12319:9;12315:17;12308:47;12372:131;12498:4;12372:131;:::i;:::-;12364:139;;12091:419;;;:::o;12516:227::-;12656:34;12652:1;12644:6;12640:14;12633:58;12725:10;12720:2;12712:6;12708:15;12701:35;12516:227;:::o;12749:366::-;12891:3;12912:67;12976:2;12971:3;12912:67;:::i;:::-;12905:74;;12988:93;13077:3;12988:93;:::i;:::-;13106:2;13101:3;13097:12;13090:19;;12749:366;;;:::o;13121:419::-;13287:4;13325:2;13314:9;13310:18;13302:26;;13374:9;13368:4;13364:20;13360:1;13349:9;13345:17;13338:47;13402:131;13528:4;13402:131;:::i;:::-;13394:139;;13121:419;;;:::o;13546:305::-;13586:3;13605:20;13623:1;13605:20;:::i;:::-;13600:25;;13639:20;13657:1;13639:20;:::i;:::-;13634:25;;13793:1;13725:66;13721:74;13718:1;13715:81;13712:107;;;13799:18;;:::i;:::-;13712:107;13843:1;13840;13836:9;13829:16;;13546:305;;;;:::o;13857:179::-;13997:31;13993:1;13985:6;13981:14;13974:55;13857:179;:::o;14042:366::-;14184:3;14205:67;14269:2;14264:3;14205:67;:::i;:::-;14198:74;;14281:93;14370:3;14281:93;:::i;:::-;14399:2;14394:3;14390:12;14383:19;;14042:366;;;:::o;14414:419::-;14580:4;14618:2;14607:9;14603:18;14595:26;;14667:9;14661:4;14657:20;14653:1;14642:9;14638:17;14631:47;14695:131;14821:4;14695:131;:::i;:::-;14687:139;;14414:419;;;:::o;14839:223::-;14979:34;14975:1;14967:6;14963:14;14956:58;15048:6;15043:2;15035:6;15031:15;15024:31;14839:223;:::o;15068:366::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:419::-;15606:4;15644:2;15633:9;15629:18;15621:26;;15693:9;15687:4;15683:20;15679:1;15668:9;15664:17;15657:47;15721:131;15847:4;15721:131;:::i;:::-;15713:139;;15440:419;;;:::o;15865:240::-;16005:34;16001:1;15993:6;15989:14;15982:58;16074:23;16069:2;16061:6;16057:15;16050:48;15865:240;:::o;16111:366::-;16253:3;16274:67;16338:2;16333:3;16274:67;:::i;:::-;16267:74;;16350:93;16439:3;16350:93;:::i;:::-;16468:2;16463:3;16459:12;16452:19;;16111:366;;;:::o;16483:419::-;16649:4;16687:2;16676:9;16672:18;16664:26;;16736:9;16730:4;16726:20;16722:1;16711:9;16707:17;16700:47;16764:131;16890:4;16764:131;:::i;:::-;16756:139;;16483:419;;;:::o;16908:239::-;17048:34;17044:1;17036:6;17032:14;17025:58;17117:22;17112:2;17104:6;17100:15;17093:47;16908:239;:::o;17153:366::-;17295:3;17316:67;17380:2;17375:3;17316:67;:::i;:::-;17309:74;;17392:93;17481:3;17392:93;:::i;:::-;17510:2;17505:3;17501:12;17494:19;;17153:366;;;:::o;17525:419::-;17691:4;17729:2;17718:9;17714:18;17706:26;;17778:9;17772:4;17768:20;17764:1;17753:9;17749:17;17742:47;17806:131;17932:4;17806:131;:::i;:::-;17798:139;;17525:419;;;:::o;17950:225::-;18090:34;18086:1;18078:6;18074:14;18067:58;18159:8;18154:2;18146:6;18142:15;18135:33;17950:225;:::o;18181:366::-;18323:3;18344:67;18408:2;18403:3;18344:67;:::i;:::-;18337:74;;18420:93;18509:3;18420:93;:::i;:::-;18538:2;18533:3;18529:12;18522:19;;18181:366;;;:::o;18553:419::-;18719:4;18757:2;18746:9;18742:18;18734:26;;18806:9;18800:4;18796:20;18792:1;18781:9;18777:17;18770:47;18834:131;18960:4;18834:131;:::i;:::-;18826:139;;18553:419;;;:::o;18978:223::-;19118:34;19114:1;19106:6;19102:14;19095:58;19187:6;19182:2;19174:6;19170:15;19163:31;18978:223;:::o;19207:366::-;19349:3;19370:67;19434:2;19429:3;19370:67;:::i;:::-;19363:74;;19446:93;19535:3;19446:93;:::i;:::-;19564:2;19559:3;19555:12;19548:19;;19207:366;;;:::o;19579:419::-;19745:4;19783:2;19772:9;19768:18;19760:26;;19832:9;19826:4;19822:20;19818:1;19807:9;19803:17;19796:47;19860:131;19986:4;19860:131;:::i;:::-;19852:139;;19579:419;;;:::o;20004:221::-;20144:34;20140:1;20132:6;20128:14;20121:58;20213:4;20208:2;20200:6;20196:15;20189:29;20004:221;:::o;20231:366::-;20373:3;20394:67;20458:2;20453:3;20394:67;:::i;:::-;20387:74;;20470:93;20559:3;20470:93;:::i;:::-;20588:2;20583:3;20579:12;20572:19;;20231:366;;;:::o;20603:419::-;20769:4;20807:2;20796:9;20792:18;20784:26;;20856:9;20850:4;20846:20;20842:1;20831:9;20827:17;20820:47;20884:131;21010:4;20884:131;:::i;:::-;20876:139;;20603:419;;;:::o;21028:224::-;21168:34;21164:1;21156:6;21152:14;21145:58;21237:7;21232:2;21224:6;21220:15;21213:32;21028:224;:::o;21258:366::-;21400:3;21421:67;21485:2;21480:3;21421:67;:::i;:::-;21414:74;;21497:93;21586:3;21497:93;:::i;:::-;21615:2;21610:3;21606:12;21599:19;;21258:366;;;:::o;21630:419::-;21796:4;21834:2;21823:9;21819:18;21811:26;;21883:9;21877:4;21873:20;21869:1;21858:9;21854:17;21847:47;21911:131;22037:4;21911:131;:::i;:::-;21903:139;;21630:419;;;:::o;22055:222::-;22195:34;22191:1;22183:6;22179:14;22172:58;22264:5;22259:2;22251:6;22247:15;22240:30;22055:222;:::o;22283:366::-;22425:3;22446:67;22510:2;22505:3;22446:67;:::i;:::-;22439:74;;22522:93;22611:3;22522:93;:::i;:::-;22640:2;22635:3;22631:12;22624:19;;22283:366;;;:::o;22655:419::-;22821:4;22859:2;22848:9;22844:18;22836:26;;22908:9;22902:4;22898:20;22894:1;22883:9;22879:17;22872:47;22936:131;23062:4;22936:131;:::i;:::-;22928:139;;22655:419;;;:::o;23080:172::-;23220:24;23216:1;23208:6;23204:14;23197:48;23080:172;:::o;23258:366::-;23400:3;23421:67;23485:2;23480:3;23421:67;:::i;:::-;23414:74;;23497:93;23586:3;23497:93;:::i;:::-;23615:2;23610:3;23606:12;23599:19;;23258:366;;;:::o;23630:419::-;23796:4;23834:2;23823:9;23819:18;23811:26;;23883:9;23877:4;23873:20;23869:1;23858:9;23854:17;23847:47;23911:131;24037:4;23911:131;:::i;:::-;23903:139;;23630:419;;;:::o;24055:240::-;24195:34;24191:1;24183:6;24179:14;24172:58;24264:23;24259:2;24251:6;24247:15;24240:48;24055:240;:::o;24301:366::-;24443:3;24464:67;24528:2;24523:3;24464:67;:::i;:::-;24457:74;;24540:93;24629:3;24540:93;:::i;:::-;24658:2;24653:3;24649:12;24642:19;;24301:366;;;:::o;24673:419::-;24839:4;24877:2;24866:9;24862:18;24854:26;;24926:9;24920:4;24916:20;24912:1;24901:9;24897:17;24890:47;24954:131;25080:4;24954:131;:::i;:::-;24946:139;;24673:419;;;:::o;25098:169::-;25238:21;25234:1;25226:6;25222:14;25215:45;25098:169;:::o;25273:366::-;25415:3;25436:67;25500:2;25495:3;25436:67;:::i;:::-;25429:74;;25512:93;25601:3;25512:93;:::i;:::-;25630:2;25625:3;25621:12;25614:19;;25273:366;;;:::o;25645:419::-;25811:4;25849:2;25838:9;25834:18;25826:26;;25898:9;25892:4;25888:20;25884:1;25873:9;25869:17;25862:47;25926:131;26052:4;25926:131;:::i;:::-;25918:139;;25645:419;;;:::o;26070:191::-;26110:4;26130:20;26148:1;26130:20;:::i;:::-;26125:25;;26164:20;26182:1;26164:20;:::i;:::-;26159:25;;26203:1;26200;26197:8;26194:34;;;26208:18;;:::i;:::-;26194:34;26253:1;26250;26246:9;26238:17;;26070:191;;;;:::o;26267:225::-;26407:34;26403:1;26395:6;26391:14;26384:58;26476:8;26471:2;26463:6;26459:15;26452:33;26267:225;:::o;26498:366::-;26640:3;26661:67;26725:2;26720:3;26661:67;:::i;:::-;26654:74;;26737:93;26826:3;26737:93;:::i;:::-;26855:2;26850:3;26846:12;26839:19;;26498:366;;;:::o;26870:419::-;27036:4;27074:2;27063:9;27059:18;27051:26;;27123:9;27117:4;27113:20;27109:1;27098:9;27094:17;27087:47;27151:131;27277:4;27151:131;:::i;:::-;27143:139;;26870:419;;;:::o;27295:180::-;27343:77;27340:1;27333:88;27440:4;27437:1;27430:15;27464:4;27461:1;27454:15;27481:180;27529:77;27526:1;27519:88;27626:4;27623:1;27616:15;27650:4;27647:1;27640:15;27667:85;27712:7;27741:5;27730:16;;27667:85;;;:::o;27758:158::-;27816:9;27849:61;27867:42;27876:32;27902:5;27876:32;:::i;:::-;27867:42;:::i;:::-;27849:61;:::i;:::-;27836:74;;27758:158;;;:::o;27922:147::-;28017:45;28056:5;28017:45;:::i;:::-;28012:3;28005:58;27922:147;;:::o;28075:114::-;28142:6;28176:5;28170:12;28160:22;;28075:114;;;:::o;28195:184::-;28294:11;28328:6;28323:3;28316:19;28368:4;28363:3;28359:14;28344:29;;28195:184;;;;:::o;28385:132::-;28452:4;28475:3;28467:11;;28505:4;28500:3;28496:14;28488:22;;28385:132;;;:::o;28523:108::-;28600:24;28618:5;28600:24;:::i;:::-;28595:3;28588:37;28523:108;;:::o;28637:179::-;28706:10;28727:46;28769:3;28761:6;28727:46;:::i;:::-;28805:4;28800:3;28796:14;28782:28;;28637:179;;;;:::o;28822:113::-;28892:4;28924;28919:3;28915:14;28907:22;;28822:113;;;:::o;28971:732::-;29090:3;29119:54;29167:5;29119:54;:::i;:::-;29189:86;29268:6;29263:3;29189:86;:::i;:::-;29182:93;;29299:56;29349:5;29299:56;:::i;:::-;29378:7;29409:1;29394:284;29419:6;29416:1;29413:13;29394:284;;;29495:6;29489:13;29522:63;29581:3;29566:13;29522:63;:::i;:::-;29515:70;;29608:60;29661:6;29608:60;:::i;:::-;29598:70;;29454:224;29441:1;29438;29434:9;29429:14;;29394:284;;;29398:14;29694:3;29687:10;;29095:608;;;28971:732;;;;:::o;29709:831::-;29972:4;30010:3;29999:9;29995:19;29987:27;;30024:71;30092:1;30081:9;30077:17;30068:6;30024:71;:::i;:::-;30105:80;30181:2;30170:9;30166:18;30157:6;30105:80;:::i;:::-;30232:9;30226:4;30222:20;30217:2;30206:9;30202:18;30195:48;30260:108;30363:4;30354:6;30260:108;:::i;:::-;30252:116;;30378:72;30446:2;30435:9;30431:18;30422:6;30378:72;:::i;:::-;30460:73;30528:3;30517:9;30513:19;30504:6;30460:73;:::i;:::-;29709:831;;;;;;;;:::o

Swarm Source

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