ETH Price: $2,521.06 (-0.28%)

Token

R1 (R1)
 

Overview

Max Total Supply

1,000,000 R1

Holders

126

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00000000000075587 R1

Value
$0.00
0x199854298113879cca00425533d79ae600ddc004
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:
R1

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-16
*/

/*
https://twitter.com/R1Token
https://t.me/R1portal

https://techcrunch.com/2020/08/28/take-a-closer-look-at-elon-musks-neuralink-surgical-robot/

*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
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 Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be 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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

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

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

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

        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 20;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 99;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 20_000 * 1e18; // 2% from total supply maxTransactionAmountTxn
        maxWallet = 20_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

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

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

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

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading(bool enabled, bool weee, bool weeee) external onlyOwner {

        if(enabled && weee && weeee){
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;

        }
        
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateTokensAtAmount(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 UpdateLimits(uint256 newNumTx, uint256 newNumWallet) external onlyOwner {
        require(
            newNumTx >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNumTx * (10**18);

        require(
            newNumWallet >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNumWallet * (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 setFee(uint256 _buyMarketingFee,  uint256 _buyLiquidityFee, uint256 _buyDevFee,  uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellDevFee) external onlyOwner{
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 35, "Must keep fees at 35% or less");

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 35, "Must keep fees at 35% or less");
    }

        
        
   

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

    event BoughtEarly(address indexed sniper);

    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.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"newNumTx","type":"uint256"},{"internalType":"uint256","name":"newNumWallet","type":"uint256"}],"name":"UpdateLimits","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"bool","name":"weee","type":"bool"},{"internalType":"bool","name":"weeee","type":"bool"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","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":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600281526020017f52310000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f523100000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000b09565b5080600490805190602001906200014792919062000b09565b5050506200016a6200015e620005c960201b60201c565b620005d160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000c23565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c23565b6040518363ffffffff1660e01b8152600401620002e992919062000c66565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c23565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069760201b60201c565b6200038c60a05160016200078160201b60201c565b600080600060149050600080600060639050600069d3c21bcecceda1000000905069043c33c193756480000060088190555069043c33c1937564800000600a81905550612710600a82620003e1919062000ccc565b620003ed919062000d5c565b6009819055508660158190555085601681905550846017819055506017546016546015546200041d919062000d94565b62000429919062000d94565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000459919062000d94565b62000465919062000d94565b60188190555073c40ad3d15656cf6991ffcacba02cf69148d46839600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c40ad3d15656cf6991ffcacba02cf69148d46839600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000537620005296200082260201b60201c565b60016200084c60201b60201c565b6200054a3060016200084c60201b60201c565b6200055f61dead60016200084c60201b60201c565b62000581620005736200082260201b60201c565b60016200069760201b60201c565b620005943060016200069760201b60201c565b620005a961dead60016200069760201b60201c565b620005bb33826200098660201b60201c565b505050505050505062000fb3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006a7620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006cd6200082260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000726576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071d9062000e52565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200085c620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008826200082260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d29062000e52565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200097a919062000e91565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f09062000efe565b60405180910390fd5b62000a0d6000838362000aff60201b60201c565b806002600082825462000a21919062000d94565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a78919062000d94565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000adf919062000f31565b60405180910390a362000afb6000838362000b0460201b60201c565b5050565b505050565b505050565b82805462000b179062000f7d565b90600052602060002090601f01602090048101928262000b3b576000855562000b87565b82601f1062000b5657805160ff191683800117855562000b87565b8280016001018555821562000b87579182015b8281111562000b8657825182559160200191906001019062000b69565b5b50905062000b96919062000b9a565b5090565b5b8082111562000bb557600081600090555060010162000b9b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000beb8262000bbe565b9050919050565b62000bfd8162000bde565b811462000c0957600080fd5b50565b60008151905062000c1d8162000bf2565b92915050565b60006020828403121562000c3c5762000c3b62000bb9565b5b600062000c4c8482850162000c0c565b91505092915050565b62000c608162000bde565b82525050565b600060408201905062000c7d600083018562000c55565b62000c8c602083018462000c55565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cd98262000c93565b915062000ce68362000c93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d225762000d2162000c9d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d698262000c93565b915062000d768362000c93565b92508262000d895762000d8862000d2d565b5b828204905092915050565b600062000da18262000c93565b915062000dae8362000c93565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de65762000de562000c9d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e3a60208362000df1565b915062000e478262000e02565b602082019050919050565b6000602082019050818103600083015262000e6d8162000e2b565b9050919050565b60008115159050919050565b62000e8b8162000e74565b82525050565b600060208201905062000ea8600083018462000e80565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ee6601f8362000df1565b915062000ef38262000eae565b602082019050919050565b6000602082019050818103600083015262000f198162000ed7565b9050919050565b62000f2b8162000c93565b82525050565b600060208201905062000f48600083018462000f20565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f9657607f821691505b6020821081141562000fad5762000fac62000f4e565b5b50919050565b60805160a051615b636200103b600039600081816114b401528181611a6a01528181612611015281816126c8015281816126f501528181612d3901528181613e3d01528181613ef60152613f2301526000818161108f01528181612ce1015281816140990152818161417a015281816141a10152818161423d01526142640152615b636000f3fe60806040526004361061039b5760003560e01c80638ea5220f116101dc578063bd9a3b6d11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610dad578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063e2f4560514610d01578063e884f26014610d2c578063f044b41014610d57578063f11a24d314610d82576103a2565b8063c876d0b9116100dc578063c876d0b914610c43578063c8c8ebe414610c6e578063d85ba06314610c99578063dd62ed3e14610cc4576103a2565b8063bd9a3b6d14610bc8578063c024666814610bf1578063c2bcf5ea14610c1a576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610afa578063aacebbe314610b37578063b62496f514610b60578063bbc0c74214610b9d576103a2565b80639fccce3214610a3c578063a0d82dc514610a67578063a457c2d714610a92578063a4c82a0014610acf576103a2565b806395d89b41116101b657806395d89b41146109925780639a7a23d6146109bd5780639c3b4fdc146109e65780639ec22c0e14610a11576103a2565b80638ea5220f14610913578063921369131461093e578063924de9b714610969576103a2565b8063313ce567116102c15780636ddd17131161025f5780637571336a1161022e5780637571336a1461086957806375f0a874146108925780637bce5a04146108bd5780638da5cb5b146108e8576103a2565b80636ddd1713146107c157806370a08231146107ec578063715018a614610829578063730c188814610840576103a2565b806349bd5a5e1161029b57806349bd5a5e146107035780634a62bb651461072e5780634fbee193146107595780636a486a8e14610796576103a2565b8063313ce56714610672578063322bde7d1461069d57806339509351146106c6576103a2565b8063184c16c51161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063184c16c514610508578063199ffc72146105335780631a8145bb1461055e5780631f3fed8f14610589576103a2565b806314cdef9f1161037557806314cdef9f1461044c5780631694505e1461048957806318160ddd146104b45780631816467f146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c991906143ac565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614467565b610efb565b60405161040691906144c2565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906144dd565b610f19565b60405161044391906144c2565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e919061450a565b610f38565b60405161048091906144c2565b60405180910390f35b34801561049557600080fd5b5061049e61108d565b6040516104ab9190614596565b60405180910390f35b3480156104c057600080fd5b506104c96110b1565b6040516104d691906145c0565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906144dd565b6110bb565b005b34801561051457600080fd5b5061051d6111f7565b60405161052a91906145c0565b60405180910390f35b34801561053f57600080fd5b506105486111fd565b60405161055591906145c0565b60405180910390f35b34801561056a57600080fd5b50610573611203565b60405161058091906145c0565b60405180910390f35b34801561059557600080fd5b5061059e611209565b6040516105ab91906145c0565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d691906145db565b61120f565b6040516105e891906144c2565b60405180910390f35b3480156105fd57600080fd5b50610606611307565b604051610613919061463d565b60405180910390f35b34801561062857600080fd5b5061063161130d565b60405161063e91906145c0565b60405180910390f35b34801561065357600080fd5b5061065c611313565b60405161066991906144c2565b60405180910390f35b34801561067e57600080fd5b50610687611326565b6040516106949190614674565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906146bb565b61132f565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190614467565b611406565b6040516106fa91906144c2565b60405180910390f35b34801561070f57600080fd5b506107186114b2565b604051610725919061463d565b60405180910390f35b34801561073a57600080fd5b506107436114d6565b60405161075091906144c2565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906144dd565b6114e9565b60405161078d91906144c2565b60405180910390f35b3480156107a257600080fd5b506107ab61153f565b6040516107b891906145c0565b60405180910390f35b3480156107cd57600080fd5b506107d6611545565b6040516107e391906144c2565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e91906144dd565b611558565b60405161082091906145c0565b60405180910390f35b34801561083557600080fd5b5061083e6115a0565b005b34801561084c57600080fd5b506108676004803603810190610862919061470e565b611628565b005b34801561087557600080fd5b50610890600480360381019061088b9190614761565b611768565b005b34801561089e57600080fd5b506108a761183f565b6040516108b4919061463d565b60405180910390f35b3480156108c957600080fd5b506108d2611865565b6040516108df91906145c0565b60405180910390f35b3480156108f457600080fd5b506108fd61186b565b60405161090a919061463d565b60405180910390f35b34801561091f57600080fd5b50610928611895565b604051610935919061463d565b60405180910390f35b34801561094a57600080fd5b506109536118bb565b60405161096091906145c0565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b91906147a1565b6118c1565b005b34801561099e57600080fd5b506109a761195a565b6040516109b491906143ac565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190614761565b6119ec565b005b3480156109f257600080fd5b506109fb611b05565b604051610a0891906145c0565b60405180910390f35b348015610a1d57600080fd5b50610a26611b0b565b604051610a3391906145c0565b60405180910390f35b348015610a4857600080fd5b50610a51611b11565b604051610a5e91906145c0565b60405180910390f35b348015610a7357600080fd5b50610a7c611b17565b604051610a8991906145c0565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab49190614467565b611b1d565b604051610ac691906144c2565b60405180910390f35b348015610adb57600080fd5b50610ae4611c08565b604051610af191906145c0565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614467565b611c0e565b604051610b2e91906144c2565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b5991906144dd565b611c2c565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906144dd565b611d68565b604051610b9491906144c2565b60405180910390f35b348015610ba957600080fd5b50610bb2611d88565b604051610bbf91906144c2565b60405180910390f35b348015610bd457600080fd5b50610bef6004803603810190610bea91906147ce565b611d9b565b005b348015610bfd57600080fd5b50610c186004803603810190610c139190614761565b611f1b565b005b348015610c2657600080fd5b50610c416004803603810190610c3c919061485b565b612040565b005b348015610c4f57600080fd5b50610c586121e0565b604051610c6591906144c2565b60405180910390f35b348015610c7a57600080fd5b50610c836121f3565b604051610c9091906145c0565b60405180910390f35b348015610ca557600080fd5b50610cae6121f9565b604051610cbb91906145c0565b60405180910390f35b348015610cd057600080fd5b50610ceb6004803603810190610ce6919061489b565b6121ff565b604051610cf891906145c0565b60405180910390f35b348015610d0d57600080fd5b50610d16612286565b604051610d2391906145c0565b60405180910390f35b348015610d3857600080fd5b50610d4161228c565b604051610d4e91906144c2565b60405180910390f35b348015610d6357600080fd5b50610d6c61232c565b604051610d7991906144c2565b60405180910390f35b348015610d8e57600080fd5b50610d976123cc565b604051610da491906145c0565b60405180910390f35b348015610db957600080fd5b50610dd46004803603810190610dcf91906144dd565b6123d2565b005b348015610de257600080fd5b50610deb6124ca565b604051610df891906145c0565b60405180910390f35b348015610e0d57600080fd5b50610e166124d0565b604051610e2391906145c0565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e919061450a565b6124d6565b604051610e6091906144c2565b60405180910390f35b606060038054610e789061490a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea49061490a565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0f610f086127ae565b84846127b6565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b6000610f426127ae565b73ffffffffffffffffffffffffffffffffffffffff16610f6061186b565b73ffffffffffffffffffffffffffffffffffffffff1614610fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fad90614988565b60405180910390fd5b620186a06001610fc46110b1565b610fce91906149d7565b610fd89190614a60565b82101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614b03565b60405180910390fd5b6103e860056110276110b1565b61103191906149d7565b61103b9190614a60565b82111561107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490614b95565b60405180910390fd5b8160098190555060019050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6110c36127ae565b73ffffffffffffffffffffffffffffffffffffffff166110e161186b565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90614988565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b600061121c848484612981565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112676127ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614c27565b60405180910390fd5b6112fb856112f36127ae565b8584036127b6565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b6113376127ae565b73ffffffffffffffffffffffffffffffffffffffff1661135561186b565b73ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290614988565b60405180910390fd5b8280156113b55750815b80156113be5750805b15611401576001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e819055505b505050565b60006114a86114136127ae565b8484600160006114216127ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a39190614c47565b6127b6565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115a86127ae565b73ffffffffffffffffffffffffffffffffffffffff166115c661186b565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390614988565b60405180910390fd5b6116266000613719565b565b6116306127ae565b73ffffffffffffffffffffffffffffffffffffffff1661164e61186b565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614988565b60405180910390fd5b6102588310156116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090614d0f565b60405180910390fd5b6103e882111580156116fc575060008210155b61173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290614da1565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6117706127ae565b73ffffffffffffffffffffffffffffffffffffffff1661178e61186b565b73ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614988565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6118c96127ae565b73ffffffffffffffffffffffffffffffffffffffff166118e761186b565b73ffffffffffffffffffffffffffffffffffffffff161461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614988565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119699061490a565b80601f01602080910402602001604051908101604052809291908181526020018280546119959061490a565b80156119e25780601f106119b7576101008083540402835291602001916119e2565b820191906000526020600020905b8154815290600101906020018083116119c557829003601f168201915b5050505050905090565b6119f46127ae565b73ffffffffffffffffffffffffffffffffffffffff16611a1261186b565b73ffffffffffffffffffffffffffffffffffffffff1614611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614988565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90614e33565b60405180910390fd5b611b0182826137df565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611b2c6127ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090614ec5565b60405180910390fd5b611bfd611bf46127ae565b858584036127b6565b600191505092915050565b600e5481565b6000611c22611c1b6127ae565b8484612981565b6001905092915050565b611c346127ae565b73ffffffffffffffffffffffffffffffffffffffff16611c5261186b565b73ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614988565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611da36127ae565b73ffffffffffffffffffffffffffffffffffffffff16611dc161186b565b73ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614988565b60405180910390fd5b856015819055508460168190555083601781905550601754601654601554611e3f9190614c47565b611e499190614c47565b60148190555060236014541115611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614f31565b60405180910390fd5b8260198190555081601a8190555080601b81905550601754601654601554611ebd9190614c47565b611ec79190614c47565b60188190555060236014541115611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614f31565b60405180910390fd5b505050505050565b611f236127ae565b73ffffffffffffffffffffffffffffffffffffffff16611f4161186b565b73ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90614988565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161203491906144c2565b60405180910390a25050565b6120486127ae565b73ffffffffffffffffffffffffffffffffffffffff1661206661186b565b73ffffffffffffffffffffffffffffffffffffffff16146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b390614988565b60405180910390fd5b670de0b6b3a76400006103e860016120d26110b1565b6120dc91906149d7565b6120e69190614a60565b6120f09190614a60565b821015612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990614fc3565b60405180910390fd5b670de0b6b3a76400008261214691906149d7565b600881905550670de0b6b3a76400006103e860056121626110b1565b61216c91906149d7565b6121769190614a60565b6121809190614a60565b8110156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990615055565b60405180910390fd5b670de0b6b3a7640000816121d691906149d7565b600a819055505050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006122966127ae565b73ffffffffffffffffffffffffffffffffffffffff166122b461186b565b73ffffffffffffffffffffffffffffffffffffffff161461230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190614988565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60006123366127ae565b73ffffffffffffffffffffffffffffffffffffffff1661235461186b565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614988565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b60165481565b6123da6127ae565b73ffffffffffffffffffffffffffffffffffffffff166123f861186b565b73ffffffffffffffffffffffffffffffffffffffff161461244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244590614988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906150e7565b60405180910390fd5b6124c781613719565b50565b601a5481565b600a5481565b60006124e06127ae565b73ffffffffffffffffffffffffffffffffffffffff166124fe61186b565b73ffffffffffffffffffffffffffffffffffffffff1614612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614988565b60405180910390fd5b600f546010546125649190614c47565b42116125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c90615153565b60405180910390fd5b6103e88211156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906151e5565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161264c919061463d565b602060405180830381865afa158015612669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268d919061521a565b905060006126b86127106126aa868561388090919063ffffffff16565b61389690919063ffffffff16565b905060008111156126f1576126f07f000000000000000000000000000000000000000000000000000000000000000061dead836138ac565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561275e57600080fd5b505af1158015612772573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d906152b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288d9061534b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161297491906145c0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e8906153dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a589061546f565b60405180910390fd5b6000811415612a7b57612a76838360006138ac565b613714565b601160009054906101000a900460ff161561313e57612a9861186b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b065750612ad661186b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b79575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b925750600560149054906101000a900460ff16155b1561313d57601160019054906101000a900460ff16612c8c57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c4c5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c82906154db565b60405180910390fd5b5b601360009054906101000a900460ff1615612e5457612ca961186b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d3057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d8857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e535743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0590615593565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ef75750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9e57600854811115612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890615625565b60405180910390fd5b600a54612f4d83611558565b82612f589190614c47565b1115612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090615691565b60405180910390fd5b61313c565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130415750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130905760085481111561308b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308290615723565b60405180910390fd5b61313b565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661313a57600a546130ed83611558565b826130f89190614c47565b1115613139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313090615691565b60405180910390fd5b5b5b5b5b5b600061314930611558565b90506000600954821015905080801561316e5750601160029054906101000a900460ff165b80156131875750600560149054906101000a900460ff16155b80156131dd5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132335750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132895750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132cd576001600560146101000a81548160ff0219169083151502179055506132b1613b2d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156133335750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561334b5750600c60009054906101000a900460ff165b80156133665750600d54600e546133629190614c47565b4210155b80156133bc5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133cb576133c9613e14565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134815750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348b57600090505b6000811561370457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134ee57506000601854115b156135bb5761351b606461350d6018548861388090919063ffffffff16565b61389690919063ffffffff16565b9050601854601a548261352e91906149d7565b6135389190614a60565b601d60008282546135499190614c47565b92505081905550601854601b548261356191906149d7565b61356b9190614a60565b601e600082825461357c9190614c47565b925050819055506018546019548261359491906149d7565b61359e9190614a60565b601c60008282546135af9190614c47565b925050819055506136e0565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561361657506000601454115b156136df5761364360646136356014548861388090919063ffffffff16565b61389690919063ffffffff16565b90506014546016548261365691906149d7565b6136609190614a60565b601d60008282546136719190614c47565b925050819055506014546017548261368991906149d7565b6136939190614a60565b601e60008282546136a49190614c47565b92505081905550601454601554826136bc91906149d7565b6136c69190614a60565b601c60008282546136d79190614c47565b925050819055505b5b60008111156136f5576136f48730836138ac565b5b80856137019190615743565b94505b61370f8787876138ac565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361388e91906149d7565b905092915050565b600081836138a49190614a60565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561391c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613913906153dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561398c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139839061546f565b60405180910390fd5b613997838383613fda565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a14906157e9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ab09190614c47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b1491906145c0565b60405180910390a3613b27848484613fdf565b50505050565b6000613b3830611558565b90506000601e54601c54601d54613b4f9190614c47565b613b599190614c47565b9050600080831480613b6b5750600082145b15613b7857505050613e12565b6014600954613b8791906149d7565b831115613ba0576014600954613b9d91906149d7565b92505b6000600283601d5486613bb391906149d7565b613bbd9190614a60565b613bc79190614a60565b90506000613bde8286613fe490919063ffffffff16565b90506000479050613bee82613ffa565b6000613c038247613fe490919063ffffffff16565b90506000613c2e87613c20601c548561388090919063ffffffff16565b61389690919063ffffffff16565b90506000613c5988613c4b601e548661388090919063ffffffff16565b61389690919063ffffffff16565b90506000818385613c6a9190615743565b613c749190615743565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613cd49061583a565b60006040518083038185875af1925050503d8060008114613d11576040519150601f19603f3d011682016040523d82523d6000602084013e613d16565b606091505b505080985050600087118015613d2c5750600081115b15613d7957613d3b8782614237565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613d709392919061584f565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613dbf9061583a565b60006040518083038185875af1925050503d8060008114613dfc576040519150601f19603f3d011682016040523d82523d6000602084013e613e01565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613e78919061463d565b602060405180830381865afa158015613e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb9919061521a565b90506000613ee6612710613ed8600b548561388090919063ffffffff16565b61389690919063ffffffff16565b90506000811115613f1f57613f1e7f000000000000000000000000000000000000000000000000000000000000000061dead836138ac565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613ff29190615743565b905092915050565b6000600267ffffffffffffffff81111561401757614016615886565b5b6040519080825280602002602001820160405280156140455781602001602082028036833780820191505090505b509050308160008151811061405d5761405c6158b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412691906158f9565b8160018151811061413a576141396158b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061419f307f0000000000000000000000000000000000000000000000000000000000000000846127b6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614201959493929190615a1f565b600060405180830381600087803b15801561421b57600080fd5b505af115801561422f573d6000803e3d6000fd5b505050505050565b614262307f0000000000000000000000000000000000000000000000000000000000000000846127b6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142c996959493929190615a79565b60606040518083038185885af11580156142e7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061430c9190615ada565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561434d578082015181840152602081019050614332565b8381111561435c576000848401525b50505050565b6000601f19601f8301169050919050565b600061437e82614313565b614388818561431e565b935061439881856020860161432f565b6143a181614362565b840191505092915050565b600060208201905081810360008301526143c68184614373565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143fe826143d3565b9050919050565b61440e816143f3565b811461441957600080fd5b50565b60008135905061442b81614405565b92915050565b6000819050919050565b61444481614431565b811461444f57600080fd5b50565b6000813590506144618161443b565b92915050565b6000806040838503121561447e5761447d6143ce565b5b600061448c8582860161441c565b925050602061449d85828601614452565b9150509250929050565b60008115159050919050565b6144bc816144a7565b82525050565b60006020820190506144d760008301846144b3565b92915050565b6000602082840312156144f3576144f26143ce565b5b60006145018482850161441c565b91505092915050565b6000602082840312156145205761451f6143ce565b5b600061452e84828501614452565b91505092915050565b6000819050919050565b600061455c614557614552846143d3565b614537565b6143d3565b9050919050565b600061456e82614541565b9050919050565b600061458082614563565b9050919050565b61459081614575565b82525050565b60006020820190506145ab6000830184614587565b92915050565b6145ba81614431565b82525050565b60006020820190506145d560008301846145b1565b92915050565b6000806000606084860312156145f4576145f36143ce565b5b60006146028682870161441c565b93505060206146138682870161441c565b925050604061462486828701614452565b9150509250925092565b614637816143f3565b82525050565b6000602082019050614652600083018461462e565b92915050565b600060ff82169050919050565b61466e81614658565b82525050565b60006020820190506146896000830184614665565b92915050565b614698816144a7565b81146146a357600080fd5b50565b6000813590506146b58161468f565b92915050565b6000806000606084860312156146d4576146d36143ce565b5b60006146e2868287016146a6565b93505060206146f3868287016146a6565b9250506040614704868287016146a6565b9150509250925092565b600080600060608486031215614727576147266143ce565b5b600061473586828701614452565b935050602061474686828701614452565b9250506040614757868287016146a6565b9150509250925092565b60008060408385031215614778576147776143ce565b5b60006147868582860161441c565b9250506020614797858286016146a6565b9150509250929050565b6000602082840312156147b7576147b66143ce565b5b60006147c5848285016146a6565b91505092915050565b60008060008060008060c087890312156147eb576147ea6143ce565b5b60006147f989828a01614452565b965050602061480a89828a01614452565b955050604061481b89828a01614452565b945050606061482c89828a01614452565b935050608061483d89828a01614452565b92505060a061484e89828a01614452565b9150509295509295509295565b60008060408385031215614872576148716143ce565b5b600061488085828601614452565b925050602061489185828601614452565b9150509250929050565b600080604083850312156148b2576148b16143ce565b5b60006148c08582860161441c565b92505060206148d18582860161441c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061492257607f821691505b60208210811415614936576149356148db565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061497260208361431e565b915061497d8261493c565b602082019050919050565b600060208201905081810360008301526149a181614965565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149e282614431565b91506149ed83614431565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a2657614a256149a8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a6b82614431565b9150614a7683614431565b925082614a8657614a85614a31565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614aed60358361431e565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b7f60348361431e565b9150614b8a82614b23565b604082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614c1160288361431e565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b6000614c5282614431565b9150614c5d83614431565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c9257614c916149a8565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614cf960338361431e565b9150614d0482614c9d565b604082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614d8b60308361431e565b9150614d9682614d2f565b604082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e1d60398361431e565b9150614e2882614dc1565b604082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614eaf60258361431e565b9150614eba82614e53565b604082019050919050565b60006020820190508181036000830152614ede81614ea2565b9050919050565b7f4d757374206b656570206665657320617420333525206f72206c657373000000600082015250565b6000614f1b601d8361431e565b9150614f2682614ee5565b602082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614fad602f8361431e565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061503f60248361431e565b915061504a82614fe3565b604082019050919050565b6000602082019050818103600083015261506e81615032565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150d160268361431e565b91506150dc82615075565b604082019050919050565b60006020820190508181036000830152615100816150c4565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061513d60208361431e565b915061514882615107565b602082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006151cf602a8361431e565b91506151da82615173565b604082019050919050565b600060208201905081810360008301526151fe816151c2565b9050919050565b6000815190506152148161443b565b92915050565b6000602082840312156152305761522f6143ce565b5b600061523e84828501615205565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152a360248361431e565b91506152ae82615247565b604082019050919050565b600060208201905081810360008301526152d281615296565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061533560228361431e565b9150615340826152d9565b604082019050919050565b6000602082019050818103600083015261536481615328565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153c760258361431e565b91506153d28261536b565b604082019050919050565b600060208201905081810360008301526153f6816153ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061545960238361431e565b9150615464826153fd565b604082019050919050565b600060208201905081810360008301526154888161544c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154c560168361431e565b91506154d08261548f565b602082019050919050565b600060208201905081810360008301526154f4816154b8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061557d60498361431e565b9150615588826154fb565b606082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061560f60358361431e565b915061561a826155b3565b604082019050919050565b6000602082019050818103600083015261563e81615602565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061567b60138361431e565b915061568682615645565b602082019050919050565b600060208201905081810360008301526156aa8161566e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061570d60368361431e565b9150615718826156b1565b604082019050919050565b6000602082019050818103600083015261573c81615700565b9050919050565b600061574e82614431565b915061575983614431565b92508282101561576c5761576b6149a8565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157d360268361431e565b91506157de82615777565b604082019050919050565b60006020820190508181036000830152615802816157c6565b9050919050565b600081905092915050565b50565b6000615824600083615809565b915061582f82615814565b600082019050919050565b600061584582615817565b9150819050919050565b600060608201905061586460008301866145b1565b61587160208301856145b1565b61587e60408301846145b1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506158f381614405565b92915050565b60006020828403121561590f5761590e6143ce565b5b600061591d848285016158e4565b91505092915050565b6000819050919050565b600061594b61594661594184615926565b614537565b614431565b9050919050565b61595b81615930565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615996816143f3565b82525050565b60006159a8838361598d565b60208301905092915050565b6000602082019050919050565b60006159cc82615961565b6159d6818561596c565b93506159e18361597d565b8060005b83811015615a125781516159f9888261599c565b9750615a04836159b4565b9250506001810190506159e5565b5085935050505092915050565b600060a082019050615a3460008301886145b1565b615a416020830187615952565b8181036040830152615a5381866159c1565b9050615a62606083018561462e565b615a6f60808301846145b1565b9695505050505050565b600060c082019050615a8e600083018961462e565b615a9b60208301886145b1565b615aa86040830187615952565b615ab56060830186615952565b615ac2608083018561462e565b615acf60a08301846145b1565b979650505050505050565b600080600060608486031215615af357615af26143ce565b5b6000615b0186828701615205565b9350506020615b1286828701615205565b9250506040615b2386828701615205565b915050925092509256fea2646970667358221220f022fc1f2a854b4225b8f226c06b2067c340961a07af918b1e713a3c05cd4c3164736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638ea5220f116101dc578063bd9a3b6d11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610dad578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063e2f4560514610d01578063e884f26014610d2c578063f044b41014610d57578063f11a24d314610d82576103a2565b8063c876d0b9116100dc578063c876d0b914610c43578063c8c8ebe414610c6e578063d85ba06314610c99578063dd62ed3e14610cc4576103a2565b8063bd9a3b6d14610bc8578063c024666814610bf1578063c2bcf5ea14610c1a576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610afa578063aacebbe314610b37578063b62496f514610b60578063bbc0c74214610b9d576103a2565b80639fccce3214610a3c578063a0d82dc514610a67578063a457c2d714610a92578063a4c82a0014610acf576103a2565b806395d89b41116101b657806395d89b41146109925780639a7a23d6146109bd5780639c3b4fdc146109e65780639ec22c0e14610a11576103a2565b80638ea5220f14610913578063921369131461093e578063924de9b714610969576103a2565b8063313ce567116102c15780636ddd17131161025f5780637571336a1161022e5780637571336a1461086957806375f0a874146108925780637bce5a04146108bd5780638da5cb5b146108e8576103a2565b80636ddd1713146107c157806370a08231146107ec578063715018a614610829578063730c188814610840576103a2565b806349bd5a5e1161029b57806349bd5a5e146107035780634a62bb651461072e5780634fbee193146107595780636a486a8e14610796576103a2565b8063313ce56714610672578063322bde7d1461069d57806339509351146106c6576103a2565b8063184c16c51161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063184c16c514610508578063199ffc72146105335780631a8145bb1461055e5780631f3fed8f14610589576103a2565b806314cdef9f1161037557806314cdef9f1461044c5780631694505e1461048957806318160ddd146104b45780631816467f146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c991906143ac565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614467565b610efb565b60405161040691906144c2565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906144dd565b610f19565b60405161044391906144c2565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e919061450a565b610f38565b60405161048091906144c2565b60405180910390f35b34801561049557600080fd5b5061049e61108d565b6040516104ab9190614596565b60405180910390f35b3480156104c057600080fd5b506104c96110b1565b6040516104d691906145c0565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906144dd565b6110bb565b005b34801561051457600080fd5b5061051d6111f7565b60405161052a91906145c0565b60405180910390f35b34801561053f57600080fd5b506105486111fd565b60405161055591906145c0565b60405180910390f35b34801561056a57600080fd5b50610573611203565b60405161058091906145c0565b60405180910390f35b34801561059557600080fd5b5061059e611209565b6040516105ab91906145c0565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d691906145db565b61120f565b6040516105e891906144c2565b60405180910390f35b3480156105fd57600080fd5b50610606611307565b604051610613919061463d565b60405180910390f35b34801561062857600080fd5b5061063161130d565b60405161063e91906145c0565b60405180910390f35b34801561065357600080fd5b5061065c611313565b60405161066991906144c2565b60405180910390f35b34801561067e57600080fd5b50610687611326565b6040516106949190614674565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906146bb565b61132f565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190614467565b611406565b6040516106fa91906144c2565b60405180910390f35b34801561070f57600080fd5b506107186114b2565b604051610725919061463d565b60405180910390f35b34801561073a57600080fd5b506107436114d6565b60405161075091906144c2565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906144dd565b6114e9565b60405161078d91906144c2565b60405180910390f35b3480156107a257600080fd5b506107ab61153f565b6040516107b891906145c0565b60405180910390f35b3480156107cd57600080fd5b506107d6611545565b6040516107e391906144c2565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e91906144dd565b611558565b60405161082091906145c0565b60405180910390f35b34801561083557600080fd5b5061083e6115a0565b005b34801561084c57600080fd5b506108676004803603810190610862919061470e565b611628565b005b34801561087557600080fd5b50610890600480360381019061088b9190614761565b611768565b005b34801561089e57600080fd5b506108a761183f565b6040516108b4919061463d565b60405180910390f35b3480156108c957600080fd5b506108d2611865565b6040516108df91906145c0565b60405180910390f35b3480156108f457600080fd5b506108fd61186b565b60405161090a919061463d565b60405180910390f35b34801561091f57600080fd5b50610928611895565b604051610935919061463d565b60405180910390f35b34801561094a57600080fd5b506109536118bb565b60405161096091906145c0565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b91906147a1565b6118c1565b005b34801561099e57600080fd5b506109a761195a565b6040516109b491906143ac565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190614761565b6119ec565b005b3480156109f257600080fd5b506109fb611b05565b604051610a0891906145c0565b60405180910390f35b348015610a1d57600080fd5b50610a26611b0b565b604051610a3391906145c0565b60405180910390f35b348015610a4857600080fd5b50610a51611b11565b604051610a5e91906145c0565b60405180910390f35b348015610a7357600080fd5b50610a7c611b17565b604051610a8991906145c0565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab49190614467565b611b1d565b604051610ac691906144c2565b60405180910390f35b348015610adb57600080fd5b50610ae4611c08565b604051610af191906145c0565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614467565b611c0e565b604051610b2e91906144c2565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b5991906144dd565b611c2c565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906144dd565b611d68565b604051610b9491906144c2565b60405180910390f35b348015610ba957600080fd5b50610bb2611d88565b604051610bbf91906144c2565b60405180910390f35b348015610bd457600080fd5b50610bef6004803603810190610bea91906147ce565b611d9b565b005b348015610bfd57600080fd5b50610c186004803603810190610c139190614761565b611f1b565b005b348015610c2657600080fd5b50610c416004803603810190610c3c919061485b565b612040565b005b348015610c4f57600080fd5b50610c586121e0565b604051610c6591906144c2565b60405180910390f35b348015610c7a57600080fd5b50610c836121f3565b604051610c9091906145c0565b60405180910390f35b348015610ca557600080fd5b50610cae6121f9565b604051610cbb91906145c0565b60405180910390f35b348015610cd057600080fd5b50610ceb6004803603810190610ce6919061489b565b6121ff565b604051610cf891906145c0565b60405180910390f35b348015610d0d57600080fd5b50610d16612286565b604051610d2391906145c0565b60405180910390f35b348015610d3857600080fd5b50610d4161228c565b604051610d4e91906144c2565b60405180910390f35b348015610d6357600080fd5b50610d6c61232c565b604051610d7991906144c2565b60405180910390f35b348015610d8e57600080fd5b50610d976123cc565b604051610da491906145c0565b60405180910390f35b348015610db957600080fd5b50610dd46004803603810190610dcf91906144dd565b6123d2565b005b348015610de257600080fd5b50610deb6124ca565b604051610df891906145c0565b60405180910390f35b348015610e0d57600080fd5b50610e166124d0565b604051610e2391906145c0565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e919061450a565b6124d6565b604051610e6091906144c2565b60405180910390f35b606060038054610e789061490a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea49061490a565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0f610f086127ae565b84846127b6565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b6000610f426127ae565b73ffffffffffffffffffffffffffffffffffffffff16610f6061186b565b73ffffffffffffffffffffffffffffffffffffffff1614610fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fad90614988565b60405180910390fd5b620186a06001610fc46110b1565b610fce91906149d7565b610fd89190614a60565b82101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614b03565b60405180910390fd5b6103e860056110276110b1565b61103191906149d7565b61103b9190614a60565b82111561107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490614b95565b60405180910390fd5b8160098190555060019050919050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6110c36127ae565b73ffffffffffffffffffffffffffffffffffffffff166110e161186b565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90614988565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b600061121c848484612981565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112676127ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614c27565b60405180910390fd5b6112fb856112f36127ae565b8584036127b6565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b6113376127ae565b73ffffffffffffffffffffffffffffffffffffffff1661135561186b565b73ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290614988565b60405180910390fd5b8280156113b55750815b80156113be5750805b15611401576001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e819055505b505050565b60006114a86114136127ae565b8484600160006114216127ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a39190614c47565b6127b6565b6001905092915050565b7f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e81565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115a86127ae565b73ffffffffffffffffffffffffffffffffffffffff166115c661186b565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390614988565b60405180910390fd5b6116266000613719565b565b6116306127ae565b73ffffffffffffffffffffffffffffffffffffffff1661164e61186b565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614988565b60405180910390fd5b6102588310156116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090614d0f565b60405180910390fd5b6103e882111580156116fc575060008210155b61173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290614da1565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6117706127ae565b73ffffffffffffffffffffffffffffffffffffffff1661178e61186b565b73ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614988565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6118c96127ae565b73ffffffffffffffffffffffffffffffffffffffff166118e761186b565b73ffffffffffffffffffffffffffffffffffffffff161461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614988565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6060600480546119699061490a565b80601f01602080910402602001604051908101604052809291908181526020018280546119959061490a565b80156119e25780601f106119b7576101008083540402835291602001916119e2565b820191906000526020600020905b8154815290600101906020018083116119c557829003601f168201915b5050505050905090565b6119f46127ae565b73ffffffffffffffffffffffffffffffffffffffff16611a1261186b565b73ffffffffffffffffffffffffffffffffffffffff1614611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614988565b60405180910390fd5b7f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90614e33565b60405180910390fd5b611b0182826137df565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611b2c6127ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090614ec5565b60405180910390fd5b611bfd611bf46127ae565b858584036127b6565b600191505092915050565b600e5481565b6000611c22611c1b6127ae565b8484612981565b6001905092915050565b611c346127ae565b73ffffffffffffffffffffffffffffffffffffffff16611c5261186b565b73ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614988565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611da36127ae565b73ffffffffffffffffffffffffffffffffffffffff16611dc161186b565b73ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614988565b60405180910390fd5b856015819055508460168190555083601781905550601754601654601554611e3f9190614c47565b611e499190614c47565b60148190555060236014541115611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614f31565b60405180910390fd5b8260198190555081601a8190555080601b81905550601754601654601554611ebd9190614c47565b611ec79190614c47565b60188190555060236014541115611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614f31565b60405180910390fd5b505050505050565b611f236127ae565b73ffffffffffffffffffffffffffffffffffffffff16611f4161186b565b73ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90614988565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161203491906144c2565b60405180910390a25050565b6120486127ae565b73ffffffffffffffffffffffffffffffffffffffff1661206661186b565b73ffffffffffffffffffffffffffffffffffffffff16146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b390614988565b60405180910390fd5b670de0b6b3a76400006103e860016120d26110b1565b6120dc91906149d7565b6120e69190614a60565b6120f09190614a60565b821015612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990614fc3565b60405180910390fd5b670de0b6b3a76400008261214691906149d7565b600881905550670de0b6b3a76400006103e860056121626110b1565b61216c91906149d7565b6121769190614a60565b6121809190614a60565b8110156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990615055565b60405180910390fd5b670de0b6b3a7640000816121d691906149d7565b600a819055505050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006122966127ae565b73ffffffffffffffffffffffffffffffffffffffff166122b461186b565b73ffffffffffffffffffffffffffffffffffffffff161461230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190614988565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60006123366127ae565b73ffffffffffffffffffffffffffffffffffffffff1661235461186b565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614988565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b60165481565b6123da6127ae565b73ffffffffffffffffffffffffffffffffffffffff166123f861186b565b73ffffffffffffffffffffffffffffffffffffffff161461244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244590614988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906150e7565b60405180910390fd5b6124c781613719565b50565b601a5481565b600a5481565b60006124e06127ae565b73ffffffffffffffffffffffffffffffffffffffff166124fe61186b565b73ffffffffffffffffffffffffffffffffffffffff1614612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614988565b60405180910390fd5b600f546010546125649190614c47565b42116125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c90615153565b60405180910390fd5b6103e88211156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906151e5565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e6040518263ffffffff1660e01b815260040161264c919061463d565b602060405180830381865afa158015612669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268d919061521a565b905060006126b86127106126aa868561388090919063ffffffff16565b61389690919063ffffffff16565b905060008111156126f1576126f07f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e61dead836138ac565b5b60007f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561275e57600080fd5b505af1158015612772573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d906152b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288d9061534b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161297491906145c0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e8906153dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a589061546f565b60405180910390fd5b6000811415612a7b57612a76838360006138ac565b613714565b601160009054906101000a900460ff161561313e57612a9861186b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b065750612ad661186b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b79575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b925750600560149054906101000a900460ff16155b1561313d57601160019054906101000a900460ff16612c8c57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c4c5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c82906154db565b60405180910390fd5b5b601360009054906101000a900460ff1615612e5457612ca961186b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d3057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d8857507f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e535743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0590615593565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ef75750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9e57600854811115612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890615625565b60405180910390fd5b600a54612f4d83611558565b82612f589190614c47565b1115612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090615691565b60405180910390fd5b61313c565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130415750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130905760085481111561308b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308290615723565b60405180910390fd5b61313b565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661313a57600a546130ed83611558565b826130f89190614c47565b1115613139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313090615691565b60405180910390fd5b5b5b5b5b5b600061314930611558565b90506000600954821015905080801561316e5750601160029054906101000a900460ff165b80156131875750600560149054906101000a900460ff16155b80156131dd5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132335750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132895750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132cd576001600560146101000a81548160ff0219169083151502179055506132b1613b2d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156133335750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561334b5750600c60009054906101000a900460ff165b80156133665750600d54600e546133629190614c47565b4210155b80156133bc5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133cb576133c9613e14565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134815750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348b57600090505b6000811561370457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134ee57506000601854115b156135bb5761351b606461350d6018548861388090919063ffffffff16565b61389690919063ffffffff16565b9050601854601a548261352e91906149d7565b6135389190614a60565b601d60008282546135499190614c47565b92505081905550601854601b548261356191906149d7565b61356b9190614a60565b601e600082825461357c9190614c47565b925050819055506018546019548261359491906149d7565b61359e9190614a60565b601c60008282546135af9190614c47565b925050819055506136e0565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561361657506000601454115b156136df5761364360646136356014548861388090919063ffffffff16565b61389690919063ffffffff16565b90506014546016548261365691906149d7565b6136609190614a60565b601d60008282546136719190614c47565b925050819055506014546017548261368991906149d7565b6136939190614a60565b601e60008282546136a49190614c47565b92505081905550601454601554826136bc91906149d7565b6136c69190614a60565b601c60008282546136d79190614c47565b925050819055505b5b60008111156136f5576136f48730836138ac565b5b80856137019190615743565b94505b61370f8787876138ac565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361388e91906149d7565b905092915050565b600081836138a49190614a60565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561391c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613913906153dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561398c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139839061546f565b60405180910390fd5b613997838383613fda565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a14906157e9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ab09190614c47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b1491906145c0565b60405180910390a3613b27848484613fdf565b50505050565b6000613b3830611558565b90506000601e54601c54601d54613b4f9190614c47565b613b599190614c47565b9050600080831480613b6b5750600082145b15613b7857505050613e12565b6014600954613b8791906149d7565b831115613ba0576014600954613b9d91906149d7565b92505b6000600283601d5486613bb391906149d7565b613bbd9190614a60565b613bc79190614a60565b90506000613bde8286613fe490919063ffffffff16565b90506000479050613bee82613ffa565b6000613c038247613fe490919063ffffffff16565b90506000613c2e87613c20601c548561388090919063ffffffff16565b61389690919063ffffffff16565b90506000613c5988613c4b601e548661388090919063ffffffff16565b61389690919063ffffffff16565b90506000818385613c6a9190615743565b613c749190615743565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613cd49061583a565b60006040518083038185875af1925050503d8060008114613d11576040519150601f19603f3d011682016040523d82523d6000602084013e613d16565b606091505b505080985050600087118015613d2c5750600081115b15613d7957613d3b8782614237565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613d709392919061584f565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613dbf9061583a565b60006040518083038185875af1925050503d8060008114613dfc576040519150601f19603f3d011682016040523d82523d6000602084013e613e01565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e6040518263ffffffff1660e01b8152600401613e78919061463d565b602060405180830381865afa158015613e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eb9919061521a565b90506000613ee6612710613ed8600b548561388090919063ffffffff16565b61389690919063ffffffff16565b90506000811115613f1f57613f1e7f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e61dead836138ac565b5b60007f000000000000000000000000de4e7fdd53c5d30561e5b47d02740b7bd3fcb53e90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613ff29190615743565b905092915050565b6000600267ffffffffffffffff81111561401757614016615886565b5b6040519080825280602002602001820160405280156140455781602001602082028036833780820191505090505b509050308160008151811061405d5761405c6158b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412691906158f9565b8160018151811061413a576141396158b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061419f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127b6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614201959493929190615a1f565b600060405180830381600087803b15801561421b57600080fd5b505af115801561422f573d6000803e3d6000fd5b505050505050565b614262307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127b6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142c996959493929190615a79565b60606040518083038185885af11580156142e7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061430c9190615ada565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561434d578082015181840152602081019050614332565b8381111561435c576000848401525b50505050565b6000601f19601f8301169050919050565b600061437e82614313565b614388818561431e565b935061439881856020860161432f565b6143a181614362565b840191505092915050565b600060208201905081810360008301526143c68184614373565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143fe826143d3565b9050919050565b61440e816143f3565b811461441957600080fd5b50565b60008135905061442b81614405565b92915050565b6000819050919050565b61444481614431565b811461444f57600080fd5b50565b6000813590506144618161443b565b92915050565b6000806040838503121561447e5761447d6143ce565b5b600061448c8582860161441c565b925050602061449d85828601614452565b9150509250929050565b60008115159050919050565b6144bc816144a7565b82525050565b60006020820190506144d760008301846144b3565b92915050565b6000602082840312156144f3576144f26143ce565b5b60006145018482850161441c565b91505092915050565b6000602082840312156145205761451f6143ce565b5b600061452e84828501614452565b91505092915050565b6000819050919050565b600061455c614557614552846143d3565b614537565b6143d3565b9050919050565b600061456e82614541565b9050919050565b600061458082614563565b9050919050565b61459081614575565b82525050565b60006020820190506145ab6000830184614587565b92915050565b6145ba81614431565b82525050565b60006020820190506145d560008301846145b1565b92915050565b6000806000606084860312156145f4576145f36143ce565b5b60006146028682870161441c565b93505060206146138682870161441c565b925050604061462486828701614452565b9150509250925092565b614637816143f3565b82525050565b6000602082019050614652600083018461462e565b92915050565b600060ff82169050919050565b61466e81614658565b82525050565b60006020820190506146896000830184614665565b92915050565b614698816144a7565b81146146a357600080fd5b50565b6000813590506146b58161468f565b92915050565b6000806000606084860312156146d4576146d36143ce565b5b60006146e2868287016146a6565b93505060206146f3868287016146a6565b9250506040614704868287016146a6565b9150509250925092565b600080600060608486031215614727576147266143ce565b5b600061473586828701614452565b935050602061474686828701614452565b9250506040614757868287016146a6565b9150509250925092565b60008060408385031215614778576147776143ce565b5b60006147868582860161441c565b9250506020614797858286016146a6565b9150509250929050565b6000602082840312156147b7576147b66143ce565b5b60006147c5848285016146a6565b91505092915050565b60008060008060008060c087890312156147eb576147ea6143ce565b5b60006147f989828a01614452565b965050602061480a89828a01614452565b955050604061481b89828a01614452565b945050606061482c89828a01614452565b935050608061483d89828a01614452565b92505060a061484e89828a01614452565b9150509295509295509295565b60008060408385031215614872576148716143ce565b5b600061488085828601614452565b925050602061489185828601614452565b9150509250929050565b600080604083850312156148b2576148b16143ce565b5b60006148c08582860161441c565b92505060206148d18582860161441c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061492257607f821691505b60208210811415614936576149356148db565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061497260208361431e565b915061497d8261493c565b602082019050919050565b600060208201905081810360008301526149a181614965565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149e282614431565b91506149ed83614431565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a2657614a256149a8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a6b82614431565b9150614a7683614431565b925082614a8657614a85614a31565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614aed60358361431e565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b7f60348361431e565b9150614b8a82614b23565b604082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614c1160288361431e565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b6000614c5282614431565b9150614c5d83614431565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c9257614c916149a8565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614cf960338361431e565b9150614d0482614c9d565b604082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614d8b60308361431e565b9150614d9682614d2f565b604082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e1d60398361431e565b9150614e2882614dc1565b604082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614eaf60258361431e565b9150614eba82614e53565b604082019050919050565b60006020820190508181036000830152614ede81614ea2565b9050919050565b7f4d757374206b656570206665657320617420333525206f72206c657373000000600082015250565b6000614f1b601d8361431e565b9150614f2682614ee5565b602082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614fad602f8361431e565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061503f60248361431e565b915061504a82614fe3565b604082019050919050565b6000602082019050818103600083015261506e81615032565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150d160268361431e565b91506150dc82615075565b604082019050919050565b60006020820190508181036000830152615100816150c4565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061513d60208361431e565b915061514882615107565b602082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006151cf602a8361431e565b91506151da82615173565b604082019050919050565b600060208201905081810360008301526151fe816151c2565b9050919050565b6000815190506152148161443b565b92915050565b6000602082840312156152305761522f6143ce565b5b600061523e84828501615205565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152a360248361431e565b91506152ae82615247565b604082019050919050565b600060208201905081810360008301526152d281615296565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061533560228361431e565b9150615340826152d9565b604082019050919050565b6000602082019050818103600083015261536481615328565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153c760258361431e565b91506153d28261536b565b604082019050919050565b600060208201905081810360008301526153f6816153ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061545960238361431e565b9150615464826153fd565b604082019050919050565b600060208201905081810360008301526154888161544c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154c560168361431e565b91506154d08261548f565b602082019050919050565b600060208201905081810360008301526154f4816154b8565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061557d60498361431e565b9150615588826154fb565b606082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061560f60358361431e565b915061561a826155b3565b604082019050919050565b6000602082019050818103600083015261563e81615602565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061567b60138361431e565b915061568682615645565b602082019050919050565b600060208201905081810360008301526156aa8161566e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061570d60368361431e565b9150615718826156b1565b604082019050919050565b6000602082019050818103600083015261573c81615700565b9050919050565b600061574e82614431565b915061575983614431565b92508282101561576c5761576b6149a8565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157d360268361431e565b91506157de82615777565b604082019050919050565b60006020820190508181036000830152615802816157c6565b9050919050565b600081905092915050565b50565b6000615824600083615809565b915061582f82615814565b600082019050919050565b600061584582615817565b9150819050919050565b600060608201905061586460008301866145b1565b61587160208301856145b1565b61587e60408301846145b1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506158f381614405565b92915050565b60006020828403121561590f5761590e6143ce565b5b600061591d848285016158e4565b91505092915050565b6000819050919050565b600061594b61594661594184615926565b614537565b614431565b9050919050565b61595b81615930565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615996816143f3565b82525050565b60006159a8838361598d565b60208301905092915050565b6000602082019050919050565b60006159cc82615961565b6159d6818561596c565b93506159e18361597d565b8060005b83811015615a125781516159f9888261599c565b9750615a04836159b4565b9250506001810190506159e5565b5085935050505092915050565b600060a082019050615a3460008301886145b1565b615a416020830187615952565b8181036040830152615a5381866159c1565b9050615a62606083018561462e565b615a6f60808301846145b1565b9695505050505050565b600060c082019050615a8e600083018961462e565b615a9b60208301886145b1565b615aa86040830187615952565b615ab56060830186615952565b615ac2608083018561462e565b615acf60a08301846145b1565b979650505050505050565b600080600060608486031215615af357615af26143ce565b5b6000615b0186828701615205565b9350506020615b1286828701615205565b9250506040615b2386828701615205565b915050925092509256fea2646970667358221220f022fc1f2a854b4225b8f226c06b2067c340961a07af918b1e713a3c05cd4c3164736f6c634300080a0033

Deployed Bytecode Sourcemap

32885:19410:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9713:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11880:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34506:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38542:493;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32957:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10833:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41623:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33522:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33337:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34290:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34250;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12531:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33060:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33432:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33393:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10675:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37845:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13432:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33015:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33620:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41788:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34105:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33699:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11004:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2948:103;;;;;;;;;;;;;:::i;:::-;;49877:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39550:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33152:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33998;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2297:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33189:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34140:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39813:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9932:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40876:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34072:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33576:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34330:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34216:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14150:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33484:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11344:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41384:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34727:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33660:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39921:730;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40686:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39043:493;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33916:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33222:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33964:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11582:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33264:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38337:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38151:125;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34035:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3206:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34178:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33304:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51236:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9713:100;9767:13;9800:5;9793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9713:100;:::o;11880:169::-;11963:4;11980:39;11989:12;:10;:12::i;:::-;12003:7;12012:6;11980:8;:39::i;:::-;12037:4;12030:11;;11880:169;;;;:::o;34506:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;38542:493::-;38646:4;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38725:6:::1;38720:1;38704:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38703:28;;;;:::i;:::-;38690:9;:41;;38668:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;38880:4;38875:1;38859:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38858:26;;;;:::i;:::-;38845:9;:39;;38823:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38996:9;38975:18;:30;;;;39023:4;39016:11;;38542:493:::0;;;:::o;32957:51::-;;;:::o;10833:108::-;10894:7;10921:12;;10914:19;;10833:108;:::o;41623:157::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41730:9:::1;;;;;;;;;;;41702:38;;41719:9;41702:38;;;;;;;;;;;;41763:9;41751;;:21;;;;;;;;;;;;;;;;;;41623:157:::0;:::o;33522:47::-;;;;:::o;33337:36::-;;;;:::o;34290:33::-;;;;:::o;34250:::-;;;;:::o;12531:492::-;12671:4;12688:36;12698:6;12706:9;12717:6;12688:9;:36::i;:::-;12737:24;12764:11;:19;12776:6;12764:19;;;;;;;;;;;;;;;:33;12784:12;:10;:12::i;:::-;12764:33;;;;;;;;;;;;;;;;12737:60;;12836:6;12816:16;:26;;12808:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12923:57;12932:6;12940:12;:10;:12::i;:::-;12973:6;12954:16;:25;12923:8;:57::i;:::-;13011:4;13004:11;;;12531:492;;;;;:::o;33060:53::-;33106:6;33060:53;:::o;33432:45::-;;;;:::o;33393:32::-;;;;;;;;;;;;;:::o;10675:93::-;10733:5;10758:2;10751:9;;10675:93;:::o;37845:254::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37940:7:::1;:15;;;;;37951:4;37940:15;:24;;;;;37959:5;37940:24;37937:145;;;37992:4;37976:13;;:20;;;;;;;;;;;;;;;;;;38021:4;38007:11;;:18;;;;;;;;;;;;;;;;;;38053:15;38036:14;:32;;;;37937:145;37845:254:::0;;;:::o;13432:215::-;13520:4;13537:80;13546:12;:10;:12::i;:::-;13560:7;13606:10;13569:11;:25;13581:12;:10;:12::i;:::-;13569:25;;;;;;;;;;;;;;;:34;13595:7;13569:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13537:8;:80::i;:::-;13635:4;13628:11;;13432:215;;;;:::o;33015:38::-;;;:::o;33620:33::-;;;;;;;;;;;;;:::o;41788:126::-;41854:4;41878:19;:28;41898:7;41878:28;;;;;;;;;;;;;;;;;;;;;;;;;41871:35;;41788:126;;;:::o;34105:28::-;;;;:::o;33699:30::-;;;;;;;;;;;;;:::o;11004:127::-;11078:7;11105:9;:18;11115:7;11105:18;;;;;;;;;;;;;;;;11098:25;;11004:127;;;:::o;2948:103::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3013:30:::1;3040:1;3013:18;:30::i;:::-;2948:103::o:0;49877:555::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50079:3:::1;50056:19;:26;;50034:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;50206:4;50194:8;:16;;:33;;;;;50226:1;50214:8;:13;;50194:33;50172:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50332:19;50314:15;:37;;;;50381:8;50362:16;:27;;;;50416:8;50400:13;;:24;;;;;;;;;;;;;;;;;;49877:555:::0;;;:::o;39550:167::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39705:4:::1;39663:31;:39;39695:6;39663:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39550:167:::0;;:::o;33152:30::-;;;;;;;;;;;;;:::o;33998:::-;;;;:::o;2297:87::-;2343:7;2370:6;;;;;;;;;;;2363:13;;2297:87;:::o;33189:24::-;;;;;;;;;;;;;:::o;34140:31::-;;;;:::o;39813:100::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39898:7:::1;39884:11;;:21;;;;;;;;;;;;;;;;;;39813:100:::0;:::o;9932:104::-;9988:13;10021:7;10014:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9932:104;:::o;40876:304::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41020:13:::1;41012:21;;:4;:21;;;;40990:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;41131:41;41160:4;41166:5;41131:28;:41::i;:::-;40876:304:::0;;:::o;34072:24::-;;;;:::o;33576:35::-;;;;:::o;34330:27::-;;;;:::o;34216:25::-;;;;:::o;14150:413::-;14243:4;14260:24;14287:11;:25;14299:12;:10;:12::i;:::-;14287:25;;;;;;;;;;;;;;;:34;14313:7;14287:34;;;;;;;;;;;;;;;;14260:61;;14360:15;14340:16;:35;;14332:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14453:67;14462:12;:10;:12::i;:::-;14476:7;14504:15;14485:16;:34;14453:8;:67::i;:::-;14551:4;14544:11;;;14150:413;;;;:::o;33484:29::-;;;;:::o;11344:175::-;11430:4;11447:42;11457:12;:10;:12::i;:::-;11471:9;11482:6;11447:9;:42::i;:::-;11507:4;11500:11;;11344:175;;;;:::o;41384:231::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41544:15:::1;;;;;;;;;;;41501:59;;41524:18;41501:59;;;;;;;;;;;;41589:18;41571:15;;:36;;;;;;;;;;;;;;;;;;41384:231:::0;:::o;34727:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33660:32::-;;;;;;;;;;;;;:::o;39921:730::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40133:16:::1;40115:15;:34;;;;40178:16;40160:15;:34;;;;40217:10;40205:9;:22;;;;40289:9;;40271:15;;40253;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40238:12;:60;;;;40333:2;40317:12;;:18;;40309:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40401:17;40382:16;:36;;;;40448:17;40429:16;:36;;;;40489:11;40476:10;:24;;;;40563:9;;40545:15;;40527;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40511:13;:61;;;;40607:2;40591:12;;:18;;40583:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39921:730:::0;;;;;;:::o;40686:182::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40802:8:::1;40771:19;:28;40791:7;40771:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40842:7;40826:34;;;40851:8;40826:34;;;;;;:::i;:::-;;;;;;;;40686:182:::0;;:::o;39043:493::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39200:4:::1;39192;39187:1;39171:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39170:26;;;;:::i;:::-;39169:35;;;;:::i;:::-;39157:8;:47;;39135:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;39325:6;39313:8;:19;;;;:::i;:::-;39290:20;:42;;;;39414:4;39406;39401:1;39385:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39384:26;;;;:::i;:::-;39383:35;;;;:::i;:::-;39367:12;:51;;39345:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;39521:6;39505:12;:23;;;;:::i;:::-;39493:9;:35;;;;39043:493:::0;;:::o;33916:39::-;;;;;;;;;;;;;:::o;33222:35::-;;;;:::o;33964:27::-;;;;:::o;11582:151::-;11671:7;11698:11;:18;11710:5;11698:18;;;;;;;;;;;;;;;:27;11717:7;11698:27;;;;;;;;;;;;;;;;11691:34;;11582:151;;;;:::o;33264:33::-;;;;:::o;38337:135::-;38397:4;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38437:5:::1;38414:20;;:28;;;;;;;;;;;;;;;;;;38460:4;38453:11;;38337:135:::0;:::o;38151:125::-;38207:4;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38241:5:::1;38224:14;;:22;;;;;;;;;;;;;;;;;;38264:4;38257:11;;38151:125:::0;:::o;34035:30::-;;;;:::o;3206:201::-;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3315:1:::1;3295:22;;:8;:22;;;;3287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3371:28;3390:8;3371:18;:28::i;:::-;3206:201:::0;:::o;34178:31::-;;;;:::o;33304:24::-;;;;:::o;51236:1056::-;51347:4;2528:12;:10;:12::i;:::-;2517:23;;:7;:5;:7::i;:::-;:23;;;2509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51432:19:::1;;51409:20;;:42;;;;:::i;:::-;51391:15;:60;51369:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51541:4;51530:7;:15;;51522:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51626:15;51603:20;:38;;;;51696:28;51727:4;:14;;;51742:13;51727:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51696:60;;51806:20;51829:44;51867:5;51829:33;51854:7;51829:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;51806:67;;51993:1;51978:12;:16;51974:110;;;52011:61;52027:13;52050:6;52059:12;52011:15;:61::i;:::-;51974:110;52159:19;52196:13;52159:51;;52221:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52248:14;;;;;;;;;;52280:4;52273:11;;;;;51236:1056:::0;;;:::o;970:98::-;1023:7;1050:10;1043:17;;970:98;:::o;17834:380::-;17987:1;17970:19;;:5;:19;;;;17962:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18068:1;18049:21;;:7;:21;;;;18041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18152:6;18122:11;:18;18134:5;18122:18;;;;;;;;;;;;;;;:27;18141:7;18122:27;;;;;;;;;;;;;;;:36;;;;18190:7;18174:32;;18183:5;18174:32;;;18199:6;18174:32;;;;;;:::i;:::-;;;;;;;;17834:380;;;:::o;41972:5011::-;42120:1;42104:18;;:4;:18;;;;42096:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42197:1;42183:16;;:2;:16;;;;42175:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42266:1;42256:6;:11;42252:93;;;42284:28;42300:4;42306:2;42310:1;42284:15;:28::i;:::-;42327:7;;42252:93;42361:14;;;;;;;;;;;42357:2487;;;42422:7;:5;:7::i;:::-;42414:15;;:4;:15;;;;:49;;;;;42456:7;:5;:7::i;:::-;42450:13;;:2;:13;;;;42414:49;:86;;;;;42498:1;42484:16;;:2;:16;;;;42414:86;:128;;;;;42535:6;42521:21;;:2;:21;;;;42414:128;:158;;;;;42564:8;;;;;;;;;;;42563:9;42414:158;42392:2441;;;42612:13;;;;;;;;;;;42607:223;;42684:19;:25;42704:4;42684:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42713:19;:23;42733:2;42713:23;;;;;;;;;;;;;;;;;;;;;;;;;42684:52;42650:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;42607:223;42986:20;;;;;;;;;;;42982:641;;;43067:7;:5;:7::i;:::-;43061:13;;:2;:13;;;;:72;;;;;43117:15;43103:30;;:2;:30;;;;43061:72;:129;;;;;43176:13;43162:28;;:2;:28;;;;43061:129;43031:573;;;43354:12;43279:28;:39;43308:9;43279:39;;;;;;;;;;;;;;;;:87;43241:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;43568:12;43526:28;:39;43555:9;43526:39;;;;;;;;;;;;;;;:54;;;;43031:573;42982:641;43697:25;:31;43723:4;43697:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43754:31;:35;43786:2;43754:35;;;;;;;;;;;;;;;;;;;;;;;;;43753:36;43697:92;43671:1147;;;43876:20;;43866:6;:30;;43832:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;44084:9;;44067:13;44077:2;44067:9;:13::i;:::-;44058:6;:22;;;;:::i;:::-;:35;;44024:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43671:1147;;;44262:25;:29;44288:2;44262:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44317:31;:37;44349:4;44317:37;;;;;;;;;;;;;;;;;;;;;;;;;44316:38;44262:92;44236:582;;;44441:20;;44431:6;:30;;44397:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44236:582;;;44598:31;:35;44630:2;44598:35;;;;;;;;;;;;;;;;;;;;;;;;;44593:225;;44718:9;;44701:13;44711:2;44701:9;:13::i;:::-;44692:6;:22;;;;:::i;:::-;:35;;44658:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44593:225;44236:582;43671:1147;42392:2441;42357:2487;44856:28;44887:24;44905:4;44887:9;:24::i;:::-;44856:55;;44924:12;44963:18;;44939:20;:42;;44924:57;;45012:7;:35;;;;;45036:11;;;;;;;;;;;45012:35;:61;;;;;45065:8;;;;;;;;;;;45064:9;45012:61;:110;;;;;45091:25;:31;45117:4;45091:31;;;;;;;;;;;;;;;;;;;;;;;;;45090:32;45012:110;:153;;;;;45140:19;:25;45160:4;45140:25;;;;;;;;;;;;;;;;;;;;;;;;;45139:26;45012:153;:194;;;;;45183:19;:23;45203:2;45183:23;;;;;;;;;;;;;;;;;;;;;;;;;45182:24;45012:194;44994:326;;;45244:4;45233:8;;:15;;;;;;;;;;;;;;;;;;45265:10;:8;:10::i;:::-;45303:5;45292:8;;:16;;;;;;;;;;;;;;;;;;44994:326;45351:8;;;;;;;;;;;45350:9;:55;;;;;45376:25;:29;45402:2;45376:29;;;;;;;;;;;;;;;;;;;;;;;;;45350:55;:85;;;;;45422:13;;;;;;;;;;;45350:85;:153;;;;;45488:15;;45471:14;;:32;;;;:::i;:::-;45452:15;:51;;45350:153;:196;;;;;45521:19;:25;45541:4;45521:25;;;;;;;;;;;;;;;;;;;;;;;;;45520:26;45350:196;45332:282;;;45573:29;:27;:29::i;:::-;;45332:282;45626:12;45642:8;;;;;;;;;;;45641:9;45626:24;;45752:19;:25;45772:4;45752:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45781:19;:23;45801:2;45781:23;;;;;;;;;;;;;;;;;;;;;;;;;45752:52;45748:100;;;45831:5;45821:15;;45748:100;45860:12;45965:7;45961:969;;;46017:25;:29;46043:2;46017:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46066:1;46050:13;;:17;46017:50;46013:768;;;46095:34;46125:3;46095:25;46106:13;;46095:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46088:41;;46198:13;;46178:16;;46171:4;:23;;;;:::i;:::-;46170:41;;;;:::i;:::-;46148:18;;:63;;;;;;;:::i;:::-;;;;;;;;46268:13;;46254:10;;46247:4;:17;;;;:::i;:::-;46246:35;;;;:::i;:::-;46230:12;;:51;;;;;;;:::i;:::-;;;;;;;;46350:13;;46330:16;;46323:4;:23;;;;:::i;:::-;46322:41;;;;:::i;:::-;46300:18;;:63;;;;;;;:::i;:::-;;;;;;;;46013:768;;;46425:25;:31;46451:4;46425:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46475:1;46460:12;;:16;46425:51;46421:360;;;46504:33;46533:3;46504:24;46515:12;;46504:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46497:40;;46605:12;;46586:15;;46579:4;:22;;;;:::i;:::-;46578:39;;;;:::i;:::-;46556:18;;:61;;;;;;;:::i;:::-;;;;;;;;46673:12;;46660:9;;46653:4;:16;;;;:::i;:::-;46652:33;;;;:::i;:::-;46636:12;;:49;;;;;;;:::i;:::-;;;;;;;;46753:12;;46734:15;;46727:4;:22;;;;:::i;:::-;46726:39;;;;:::i;:::-;46704:18;;:61;;;;;;;:::i;:::-;;;;;;;;46421:360;46013:768;46808:1;46801:4;:8;46797:91;;;46830:42;46846:4;46860;46867;46830:15;:42::i;:::-;46797:91;46914:4;46904:14;;;;;:::i;:::-;;;45961:969;46942:33;46958:4;46964:2;46968:6;46942:15;:33::i;:::-;42085:4898;;;;41972:5011;;;;:::o;3567:191::-;3641:16;3660:6;;;;;;;;;;;3641:25;;3686:8;3677:6;;:17;;;;;;;;;;;;;;;;;;3741:8;3710:40;;3731:8;3710:40;;;;;;;;;;;;3630:128;3567:191;:::o;41188:188::-;41305:5;41271:25;:31;41297:4;41271:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41362:5;41328:40;;41356:4;41328:40;;;;;;;;;;;;41188:188;;:::o;23287:98::-;23345:7;23376:1;23372;:5;;;;:::i;:::-;23365:12;;23287:98;;;;:::o;23686:::-;23744:7;23775:1;23771;:5;;;;:::i;:::-;23764:12;;23686:98;;;;:::o;15053:733::-;15211:1;15193:20;;:6;:20;;;;15185:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15295:1;15274:23;;:9;:23;;;;15266:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15350:47;15371:6;15379:9;15390:6;15350:20;:47::i;:::-;15410:21;15434:9;:17;15444:6;15434:17;;;;;;;;;;;;;;;;15410:41;;15487:6;15470:13;:23;;15462:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15608:6;15592:13;:22;15572:9;:17;15582:6;15572:17;;;;;;;;;;;;;;;:42;;;;15660:6;15636:9;:20;15646:9;15636:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15701:9;15684:35;;15693:6;15684:35;;;15712:6;15684:35;;;;;;:::i;:::-;;;;;;;;15732:46;15752:6;15760:9;15771:6;15732:19;:46::i;:::-;15174:612;15053:733;;;:::o;48113:1756::-;48152:23;48178:24;48196:4;48178:9;:24::i;:::-;48152:50;;48213:25;48309:12;;48275:18;;48241;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;48213:108;;48332:12;48380:1;48361:15;:20;:46;;;;48406:1;48385:17;:22;48361:46;48357:85;;;48424:7;;;;;48357:85;48497:2;48476:18;;:23;;;;:::i;:::-;48458:15;:41;48454:115;;;48555:2;48534:18;;:23;;;;:::i;:::-;48516:41;;48454:115;48630:23;48743:1;48710:17;48675:18;;48657:15;:36;;;;:::i;:::-;48656:71;;;;:::i;:::-;:88;;;;:::i;:::-;48630:114;;48755:26;48784:36;48804:15;48784;:19;;:36;;;;:::i;:::-;48755:65;;48833:25;48861:21;48833:49;;48895:36;48912:18;48895:16;:36::i;:::-;48944:18;48965:44;48991:17;48965:21;:25;;:44;;;;:::i;:::-;48944:65;;49022:23;49048:81;49101:17;49048:34;49063:18;;49048:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;49022:107;;49140:17;49160:51;49193:17;49160:28;49175:12;;49160:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;49140:71;;49224:23;49281:9;49263:15;49250:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;49224:66;;49324:1;49303:18;:22;;;;49357:1;49336:18;:22;;;;49384:1;49369:12;:16;;;;49420:9;;;;;;;;;;;49412:23;;49443:9;49412:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49398:59;;;;;49492:1;49474:15;:19;:42;;;;;49515:1;49497:15;:19;49474:42;49470:278;;;49533:46;49546:15;49563;49533:12;:46::i;:::-;49599:137;49632:18;49669:15;49703:18;;49599:137;;;;;;;;:::i;:::-;;;;;;;;49470:278;49782:15;;;;;;;;;;;49774:29;;49825:21;49774:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49760:101;;;;;48141:1728;;;;;;;;;;48113:1756;:::o;50440:788::-;50497:4;50531:15;50514:14;:32;;;;50601:28;50632:4;:14;;;50647:13;50632:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50601:60;;50711:20;50734:77;50795:5;50734:42;50759:16;;50734:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;50711:100;;50931:1;50916:12;:16;50912:110;;;50949:61;50965:13;50988:6;50997:12;50949:15;:61::i;:::-;50912:110;51097:19;51134:13;51097:51;;51159:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51186:12;;;;;;;;;;51216:4;51209:11;;;;;50440:788;:::o;18814:125::-;;;;:::o;19543:124::-;;;;:::o;22930:98::-;22988:7;23019:1;23015;:5;;;;:::i;:::-;23008:12;;22930:98;;;;:::o;46991:589::-;47117:21;47155:1;47141:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47117:40;;47186:4;47168;47173:1;47168:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47212:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47202:4;47207:1;47202:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47247:62;47264:4;47279:15;47297:11;47247:8;:62::i;:::-;47348:15;:66;;;47429:11;47455:1;47499:4;47526;47546:15;47348:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47046:534;46991:589;:::o;47588:517::-;47736:62;47753:4;47768:15;47786:11;47736:8;:62::i;:::-;47841:15;:31;;;47880:9;47913:4;47933:11;47959:1;48002;33106:6;48071:15;47841:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47588:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:601::-;7230:6;7238;7246;7295:2;7283:9;7274:7;7270:23;7266:32;7263:119;;;7301:79;;:::i;:::-;7263:119;7421:1;7446:50;7488:7;7479:6;7468:9;7464:22;7446:50;:::i;:::-;7436:60;;7392:114;7545:2;7571:50;7613:7;7604:6;7593:9;7589:22;7571:50;:::i;:::-;7561:60;;7516:115;7670:2;7696:50;7738:7;7729:6;7718:9;7714:22;7696:50;:::i;:::-;7686:60;;7641:115;7162:601;;;;;:::o;7769:613::-;7843:6;7851;7859;7908:2;7896:9;7887:7;7883:23;7879:32;7876:119;;;7914:79;;:::i;:::-;7876:119;8034:1;8059:53;8104:7;8095:6;8084:9;8080:22;8059:53;:::i;:::-;8049:63;;8005:117;8161:2;8187:53;8232:7;8223:6;8212:9;8208:22;8187:53;:::i;:::-;8177:63;;8132:118;8289:2;8315:50;8357:7;8348:6;8337:9;8333:22;8315:50;:::i;:::-;8305:60;;8260:115;7769:613;;;;;:::o;8388:468::-;8453:6;8461;8510:2;8498:9;8489:7;8485:23;8481:32;8478:119;;;8516:79;;:::i;:::-;8478:119;8636:1;8661:53;8706:7;8697:6;8686:9;8682:22;8661:53;:::i;:::-;8651:63;;8607:117;8763:2;8789:50;8831:7;8822:6;8811:9;8807:22;8789:50;:::i;:::-;8779:60;;8734:115;8388:468;;;;;:::o;8862:323::-;8918:6;8967:2;8955:9;8946:7;8942:23;8938:32;8935:119;;;8973:79;;:::i;:::-;8935:119;9093:1;9118:50;9160:7;9151:6;9140:9;9136:22;9118:50;:::i;:::-;9108:60;;9064:114;8862:323;;;;:::o;9191:1057::-;9295:6;9303;9311;9319;9327;9335;9384:3;9372:9;9363:7;9359:23;9355:33;9352:120;;;9391:79;;:::i;:::-;9352:120;9511:1;9536:53;9581:7;9572:6;9561:9;9557:22;9536:53;:::i;:::-;9526:63;;9482:117;9638:2;9664:53;9709:7;9700:6;9689:9;9685:22;9664:53;:::i;:::-;9654:63;;9609:118;9766:2;9792:53;9837:7;9828:6;9817:9;9813:22;9792:53;:::i;:::-;9782:63;;9737:118;9894:2;9920:53;9965:7;9956:6;9945:9;9941:22;9920:53;:::i;:::-;9910:63;;9865:118;10022:3;10049:53;10094:7;10085:6;10074:9;10070:22;10049:53;:::i;:::-;10039:63;;9993:119;10151:3;10178:53;10223:7;10214:6;10203:9;10199:22;10178:53;:::i;:::-;10168:63;;10122:119;9191:1057;;;;;;;;:::o;10254:474::-;10322:6;10330;10379:2;10367:9;10358:7;10354:23;10350:32;10347:119;;;10385:79;;:::i;:::-;10347:119;10505:1;10530:53;10575:7;10566:6;10555:9;10551:22;10530:53;:::i;:::-;10520:63;;10476:117;10632:2;10658:53;10703:7;10694:6;10683:9;10679:22;10658:53;:::i;:::-;10648:63;;10603:118;10254:474;;;;;:::o;10734:::-;10802:6;10810;10859:2;10847:9;10838:7;10834:23;10830:32;10827:119;;;10865:79;;:::i;:::-;10827:119;10985:1;11010:53;11055:7;11046:6;11035:9;11031:22;11010:53;:::i;:::-;11000:63;;10956:117;11112:2;11138:53;11183:7;11174:6;11163:9;11159:22;11138:53;:::i;:::-;11128:63;;11083:118;10734:474;;;;;:::o;11214:180::-;11262:77;11259:1;11252:88;11359:4;11356:1;11349:15;11383:4;11380:1;11373:15;11400:320;11444:6;11481:1;11475:4;11471:12;11461:22;;11528:1;11522:4;11518:12;11549:18;11539:81;;11605:4;11597:6;11593:17;11583:27;;11539:81;11667:2;11659:6;11656:14;11636:18;11633:38;11630:84;;;11686:18;;:::i;:::-;11630:84;11451:269;11400:320;;;:::o;11726:182::-;11866:34;11862:1;11854:6;11850:14;11843:58;11726:182;:::o;11914:366::-;12056:3;12077:67;12141:2;12136:3;12077:67;:::i;:::-;12070:74;;12153:93;12242:3;12153:93;:::i;:::-;12271:2;12266:3;12262:12;12255:19;;11914:366;;;:::o;12286:419::-;12452:4;12490:2;12479:9;12475:18;12467:26;;12539:9;12533:4;12529:20;12525:1;12514:9;12510:17;12503:47;12567:131;12693:4;12567:131;:::i;:::-;12559:139;;12286:419;;;:::o;12711:180::-;12759:77;12756:1;12749:88;12856:4;12853:1;12846:15;12880:4;12877:1;12870:15;12897:348;12937:7;12960:20;12978:1;12960:20;:::i;:::-;12955:25;;12994:20;13012:1;12994:20;:::i;:::-;12989:25;;13182:1;13114:66;13110:74;13107:1;13104:81;13099:1;13092:9;13085:17;13081:105;13078:131;;;13189:18;;:::i;:::-;13078:131;13237:1;13234;13230:9;13219:20;;12897:348;;;;:::o;13251:180::-;13299:77;13296:1;13289:88;13396:4;13393:1;13386:15;13420:4;13417:1;13410:15;13437:185;13477:1;13494:20;13512:1;13494:20;:::i;:::-;13489:25;;13528:20;13546:1;13528:20;:::i;:::-;13523:25;;13567:1;13557:35;;13572:18;;:::i;:::-;13557:35;13614:1;13611;13607:9;13602:14;;13437:185;;;;:::o;13628:240::-;13768:34;13764:1;13756:6;13752:14;13745:58;13837:23;13832:2;13824:6;13820:15;13813:48;13628:240;:::o;13874:366::-;14016:3;14037:67;14101:2;14096:3;14037:67;:::i;:::-;14030:74;;14113:93;14202:3;14113:93;:::i;:::-;14231:2;14226:3;14222:12;14215:19;;13874:366;;;:::o;14246:419::-;14412:4;14450:2;14439:9;14435:18;14427:26;;14499:9;14493:4;14489:20;14485:1;14474:9;14470:17;14463:47;14527:131;14653:4;14527:131;:::i;:::-;14519:139;;14246:419;;;:::o;14671:239::-;14811:34;14807:1;14799:6;14795:14;14788:58;14880:22;14875:2;14867:6;14863:15;14856:47;14671:239;:::o;14916:366::-;15058:3;15079:67;15143:2;15138:3;15079:67;:::i;:::-;15072:74;;15155:93;15244:3;15155:93;:::i;:::-;15273:2;15268:3;15264:12;15257:19;;14916:366;;;:::o;15288:419::-;15454:4;15492:2;15481:9;15477:18;15469:26;;15541:9;15535:4;15531:20;15527:1;15516:9;15512:17;15505:47;15569:131;15695:4;15569:131;:::i;:::-;15561:139;;15288:419;;;:::o;15713:227::-;15853:34;15849:1;15841:6;15837:14;15830:58;15922:10;15917:2;15909:6;15905:15;15898:35;15713:227;:::o;15946:366::-;16088:3;16109:67;16173:2;16168:3;16109:67;:::i;:::-;16102:74;;16185:93;16274:3;16185:93;:::i;:::-;16303:2;16298:3;16294:12;16287:19;;15946:366;;;:::o;16318:419::-;16484:4;16522:2;16511:9;16507:18;16499:26;;16571:9;16565:4;16561:20;16557:1;16546:9;16542:17;16535:47;16599:131;16725:4;16599:131;:::i;:::-;16591:139;;16318:419;;;:::o;16743:305::-;16783:3;16802:20;16820:1;16802:20;:::i;:::-;16797:25;;16836:20;16854:1;16836:20;:::i;:::-;16831:25;;16990:1;16922:66;16918:74;16915:1;16912:81;16909:107;;;16996:18;;:::i;:::-;16909:107;17040:1;17037;17033:9;17026:16;;16743:305;;;;:::o;17054:238::-;17194:34;17190:1;17182:6;17178:14;17171:58;17263:21;17258:2;17250:6;17246:15;17239:46;17054:238;:::o;17298:366::-;17440:3;17461:67;17525:2;17520:3;17461:67;:::i;:::-;17454:74;;17537:93;17626:3;17537:93;:::i;:::-;17655:2;17650:3;17646:12;17639:19;;17298:366;;;:::o;17670:419::-;17836:4;17874:2;17863:9;17859:18;17851:26;;17923:9;17917:4;17913:20;17909:1;17898:9;17894:17;17887:47;17951:131;18077:4;17951:131;:::i;:::-;17943:139;;17670:419;;;:::o;18095:235::-;18235:34;18231:1;18223:6;18219:14;18212:58;18304:18;18299:2;18291:6;18287:15;18280:43;18095:235;:::o;18336:366::-;18478:3;18499:67;18563:2;18558:3;18499:67;:::i;:::-;18492:74;;18575:93;18664:3;18575:93;:::i;:::-;18693:2;18688:3;18684:12;18677:19;;18336:366;;;:::o;18708:419::-;18874:4;18912:2;18901:9;18897:18;18889:26;;18961:9;18955:4;18951:20;18947:1;18936:9;18932:17;18925:47;18989:131;19115:4;18989:131;:::i;:::-;18981:139;;18708:419;;;:::o;19133:244::-;19273:34;19269:1;19261:6;19257:14;19250:58;19342:27;19337:2;19329:6;19325:15;19318:52;19133:244;:::o;19383:366::-;19525:3;19546:67;19610:2;19605:3;19546:67;:::i;:::-;19539:74;;19622:93;19711:3;19622:93;:::i;:::-;19740:2;19735:3;19731:12;19724:19;;19383:366;;;:::o;19755:419::-;19921:4;19959:2;19948:9;19944:18;19936:26;;20008:9;20002:4;19998:20;19994:1;19983:9;19979:17;19972:47;20036:131;20162:4;20036:131;:::i;:::-;20028:139;;19755:419;;;:::o;20180:224::-;20320:34;20316:1;20308:6;20304:14;20297:58;20389:7;20384:2;20376:6;20372:15;20365:32;20180:224;:::o;20410:366::-;20552:3;20573:67;20637:2;20632:3;20573:67;:::i;:::-;20566:74;;20649:93;20738:3;20649:93;:::i;:::-;20767:2;20762:3;20758:12;20751:19;;20410:366;;;:::o;20782:419::-;20948:4;20986:2;20975:9;20971:18;20963:26;;21035:9;21029:4;21025:20;21021:1;21010:9;21006:17;20999:47;21063:131;21189:4;21063:131;:::i;:::-;21055:139;;20782:419;;;:::o;21207:179::-;21347:31;21343:1;21335:6;21331:14;21324:55;21207:179;:::o;21392:366::-;21534:3;21555:67;21619:2;21614:3;21555:67;:::i;:::-;21548:74;;21631:93;21720:3;21631:93;:::i;:::-;21749:2;21744:3;21740:12;21733:19;;21392:366;;;:::o;21764:419::-;21930:4;21968:2;21957:9;21953:18;21945:26;;22017:9;22011:4;22007:20;22003:1;21992:9;21988:17;21981:47;22045:131;22171:4;22045:131;:::i;:::-;22037:139;;21764:419;;;:::o;22189:234::-;22329:34;22325:1;22317:6;22313:14;22306:58;22398:17;22393:2;22385:6;22381:15;22374:42;22189:234;:::o;22429:366::-;22571:3;22592:67;22656:2;22651:3;22592:67;:::i;:::-;22585:74;;22668:93;22757:3;22668:93;:::i;:::-;22786:2;22781:3;22777:12;22770:19;;22429:366;;;:::o;22801:419::-;22967:4;23005:2;22994:9;22990:18;22982:26;;23054:9;23048:4;23044:20;23040:1;23029:9;23025:17;23018:47;23082:131;23208:4;23082:131;:::i;:::-;23074:139;;22801:419;;;:::o;23226:223::-;23366:34;23362:1;23354:6;23350:14;23343:58;23435:6;23430:2;23422:6;23418:15;23411:31;23226:223;:::o;23455:366::-;23597:3;23618:67;23682:2;23677:3;23618:67;:::i;:::-;23611:74;;23694:93;23783:3;23694:93;:::i;:::-;23812:2;23807:3;23803:12;23796:19;;23455:366;;;:::o;23827:419::-;23993:4;24031:2;24020:9;24016:18;24008:26;;24080:9;24074:4;24070:20;24066:1;24055:9;24051:17;24044:47;24108:131;24234:4;24108:131;:::i;:::-;24100:139;;23827:419;;;:::o;24252:225::-;24392:34;24388:1;24380:6;24376:14;24369:58;24461:8;24456:2;24448:6;24444:15;24437:33;24252:225;:::o;24483:366::-;24625:3;24646:67;24710:2;24705:3;24646:67;:::i;:::-;24639:74;;24722:93;24811:3;24722:93;:::i;:::-;24840:2;24835:3;24831:12;24824:19;;24483:366;;;:::o;24855:419::-;25021:4;25059:2;25048:9;25044:18;25036:26;;25108:9;25102:4;25098:20;25094:1;25083:9;25079:17;25072:47;25136:131;25262:4;25136:131;:::i;:::-;25128:139;;24855:419;;;:::o;25280:182::-;25420:34;25416:1;25408:6;25404:14;25397:58;25280:182;:::o;25468:366::-;25610:3;25631:67;25695:2;25690:3;25631:67;:::i;:::-;25624:74;;25707:93;25796:3;25707:93;:::i;:::-;25825:2;25820:3;25816:12;25809:19;;25468:366;;;:::o;25840:419::-;26006:4;26044:2;26033:9;26029:18;26021:26;;26093:9;26087:4;26083:20;26079:1;26068:9;26064:17;26057:47;26121:131;26247:4;26121:131;:::i;:::-;26113:139;;25840:419;;;:::o;26265:229::-;26405:34;26401:1;26393:6;26389:14;26382:58;26474:12;26469:2;26461:6;26457:15;26450:37;26265:229;:::o;26500:366::-;26642:3;26663:67;26727:2;26722:3;26663:67;:::i;:::-;26656:74;;26739:93;26828:3;26739:93;:::i;:::-;26857:2;26852:3;26848:12;26841:19;;26500:366;;;:::o;26872:419::-;27038:4;27076:2;27065:9;27061:18;27053:26;;27125:9;27119:4;27115:20;27111:1;27100:9;27096:17;27089:47;27153:131;27279:4;27153:131;:::i;:::-;27145:139;;26872:419;;;:::o;27297:143::-;27354:5;27385:6;27379:13;27370:22;;27401:33;27428:5;27401:33;:::i;:::-;27297:143;;;;:::o;27446:351::-;27516:6;27565:2;27553:9;27544:7;27540:23;27536:32;27533:119;;;27571:79;;:::i;:::-;27533:119;27691:1;27716:64;27772:7;27763:6;27752:9;27748:22;27716:64;:::i;:::-;27706:74;;27662:128;27446:351;;;;:::o;27803:223::-;27943:34;27939:1;27931:6;27927:14;27920:58;28012:6;28007:2;27999:6;27995:15;27988:31;27803:223;:::o;28032:366::-;28174:3;28195:67;28259:2;28254:3;28195:67;:::i;:::-;28188:74;;28271:93;28360:3;28271:93;:::i;:::-;28389:2;28384:3;28380:12;28373:19;;28032:366;;;:::o;28404:419::-;28570:4;28608:2;28597:9;28593:18;28585:26;;28657:9;28651:4;28647:20;28643:1;28632:9;28628:17;28621:47;28685:131;28811:4;28685:131;:::i;:::-;28677:139;;28404:419;;;:::o;28829:221::-;28969:34;28965:1;28957:6;28953:14;28946:58;29038:4;29033:2;29025:6;29021:15;29014:29;28829:221;:::o;29056:366::-;29198:3;29219:67;29283:2;29278:3;29219:67;:::i;:::-;29212:74;;29295:93;29384:3;29295:93;:::i;:::-;29413:2;29408:3;29404:12;29397:19;;29056:366;;;:::o;29428:419::-;29594:4;29632:2;29621:9;29617:18;29609:26;;29681:9;29675:4;29671:20;29667:1;29656:9;29652:17;29645:47;29709:131;29835:4;29709:131;:::i;:::-;29701:139;;29428:419;;;:::o;29853:224::-;29993:34;29989:1;29981:6;29977:14;29970:58;30062:7;30057:2;30049:6;30045:15;30038:32;29853:224;:::o;30083:366::-;30225:3;30246:67;30310:2;30305:3;30246:67;:::i;:::-;30239:74;;30322:93;30411:3;30322:93;:::i;:::-;30440:2;30435:3;30431:12;30424:19;;30083:366;;;:::o;30455:419::-;30621:4;30659:2;30648:9;30644:18;30636:26;;30708:9;30702:4;30698:20;30694:1;30683:9;30679:17;30672:47;30736:131;30862:4;30736:131;:::i;:::-;30728:139;;30455:419;;;:::o;30880:222::-;31020:34;31016:1;31008:6;31004:14;30997:58;31089:5;31084:2;31076:6;31072:15;31065:30;30880:222;:::o;31108:366::-;31250:3;31271:67;31335:2;31330:3;31271:67;:::i;:::-;31264:74;;31347:93;31436:3;31347:93;:::i;:::-;31465:2;31460:3;31456:12;31449:19;;31108:366;;;:::o;31480:419::-;31646:4;31684:2;31673:9;31669:18;31661:26;;31733:9;31727:4;31723:20;31719:1;31708:9;31704:17;31697:47;31761:131;31887:4;31761:131;:::i;:::-;31753:139;;31480:419;;;:::o;31905:172::-;32045:24;32041:1;32033:6;32029:14;32022:48;31905:172;:::o;32083:366::-;32225:3;32246:67;32310:2;32305:3;32246:67;:::i;:::-;32239:74;;32322:93;32411:3;32322:93;:::i;:::-;32440:2;32435:3;32431:12;32424:19;;32083:366;;;:::o;32455:419::-;32621:4;32659:2;32648:9;32644:18;32636:26;;32708:9;32702:4;32698:20;32694:1;32683:9;32679:17;32672:47;32736:131;32862:4;32736:131;:::i;:::-;32728:139;;32455:419;;;:::o;32880:297::-;33020:34;33016:1;33008:6;33004:14;32997:58;33089:34;33084:2;33076:6;33072:15;33065:59;33158:11;33153:2;33145:6;33141:15;33134:36;32880:297;:::o;33183:366::-;33325:3;33346:67;33410:2;33405:3;33346:67;:::i;:::-;33339:74;;33422:93;33511:3;33422:93;:::i;:::-;33540:2;33535:3;33531:12;33524:19;;33183:366;;;:::o;33555:419::-;33721:4;33759:2;33748:9;33744:18;33736:26;;33808:9;33802:4;33798:20;33794:1;33783:9;33779:17;33772:47;33836:131;33962:4;33836:131;:::i;:::-;33828:139;;33555:419;;;:::o;33980:240::-;34120:34;34116:1;34108:6;34104:14;34097:58;34189:23;34184:2;34176:6;34172:15;34165:48;33980:240;:::o;34226:366::-;34368:3;34389:67;34453:2;34448:3;34389:67;:::i;:::-;34382:74;;34465:93;34554:3;34465:93;:::i;:::-;34583:2;34578:3;34574:12;34567:19;;34226:366;;;:::o;34598:419::-;34764:4;34802:2;34791:9;34787:18;34779:26;;34851:9;34845:4;34841:20;34837:1;34826:9;34822:17;34815:47;34879:131;35005:4;34879:131;:::i;:::-;34871:139;;34598:419;;;:::o;35023:169::-;35163:21;35159:1;35151:6;35147:14;35140:45;35023:169;:::o;35198:366::-;35340:3;35361:67;35425:2;35420:3;35361:67;:::i;:::-;35354:74;;35437:93;35526:3;35437:93;:::i;:::-;35555:2;35550:3;35546:12;35539:19;;35198:366;;;:::o;35570:419::-;35736:4;35774:2;35763:9;35759:18;35751:26;;35823:9;35817:4;35813:20;35809:1;35798:9;35794:17;35787:47;35851:131;35977:4;35851:131;:::i;:::-;35843:139;;35570:419;;;:::o;35995:241::-;36135:34;36131:1;36123:6;36119:14;36112:58;36204:24;36199:2;36191:6;36187:15;36180:49;35995:241;:::o;36242:366::-;36384:3;36405:67;36469:2;36464:3;36405:67;:::i;:::-;36398:74;;36481:93;36570:3;36481:93;:::i;:::-;36599:2;36594:3;36590:12;36583:19;;36242:366;;;:::o;36614:419::-;36780:4;36818:2;36807:9;36803:18;36795:26;;36867:9;36861:4;36857:20;36853:1;36842:9;36838:17;36831:47;36895:131;37021:4;36895:131;:::i;:::-;36887:139;;36614:419;;;:::o;37039:191::-;37079:4;37099:20;37117:1;37099:20;:::i;:::-;37094:25;;37133:20;37151:1;37133:20;:::i;:::-;37128:25;;37172:1;37169;37166:8;37163:34;;;37177:18;;:::i;:::-;37163:34;37222:1;37219;37215:9;37207:17;;37039:191;;;;:::o;37236:225::-;37376:34;37372:1;37364:6;37360:14;37353:58;37445:8;37440:2;37432:6;37428:15;37421:33;37236:225;:::o;37467:366::-;37609:3;37630:67;37694:2;37689:3;37630:67;:::i;:::-;37623:74;;37706:93;37795:3;37706:93;:::i;:::-;37824:2;37819:3;37815:12;37808:19;;37467:366;;;:::o;37839:419::-;38005:4;38043:2;38032:9;38028:18;38020:26;;38092:9;38086:4;38082:20;38078:1;38067:9;38063:17;38056:47;38120:131;38246:4;38120:131;:::i;:::-;38112:139;;37839:419;;;:::o;38264:147::-;38365:11;38402:3;38387:18;;38264:147;;;;:::o;38417:114::-;;:::o;38537:398::-;38696:3;38717:83;38798:1;38793:3;38717:83;:::i;:::-;38710:90;;38809:93;38898:3;38809:93;:::i;:::-;38927:1;38922:3;38918:11;38911:18;;38537:398;;;:::o;38941:379::-;39125:3;39147:147;39290:3;39147:147;:::i;:::-;39140:154;;39311:3;39304:10;;38941:379;;;:::o;39326:442::-;39475:4;39513:2;39502:9;39498:18;39490:26;;39526:71;39594:1;39583:9;39579:17;39570:6;39526:71;:::i;:::-;39607:72;39675:2;39664:9;39660:18;39651:6;39607:72;:::i;:::-;39689;39757:2;39746:9;39742:18;39733:6;39689:72;:::i;:::-;39326:442;;;;;;:::o;39774:180::-;39822:77;39819:1;39812:88;39919:4;39916:1;39909:15;39943:4;39940:1;39933:15;39960:180;40008:77;40005:1;39998:88;40105:4;40102:1;40095:15;40129:4;40126:1;40119:15;40146:143;40203:5;40234:6;40228:13;40219:22;;40250:33;40277:5;40250:33;:::i;:::-;40146:143;;;;:::o;40295:351::-;40365:6;40414:2;40402:9;40393:7;40389:23;40385:32;40382:119;;;40420:79;;:::i;:::-;40382:119;40540:1;40565:64;40621:7;40612:6;40601:9;40597:22;40565:64;:::i;:::-;40555:74;;40511:128;40295:351;;;;:::o;40652:85::-;40697:7;40726:5;40715:16;;40652:85;;;:::o;40743:158::-;40801:9;40834:61;40852:42;40861:32;40887:5;40861:32;:::i;:::-;40852:42;:::i;:::-;40834:61;:::i;:::-;40821:74;;40743:158;;;:::o;40907:147::-;41002:45;41041:5;41002:45;:::i;:::-;40997:3;40990:58;40907:147;;:::o;41060:114::-;41127:6;41161:5;41155:12;41145:22;;41060:114;;;:::o;41180:184::-;41279:11;41313:6;41308:3;41301:19;41353:4;41348:3;41344:14;41329:29;;41180:184;;;;:::o;41370:132::-;41437:4;41460:3;41452:11;;41490:4;41485:3;41481:14;41473:22;;41370:132;;;:::o;41508:108::-;41585:24;41603:5;41585:24;:::i;:::-;41580:3;41573:37;41508:108;;:::o;41622:179::-;41691:10;41712:46;41754:3;41746:6;41712:46;:::i;:::-;41790:4;41785:3;41781:14;41767:28;;41622:179;;;;:::o;41807:113::-;41877:4;41909;41904:3;41900:14;41892:22;;41807:113;;;:::o;41956:732::-;42075:3;42104:54;42152:5;42104:54;:::i;:::-;42174:86;42253:6;42248:3;42174:86;:::i;:::-;42167:93;;42284:56;42334:5;42284:56;:::i;:::-;42363:7;42394:1;42379:284;42404:6;42401:1;42398:13;42379:284;;;42480:6;42474:13;42507:63;42566:3;42551:13;42507:63;:::i;:::-;42500:70;;42593:60;42646:6;42593:60;:::i;:::-;42583:70;;42439:224;42426:1;42423;42419:9;42414:14;;42379:284;;;42383:14;42679:3;42672:10;;42080:608;;;41956:732;;;;:::o;42694:831::-;42957:4;42995:3;42984:9;42980:19;42972:27;;43009:71;43077:1;43066:9;43062:17;43053:6;43009:71;:::i;:::-;43090:80;43166:2;43155:9;43151:18;43142:6;43090:80;:::i;:::-;43217:9;43211:4;43207:20;43202:2;43191:9;43187:18;43180:48;43245:108;43348:4;43339:6;43245:108;:::i;:::-;43237:116;;43363:72;43431:2;43420:9;43416:18;43407:6;43363:72;:::i;:::-;43445:73;43513:3;43502:9;43498:19;43489:6;43445:73;:::i;:::-;42694:831;;;;;;;;:::o;43531:807::-;43780:4;43818:3;43807:9;43803:19;43795:27;;43832:71;43900:1;43889:9;43885:17;43876:6;43832:71;:::i;:::-;43913:72;43981:2;43970:9;43966:18;43957:6;43913:72;:::i;:::-;43995:80;44071:2;44060:9;44056:18;44047:6;43995:80;:::i;:::-;44085;44161:2;44150:9;44146:18;44137:6;44085:80;:::i;:::-;44175:73;44243:3;44232:9;44228:19;44219:6;44175:73;:::i;:::-;44258;44326:3;44315:9;44311:19;44302:6;44258:73;:::i;:::-;43531:807;;;;;;;;;:::o;44344:663::-;44432:6;44440;44448;44497:2;44485:9;44476:7;44472:23;44468:32;44465:119;;;44503:79;;:::i;:::-;44465:119;44623:1;44648:64;44704:7;44695:6;44684:9;44680:22;44648:64;:::i;:::-;44638:74;;44594:128;44761:2;44787:64;44843:7;44834:6;44823:9;44819:22;44787:64;:::i;:::-;44777:74;;44732:129;44900:2;44926:64;44982:7;44973:6;44962:9;44958:22;44926:64;:::i;:::-;44916:74;;44871:129;44344:663;;;;;:::o

Swarm Source

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