ETH Price: $3,188.43 (+2.30%)
Gas: 2 Gwei

Token

Hand of Midas (MIDAS)
 

Overview

Max Total Supply

100,000,000 MIDAS

Holders

141

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 MIDAS

Value
$0.00
0x0000000000000000000000000000000000000000
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:
MIDAS

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-13
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

// Enter the Gold AI Bot. Your Entry starts here
// https://t.me/handofmidasentry

/**
 * @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;
    }
}

/**
 * @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);
    }
}

/**
 * @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);
}

/**
 * @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);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    address public pairedToken = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public routerUni = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

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

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

    // 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 private launchBlock;
    uint256 private deadBlocks;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

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

    Distributor tokenDistributor;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event WalletsUpdated(
        address newTreasuryWallet,
        address newDevelopmentWallet,
        address newMarketingWallet,
        address newDeployerWallet
    );

    constructor() ERC20("Hand of Midas", "MIDAS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            routerUni
        );

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

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

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 1 / 100; // 1% 
        maxWallet = totalSupply * 2 / 100; // 2% 
        swapTokensAtAmount = (totalSupply * 20) / 10000; // 0.2%

        buyTotalFees = 5;
        sellTotalFees = 5;

        address treasuryWallet = 0x5e4BECEA2FC6558a37bDc78dE047fEb21835e083;
        address developmentWallet = 0xCe18230c58c3191Ef7b065AbcE65021FeFbA67F5;
        address marketingWallet = 0xaC3bE69904B62EDd0cB433eeE4342ef0BE92dc30;
        address deployerWallet = 0x825cb6E98d0c5D8c762F901d6f9E8B02bee95D27;

        uint256 treasuryShare = 25;
        uint256 developmentShare = 25;
        uint256 marketingShare = 25;
        uint256 deployerShare = 25;

        tokenDistributor = new Distributor(
            pairedToken,
            treasuryWallet,
            developmentWallet,
            marketingWallet,
            deployerWallet,
            treasuryShare,
            developmentShare,
            marketingShare,
            deployerShare);

        // 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 {}

    function enableTrading(uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
        deadBlocks = _deadBlocks;
    }
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

        function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

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

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

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

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

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

    function updateBuyFees(
        uint256 _buyFee
    ) external onlyOwner {
        buyTotalFees = _buyFee;
    }

    function updateSellFees(
        uint256 _sellFee
    ) external onlyOwner {
        sellTotalFees = _sellFee;
    }

    function updateRatios(
        uint256 _treasuryShare,
        uint256 _developmentShare,
        uint256 _marketingShare,
        uint256 _deployerShare
    ) external onlyOwner {
        assert(_treasuryShare + _developmentShare + _marketingShare + _deployerShare == 100);
        tokenDistributor.updateRatios(
            _treasuryShare,
            _developmentShare,
            _marketingShare,
            _deployerShare);
    }

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

    function updateWallets(
        address newTreasuryWallet,
        address newDevelopmentWallet,
        address newMarketingWallet,
        address newDeployerWallet)
        external
        onlyOwner
    {
        tokenDistributor.updateWallets(
            newTreasuryWallet,
            newDevelopmentWallet,
            newMarketingWallet,
            newDeployerWallet
        );
        emit WalletsUpdated(
            newTreasuryWallet,
            newDevelopmentWallet,
            newMarketingWallet,
            newDeployerWallet);
    }

    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");
        require(!blocked[from], "Sniper blocked");

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

                if(block.number <= launchBlock + deadBlocks && from == address(uniswapV2Pair) &&  
                to != routerUni && to != address(this) && to != address(uniswapV2Pair)){
                    blocked[to] = true;
                    emit BoughtEarly(to);
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != routerUni &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of pairedToken
            path,
            address(tokenDistributor),
            block.timestamp
        );
    }

    function multiBlock(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != routerUni && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

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

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

        swapTokensForPairedToken(contractBalance);

        tokenDistributor.clearUSDC();
    }

    function clearUSDC() public {
        tokenDistributor.clearUSDC();
    }
}

contract Distributor{

    address immutable deployer;
    IERC20 immutable token;

    address treasuryWallet;
    address developmentWallet;
    address marketingWallet;
    address deployerWallet;

    uint256 treasuryShare;
    uint256 developmentShare;
    uint256 marketingShare;
    uint256 deployerShare;

    constructor(
        address _token, 
        address _treasuryWallet, 
        address _developmentWallet, 
        address _marketingWallet, 
        address _deployerWallet, 
        uint256 _treasuryShare,
        uint256 _developmentShare,
        uint256 _marketingShare,
        uint256 _deployerShare)
        {
            deployer = msg.sender;
            token = IERC20(_token);

            treasuryWallet = _treasuryWallet;
            developmentWallet = _developmentWallet;
            marketingWallet = _marketingWallet;
            deployerWallet = _deployerWallet;

            treasuryShare = _treasuryShare;
            developmentShare = _developmentShare;
            marketingShare = _marketingShare;
            deployerShare = _deployerShare;
    }

    function updateRatios(
        uint256 _treasuryShare,
        uint256 _developmentShare,
        uint256 _marketingShare,
        uint256 _deployerShare
    ) external 
        {
            require(msg.sender == deployer);
            treasuryShare = _treasuryShare;
            developmentShare = _developmentShare;
            marketingShare = _marketingShare;
            deployerShare = _deployerShare;
    }

    function updateWallets(
        address newTreasuryWallet,
        address newDevelopmentWallet,
        address newMarketingWallet,
        address newDeployerWallet)
        external 
        {
            require(msg.sender == deployer);
            treasuryWallet = newTreasuryWallet;
            developmentWallet = newDevelopmentWallet;
            marketingWallet = newMarketingWallet;
            deployerWallet = newDeployerWallet;
    }

    function clearUSDC() public {
        uint256 tokensToTransfer = token.balanceOf(address(this));
        token.transfer(treasuryWallet, tokensToTransfer * treasuryShare / 100);
        token.transfer(developmentWallet, tokensToTransfer * developmentShare / 100);
        token.transfer(marketingWallet, tokensToTransfer * marketingShare / 100);
        token.transfer(deployerWallet, tokensToTransfer * deployerShare / 100);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newTreasuryWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newDevelopmentWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newDeployerWallet","type":"address"}],"name":"WalletsUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"multiBlock","outputs":[],"stateMutability":"nonpayable","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":"pairedToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerUni","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryShare","type":"uint256"},{"internalType":"uint256","name":"_developmentShare","type":"uint256"},{"internalType":"uint256","name":"_marketingShare","type":"uint256"},{"internalType":"uint256","name":"_deployerShare","type":"uint256"}],"name":"updateRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"},{"internalType":"address","name":"newDevelopmentWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDeployerWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200012757600080fd5b506040518060400160405280600d81526020017f48616e64206f66204d69646173000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d494441530000000000000000000000000000000000000000000000000000008152508160039080519060200190620001ac92919062000aba565b508060049080519060200190620001c592919062000aba565b505050620001e8620001dc6200061b60201b60201c565b6200062360201b60201c565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905062000222816001620006e960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c8919062000be2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200032692919062000c25565b6020604051808303816000875af115801562000346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036c919062000be2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b460a0516001620006e960201b60201c565b60006a52b7d2dcc80cd2e400000090506064600182620003d5919062000c8b565b620003e1919062000d1b565b6008819055506064600282620003f8919062000c8b565b62000404919062000d1b565b600a819055506127106014826200041c919062000c8b565b62000428919062000d1b565b600981905550600560118190555060056012819055506000735e4becea2fc6558a37bdc78de047feb21835e0839050600073ce18230c58c3191ef7b065abce65021fefba67f59050600073ac3be69904b62edd0cb433eee4342ef0be92dc309050600073825cb6e98d0c5d8c762f901d6f9e8b02bee95d279050600060199050600060199050600060199050600060199050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888888888888888604051620004f39062000b4b565b620005079998979695949392919062000d64565b604051809103906000f08015801562000524573d6000803e3d6000fd5b50601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058762000579620007d360201b60201c565b6001620007fd60201b60201c565b6200059a306001620007fd60201b60201c565b620005af61dead6001620007fd60201b60201c565b620005d1620005c3620007d360201b60201c565b6001620006e960201b60201c565b620005e4306001620006e960201b60201c565b620005f961dead6001620006e960201b60201c565b6200060b338a6200093760201b60201c565b5050505050505050505062001011565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f96200061b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071f620007d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000778576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076f9062000e64565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080d6200061b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000833620007d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200088c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008839062000e64565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200092b919062000ea3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a19062000f10565b60405180910390fd5b620009be6000838362000ab060201b60201c565b8060026000828254620009d2919062000f32565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a29919062000f32565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a90919062000f8f565b60405180910390a362000aac6000838362000ab560201b60201c565b5050565b505050565b505050565b82805462000ac89062000fdb565b90600052602060002090601f01602090048101928262000aec576000855562000b38565b82601f1062000b0757805160ff191683800117855562000b38565b8280016001018555821562000b38579182015b8281111562000b3757825182559160200191906001019062000b1a565b5b50905062000b47919062000b59565b5090565b610d9280620058fb83390190565b5b8082111562000b7457600081600090555060010162000b5a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000baa8262000b7d565b9050919050565b62000bbc8162000b9d565b811462000bc857600080fd5b50565b60008151905062000bdc8162000bb1565b92915050565b60006020828403121562000bfb5762000bfa62000b78565b5b600062000c0b8482850162000bcb565b91505092915050565b62000c1f8162000b9d565b82525050565b600060408201905062000c3c600083018562000c14565b62000c4b602083018462000c14565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c988262000c52565b915062000ca58362000c52565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce15762000ce062000c5c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d288262000c52565b915062000d358362000c52565b92508262000d485762000d4762000cec565b5b828204905092915050565b62000d5e8162000c52565b82525050565b60006101208201905062000d7c600083018c62000c14565b62000d8b602083018b62000c14565b62000d9a604083018a62000c14565b62000da9606083018962000c14565b62000db8608083018862000c14565b62000dc760a083018762000d53565b62000dd660c083018662000d53565b62000de560e083018562000d53565b62000df561010083018462000d53565b9a9950505050505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e4c60208362000e03565b915062000e598262000e14565b602082019050919050565b6000602082019050818103600083015262000e7f8162000e3d565b9050919050565b60008115159050919050565b62000e9d8162000e86565b82525050565b600060208201905062000eba600083018462000e92565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ef8601f8362000e03565b915062000f058262000ec0565b602082019050919050565b6000602082019050818103600083015262000f2b8162000ee9565b9050919050565b600062000f3f8262000c52565b915062000f4c8362000c52565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f845762000f8362000c5c565b5b828201905092915050565b600060208201905062000fa6600083018462000d53565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ff457607f821691505b602082108114156200100b576200100a62000fac565b5b50919050565b60805160a05161487e6200107d60003960008181610d3d0152818161179a0152818161249901528181612582015281816127210152818161283e01528181612a8701528181612c8f0152612d20015260008181610ad9015281816133490152613370015261487e6000f3fe6080604052600436106102605760003560e01c806382aa7c6811610144578063c8c8ebe4116100b6578063e59621951161007a578063e5962195146108f7578063e884f26014610934578063eba4c3331461095f578063f2fde38b14610988578063f8b45b05146109b1578063ffc94f90146109dc57610267565b8063c8c8ebe4146107fc578063d257b34f14610827578063d85ba06314610864578063dd62ed3e1461088f578063e2f45605146108cc57610267565b8063a9059cbb11610108578063a9059cbb146106ee578063ae303d071461072b578063bbc0c74214610754578063c02466681461077f578063c18bc195146107a8578063c876d0b9146107d157610267565b806382aa7c681461061d5780638da5cb5b14610646578063924de9b71461067157806395d89b411461069a5780639bdc15f4146106c557610267565b80634a62bb65116101dd57806370a08231116101a157806370a0823114610523578063715018a61461056057806371fc468814610577578063743e540d146105a0578063751039fc146105c95780637571336a146105f457610267565b80634a62bb651461044e5780634fbee193146104795780636a486a8e146104b65780636ddd1713146104e15780636f88dfa61461050c57610267565b80631d3561ab116102245780631d3561ab14610367578063203e727e1461039257806323b872dd146103bb578063313ce567146103f857806349bd5a5e1461042357610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d45780631694505e1461031157806318160ddd1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a07565b60405161028e91906134c1565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613581565b610a99565b6040516102cb91906135dc565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906135f7565b610ab7565b60405161030891906135dc565b60405180910390f35b34801561031d57600080fd5b50610326610ad7565b6040516103339190613683565b60405180910390f35b34801561034857600080fd5b50610351610afb565b60405161035e91906136ad565b60405180910390f35b34801561037357600080fd5b5061037c610b05565b60405161038991906136d7565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906136f2565b610b2b565b005b3480156103c757600080fd5b506103e260048036038101906103dd919061371f565b610c3a565b6040516103ef91906135dc565b60405180910390f35b34801561040457600080fd5b5061040d610d32565b60405161041a919061378e565b60405180910390f35b34801561042f57600080fd5b50610438610d3b565b60405161044591906136d7565b60405180910390f35b34801561045a57600080fd5b50610463610d5f565b60405161047091906135dc565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906135f7565b610d72565b6040516104ad91906135dc565b60405180910390f35b3480156104c257600080fd5b506104cb610dc8565b6040516104d891906136ad565b60405180910390f35b3480156104ed57600080fd5b506104f6610dce565b60405161050391906135dc565b60405180910390f35b34801561051857600080fd5b50610521610de1565b005b34801561052f57600080fd5b5061054a600480360381019061054591906135f7565b610e65565b60405161055791906136ad565b60405180910390f35b34801561056c57600080fd5b50610575610ead565b005b34801561058357600080fd5b5061059e600480360381019061059991906136f2565b610f35565b005b3480156105ac57600080fd5b506105c760048036038101906105c291906137a9565b610fbb565b005b3480156105d557600080fd5b506105de61110d565b6040516105eb91906135dc565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061383c565b6111ad565b005b34801561062957600080fd5b50610644600480360381019061063f91906136f2565b611284565b005b34801561065257600080fd5b5061065b611397565b60405161066891906136d7565b60405180910390f35b34801561067d57600080fd5b506106986004803603810190610693919061387c565b6113c1565b005b3480156106a657600080fd5b506106af61145a565b6040516106bc91906134c1565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906138a9565b6114ec565b005b3480156106fa57600080fd5b5061071560048036038101906107109190613581565b611633565b60405161072291906135dc565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613975565b611651565b005b34801561076057600080fd5b50610769611860565b60405161077691906135dc565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a1919061383c565b611873565b005b3480156107b457600080fd5b506107cf60048036038101906107ca91906136f2565b611998565b005b3480156107dd57600080fd5b506107e6611aa7565b6040516107f391906135dc565b60405180910390f35b34801561080857600080fd5b50610811611aba565b60405161081e91906136ad565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906136f2565b611ac0565b60405161085b91906135dc565b60405180910390f35b34801561087057600080fd5b50610879611c15565b60405161088691906136ad565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b191906139d5565b611c1b565b6040516108c391906136ad565b60405180910390f35b3480156108d857600080fd5b506108e1611ca2565b6040516108ee91906136ad565b60405180910390f35b34801561090357600080fd5b5061091e600480360381019061091991906135f7565b611ca8565b60405161092b91906135dc565b60405180910390f35b34801561094057600080fd5b50610949611cc8565b60405161095691906135dc565b60405180910390f35b34801561096b57600080fd5b50610986600480360381019061098191906136f2565b611d68565b005b34801561099457600080fd5b506109af60048036038101906109aa91906135f7565b611dee565b005b3480156109bd57600080fd5b506109c6611ee6565b6040516109d391906136ad565b60405180910390f35b3480156109e857600080fd5b506109f1611eec565b6040516109fe91906136d7565b60405180910390f35b606060038054610a1690613a44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4290613a44565b8015610a8f5780601f10610a6457610100808354040283529160200191610a8f565b820191906000526020600020905b815481529060010190602001808311610a7257829003601f168201915b5050505050905090565b6000610aad610aa6611f12565b8484611f1a565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b33611f12565b73ffffffffffffffffffffffffffffffffffffffff16610b51611397565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613ac2565b60405180910390fd5b670de0b6b3a76400006103e86001610bbd610afb565b610bc79190613b11565b610bd19190613b9a565b610bdb9190613b9a565b811015610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613c3d565b60405180910390fd5b670de0b6b3a764000081610c319190613b11565b60088190555050565b6000610c478484846120e5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c92611f12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990613ccf565b60405180910390fd5b610d2685610d1e611f12565b858403611f1a565b60019150509392505050565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f88dfa66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eb5611f12565b73ffffffffffffffffffffffffffffffffffffffff16610ed3611397565b73ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090613ac2565b60405180910390fd5b610f336000612de5565b565b610f3d611f12565b73ffffffffffffffffffffffffffffffffffffffff16610f5b611397565b73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890613ac2565b60405180910390fd5b8060118190555050565b610fc3611f12565b73ffffffffffffffffffffffffffffffffffffffff16610fe1611397565b73ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90613ac2565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e540d858585856040518563ffffffff1660e01b81526004016110989493929190613cef565b600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050507f213f1de8063c19612a553f1480ff341bea689d36a56a2089f1b9060d599b5d83848484846040516110ff9493929190613cef565b60405180910390a150505050565b6000611117611f12565b73ffffffffffffffffffffffffffffffffffffffff16611135611397565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613ac2565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6111b5611f12565b73ffffffffffffffffffffffffffffffffffffffff166111d3611397565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613ac2565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61128c611f12565b73ffffffffffffffffffffffffffffffffffffffff166112aa611397565b73ffffffffffffffffffffffffffffffffffffffff1614611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f790613ac2565b60405180910390fd5b600b60019054906101000a900460ff1615611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613d80565b60405180910390fd5b6001600b60016101000a81548160ff02191690831515021790555043600e819055506001600b60026101000a81548160ff02191690831515021790555080600f8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c9611f12565b73ffffffffffffffffffffffffffffffffffffffff166113e7611397565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613ac2565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461146990613a44565b80601f016020809104026020016040519081016040528092919081815260200182805461149590613a44565b80156114e25780601f106114b7576101008083540402835291602001916114e2565b820191906000526020600020905b8154815290600101906020018083116114c557829003601f168201915b5050505050905090565b6114f4611f12565b73ffffffffffffffffffffffffffffffffffffffff16611512611397565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90613ac2565b60405180910390fd5b6064818385876115789190613da0565b6115829190613da0565b61158c9190613da0565b1461159a57611599613df6565b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639bdc15f4858585856040518563ffffffff1660e01b81526004016115fb9493929190613e25565b600060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b5050505050505050565b6000611647611640611f12565b84846120e5565b6001905092915050565b611659611f12565b73ffffffffffffffffffffffffffffffffffffffff16611677611397565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c490613ac2565b60405180910390fd5b60005b8383905081101561185a5760008484838181106116f0576116ef613e6a565b5b905060200201602081019061170591906135f7565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156117915750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156117e957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156118465782601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061185290613e99565b9150506116d0565b50505050565b600b60019054906101000a900460ff1681565b61187b611f12565b73ffffffffffffffffffffffffffffffffffffffff16611899611397565b73ffffffffffffffffffffffffffffffffffffffff16146118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613ac2565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161198c91906135dc565b60405180910390a25050565b6119a0611f12565b73ffffffffffffffffffffffffffffffffffffffff166119be611397565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613ac2565b60405180910390fd5b670de0b6b3a76400006103e86005611a2a610afb565b611a349190613b11565b611a3e9190613b9a565b611a489190613b9a565b811015611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613f54565b60405180910390fd5b670de0b6b3a764000081611a9e9190613b11565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b6000611aca611f12565b73ffffffffffffffffffffffffffffffffffffffff16611ae8611397565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590613ac2565b60405180910390fd5b620186a06001611b4c610afb565b611b569190613b11565b611b609190613b9a565b821015611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613fe6565b60405180910390fd5b6103e86005611baf610afb565b611bb99190613b11565b611bc39190613b9a565b821115611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90614078565b60405180910390fd5b8160098190555060019050919050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60106020528060005260406000206000915054906101000a900460ff1681565b6000611cd2611f12565b73ffffffffffffffffffffffffffffffffffffffff16611cf0611397565b73ffffffffffffffffffffffffffffffffffffffff1614611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90613ac2565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611d70611f12565b73ffffffffffffffffffffffffffffffffffffffff16611d8e611397565b73ffffffffffffffffffffffffffffffffffffffff1614611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613ac2565b60405180910390fd5b8060128190555050565b611df6611f12565b73ffffffffffffffffffffffffffffffffffffffff16611e14611397565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190613ac2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed19061410a565b60405180910390fd5b611ee381612de5565b50565b600a5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f819061419c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff19061422e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d891906136ad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906142c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90614352565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612249906143be565b60405180910390fd5b600081141561226c5761226783836000612eab565b612de0565b600b60009054906101000a900460ff1615612a3557612289611397565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122f757506122c7611397565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561236a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123835750600760149054906101000a900460ff16155b15612a3457600b60019054906101000a900460ff1661247d57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061243d5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61247c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124739061442a565b60405180910390fd5b5b600f54600e5461248d9190613da0565b43111580156124e757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156125415750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125d157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612672576001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b600d60009054906101000a900460ff161561283c5761268f611397565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127185750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561277057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561283b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906144e2565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156128e15750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129885760085481111561292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614574565b60405180910390fd5b600a5461293783610e65565b826129429190613da0565b1115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a906145e0565b60405180910390fd5b612a33565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3257600a546129e583610e65565b826129f09190613da0565b1115612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906145e0565b60405180910390fd5b5b5b5b5b6000612a4030610e65565b905060006009548210159050808015612a655750600b60029054906101000a900460ff165b8015612a7e5750600760149054906101000a900460ff16155b8015612ad557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612b2b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b815750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bc5576001600760146101000a81548160ff021916908315150217905550612ba961312c565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c7b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8557600090505b60008115612dd0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015612cea57506000601254115b15612d1e57612d176064612d09601254886131ff90919063ffffffff16565b61321590919063ffffffff16565b9050612dac565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015612d7b57506000601154115b15612dab57612da86064612d9a601154886131ff90919063ffffffff16565b61321590919063ffffffff16565b90505b5b6000811115612dc157612dc0873083612eab565b5b8085612dcd9190614600565b94505b612ddb878787612eab565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f12906142c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8290614352565b60405180910390fd5b612f9683838361322b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561301c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613013906146a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130af9190613da0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161311391906136ad565b60405180910390a3613126848484613230565b50505050565b600061313730610e65565b9050600081141561314857506131fd565b60146009546131579190613b11565b81111561317057601460095461316d9190613b11565b90505b61317981613235565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f88dfa66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131e357600080fd5b505af11580156131f7573d6000803e3d6000fd5b50505050505b565b6000818361320d9190613b11565b905092915050565b600081836132239190613b9a565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613252576132516146c6565b5b6040519080825280602002602001820160405280156132805781602001602082028036833780820191505090505b509050308160008151811061329857613297613e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061330957613308613e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061336e307f000000000000000000000000000000000000000000000000000000000000000084611f1a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016133f29594939291906147ee565b600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613462578082015181840152602081019050613447565b83811115613471576000848401525b50505050565b6000601f19601f8301169050919050565b600061349382613428565b61349d8185613433565b93506134ad818560208601613444565b6134b681613477565b840191505092915050565b600060208201905081810360008301526134db8184613488565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613518826134ed565b9050919050565b6135288161350d565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b6000819050919050565b61355e8161354b565b811461356957600080fd5b50565b60008135905061357b81613555565b92915050565b60008060408385031215613598576135976134e3565b5b60006135a685828601613536565b92505060206135b78582860161356c565b9150509250929050565b60008115159050919050565b6135d6816135c1565b82525050565b60006020820190506135f160008301846135cd565b92915050565b60006020828403121561360d5761360c6134e3565b5b600061361b84828501613536565b91505092915050565b6000819050919050565b600061364961364461363f846134ed565b613624565b6134ed565b9050919050565b600061365b8261362e565b9050919050565b600061366d82613650565b9050919050565b61367d81613662565b82525050565b60006020820190506136986000830184613674565b92915050565b6136a78161354b565b82525050565b60006020820190506136c2600083018461369e565b92915050565b6136d18161350d565b82525050565b60006020820190506136ec60008301846136c8565b92915050565b600060208284031215613708576137076134e3565b5b60006137168482850161356c565b91505092915050565b600080600060608486031215613738576137376134e3565b5b600061374686828701613536565b935050602061375786828701613536565b92505060406137688682870161356c565b9150509250925092565b600060ff82169050919050565b61378881613772565b82525050565b60006020820190506137a3600083018461377f565b92915050565b600080600080608085870312156137c3576137c26134e3565b5b60006137d187828801613536565b94505060206137e287828801613536565b93505060406137f387828801613536565b925050606061380487828801613536565b91505092959194509250565b613819816135c1565b811461382457600080fd5b50565b60008135905061383681613810565b92915050565b60008060408385031215613853576138526134e3565b5b600061386185828601613536565b925050602061387285828601613827565b9150509250929050565b600060208284031215613892576138916134e3565b5b60006138a084828501613827565b91505092915050565b600080600080608085870312156138c3576138c26134e3565b5b60006138d18782880161356c565b94505060206138e28782880161356c565b93505060406138f38782880161356c565b92505060606139048782880161356c565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f84011261393557613934613910565b5b8235905067ffffffffffffffff81111561395257613951613915565b5b60208301915083602082028301111561396e5761396d61391a565b5b9250929050565b60008060006040848603121561398e5761398d6134e3565b5b600084013567ffffffffffffffff8111156139ac576139ab6134e8565b5b6139b88682870161391f565b935093505060206139cb86828701613827565b9150509250925092565b600080604083850312156139ec576139eb6134e3565b5b60006139fa85828601613536565b9250506020613a0b85828601613536565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a5c57607f821691505b60208210811415613a7057613a6f613a15565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613aac602083613433565b9150613ab782613a76565b602082019050919050565b60006020820190508181036000830152613adb81613a9f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b1c8261354b565b9150613b278361354b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6057613b5f613ae2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba58261354b565b9150613bb08361354b565b925082613bc057613bbf613b6b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613c27602f83613433565b9150613c3282613bcb565b604082019050919050565b60006020820190508181036000830152613c5681613c1a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613cb9602883613433565b9150613cc482613c5d565b604082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b6000608082019050613d0460008301876136c8565b613d1160208301866136c8565b613d1e60408301856136c8565b613d2b60608301846136c8565b95945050505050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000613d6a600e83613433565b9150613d7582613d34565b602082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b6000613dab8261354b565b9150613db68361354b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613deb57613dea613ae2565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000608082019050613e3a600083018761369e565b613e47602083018661369e565b613e54604083018561369e565b613e61606083018461369e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ea48261354b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ed757613ed6613ae2565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f3e602483613433565b9150613f4982613ee2565b604082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613fd0603583613433565b9150613fdb82613f74565b604082019050919050565b60006020820190508181036000830152613fff81613fc3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614062603483613433565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140f4602683613433565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614186602483613433565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614218602283613433565b9150614223826141bc565b604082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142aa602583613433565b91506142b58261424e565b604082019050919050565b600060208201905081810360008301526142d98161429d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061433c602383613433565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b60006143a8600e83613433565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614414601683613433565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006144cc604983613433565b91506144d78261444a565b606082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061455e603583613433565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006145ca601383613433565b91506145d582614594565b602082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b600061460b8261354b565b91506146168361354b565b92508282101561462957614628613ae2565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614690602683613433565b915061469b82614634565b604082019050919050565b600060208201905081810360008301526146bf81614683565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061471a614715614710846146f5565b613624565b61354b565b9050919050565b61472a816146ff565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147658161350d565b82525050565b6000614777838361475c565b60208301905092915050565b6000602082019050919050565b600061479b82614730565b6147a5818561473b565b93506147b08361474c565b8060005b838110156147e15781516147c8888261476b565b97506147d383614783565b9250506001810190506147b4565b5085935050505092915050565b600060a082019050614803600083018861369e565b6148106020830187614721565b81810360408301526148228186614790565b905061483160608301856136c8565b61483e608083018461369e565b969550505050505056fea264697066735822122097f48975bcc7e6813bf3ce138484d155ee8d106be73dce653188712f0707741464736f6c634300080a003360c06040523480156200001157600080fd5b5060405162000d9238038062000d92833981810160405281019062000037919062000272565b3373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508873ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360048190555082600581905550816006819055508060078190555050505050505050505062000351565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001ff82620001d2565b9050919050565b6200021181620001f2565b81146200021d57600080fd5b50565b600081519050620002318162000206565b92915050565b6000819050919050565b6200024c8162000237565b81146200025857600080fd5b50565b6000815190506200026c8162000241565b92915050565b60008060008060008060008060006101208a8c031215620002985762000297620001cd565b5b6000620002a88c828d0162000220565b9950506020620002bb8c828d0162000220565b9850506040620002ce8c828d0162000220565b9750506060620002e18c828d0162000220565b9650506080620002f48c828d0162000220565b95505060a0620003078c828d016200025b565b94505060c06200031a8c828d016200025b565b93505060e06200032d8c828d016200025b565b925050610100620003418c828d016200025b565b9150509295985092959850929598565b60805160a0516109f96200039960003960008181608c0152818161012801528181610200015281816102da01526103b401526000818161049101526105f201526109f96000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80636f88dfa614610046578063743e540d146100505780639bdc15f41461006c575b600080fd5b61004e610088565b005b61006a600480360381019061006591906106cd565b61048f565b005b6100866004803603810190610081919061076a565b6105f0565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016100e391906107e0565b602060405180830381865afa158015610100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101249190610810565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460045485610193919061086c565b61019d91906108f5565b6040518363ffffffff1660e01b81526004016101ba929190610935565b6020604051808303816000875af11580156101d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fd9190610996565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646005548561026d919061086c565b61027791906108f5565b6040518363ffffffff1660e01b8152600401610294929190610935565b6020604051808303816000875af11580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d79190610996565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460065485610347919061086c565b61035191906108f5565b6040518363ffffffff1660e01b815260040161036e929190610935565b6020604051808303816000875af115801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190610996565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606460075485610421919061086c565b61042b91906108f5565b6040518363ffffffff1660e01b8152600401610448929190610935565b6020604051808303816000875af1158015610467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048b9190610996565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104e757600080fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461064857600080fd5b8360048190555082600581905550816006819055508060078190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061069a8261066f565b9050919050565b6106aa8161068f565b81146106b557600080fd5b50565b6000813590506106c7816106a1565b92915050565b600080600080608085870312156106e7576106e661066a565b5b60006106f5878288016106b8565b9450506020610706878288016106b8565b9350506040610717878288016106b8565b9250506060610728878288016106b8565b91505092959194509250565b6000819050919050565b61074781610734565b811461075257600080fd5b50565b6000813590506107648161073e565b92915050565b600080600080608085870312156107845761078361066a565b5b600061079287828801610755565b94505060206107a387828801610755565b93505060406107b487828801610755565b92505060606107c587828801610755565b91505092959194509250565b6107da8161068f565b82525050565b60006020820190506107f560008301846107d1565b92915050565b60008151905061080a8161073e565b92915050565b6000602082840312156108265761082561066a565b5b6000610834848285016107fb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061087782610734565b915061088283610734565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156108bb576108ba61083d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061090082610734565b915061090b83610734565b92508261091b5761091a6108c6565b5b828204905092915050565b61092f81610734565b82525050565b600060408201905061094a60008301856107d1565b6109576020830184610926565b9392505050565b60008115159050919050565b6109738161095e565b811461097e57600080fd5b50565b6000815190506109908161096a565b92915050565b6000602082840312156109ac576109ab61066a565b5b60006109ba84828501610981565b9150509291505056fea26469706673582212208f00f40242e376f952bf9465b368e6e2dd9e58a41e03e24342dfe16bb003627d64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806382aa7c6811610144578063c8c8ebe4116100b6578063e59621951161007a578063e5962195146108f7578063e884f26014610934578063eba4c3331461095f578063f2fde38b14610988578063f8b45b05146109b1578063ffc94f90146109dc57610267565b8063c8c8ebe4146107fc578063d257b34f14610827578063d85ba06314610864578063dd62ed3e1461088f578063e2f45605146108cc57610267565b8063a9059cbb11610108578063a9059cbb146106ee578063ae303d071461072b578063bbc0c74214610754578063c02466681461077f578063c18bc195146107a8578063c876d0b9146107d157610267565b806382aa7c681461061d5780638da5cb5b14610646578063924de9b71461067157806395d89b411461069a5780639bdc15f4146106c557610267565b80634a62bb65116101dd57806370a08231116101a157806370a0823114610523578063715018a61461056057806371fc468814610577578063743e540d146105a0578063751039fc146105c95780637571336a146105f457610267565b80634a62bb651461044e5780634fbee193146104795780636a486a8e146104b65780636ddd1713146104e15780636f88dfa61461050c57610267565b80631d3561ab116102245780631d3561ab14610367578063203e727e1461039257806323b872dd146103bb578063313ce567146103f857806349bd5a5e1461042357610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d45780631694505e1461031157806318160ddd1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a07565b60405161028e91906134c1565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613581565b610a99565b6040516102cb91906135dc565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906135f7565b610ab7565b60405161030891906135dc565b60405180910390f35b34801561031d57600080fd5b50610326610ad7565b6040516103339190613683565b60405180910390f35b34801561034857600080fd5b50610351610afb565b60405161035e91906136ad565b60405180910390f35b34801561037357600080fd5b5061037c610b05565b60405161038991906136d7565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906136f2565b610b2b565b005b3480156103c757600080fd5b506103e260048036038101906103dd919061371f565b610c3a565b6040516103ef91906135dc565b60405180910390f35b34801561040457600080fd5b5061040d610d32565b60405161041a919061378e565b60405180910390f35b34801561042f57600080fd5b50610438610d3b565b60405161044591906136d7565b60405180910390f35b34801561045a57600080fd5b50610463610d5f565b60405161047091906135dc565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906135f7565b610d72565b6040516104ad91906135dc565b60405180910390f35b3480156104c257600080fd5b506104cb610dc8565b6040516104d891906136ad565b60405180910390f35b3480156104ed57600080fd5b506104f6610dce565b60405161050391906135dc565b60405180910390f35b34801561051857600080fd5b50610521610de1565b005b34801561052f57600080fd5b5061054a600480360381019061054591906135f7565b610e65565b60405161055791906136ad565b60405180910390f35b34801561056c57600080fd5b50610575610ead565b005b34801561058357600080fd5b5061059e600480360381019061059991906136f2565b610f35565b005b3480156105ac57600080fd5b506105c760048036038101906105c291906137a9565b610fbb565b005b3480156105d557600080fd5b506105de61110d565b6040516105eb91906135dc565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061383c565b6111ad565b005b34801561062957600080fd5b50610644600480360381019061063f91906136f2565b611284565b005b34801561065257600080fd5b5061065b611397565b60405161066891906136d7565b60405180910390f35b34801561067d57600080fd5b506106986004803603810190610693919061387c565b6113c1565b005b3480156106a657600080fd5b506106af61145a565b6040516106bc91906134c1565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906138a9565b6114ec565b005b3480156106fa57600080fd5b5061071560048036038101906107109190613581565b611633565b60405161072291906135dc565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613975565b611651565b005b34801561076057600080fd5b50610769611860565b60405161077691906135dc565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a1919061383c565b611873565b005b3480156107b457600080fd5b506107cf60048036038101906107ca91906136f2565b611998565b005b3480156107dd57600080fd5b506107e6611aa7565b6040516107f391906135dc565b60405180910390f35b34801561080857600080fd5b50610811611aba565b60405161081e91906136ad565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906136f2565b611ac0565b60405161085b91906135dc565b60405180910390f35b34801561087057600080fd5b50610879611c15565b60405161088691906136ad565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b191906139d5565b611c1b565b6040516108c391906136ad565b60405180910390f35b3480156108d857600080fd5b506108e1611ca2565b6040516108ee91906136ad565b60405180910390f35b34801561090357600080fd5b5061091e600480360381019061091991906135f7565b611ca8565b60405161092b91906135dc565b60405180910390f35b34801561094057600080fd5b50610949611cc8565b60405161095691906135dc565b60405180910390f35b34801561096b57600080fd5b50610986600480360381019061098191906136f2565b611d68565b005b34801561099457600080fd5b506109af60048036038101906109aa91906135f7565b611dee565b005b3480156109bd57600080fd5b506109c6611ee6565b6040516109d391906136ad565b60405180910390f35b3480156109e857600080fd5b506109f1611eec565b6040516109fe91906136d7565b60405180910390f35b606060038054610a1690613a44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4290613a44565b8015610a8f5780601f10610a6457610100808354040283529160200191610a8f565b820191906000526020600020905b815481529060010190602001808311610a7257829003601f168201915b5050505050905090565b6000610aad610aa6611f12565b8484611f1a565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b33611f12565b73ffffffffffffffffffffffffffffffffffffffff16610b51611397565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613ac2565b60405180910390fd5b670de0b6b3a76400006103e86001610bbd610afb565b610bc79190613b11565b610bd19190613b9a565b610bdb9190613b9a565b811015610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613c3d565b60405180910390fd5b670de0b6b3a764000081610c319190613b11565b60088190555050565b6000610c478484846120e5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c92611f12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990613ccf565b60405180910390fd5b610d2685610d1e611f12565b858403611f1a565b60019150509392505050565b60006012905090565b7f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad781565b600b60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b600b60029054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f88dfa66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eb5611f12565b73ffffffffffffffffffffffffffffffffffffffff16610ed3611397565b73ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090613ac2565b60405180910390fd5b610f336000612de5565b565b610f3d611f12565b73ffffffffffffffffffffffffffffffffffffffff16610f5b611397565b73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890613ac2565b60405180910390fd5b8060118190555050565b610fc3611f12565b73ffffffffffffffffffffffffffffffffffffffff16610fe1611397565b73ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90613ac2565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e540d858585856040518563ffffffff1660e01b81526004016110989493929190613cef565b600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050507f213f1de8063c19612a553f1480ff341bea689d36a56a2089f1b9060d599b5d83848484846040516110ff9493929190613cef565b60405180910390a150505050565b6000611117611f12565b73ffffffffffffffffffffffffffffffffffffffff16611135611397565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613ac2565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6111b5611f12565b73ffffffffffffffffffffffffffffffffffffffff166111d3611397565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613ac2565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61128c611f12565b73ffffffffffffffffffffffffffffffffffffffff166112aa611397565b73ffffffffffffffffffffffffffffffffffffffff1614611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f790613ac2565b60405180910390fd5b600b60019054906101000a900460ff1615611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613d80565b60405180910390fd5b6001600b60016101000a81548160ff02191690831515021790555043600e819055506001600b60026101000a81548160ff02191690831515021790555080600f8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c9611f12565b73ffffffffffffffffffffffffffffffffffffffff166113e7611397565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613ac2565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461146990613a44565b80601f016020809104026020016040519081016040528092919081815260200182805461149590613a44565b80156114e25780601f106114b7576101008083540402835291602001916114e2565b820191906000526020600020905b8154815290600101906020018083116114c557829003601f168201915b5050505050905090565b6114f4611f12565b73ffffffffffffffffffffffffffffffffffffffff16611512611397565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90613ac2565b60405180910390fd5b6064818385876115789190613da0565b6115829190613da0565b61158c9190613da0565b1461159a57611599613df6565b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639bdc15f4858585856040518563ffffffff1660e01b81526004016115fb9493929190613e25565b600060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b5050505050505050565b6000611647611640611f12565b84846120e5565b6001905092915050565b611659611f12565b73ffffffffffffffffffffffffffffffffffffffff16611677611397565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c490613ac2565b60405180910390fd5b60005b8383905081101561185a5760008484838181106116f0576116ef613e6a565b5b905060200201602081019061170591906135f7565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156117915750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156117e957507f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156118465782601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061185290613e99565b9150506116d0565b50505050565b600b60019054906101000a900460ff1681565b61187b611f12565b73ffffffffffffffffffffffffffffffffffffffff16611899611397565b73ffffffffffffffffffffffffffffffffffffffff16146118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613ac2565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161198c91906135dc565b60405180910390a25050565b6119a0611f12565b73ffffffffffffffffffffffffffffffffffffffff166119be611397565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613ac2565b60405180910390fd5b670de0b6b3a76400006103e86005611a2a610afb565b611a349190613b11565b611a3e9190613b9a565b611a489190613b9a565b811015611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613f54565b60405180910390fd5b670de0b6b3a764000081611a9e9190613b11565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b6000611aca611f12565b73ffffffffffffffffffffffffffffffffffffffff16611ae8611397565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590613ac2565b60405180910390fd5b620186a06001611b4c610afb565b611b569190613b11565b611b609190613b9a565b821015611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613fe6565b60405180910390fd5b6103e86005611baf610afb565b611bb99190613b11565b611bc39190613b9a565b821115611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90614078565b60405180910390fd5b8160098190555060019050919050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60106020528060005260406000206000915054906101000a900460ff1681565b6000611cd2611f12565b73ffffffffffffffffffffffffffffffffffffffff16611cf0611397565b73ffffffffffffffffffffffffffffffffffffffff1614611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90613ac2565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611d70611f12565b73ffffffffffffffffffffffffffffffffffffffff16611d8e611397565b73ffffffffffffffffffffffffffffffffffffffff1614611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613ac2565b60405180910390fd5b8060128190555050565b611df6611f12565b73ffffffffffffffffffffffffffffffffffffffff16611e14611397565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190613ac2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed19061410a565b60405180910390fd5b611ee381612de5565b50565b600a5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f819061419c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff19061422e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d891906136ad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906142c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90614352565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612249906143be565b60405180910390fd5b600081141561226c5761226783836000612eab565b612de0565b600b60009054906101000a900460ff1615612a3557612289611397565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122f757506122c7611397565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561236a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123835750600760149054906101000a900460ff16155b15612a3457600b60019054906101000a900460ff1661247d57601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061243d5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61247c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124739061442a565b60405180910390fd5b5b600f54600e5461248d9190613da0565b43111580156124e757507f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156125415750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125d157507f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612672576001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b600d60009054906101000a900460ff161561283c5761268f611397565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127185750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561277057507f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561283b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906144e2565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b7f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156128e15750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129885760085481111561292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614574565b60405180910390fd5b600a5461293783610e65565b826129429190613da0565b1115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a906145e0565b60405180910390fd5b612a33565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3257600a546129e583610e65565b826129f09190613da0565b1115612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906145e0565b60405180910390fd5b5b5b5b5b6000612a4030610e65565b905060006009548210159050808015612a655750600b60029054906101000a900460ff165b8015612a7e5750600760149054906101000a900460ff16155b8015612ad557507f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612b2b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b815750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bc5576001600760146101000a81548160ff021916908315150217905550612ba961312c565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c7b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8557600090505b60008115612dd0577f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015612cea57506000601254115b15612d1e57612d176064612d09601254886131ff90919063ffffffff16565b61321590919063ffffffff16565b9050612dac565b7f000000000000000000000000ec8f37fcb168c44f89fc01021683ce5c11234ad773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015612d7b57506000601154115b15612dab57612da86064612d9a601154886131ff90919063ffffffff16565b61321590919063ffffffff16565b90505b5b6000811115612dc157612dc0873083612eab565b5b8085612dcd9190614600565b94505b612ddb878787612eab565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f12906142c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8290614352565b60405180910390fd5b612f9683838361322b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561301c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613013906146a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130af9190613da0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161311391906136ad565b60405180910390a3613126848484613230565b50505050565b600061313730610e65565b9050600081141561314857506131fd565b60146009546131579190613b11565b81111561317057601460095461316d9190613b11565b90505b61317981613235565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f88dfa66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131e357600080fd5b505af11580156131f7573d6000803e3d6000fd5b50505050505b565b6000818361320d9190613b11565b905092915050565b600081836132239190613b9a565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613252576132516146c6565b5b6040519080825280602002602001820160405280156132805781602001602082028036833780820191505090505b509050308160008151811061329857613297613e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061330957613308613e6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061336e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016133f29594939291906147ee565b600060405180830381600087803b15801561340c57600080fd5b505af1158015613420573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613462578082015181840152602081019050613447565b83811115613471576000848401525b50505050565b6000601f19601f8301169050919050565b600061349382613428565b61349d8185613433565b93506134ad818560208601613444565b6134b681613477565b840191505092915050565b600060208201905081810360008301526134db8184613488565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613518826134ed565b9050919050565b6135288161350d565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b6000819050919050565b61355e8161354b565b811461356957600080fd5b50565b60008135905061357b81613555565b92915050565b60008060408385031215613598576135976134e3565b5b60006135a685828601613536565b92505060206135b78582860161356c565b9150509250929050565b60008115159050919050565b6135d6816135c1565b82525050565b60006020820190506135f160008301846135cd565b92915050565b60006020828403121561360d5761360c6134e3565b5b600061361b84828501613536565b91505092915050565b6000819050919050565b600061364961364461363f846134ed565b613624565b6134ed565b9050919050565b600061365b8261362e565b9050919050565b600061366d82613650565b9050919050565b61367d81613662565b82525050565b60006020820190506136986000830184613674565b92915050565b6136a78161354b565b82525050565b60006020820190506136c2600083018461369e565b92915050565b6136d18161350d565b82525050565b60006020820190506136ec60008301846136c8565b92915050565b600060208284031215613708576137076134e3565b5b60006137168482850161356c565b91505092915050565b600080600060608486031215613738576137376134e3565b5b600061374686828701613536565b935050602061375786828701613536565b92505060406137688682870161356c565b9150509250925092565b600060ff82169050919050565b61378881613772565b82525050565b60006020820190506137a3600083018461377f565b92915050565b600080600080608085870312156137c3576137c26134e3565b5b60006137d187828801613536565b94505060206137e287828801613536565b93505060406137f387828801613536565b925050606061380487828801613536565b91505092959194509250565b613819816135c1565b811461382457600080fd5b50565b60008135905061383681613810565b92915050565b60008060408385031215613853576138526134e3565b5b600061386185828601613536565b925050602061387285828601613827565b9150509250929050565b600060208284031215613892576138916134e3565b5b60006138a084828501613827565b91505092915050565b600080600080608085870312156138c3576138c26134e3565b5b60006138d18782880161356c565b94505060206138e28782880161356c565b93505060406138f38782880161356c565b92505060606139048782880161356c565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f84011261393557613934613910565b5b8235905067ffffffffffffffff81111561395257613951613915565b5b60208301915083602082028301111561396e5761396d61391a565b5b9250929050565b60008060006040848603121561398e5761398d6134e3565b5b600084013567ffffffffffffffff8111156139ac576139ab6134e8565b5b6139b88682870161391f565b935093505060206139cb86828701613827565b9150509250925092565b600080604083850312156139ec576139eb6134e3565b5b60006139fa85828601613536565b9250506020613a0b85828601613536565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a5c57607f821691505b60208210811415613a7057613a6f613a15565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613aac602083613433565b9150613ab782613a76565b602082019050919050565b60006020820190508181036000830152613adb81613a9f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b1c8261354b565b9150613b278361354b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6057613b5f613ae2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba58261354b565b9150613bb08361354b565b925082613bc057613bbf613b6b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613c27602f83613433565b9150613c3282613bcb565b604082019050919050565b60006020820190508181036000830152613c5681613c1a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613cb9602883613433565b9150613cc482613c5d565b604082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b6000608082019050613d0460008301876136c8565b613d1160208301866136c8565b613d1e60408301856136c8565b613d2b60608301846136c8565b95945050505050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000613d6a600e83613433565b9150613d7582613d34565b602082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b6000613dab8261354b565b9150613db68361354b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613deb57613dea613ae2565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000608082019050613e3a600083018761369e565b613e47602083018661369e565b613e54604083018561369e565b613e61606083018461369e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ea48261354b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ed757613ed6613ae2565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f3e602483613433565b9150613f4982613ee2565b604082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613fd0603583613433565b9150613fdb82613f74565b604082019050919050565b60006020820190508181036000830152613fff81613fc3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614062603483613433565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140f4602683613433565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614186602483613433565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614218602283613433565b9150614223826141bc565b604082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142aa602583613433565b91506142b58261424e565b604082019050919050565b600060208201905081810360008301526142d98161429d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061433c602383613433565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b60006143a8600e83613433565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614414601683613433565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006144cc604983613433565b91506144d78261444a565b606082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061455e603583613433565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006145ca601383613433565b91506145d582614594565b602082019050919050565b600060208201905081810360008301526145f9816145bd565b9050919050565b600061460b8261354b565b91506146168361354b565b92508282101561462957614628613ae2565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614690602683613433565b915061469b82614634565b604082019050919050565b600060208201905081810360008301526146bf81614683565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061471a614715614710846146f5565b613624565b61354b565b9050919050565b61472a816146ff565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147658161350d565b82525050565b6000614777838361475c565b60208301905092915050565b6000602082019050919050565b600061479b82614730565b6147a5818561473b565b93506147b08361474c565b8060005b838110156147e15781516147c8888261476b565b97506147d383614783565b9250506001810190506147b4565b5085935050505092915050565b600060a082019050614803600083018861369e565b6148106020830187614721565b81810360408301526148228186614790565b905061483160608301856136c8565b61483e608083018461369e565b969550505050505056fea264697066735822122097f48975bcc7e6813bf3ce138484d155ee8d106be73dce653188712f0707741464736f6c634300080a0033

Deployed Bytecode Sourcemap

23417:13002:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8594:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10761:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24541:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23492:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9714:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23676:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28210:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11412:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9556:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23550:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23899:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30603:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24392:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23979:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36341:75;;;;;;;;;;;;;:::i;:::-;;9885:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2506:103;;;;;;;;;;;;;:::i;:::-;;29128:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30026:569;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27367:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28757:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27062:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1855:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29020:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8813:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29380:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10225:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35551:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23939:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29836:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28493:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24197:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23784:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27705:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24358:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10463:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23826:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24310:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27500:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29252:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2764:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23866:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23598:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8594:100;8648:13;8681:5;8674:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8594:100;:::o;10761:169::-;10844:4;10861:39;10870:12;:10;:12::i;:::-;10884:7;10893:6;10861:8;:39::i;:::-;10918:4;10911:11;;10761:169;;;;:::o;24541:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23492:51::-;;;:::o;9714:108::-;9775:7;9802:12;;9795:19;;9714:108;:::o;23676:69::-;;;;;;;;;;;;;:::o;28210:275::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28347:4:::1;28339;28334:1;28318:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28317:26;;;;:::i;:::-;28316:35;;;;:::i;:::-;28306:6;:45;;28284:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;28470:6;28460;:17;;;;:::i;:::-;28437:20;:40;;;;28210:275:::0;:::o;11412:492::-;11552:4;11569:36;11579:6;11587:9;11598:6;11569:9;:36::i;:::-;11618:24;11645:11;:19;11657:6;11645:19;;;;;;;;;;;;;;;:33;11665:12;:10;:12::i;:::-;11645:33;;;;;;;;;;;;;;;;11618:60;;11717:6;11697:16;:26;;11689:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11804:57;11813:6;11821:12;:10;:12::i;:::-;11854:6;11835:16;:25;11804:8;:57::i;:::-;11892:4;11885:11;;;11412:492;;;;;:::o;9556:93::-;9614:5;9639:2;9632:9;;9556:93;:::o;23550:38::-;;;:::o;23899:33::-;;;;;;;;;;;;;:::o;30603:126::-;30669:4;30693:19;:28;30713:7;30693:28;;;;;;;;;;;;;;;;;;;;;;;;;30686:35;;30603:126;;;:::o;24392:28::-;;;;:::o;23979:31::-;;;;;;;;;;;;;:::o;36341:75::-;36380:16;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36341:75::o;9885:127::-;9959:7;9986:9;:18;9996:7;9986:18;;;;;;;;;;;;;;;;9979:25;;9885:127;;;:::o;2506:103::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2571:30:::1;2598:1;2571:18;:30::i;:::-;2506:103::o:0;29128:116::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29229:7:::1;29214:12;:22;;;;29128:116:::0;:::o;30026:569::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30251:16:::1;;;;;;;;;;;:30;;;30296:17;30328:20;30363:18;30396:17;30251:173;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30440:147;30469:17;30501:20;30536:18;30569:17;30440:147;;;;;;;;;:::i;:::-;;;;;;;;30026:569:::0;;;;:::o;27367:121::-;27419:4;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27453:5:::1;27436:14;;:22;;;;;;;;;;;;;;;;;;27476:4;27469:11;;27367:121:::0;:::o;28757:167::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28912:4:::1;28870:31;:39;28902:6;28870:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28757:167:::0;;:::o;27062:255::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27145:13:::1;;;;;;;;;;;27144:14;27136:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;27204:4;27188:13;;:20;;;;;;;;;;;;;;;;;;27233:12;27219:11;:26;;;;27270:4;27256:11;;:18;;;;;;;;;;;;;;;;;;27298:11;27285:10;:24;;;;27062:255:::0;:::o;1855:87::-;1901:7;1928:6;;;;;;;;;;;1921:13;;1855:87;:::o;29020:100::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29105:7:::1;29091:11;;:21;;;;;;;;;;;;;;;;;;29020:100:::0;:::o;8813:104::-;8869:13;8902:7;8895:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8813:104;:::o;29380:448::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29655:3:::1;29637:14;29619:15;29599:17;29582:14;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:69;;;;:::i;:::-;:76;29575:84;;;;:::i;:::-;;29670:16;;;;;;;;;;;:29;;;29714:14;29743:17;29775:15;29805:14;29670:150;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29380:448:::0;;;;:::o;10225:175::-;10311:4;10328:42;10338:12;:10;:12::i;:::-;10352:9;10363:6;10328:9;:42::i;:::-;10388:4;10381:11;;10225:175;;;;:::o;35551:386::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35652:9:::1;35648:282;35668:8;;:15;;35666:1;:17;35648:282;;;35703:15;35721:8;;35730:1;35721:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35703:29;;35769:4;35750:24;;:7;:24;;;;:65;;;;;35806:9;;;;;;;;;;;35795:20;;:7;:20;;;;35750:65;:119;;;;;35855:13;35836:33;;:7;:33;;;;35750:119;35747:171;;;35907:11;35888:7;:16;35896:7;35888:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;35747:171;35688:242;35684:3;;;;;:::i;:::-;;;;35648:282;;;;35551:386:::0;;;:::o;23939:33::-;;;;;;;;;;;;;:::o;29836:182::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29952:8:::1;29921:19;:28;29941:7;29921:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29992:7;29976:34;;;30001:8;29976:34;;;;;;:::i;:::-;;;;;;;;29836:182:::0;;:::o;28493:256::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28633:4:::1;28625;28620:1;28604:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28603:26;;;;:::i;:::-;28602:35;;;;:::i;:::-;28592:6;:45;;28570:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;28734:6;28724;:17;;;;:::i;:::-;28712:9;:29;;;;28493:256:::0;:::o;24197:39::-;;;;;;;;;;;;;:::o;23784:35::-;;;;:::o;27705:497::-;27813:4;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27892:6:::1;27887:1;27871:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27870:28;;;;:::i;:::-;27857:9;:41;;27835:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28047:4;28042:1;28026:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28025:26;;;;:::i;:::-;28012:9;:39;;27990:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28163:9;28142:18;:30;;;;28190:4;28183:11;;27705:497:::0;;;:::o;24358:27::-;;;;:::o;10463:151::-;10552:7;10579:11;:18;10591:5;10579:18;;;;;;;;;;;;;;;:27;10598:7;10579:27;;;;;;;;;;;;;;;;10572:34;;10463:151;;;;:::o;23826:33::-;;;;:::o;24310:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;27500:135::-;27560:4;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27600:5:::1;27577:20;;:28;;;;;;;;;;;;;;;;;;27623:4;27616:11;;27500:135:::0;:::o;29252:120::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29356:8:::1;29340:13;:24;;;;29252:120:::0;:::o;2764:201::-;2086:12;:10;:12::i;:::-;2075:23;;:7;:5;:7::i;:::-;:23;;;2067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2873:1:::1;2853:22;;:8;:22;;;;2845:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2929:28;2948:8;2929:18;:28::i;:::-;2764:201:::0;:::o;23866:24::-;;;;:::o;23598:71::-;;;;;;;;;;;;;:::o;722:98::-;775:7;802:10;795:17;;722:98;:::o;14253:380::-;14406:1;14389:19;;:5;:19;;;;14381:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14487:1;14468:21;;:7;:21;;;;14460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14571:6;14541:11;:18;14553:5;14541:18;;;;;;;;;;;;;;;:27;14560:7;14541:27;;;;;;;;;;;;;;;:36;;;;14609:7;14593:32;;14602:5;14593:32;;;14618:6;14593:32;;;;;;:::i;:::-;;;;;;;;14253:380;;;:::o;30787:4141::-;30935:1;30919:18;;:4;:18;;;;30911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31012:1;30998:16;;:2;:16;;;;30990:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31074:7;:13;31082:4;31074:13;;;;;;;;;;;;;;;;;;;;;;;;;31073:14;31065:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31133:1;31123:6;:11;31119:93;;;31151:28;31167:4;31173:2;31177:1;31151:15;:28::i;:::-;31194:7;;31119:93;31228:14;;;;;;;;;;;31224:2343;;;31289:7;:5;:7::i;:::-;31281:15;;:4;:15;;;;:49;;;;;31323:7;:5;:7::i;:::-;31317:13;;:2;:13;;;;31281:49;:86;;;;;31365:1;31351:16;;:2;:16;;;;31281:86;:128;;;;;31402:6;31388:21;;:2;:21;;;;31281:128;:158;;;;;31431:8;;;;;;;;;;;31430:9;31281:158;31259:2297;;;31479:13;;;;;;;;;;;31474:223;;31551:19;:25;31571:4;31551:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31580:19;:23;31600:2;31580:23;;;;;;;;;;;;;;;;;;;;;;;;;31551:52;31517:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31474:223;31750:10;;31736:11;;:24;;;;:::i;:::-;31720:12;:40;;:74;;;;;31780:13;31764:30;;:4;:30;;;31720:74;:112;;;;;31823:9;;;;;;;;;;;31817:15;;:2;:15;;;;31720:112;:135;;;;;31850:4;31836:19;;:2;:19;;;;31720:135;:167;;;;;31873:13;31859:28;;:2;:28;;;;31720:167;31717:275;;;31925:4;31911:7;:11;31919:2;31911:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;31969:2;31957:15;;;;;;;;;;;;31717:275;32148:20;;;;;;;;;;;32144:626;;;32229:7;:5;:7::i;:::-;32223:13;;:2;:13;;;;:57;;;;;32271:9;;;;;;;;;;;32265:15;;:2;:15;;;;32223:57;:114;;;;;32323:13;32309:28;;:2;:28;;;;32223:114;32193:558;;;32501:12;32426:28;:39;32455:9;32426:39;;;;;;;;;;;;;;;;:87;32388:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;32715:12;32673:28;:39;32702:9;32673:39;;;;;;;;;;;;;;;:54;;;;32193:558;32144:626;32824:13;32816:21;;:4;:21;;;:82;;;;;32863:31;:35;32895:2;32863:35;;;;;;;;;;;;;;;;;;;;;;;;;32862:36;32816:82;32790:751;;;32985:20;;32975:6;:30;;32941:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33193:9;;33176:13;33186:2;33176:9;:13::i;:::-;33167:6;:22;;;;:::i;:::-;:35;;33133:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32790:751;;;33321:31;:35;33353:2;33321:35;;;;;;;;;;;;;;;;;;;;;;;;;33316:225;;33441:9;;33424:13;33434:2;33424:9;:13::i;:::-;33415:6;:22;;;;:::i;:::-;:35;;33381:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33316:225;32790:751;31259:2297;31224:2343;33579:28;33610:24;33628:4;33610:9;:24::i;:::-;33579:55;;33647:12;33686:18;;33662:20;:42;;33647:57;;33735:7;:35;;;;;33759:11;;;;;;;;;;;33735:35;:61;;;;;33788:8;;;;;;;;;;;33787:9;33735:61;:97;;;;;33819:13;33813:19;;:2;:19;;;33735:97;:140;;;;;33850:19;:25;33870:4;33850:25;;;;;;;;;;;;;;;;;;;;;;;;;33849:26;33735:140;:181;;;;;33893:19;:23;33913:2;33893:23;;;;;;;;;;;;;;;;;;;;;;;;;33892:24;33735:181;33717:313;;;33954:4;33943:8;;:15;;;;;;;;;;;;;;;;;;33975:10;:8;:10::i;:::-;34013:5;34002:8;;:16;;;;;;;;;;;;;;;;;;33717:313;34042:12;34058:8;;;;;;;;;;;34057:9;34042:24;;34168:19;:25;34188:4;34168:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34197:19;:23;34217:2;34197:23;;;;;;;;;;;;;;;;;;;;;;;;;34168:52;34164:100;;;34247:5;34237:15;;34164:100;34276:12;34383:7;34379:496;;;34441:13;34435:19;;:2;:19;;;:40;;;;;34474:1;34458:13;;:17;34435:40;34431:286;;;34503:34;34533:3;34503:25;34514:13;;34503:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;34496:41;;34431:286;;;34607:13;34599:21;;:4;:21;;;:41;;;;;34639:1;34624:12;;:16;34599:41;34595:122;;;34668:33;34697:3;34668:24;34679:12;;34668:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;34661:40;;34595:122;34431:286;34743:1;34737:4;:7;34733:90;;;34765:42;34781:4;34795;34802;34765:15;:42::i;:::-;34733:90;34859:4;34849:14;;;;;:::i;:::-;;;34379:496;34887:33;34903:4;34909:2;34913:6;34887:15;:33::i;:::-;30900:4028;;;;30787:4141;;;;:::o;3125:191::-;3199:16;3218:6;;;;;;;;;;;3199:25;;3244:8;3235:6;;:17;;;;;;;;;;;;;;;;;;3299:8;3268:40;;3289:8;3268:40;;;;;;;;;;;;3188:128;3125:191;:::o;12394:733::-;12552:1;12534:20;;:6;:20;;;;12526:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12636:1;12615:23;;:9;:23;;;;12607:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12691:47;12712:6;12720:9;12731:6;12691:20;:47::i;:::-;12751:21;12775:9;:17;12785:6;12775:17;;;;;;;;;;;;;;;;12751:41;;12828:6;12811:13;:23;;12803:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12949:6;12933:13;:22;12913:9;:17;12923:6;12913:17;;;;;;;;;;;;;;;:42;;;;13001:6;12977:9;:20;12987:9;12977:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13042:9;13025:35;;13034:6;13025:35;;;13053:6;13025:35;;;;;;:::i;:::-;;;;;;;;13073:46;13093:6;13101:9;13112:6;13073:19;:46::i;:::-;12515:612;12394:733;;;:::o;35945:388::-;35984:23;36010:24;36028:4;36010:9;:24::i;:::-;35984:50;;36068:1;36049:15;:20;36045:59;;;36086:7;;;36045:59;36159:2;36138:18;;:23;;;;:::i;:::-;36120:15;:41;36116:115;;;36217:2;36196:18;;:23;;;;:::i;:::-;36178:41;;36116:115;36243:41;36268:15;36243:24;:41::i;:::-;36297:16;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35973:360;35945:388;:::o;19385:98::-;19443:7;19474:1;19470;:5;;;;:::i;:::-;19463:12;;19385:98;;;;:::o;19784:::-;19842:7;19873:1;19869;:5;;;;:::i;:::-;19862:12;;19784:98;;;;:::o;15233:125::-;;;;:::o;15962:124::-;;;;:::o;34936:607::-;35070:21;35108:1;35094:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35070:40;;35139:4;35121;35126:1;35121:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35165:11;;;;;;;;;;;35155:4;35160:1;35155:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;35187:62;35204:4;35219:15;35237:11;35187:8;:62::i;:::-;35288:15;:69;;;35372:11;35398:1;35450:4;35477:16;;;;;;;;;;;35509:15;35288:247;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34999:544;34936:607;:::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;1601:117;1710:1;1707;1700: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:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:118::-;5241:24;5259:5;5241:24;:::i;:::-;5236:3;5229:37;5154:118;;:::o;5278:222::-;5371:4;5409:2;5398:9;5394:18;5386:26;;5422:71;5490:1;5479:9;5475:17;5466:6;5422:71;:::i;:::-;5278:222;;;;:::o;5506:329::-;5565:6;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5506:329;;;;:::o;5841:619::-;5918:6;5926;5934;5983:2;5971:9;5962:7;5958:23;5954:32;5951:119;;;5989:79;;:::i;:::-;5951:119;6109:1;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6080:117;6236:2;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6207:118;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;5841:619;;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:765::-;6982:6;6990;6998;7006;7055:3;7043:9;7034:7;7030:23;7026:33;7023:120;;;7062:79;;:::i;:::-;7023:120;7182:1;7207:53;7252:7;7243:6;7232:9;7228:22;7207:53;:::i;:::-;7197:63;;7153:117;7309:2;7335:53;7380:7;7371:6;7360:9;7356:22;7335:53;:::i;:::-;7325:63;;7280:118;7437:2;7463:53;7508:7;7499:6;7488:9;7484:22;7463:53;:::i;:::-;7453:63;;7408:118;7565:2;7591:53;7636:7;7627:6;7616:9;7612:22;7591:53;:::i;:::-;7581:63;;7536:118;6896:765;;;;;;;:::o;7667:116::-;7737:21;7752:5;7737:21;:::i;:::-;7730:5;7727:32;7717:60;;7773:1;7770;7763:12;7717:60;7667:116;:::o;7789:133::-;7832:5;7870:6;7857:20;7848:29;;7886:30;7910:5;7886:30;:::i;:::-;7789:133;;;;:::o;7928:468::-;7993:6;8001;8050:2;8038:9;8029:7;8025:23;8021:32;8018:119;;;8056:79;;:::i;:::-;8018:119;8176:1;8201:53;8246:7;8237:6;8226:9;8222:22;8201:53;:::i;:::-;8191:63;;8147:117;8303:2;8329:50;8371:7;8362:6;8351:9;8347:22;8329:50;:::i;:::-;8319:60;;8274:115;7928:468;;;;;:::o;8402:323::-;8458:6;8507:2;8495:9;8486:7;8482:23;8478:32;8475:119;;;8513:79;;:::i;:::-;8475:119;8633:1;8658:50;8700:7;8691:6;8680:9;8676:22;8658:50;:::i;:::-;8648:60;;8604:114;8402:323;;;;:::o;8731:765::-;8817:6;8825;8833;8841;8890:3;8878:9;8869:7;8865:23;8861:33;8858:120;;;8897:79;;:::i;:::-;8858:120;9017:1;9042:53;9087:7;9078:6;9067:9;9063:22;9042:53;:::i;:::-;9032:63;;8988:117;9144:2;9170:53;9215:7;9206:6;9195:9;9191:22;9170:53;:::i;:::-;9160:63;;9115:118;9272:2;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9243:118;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;8731:765;;;;;;;:::o;9502:117::-;9611:1;9608;9601:12;9625:117;9734:1;9731;9724:12;9748:117;9857:1;9854;9847:12;9888:568;9961:8;9971:6;10021:3;10014:4;10006:6;10002:17;9998:27;9988:122;;10029:79;;:::i;:::-;9988:122;10142:6;10129:20;10119:30;;10172:18;10164:6;10161:30;10158:117;;;10194:79;;:::i;:::-;10158:117;10308:4;10300:6;10296:17;10284:29;;10362:3;10354:4;10346:6;10342:17;10332:8;10328:32;10325:41;10322:128;;;10369:79;;:::i;:::-;10322:128;9888:568;;;;;:::o;10462:698::-;10554:6;10562;10570;10619:2;10607:9;10598:7;10594:23;10590:32;10587:119;;;10625:79;;:::i;:::-;10587:119;10773:1;10762:9;10758:17;10745:31;10803:18;10795:6;10792:30;10789:117;;;10825:79;;:::i;:::-;10789:117;10938:80;11010:7;11001:6;10990:9;10986:22;10938:80;:::i;:::-;10920:98;;;;10716:312;11067:2;11093:50;11135:7;11126:6;11115:9;11111:22;11093:50;:::i;:::-;11083:60;;11038:115;10462:698;;;;;:::o;11166:474::-;11234:6;11242;11291:2;11279:9;11270:7;11266:23;11262:32;11259:119;;;11297:79;;:::i;:::-;11259:119;11417:1;11442:53;11487:7;11478:6;11467:9;11463:22;11442:53;:::i;:::-;11432:63;;11388:117;11544:2;11570:53;11615:7;11606:6;11595:9;11591:22;11570:53;:::i;:::-;11560:63;;11515:118;11166:474;;;;;:::o;11646:180::-;11694:77;11691:1;11684:88;11791:4;11788:1;11781:15;11815:4;11812:1;11805:15;11832:320;11876:6;11913:1;11907:4;11903:12;11893:22;;11960:1;11954:4;11950:12;11981:18;11971:81;;12037:4;12029:6;12025:17;12015:27;;11971:81;12099:2;12091:6;12088:14;12068:18;12065:38;12062:84;;;12118:18;;:::i;:::-;12062:84;11883:269;11832:320;;;:::o;12158:182::-;12298:34;12294:1;12286:6;12282:14;12275:58;12158:182;:::o;12346:366::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:419::-;12884:4;12922:2;12911:9;12907:18;12899:26;;12971:9;12965:4;12961:20;12957:1;12946:9;12942:17;12935:47;12999:131;13125:4;12999:131;:::i;:::-;12991:139;;12718:419;;;:::o;13143:180::-;13191:77;13188:1;13181:88;13288:4;13285:1;13278:15;13312:4;13309:1;13302:15;13329:348;13369:7;13392:20;13410:1;13392:20;:::i;:::-;13387:25;;13426:20;13444:1;13426:20;:::i;:::-;13421:25;;13614:1;13546:66;13542:74;13539:1;13536:81;13531:1;13524:9;13517:17;13513:105;13510:131;;;13621:18;;:::i;:::-;13510:131;13669:1;13666;13662:9;13651:20;;13329:348;;;;:::o;13683:180::-;13731:77;13728:1;13721:88;13828:4;13825:1;13818:15;13852:4;13849:1;13842:15;13869:185;13909:1;13926:20;13944:1;13926:20;:::i;:::-;13921:25;;13960:20;13978:1;13960:20;:::i;:::-;13955:25;;13999:1;13989:35;;14004:18;;:::i;:::-;13989:35;14046:1;14043;14039:9;14034:14;;13869:185;;;;:::o;14060:234::-;14200:34;14196:1;14188:6;14184:14;14177:58;14269:17;14264:2;14256:6;14252:15;14245:42;14060:234;:::o;14300:366::-;14442:3;14463:67;14527:2;14522:3;14463:67;:::i;:::-;14456:74;;14539:93;14628:3;14539:93;:::i;:::-;14657:2;14652:3;14648:12;14641:19;;14300:366;;;:::o;14672:419::-;14838:4;14876:2;14865:9;14861:18;14853:26;;14925:9;14919:4;14915:20;14911:1;14900:9;14896:17;14889:47;14953:131;15079:4;14953:131;:::i;:::-;14945:139;;14672:419;;;:::o;15097:227::-;15237:34;15233:1;15225:6;15221:14;15214:58;15306:10;15301:2;15293:6;15289:15;15282:35;15097:227;:::o;15330:366::-;15472:3;15493:67;15557:2;15552:3;15493:67;:::i;:::-;15486:74;;15569:93;15658:3;15569:93;:::i;:::-;15687:2;15682:3;15678:12;15671:19;;15330:366;;;:::o;15702:419::-;15868:4;15906:2;15895:9;15891:18;15883:26;;15955:9;15949:4;15945:20;15941:1;15930:9;15926:17;15919:47;15983:131;16109:4;15983:131;:::i;:::-;15975:139;;15702:419;;;:::o;16127:553::-;16304:4;16342:3;16331:9;16327:19;16319:27;;16356:71;16424:1;16413:9;16409:17;16400:6;16356:71;:::i;:::-;16437:72;16505:2;16494:9;16490:18;16481:6;16437:72;:::i;:::-;16519;16587:2;16576:9;16572:18;16563:6;16519:72;:::i;:::-;16601;16669:2;16658:9;16654:18;16645:6;16601:72;:::i;:::-;16127:553;;;;;;;:::o;16686:164::-;16826:16;16822:1;16814:6;16810:14;16803:40;16686:164;:::o;16856:366::-;16998:3;17019:67;17083:2;17078:3;17019:67;:::i;:::-;17012:74;;17095:93;17184:3;17095:93;:::i;:::-;17213:2;17208:3;17204:12;17197:19;;16856:366;;;:::o;17228:419::-;17394:4;17432:2;17421:9;17417:18;17409:26;;17481:9;17475:4;17471:20;17467:1;17456:9;17452:17;17445:47;17509:131;17635:4;17509:131;:::i;:::-;17501:139;;17228:419;;;:::o;17653:305::-;17693:3;17712:20;17730:1;17712:20;:::i;:::-;17707:25;;17746:20;17764:1;17746:20;:::i;:::-;17741:25;;17900:1;17832:66;17828:74;17825:1;17822:81;17819:107;;;17906:18;;:::i;:::-;17819:107;17950:1;17947;17943:9;17936:16;;17653:305;;;;:::o;17964:180::-;18012:77;18009:1;18002:88;18109:4;18106:1;18099:15;18133:4;18130:1;18123:15;18150:553;18327:4;18365:3;18354:9;18350:19;18342:27;;18379:71;18447:1;18436:9;18432:17;18423:6;18379:71;:::i;:::-;18460:72;18528:2;18517:9;18513:18;18504:6;18460:72;:::i;:::-;18542;18610:2;18599:9;18595:18;18586:6;18542:72;:::i;:::-;18624;18692:2;18681:9;18677:18;18668:6;18624:72;:::i;:::-;18150:553;;;;;;;:::o;18709:180::-;18757:77;18754:1;18747:88;18854:4;18851:1;18844:15;18878:4;18875:1;18868:15;18895:233;18934:3;18957:24;18975:5;18957:24;:::i;:::-;18948:33;;19003:66;18996:5;18993:77;18990:103;;;19073:18;;:::i;:::-;18990:103;19120:1;19113:5;19109:13;19102:20;;18895:233;;;:::o;19134:223::-;19274:34;19270:1;19262:6;19258:14;19251:58;19343:6;19338:2;19330:6;19326:15;19319:31;19134:223;:::o;19363:366::-;19505:3;19526:67;19590:2;19585:3;19526:67;:::i;:::-;19519:74;;19602:93;19691:3;19602:93;:::i;:::-;19720:2;19715:3;19711:12;19704:19;;19363:366;;;:::o;19735:419::-;19901:4;19939:2;19928:9;19924:18;19916:26;;19988:9;19982:4;19978:20;19974:1;19963:9;19959:17;19952:47;20016:131;20142:4;20016:131;:::i;:::-;20008:139;;19735:419;;;:::o;20160:240::-;20300:34;20296:1;20288:6;20284:14;20277:58;20369:23;20364:2;20356:6;20352:15;20345:48;20160:240;:::o;20406:366::-;20548:3;20569:67;20633:2;20628:3;20569:67;:::i;:::-;20562:74;;20645:93;20734:3;20645:93;:::i;:::-;20763:2;20758:3;20754:12;20747:19;;20406:366;;;:::o;20778:419::-;20944:4;20982:2;20971:9;20967:18;20959:26;;21031:9;21025:4;21021:20;21017:1;21006:9;21002:17;20995:47;21059:131;21185:4;21059:131;:::i;:::-;21051:139;;20778:419;;;:::o;21203:239::-;21343:34;21339:1;21331:6;21327:14;21320:58;21412:22;21407:2;21399:6;21395:15;21388:47;21203:239;:::o;21448:366::-;21590:3;21611:67;21675:2;21670:3;21611:67;:::i;:::-;21604:74;;21687:93;21776:3;21687:93;:::i;:::-;21805:2;21800:3;21796:12;21789:19;;21448:366;;;:::o;21820:419::-;21986:4;22024:2;22013:9;22009:18;22001:26;;22073:9;22067:4;22063:20;22059:1;22048:9;22044:17;22037:47;22101:131;22227:4;22101:131;:::i;:::-;22093:139;;21820:419;;;:::o;22245:225::-;22385:34;22381:1;22373:6;22369:14;22362:58;22454:8;22449:2;22441:6;22437:15;22430:33;22245:225;:::o;22476:366::-;22618:3;22639:67;22703:2;22698:3;22639:67;:::i;:::-;22632:74;;22715:93;22804:3;22715:93;:::i;:::-;22833:2;22828:3;22824:12;22817:19;;22476:366;;;:::o;22848:419::-;23014:4;23052:2;23041:9;23037:18;23029:26;;23101:9;23095:4;23091:20;23087:1;23076:9;23072:17;23065:47;23129:131;23255:4;23129:131;:::i;:::-;23121:139;;22848:419;;;:::o;23273:223::-;23413:34;23409:1;23401:6;23397:14;23390:58;23482:6;23477:2;23469:6;23465:15;23458:31;23273:223;:::o;23502:366::-;23644:3;23665:67;23729:2;23724:3;23665:67;:::i;:::-;23658:74;;23741:93;23830:3;23741:93;:::i;:::-;23859:2;23854:3;23850:12;23843:19;;23502:366;;;:::o;23874:419::-;24040:4;24078:2;24067:9;24063:18;24055:26;;24127:9;24121:4;24117:20;24113:1;24102:9;24098:17;24091:47;24155:131;24281:4;24155:131;:::i;:::-;24147:139;;23874:419;;;:::o;24299:221::-;24439:34;24435:1;24427:6;24423:14;24416:58;24508:4;24503:2;24495:6;24491:15;24484:29;24299:221;:::o;24526:366::-;24668:3;24689:67;24753:2;24748:3;24689:67;:::i;:::-;24682:74;;24765:93;24854:3;24765:93;:::i;:::-;24883:2;24878:3;24874:12;24867:19;;24526:366;;;:::o;24898:419::-;25064:4;25102:2;25091:9;25087:18;25079:26;;25151:9;25145:4;25141:20;25137:1;25126:9;25122:17;25115:47;25179:131;25305:4;25179:131;:::i;:::-;25171:139;;24898:419;;;:::o;25323:224::-;25463:34;25459:1;25451:6;25447:14;25440:58;25532:7;25527:2;25519:6;25515:15;25508:32;25323:224;:::o;25553:366::-;25695:3;25716:67;25780:2;25775:3;25716:67;:::i;:::-;25709:74;;25792:93;25881:3;25792:93;:::i;:::-;25910:2;25905:3;25901:12;25894:19;;25553:366;;;:::o;25925:419::-;26091:4;26129:2;26118:9;26114:18;26106:26;;26178:9;26172:4;26168:20;26164:1;26153:9;26149:17;26142:47;26206:131;26332:4;26206:131;:::i;:::-;26198:139;;25925:419;;;:::o;26350:222::-;26490:34;26486:1;26478:6;26474:14;26467:58;26559:5;26554:2;26546:6;26542:15;26535:30;26350:222;:::o;26578:366::-;26720:3;26741:67;26805:2;26800:3;26741:67;:::i;:::-;26734:74;;26817:93;26906:3;26817:93;:::i;:::-;26935:2;26930:3;26926:12;26919:19;;26578:366;;;:::o;26950:419::-;27116:4;27154:2;27143:9;27139:18;27131:26;;27203:9;27197:4;27193:20;27189:1;27178:9;27174:17;27167:47;27231:131;27357:4;27231:131;:::i;:::-;27223:139;;26950:419;;;:::o;27375:164::-;27515:16;27511:1;27503:6;27499:14;27492:40;27375:164;:::o;27545:366::-;27687:3;27708:67;27772:2;27767:3;27708:67;:::i;:::-;27701:74;;27784:93;27873:3;27784:93;:::i;:::-;27902:2;27897:3;27893:12;27886:19;;27545:366;;;:::o;27917:419::-;28083:4;28121:2;28110:9;28106:18;28098:26;;28170:9;28164:4;28160:20;28156:1;28145:9;28141:17;28134:47;28198:131;28324:4;28198:131;:::i;:::-;28190:139;;27917:419;;;:::o;28342:172::-;28482:24;28478:1;28470:6;28466:14;28459:48;28342:172;:::o;28520:366::-;28662:3;28683:67;28747:2;28742:3;28683:67;:::i;:::-;28676:74;;28759:93;28848:3;28759:93;:::i;:::-;28877:2;28872:3;28868:12;28861:19;;28520:366;;;:::o;28892:419::-;29058:4;29096:2;29085:9;29081:18;29073:26;;29145:9;29139:4;29135:20;29131:1;29120:9;29116:17;29109:47;29173:131;29299:4;29173:131;:::i;:::-;29165:139;;28892:419;;;:::o;29317:297::-;29457:34;29453:1;29445:6;29441:14;29434:58;29526:34;29521:2;29513:6;29509:15;29502:59;29595:11;29590:2;29582:6;29578:15;29571:36;29317:297;:::o;29620:366::-;29762:3;29783:67;29847:2;29842:3;29783:67;:::i;:::-;29776:74;;29859:93;29948:3;29859:93;:::i;:::-;29977:2;29972:3;29968:12;29961:19;;29620:366;;;:::o;29992:419::-;30158:4;30196:2;30185:9;30181:18;30173:26;;30245:9;30239:4;30235:20;30231:1;30220:9;30216:17;30209:47;30273:131;30399:4;30273:131;:::i;:::-;30265:139;;29992:419;;;:::o;30417:240::-;30557:34;30553:1;30545:6;30541:14;30534:58;30626:23;30621:2;30613:6;30609:15;30602:48;30417:240;:::o;30663:366::-;30805:3;30826:67;30890:2;30885:3;30826:67;:::i;:::-;30819:74;;30902:93;30991:3;30902:93;:::i;:::-;31020:2;31015:3;31011:12;31004:19;;30663:366;;;:::o;31035:419::-;31201:4;31239:2;31228:9;31224:18;31216:26;;31288:9;31282:4;31278:20;31274:1;31263:9;31259:17;31252:47;31316:131;31442:4;31316:131;:::i;:::-;31308:139;;31035:419;;;:::o;31460:169::-;31600:21;31596:1;31588:6;31584:14;31577:45;31460:169;:::o;31635:366::-;31777:3;31798:67;31862:2;31857:3;31798:67;:::i;:::-;31791:74;;31874:93;31963:3;31874:93;:::i;:::-;31992:2;31987:3;31983:12;31976:19;;31635:366;;;:::o;32007:419::-;32173:4;32211:2;32200:9;32196:18;32188:26;;32260:9;32254:4;32250:20;32246:1;32235:9;32231:17;32224:47;32288:131;32414:4;32288:131;:::i;:::-;32280:139;;32007:419;;;:::o;32432:191::-;32472:4;32492:20;32510:1;32492:20;:::i;:::-;32487:25;;32526:20;32544:1;32526:20;:::i;:::-;32521:25;;32565:1;32562;32559:8;32556:34;;;32570:18;;:::i;:::-;32556:34;32615:1;32612;32608:9;32600:17;;32432:191;;;;:::o;32629:225::-;32769:34;32765:1;32757:6;32753:14;32746:58;32838:8;32833:2;32825:6;32821:15;32814:33;32629:225;:::o;32860:366::-;33002:3;33023:67;33087:2;33082:3;33023:67;:::i;:::-;33016:74;;33099:93;33188:3;33099:93;:::i;:::-;33217:2;33212:3;33208:12;33201:19;;32860:366;;;:::o;33232:419::-;33398:4;33436:2;33425:9;33421:18;33413:26;;33485:9;33479:4;33475:20;33471:1;33460:9;33456:17;33449:47;33513:131;33639:4;33513:131;:::i;:::-;33505:139;;33232:419;;;:::o;33657:180::-;33705:77;33702:1;33695:88;33802:4;33799:1;33792:15;33826:4;33823:1;33816:15;33843:85;33888:7;33917:5;33906:16;;33843:85;;;:::o;33934:158::-;33992:9;34025:61;34043:42;34052:32;34078:5;34052:32;:::i;:::-;34043:42;:::i;:::-;34025:61;:::i;:::-;34012:74;;33934:158;;;:::o;34098:147::-;34193:45;34232:5;34193:45;:::i;:::-;34188:3;34181:58;34098:147;;:::o;34251:114::-;34318:6;34352:5;34346:12;34336:22;;34251:114;;;:::o;34371:184::-;34470:11;34504:6;34499:3;34492:19;34544:4;34539:3;34535:14;34520:29;;34371:184;;;;:::o;34561:132::-;34628:4;34651:3;34643:11;;34681:4;34676:3;34672:14;34664:22;;34561:132;;;:::o;34699:108::-;34776:24;34794:5;34776:24;:::i;:::-;34771:3;34764:37;34699:108;;:::o;34813:179::-;34882:10;34903:46;34945:3;34937:6;34903:46;:::i;:::-;34981:4;34976:3;34972:14;34958:28;;34813:179;;;;:::o;34998:113::-;35068:4;35100;35095:3;35091:14;35083:22;;34998:113;;;:::o;35147:732::-;35266:3;35295:54;35343:5;35295:54;:::i;:::-;35365:86;35444:6;35439:3;35365:86;:::i;:::-;35358:93;;35475:56;35525:5;35475:56;:::i;:::-;35554:7;35585:1;35570:284;35595:6;35592:1;35589:13;35570:284;;;35671:6;35665:13;35698:63;35757:3;35742:13;35698:63;:::i;:::-;35691:70;;35784:60;35837:6;35784:60;:::i;:::-;35774:70;;35630:224;35617:1;35614;35610:9;35605:14;;35570:284;;;35574:14;35870:3;35863:10;;35271:608;;;35147:732;;;;:::o;35885:831::-;36148:4;36186:3;36175:9;36171:19;36163:27;;36200:71;36268:1;36257:9;36253:17;36244:6;36200:71;:::i;:::-;36281:80;36357:2;36346:9;36342:18;36333:6;36281:80;:::i;:::-;36408:9;36402:4;36398:20;36393:2;36382:9;36378:18;36371:48;36436:108;36539:4;36530:6;36436:108;:::i;:::-;36428:116;;36554:72;36622:2;36611:9;36607:18;36598:6;36554:72;:::i;:::-;36636:73;36704:3;36693:9;36689:19;36680:6;36636:73;:::i;:::-;35885:831;;;;;;;;:::o

Swarm Source

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