ETH Price: $2,868.20 (-10.44%)
Gas: 14 Gwei

Token

ONE MILLION HOLDERS (OMH)
 

Overview

Max Total Supply

100,000,000 OMH

Holders

277

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000038541 OMH

Value
$0.00
0xb1fc41cbad16cafdfc2ed196c7fe515dfb6a1577
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:
OMHERC20

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-23
*/

//SPDX-License-Identifier: MIT
/* Website: http://OneMillionHolders.com
Twitter: https://twitter.com/1millionholder
Telegram: http://t.me/onemillionholders
*/

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Returns the subtraction 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;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/OMH.sol


pragma solidity ^0.8.17;







contract OMHERC20 is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "ONE MILLION HOLDERS";
    string private constant _symbol = "OMH";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100_000_000 * 10 ** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 1;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 6;

    //Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping(address => bool) public bots;
    address private _developmentAddress;
    address private _marketingAddress;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool public tradingOpen = false;
    bool private inSwap = false;
    bool public swapEnabled = false;

    uint256 public _maxTxAmountBuy = _tTotal.div(50); //2%
    uint256 public _maxTxAmountSell = _tTotal.div(100); //1%
    uint256 public _maxWalletSize = _tTotal.div(50); //2%
    uint256 public _swapTokensAtAmount = _tTotal.div(200);
    uint256 public _swapTokenMin = _tTotal.div(1000);

    event MaxTxAmountUpdated(uint256 _maxTxAmount);

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    address uni = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    uint256 public launchAt;

    constructor() {
        _rOwned[address(this)] = _rTotal;
        _marketingAddress = msg.sender;
        _developmentAddress = msg.sender;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uni);
        //
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function tokenFromReflection(
        uint256 rAmount
    ) private view returns (uint256) {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner() && from != address(this)) {
            //Trade start check
            if (!tradingOpen) {
                require(
                    from == owner() || from == address(this),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            require(
                !bots[from] && !bots[to],
                "TOKEN: Your account is blacklisted!"
            );

            if (block.timestamp == launchAt && from == uniswapV2Pair)
            {
                bots[to] = true;

            }

            if (
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to] &&
                !_isExcludedFromFee[tx.origin]
            ) {
                //buy case
                if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                    require(
                        amount <= _maxTxAmountBuy,
                        "TOKEN: Max Transaction Limit"
                    );
                }
                //sell case
                if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                    require(
                        amount <= _maxTxAmountSell,
                        "TOKEN: Max Transaction Limit"
                    );
                }
            }

            if (
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to] &&
                !_isExcludedFromFee[tx.origin] &&
                to != uniswapV2Pair
            ) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                if (amount > _swapTokenMin) {
                    swapTokensForEth(_swapTokensAtAmount);
                }

                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            //Set Fee for Buys
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        if (tokenAmount == 0) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        (bool transferSuccess, ) = payable(_marketingAddress).call{
            value: amount
        }("");
        require(transferSuccess, "eth transfer failed");
    }

    function setTrading(bool _tradingOpen) public onlyOwner {
        if (launchAt == 0) { launchAt = block.timestamp; }
        tradingOpen = _tradingOpen;
    }

    function manualswap(uint256 amount) external {
        require(
            _msgSender() == _developmentAddress ||
                _msgSender() == _marketingAddress ||
                _msgSender() == owner()
        );

        swapTokensForEth(amount);
    }

    function changeDevAndMarketingAddress(
        address _newDev,
        address _newMarketing
    ) external onlyOwner {
        _developmentAddress = _newDev;
        _marketingAddress = _newMarketing;
    }

    function manualsend() external {
        require(
            _msgSender() == _developmentAddress ||
                _msgSender() == _marketingAddress ||
                _msgSender() == owner()
        );
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function blockBots(address[] memory bots_) external onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notbot) external onlyOwner {
        bots[notbot] = false;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        if (tTeam > 0) { _takeTeam(tTeam, sender); }
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam, address sender) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        emit Transfer(sender, address(this), tTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function stuckERC20(address tokenAdd, uint256 amount) external onlyOwner {
        require(
            IERC20(tokenAdd).balanceOf(address(this)) >= amount,
            "0 ERC20 balance"
        );
        IERC20(tokenAdd).transfer(address(_developmentAddress), amount);
    }

    receive() external payable {}

    function _getValues(
        uint256 tAmount
    )
        private
        view
        returns (uint256, uint256, uint256, uint256, uint256, uint256)
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    ) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    ) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) external onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(
        uint256 swapTokensAtAmount,
        uint256 swapTokensMin
    ) external onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
        _swapTokenMin = swapTokensMin;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) external onlyOwner {
        swapEnabled = _swapEnabled;
    }

    //Set maximum transaction
    function setMaxTxnAmount(
        uint256 maxTxAmountBuy,
        uint256 maxAmountSell
    ) external onlyOwner {
        _maxTxAmountBuy = maxTxAmountBuy;
        _maxTxAmountSell = maxAmountSell;
    }

    function setMaxWalletSize(uint256 maxWalletSize) external onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function addlquidity(uint256 tokenAmount) external payable onlyOwner {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    //TEST
    function changeUniswapV2pair(address _newPair) external onlyOwner {
        uniswapV2Pair = _newPair;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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"},{"inputs":[],"name":"_maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokenMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addlquidity","outputs":[],"stateMutability":"payable","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":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newDev","type":"address"},{"internalType":"address","name":"_newMarketing","type":"address"}],"name":"changeDevAndMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPair","type":"address"}],"name":"changeUniswapV2pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmountBuy","type":"uint256"},{"internalType":"uint256","name":"maxAmountSell","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"},{"internalType":"uint256","name":"swapTokensMin","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBot","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"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000a4a565b6305f5e10062000025919062000a9b565b60001962000034919062000b15565b60001962000043919062000b4d565b6004556000600655600160075560006008556006600955600854600a55600954600b55600a54600c55600b54600d556000601260146101000a81548160ff0219169083151502179055506000601260156101000a81548160ff0219169083151502179055506000601260166101000a81548160ff021916908315150217905550620000fe60326009600a620000d9919062000a4a565b6305f5e100620000ea919062000a9b565b620007a360201b620014861790919060201c565b6013556200013c60646009600a62000117919062000a4a565b6305f5e10062000128919062000a9b565b620007a360201b620014861790919060201c565b6014556200017a60326009600a62000155919062000a4a565b6305f5e10062000166919062000a9b565b620007a360201b620014861790919060201c565b601555620001b860c86009600a62000193919062000a4a565b6305f5e100620001a4919062000a9b565b620007a360201b620014861790919060201c565b601655620001f76103e86009600a620001d2919062000a4a565b6305f5e100620001e3919062000a9b565b620007a360201b620014861790919060201c565b601755737a250d5630b4cf539739df2c5dacb4c659f2488d601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200025c57600080fd5b506200027d62000271620007bb60201b60201c565b620007c360201b60201c565b600454600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f919062000bf2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000487573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ad919062000bf2565b6040518363ffffffff1660e01b8152600401620004cc92919062000c35565b6020604051808303816000875af1158015620004ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000512919062000bf2565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000620005686200088760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000715620007bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000774919062000a4a565b6305f5e10062000785919062000a9b565b60405162000794919062000c73565b60405180910390a35062000cc8565b60008183620007b3919062000c90565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200093e57808604811115620009165762000915620008b0565b5b6001851615620009265780820291505b80810290506200093685620008df565b9450620008f6565b94509492505050565b60008262000959576001905062000a2c565b8162000969576000905062000a2c565b81600181146200098257600281146200098d57620009c3565b600191505062000a2c565b60ff841115620009a257620009a1620008b0565b5b8360020a915084821115620009bc57620009bb620008b0565b5b5062000a2c565b5060208310610133831016604e8410600b8410161715620009fd5782820a905083811115620009f757620009f6620008b0565b5b62000a2c565b62000a0c8484846001620008ec565b9250905081840481111562000a265762000a25620008b0565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000a578262000a33565b915062000a648362000a3d565b925062000a937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000947565b905092915050565b600062000aa88262000a33565b915062000ab58362000a33565b925082820262000ac58162000a33565b9150828204841483151762000adf5762000ade620008b0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b228262000a33565b915062000b2f8362000a33565b92508262000b425762000b4162000ae6565b5b828206905092915050565b600062000b5a8262000a33565b915062000b678362000a33565b925082820390508181111562000b825762000b81620008b0565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bba8262000b8d565b9050919050565b62000bcc8162000bad565b811462000bd857600080fd5b50565b60008151905062000bec8162000bc1565b92915050565b60006020828403121562000c0b5762000c0a62000b88565b5b600062000c1b8482850162000bdb565b91505092915050565b62000c2f8162000bad565b82525050565b600060408201905062000c4c600083018562000c24565b62000c5b602083018462000c24565b9392505050565b62000c6d8162000a33565b82525050565b600060208201905062000c8a600083018462000c62565b92915050565b600062000c9d8262000a33565b915062000caa8362000a33565b92508262000cbd5762000cbc62000ae6565b5b828204905092915050565b6142978062000cd86000396000f3fe6080604052600436106102285760003560e01c8063715018a611610123578063a9059cbb116100ab578063dd7474a11161006f578063dd7474a1146107de578063ea1644d514610807578063f2fde38b14610830578063f59d047c14610859578063ffb54a99146108845761022f565b8063a9059cbb146106d5578063ae0f3f4514610712578063bfd792841461073b578063c492f04614610778578063dd62ed3e146107a15761022f565b80638f70ccf7116100f25780638f70ccf7146106025780638f9a55c01461062b57806395d89b4114610656578063a2a957bb14610681578063a5e70340146106aa5761022f565b8063715018a61461057b578063881dce60146105925780638aec09cd146105bb5780638da5cb5b146105d75761022f565b806346469ae7116101b15780636b999053116101755780636b999053146104aa5780636d8aa8f8146104d35780636ddd1713146104fc5780636fc3eaec1461052757806370a082311461053e5761022f565b806346469ae7146103d757806349bd5a5e146104025780634af7bf6a1461042d57806350aa3c95146104565780635f254426146104815761022f565b80631694505e116101f85780631694505e146102ee57806318160ddd1461031957806323b872dd146103445780632fd689e314610381578063313ce567146103ac5761022f565b8062b8cf2a1461023457806306fdde031461025d578063095ea7b31461028857806312e80801146102c55761022f565b3661022f57005b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061304c565b6108af565b005b34801561026957600080fd5b5061027261094c565b60405161027f9190613114565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa919061316c565b610989565b6040516102bc91906131c7565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906131e2565b6109a7565b005b3480156102fa57600080fd5b506103036109c1565b6040516103109190613281565b60405180910390f35b34801561032557600080fd5b5061032e6109e7565b60405161033b91906132ab565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906132c6565b610a0b565b60405161037891906131c7565b60405180910390f35b34801561038d57600080fd5b50610396610ae4565b6040516103a391906132ab565b60405180910390f35b3480156103b857600080fd5b506103c1610aea565b6040516103ce9190613335565b60405180910390f35b3480156103e357600080fd5b506103ec610af3565b6040516103f991906132ab565b60405180910390f35b34801561040e57600080fd5b50610417610af9565b604051610424919061335f565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f919061316c565b610b1f565b005b34801561046257600080fd5b5061046b610c88565b60405161047891906132ab565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a3919061337a565b610c8e565b005b3480156104b657600080fd5b506104d160048036038101906104cc91906133ba565b610d1c565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613413565b610d7f565b005b34801561050857600080fd5b50610511610da4565b60405161051e91906131c7565b60405180910390f35b34801561053357600080fd5b5061053c610db7565b005b34801561054a57600080fd5b50610565600480360381019061056091906133ba565b610ecc565b60405161057291906132ab565b60405180910390f35b34801561058757600080fd5b50610590610f1d565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613440565b610f31565b005b6105d560048036038101906105d09190613440565b611041565b005b3480156105e357600080fd5b506105ec61112d565b6040516105f9919061335f565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613413565b611156565b005b34801561063757600080fd5b5061064061118d565b60405161064d91906132ab565b60405180910390f35b34801561066257600080fd5b5061066b611193565b6040516106789190613114565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a3919061346d565b6111d0565b005b3480156106b657600080fd5b506106bf6111fa565b6040516106cc91906132ab565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f7919061316c565b611200565b60405161070991906131c7565b60405180910390f35b34801561071e57600080fd5b50610739600480360381019061073491906131e2565b61121e565b005b34801561074757600080fd5b50610762600480360381019061075d91906133ba565b611238565b60405161076f91906131c7565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061352f565b611258565b005b3480156107ad57600080fd5b506107c860048036038101906107c3919061337a565b611305565b6040516107d591906132ab565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906133ba565b61138c565b005b34801561081357600080fd5b5061082e60048036038101906108299190613440565b6113d8565b005b34801561083c57600080fd5b50610857600480360381019061085291906133ba565b6113ea565b005b34801561086557600080fd5b5061086e61146d565b60405161087b91906132ab565b60405180910390f35b34801561089057600080fd5b50610899611473565b6040516108a691906131c7565b60405180910390f35b6108b761149c565b60005b8151811015610948576001600e60008484815181106108dc576108db61358f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610940906135ed565b9150506108ba565b5050565b60606040518060400160405280601381526020017f4f4e45204d494c4c494f4e20484f4c4445525300000000000000000000000000815250905090565b600061099d61099661151a565b8484611522565b6001905092915050565b6109af61149c565b81601681905550806017819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a6109f79190613768565b6305f5e100610a0691906137b3565b905090565b6000610a188484846116eb565b610ad984610a2461151a565b610ad48560405180606001604052806028815260200161423a60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8a61151a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123659092919063ffffffff16565b611522565b600190509392505050565b60165481565b60006009905090565b60135481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b2761149c565b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b61919061335f565b602060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba2919061380a565b1015610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90613883565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610c409291906138a3565b6020604051808303816000875af1158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8391906138e1565b505050565b60175481565b610c9661149c565b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610d2461149c565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d8761149c565b80601260166101000a81548160ff02191690831515021790555050565b601260169054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610df861151a565b73ffffffffffffffffffffffffffffffffffffffff161480610e6e5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e5661151a565b73ffffffffffffffffffffffffffffffffffffffff16145b80610eb25750610e7c61112d565b73ffffffffffffffffffffffffffffffffffffffff16610e9a61151a565b73ffffffffffffffffffffffffffffffffffffffff16145b610ebb57600080fd5b6000479050610ec9816123ba565b50565b6000610f16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248c565b9050919050565b610f2561149c565b610f2f60006124fa565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f7261151a565b73ffffffffffffffffffffffffffffffffffffffff161480610fe85750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610fd061151a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061102c5750610ff661112d565b73ffffffffffffffffffffffffffffffffffffffff1661101461151a565b73ffffffffffffffffffffffffffffffffffffffff16145b61103557600080fd5b61103e816125be565b50565b61104961149c565b61107630601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611522565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430846000806110c261112d565b426040518863ffffffff1660e01b81526004016110e496959493929190613949565b60606040518083038185885af1158015611102573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061112791906139aa565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61115e61149c565b60006019540361117057426019819055505b80601260146101000a81548160ff02191690831515021790555050565b60155481565b60606040518060400160405280600381526020017f4f4d480000000000000000000000000000000000000000000000000000000000815250905090565b6111d861149c565b8360068190555082600881905550816007819055508060098190555050505050565b60195481565b600061121461120d61151a565b84846116eb565b6001905092915050565b61122661149c565b81601381905550806014819055505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b61126061149c565b60005b838390508110156112ff5781600360008686858181106112865761128561358f565b5b905060200201602081019061129b91906133ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112f7906135ed565b915050611263565b50505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61139461149c565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113e061149c565b8060158190555050565b6113f261149c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613a6f565b60405180910390fd5b61146a816124fa565b50565b60145481565b601260149054906101000a900460ff1681565b600081836114949190613abe565b905092915050565b6114a461151a565b73ffffffffffffffffffffffffffffffffffffffff166114c261112d565b73ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90613b3b565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613bcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613c5f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116de91906132ab565b60405180910390a3505050565b6000811161172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590613cf1565b60405180910390fd5b61173661112d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117a4575061177461112d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117dc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561206457601260149054906101000a900460ff166118a1576117fd61112d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061186157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613d83565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119455750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613e15565b60405180910390fd5b601954421480156119e25750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611a40576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ae45750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b3a5750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2c57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611bea5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3557601354811115611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613e81565b60405180910390fd5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611ce05750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d2b57601454811115611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613e81565b60405180910390fd5b5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611dd05750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e265750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e805750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611edd5760155481611e9284610ecc565b611e9c9190613ea1565b10611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390613f47565b60405180910390fd5b5b6000611ee830610ecc565b905060006016548210159050808015611f0e5750601260159054906101000a900460ff16155b8015611f685750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f805750601260169054906101000a900460ff165b8015611fd65750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561202c5750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561206157601754831115612047576120466016546125be565b5b6000479050600081111561205f5761205e476123ba565b5b505b50505b600060019050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061210b5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121be5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121bd5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156121cc5760009050612353565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156122775750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561228f57600654600a81905550600754600b819055505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561233a5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561235257600854600a81905550600954600b819055505b5b61235f84848484612841565b50505050565b60008383111582906123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a49190613114565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161240290613f98565b60006040518083038185875af1925050503d806000811461243f576040519150601f19603f3d011682016040523d82523d6000602084013e612444565b606091505b5050905080612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613ff9565b60405180910390fd5b5050565b60006004548211156124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca9061408b565b60405180910390fd5b60006124dd61286e565b90506124f2818461148690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260156101000a81548160ff0219169083151502179055506000810315612823576000600267ffffffffffffffff8111156125ff576125fe612eab565b5b60405190808252806020026020018201604052801561262d5781602001602082028036833780820191505090505b50905030816000815181106126455761264461358f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271091906140c0565b816001815181106127245761272361358f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061278b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611522565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127ef9594939291906141ab565b600060405180830381600087803b15801561280957600080fd5b505af115801561281d573d6000803e3d6000fd5b50505050505b6000601260156101000a81548160ff02191690831515021790555050565b8061284f5761284e612899565b5b61285a8484846128d6565b8061286857612867612aac565b5b50505050565b600080600061287b612ac0565b91509150612892818361148690919063ffffffff16565b9250505090565b6000600a541480156128ad57506000600b54145b6128d457600a54600c81905550600b54600d819055506000600a819055506000600b819055505b565b6000806000806000806128e887612b5b565b95509550955095509550955061294686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129db85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115612a3257612a31818a612bef565b5b612a3c8483612d12565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a9991906132ab565b60405180910390a3505050505050505050565b600c54600a81905550600d54600b81905550565b6000806000600454905060006009600a612ada9190613768565b6305f5e100612ae991906137b3565b9050612b1c6009600a612afc9190613768565b6305f5e100612b0b91906137b3565b60045461148690919063ffffffff16565b821015612b4e576004546009600a612b349190613768565b6305f5e100612b4391906137b3565b935093505050612b57565b81819350935050505b9091565b6000806000806000806000806000612b788a600a54600b54612d4c565b9250925092506000612b8861286e565b90506000806000612b9b8e878787612de2565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008183612bd19190614205565b905092915050565b60008183612be79190613ea1565b905092915050565b6000612bf961286e565b90506000612c108285612e6b90919063ffffffff16565b9050612c6481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d0491906132ab565b60405180910390a350505050565b612d2782600454612bc390919063ffffffff16565b600481905550612d4281600554612bd990919063ffffffff16565b6005819055505050565b600080600080612d786064612d6a888a612e6b90919063ffffffff16565b61148690919063ffffffff16565b90506000612da26064612d94888b612e6b90919063ffffffff16565b61148690919063ffffffff16565b90506000612dcb82612dbd858c612bc390919063ffffffff16565b612bc390919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612dfb8589612e6b90919063ffffffff16565b90506000612e128689612e6b90919063ffffffff16565b90506000612e298789612e6b90919063ffffffff16565b90506000612e5282612e448587612bc390919063ffffffff16565b612bc390919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612e7991906137b3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ee382612e9a565b810181811067ffffffffffffffff82111715612f0257612f01612eab565b5b80604052505050565b6000612f15612e81565b9050612f218282612eda565b919050565b600067ffffffffffffffff821115612f4157612f40612eab565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f8282612f57565b9050919050565b612f9281612f77565b8114612f9d57600080fd5b50565b600081359050612faf81612f89565b92915050565b6000612fc8612fc384612f26565b612f0b565b90508083825260208201905060208402830185811115612feb57612fea612f52565b5b835b8181101561301457806130008882612fa0565b845260208401935050602081019050612fed565b5050509392505050565b600082601f83011261303357613032612e95565b5b8135613043848260208601612fb5565b91505092915050565b60006020828403121561306257613061612e8b565b5b600082013567ffffffffffffffff8111156130805761307f612e90565b5b61308c8482850161301e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130cf5780820151818401526020810190506130b4565b60008484015250505050565b60006130e682613095565b6130f081856130a0565b93506131008185602086016130b1565b61310981612e9a565b840191505092915050565b6000602082019050818103600083015261312e81846130db565b905092915050565b6000819050919050565b61314981613136565b811461315457600080fd5b50565b60008135905061316681613140565b92915050565b6000806040838503121561318357613182612e8b565b5b600061319185828601612fa0565b92505060206131a285828601613157565b9150509250929050565b60008115159050919050565b6131c1816131ac565b82525050565b60006020820190506131dc60008301846131b8565b92915050565b600080604083850312156131f9576131f8612e8b565b5b600061320785828601613157565b925050602061321885828601613157565b9150509250929050565b6000819050919050565b600061324761324261323d84612f57565b613222565b612f57565b9050919050565b60006132598261322c565b9050919050565b600061326b8261324e565b9050919050565b61327b81613260565b82525050565b60006020820190506132966000830184613272565b92915050565b6132a581613136565b82525050565b60006020820190506132c0600083018461329c565b92915050565b6000806000606084860312156132df576132de612e8b565b5b60006132ed86828701612fa0565b93505060206132fe86828701612fa0565b925050604061330f86828701613157565b9150509250925092565b600060ff82169050919050565b61332f81613319565b82525050565b600060208201905061334a6000830184613326565b92915050565b61335981612f77565b82525050565b60006020820190506133746000830184613350565b92915050565b6000806040838503121561339157613390612e8b565b5b600061339f85828601612fa0565b92505060206133b085828601612fa0565b9150509250929050565b6000602082840312156133d0576133cf612e8b565b5b60006133de84828501612fa0565b91505092915050565b6133f0816131ac565b81146133fb57600080fd5b50565b60008135905061340d816133e7565b92915050565b60006020828403121561342957613428612e8b565b5b6000613437848285016133fe565b91505092915050565b60006020828403121561345657613455612e8b565b5b600061346484828501613157565b91505092915050565b6000806000806080858703121561348757613486612e8b565b5b600061349587828801613157565b94505060206134a687828801613157565b93505060406134b787828801613157565b92505060606134c887828801613157565b91505092959194509250565b600080fd5b60008083601f8401126134ef576134ee612e95565b5b8235905067ffffffffffffffff81111561350c5761350b6134d4565b5b60208301915083602082028301111561352857613527612f52565b5b9250929050565b60008060006040848603121561354857613547612e8b565b5b600084013567ffffffffffffffff81111561356657613565612e90565b5b613572868287016134d9565b93509350506020613585868287016133fe565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135f882613136565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361362a576136296135be565b5b600182019050919050565b60008160011c9050919050565b6000808291508390505b600185111561368c57808604811115613668576136676135be565b5b60018516156136775780820291505b808102905061368585613635565b945061364c565b94509492505050565b6000826136a55760019050613761565b816136b35760009050613761565b81600181146136c957600281146136d357613702565b6001915050613761565b60ff8411156136e5576136e46135be565b5b8360020a9150848211156136fc576136fb6135be565b5b50613761565b5060208310610133831016604e8410600b84101617156137375782820a905083811115613732576137316135be565b5b613761565b6137448484846001613642565b9250905081840481111561375b5761375a6135be565b5b81810290505b9392505050565b600061377382613136565b915061377e83613319565b92506137ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613695565b905092915050565b60006137be82613136565b91506137c983613136565b92508282026137d781613136565b915082820484148315176137ee576137ed6135be565b5b5092915050565b60008151905061380481613140565b92915050565b6000602082840312156138205761381f612e8b565b5b600061382e848285016137f5565b91505092915050565b7f302045524332302062616c616e63650000000000000000000000000000000000600082015250565b600061386d600f836130a0565b915061387882613837565b602082019050919050565b6000602082019050818103600083015261389c81613860565b9050919050565b60006040820190506138b86000830185613350565b6138c5602083018461329c565b9392505050565b6000815190506138db816133e7565b92915050565b6000602082840312156138f7576138f6612e8b565b5b6000613905848285016138cc565b91505092915050565b6000819050919050565b600061393361392e6139298461390e565b613222565b613136565b9050919050565b61394381613918565b82525050565b600060c08201905061395e6000830189613350565b61396b602083018861329c565b613978604083018761393a565b613985606083018661393a565b6139926080830185613350565b61399f60a083018461329c565b979650505050505050565b6000806000606084860312156139c3576139c2612e8b565b5b60006139d1868287016137f5565b93505060206139e2868287016137f5565b92505060406139f3868287016137f5565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a596026836130a0565b9150613a64826139fd565b604082019050919050565b60006020820190508181036000830152613a8881613a4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ac982613136565b9150613ad483613136565b925082613ae457613ae3613a8f565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b256020836130a0565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bb76024836130a0565b9150613bc282613b5b565b604082019050919050565b60006020820190508181036000830152613be681613baa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c496022836130a0565b9150613c5482613bed565b604082019050919050565b60006020820190508181036000830152613c7881613c3c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613cdb6029836130a0565b9150613ce682613c7f565b604082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000613d6d603f836130a0565b9150613d7882613d11565b604082019050919050565b60006020820190508181036000830152613d9c81613d60565b9050919050565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b6000613dff6023836130a0565b9150613e0a82613da3565b604082019050919050565b60006020820190508181036000830152613e2e81613df2565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b6000613e6b601c836130a0565b9150613e7682613e35565b602082019050919050565b60006020820190508181036000830152613e9a81613e5e565b9050919050565b6000613eac82613136565b9150613eb783613136565b9250828201905080821115613ecf57613ece6135be565b5b92915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613f316023836130a0565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b600081905092915050565b50565b6000613f82600083613f67565b9150613f8d82613f72565b600082019050919050565b6000613fa382613f75565b9150819050919050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613fe36013836130a0565b9150613fee82613fad565b602082019050919050565b6000602082019050818103600083015261401281613fd6565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614075602a836130a0565b915061408082614019565b604082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b6000815190506140ba81612f89565b92915050565b6000602082840312156140d6576140d5612e8b565b5b60006140e4848285016140ab565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61412281612f77565b82525050565b60006141348383614119565b60208301905092915050565b6000602082019050919050565b6000614158826140ed565b61416281856140f8565b935061416d83614109565b8060005b8381101561419e5781516141858882614128565b975061419083614140565b925050600181019050614171565b5085935050505092915050565b600060a0820190506141c0600083018861329c565b6141cd602083018761393a565b81810360408301526141df818661414d565b90506141ee6060830185613350565b6141fb608083018461329c565b9695505050505050565b600061421082613136565b915061421b83613136565b9250828203905081811115614233576142326135be565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209fe8a5f34a079105852c7faf9fc22f2c5693bb72ea28e2fb06c0f4d63f1fbdf564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102285760003560e01c8063715018a611610123578063a9059cbb116100ab578063dd7474a11161006f578063dd7474a1146107de578063ea1644d514610807578063f2fde38b14610830578063f59d047c14610859578063ffb54a99146108845761022f565b8063a9059cbb146106d5578063ae0f3f4514610712578063bfd792841461073b578063c492f04614610778578063dd62ed3e146107a15761022f565b80638f70ccf7116100f25780638f70ccf7146106025780638f9a55c01461062b57806395d89b4114610656578063a2a957bb14610681578063a5e70340146106aa5761022f565b8063715018a61461057b578063881dce60146105925780638aec09cd146105bb5780638da5cb5b146105d75761022f565b806346469ae7116101b15780636b999053116101755780636b999053146104aa5780636d8aa8f8146104d35780636ddd1713146104fc5780636fc3eaec1461052757806370a082311461053e5761022f565b806346469ae7146103d757806349bd5a5e146104025780634af7bf6a1461042d57806350aa3c95146104565780635f254426146104815761022f565b80631694505e116101f85780631694505e146102ee57806318160ddd1461031957806323b872dd146103445780632fd689e314610381578063313ce567146103ac5761022f565b8062b8cf2a1461023457806306fdde031461025d578063095ea7b31461028857806312e80801146102c55761022f565b3661022f57005b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061304c565b6108af565b005b34801561026957600080fd5b5061027261094c565b60405161027f9190613114565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa919061316c565b610989565b6040516102bc91906131c7565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906131e2565b6109a7565b005b3480156102fa57600080fd5b506103036109c1565b6040516103109190613281565b60405180910390f35b34801561032557600080fd5b5061032e6109e7565b60405161033b91906132ab565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906132c6565b610a0b565b60405161037891906131c7565b60405180910390f35b34801561038d57600080fd5b50610396610ae4565b6040516103a391906132ab565b60405180910390f35b3480156103b857600080fd5b506103c1610aea565b6040516103ce9190613335565b60405180910390f35b3480156103e357600080fd5b506103ec610af3565b6040516103f991906132ab565b60405180910390f35b34801561040e57600080fd5b50610417610af9565b604051610424919061335f565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f919061316c565b610b1f565b005b34801561046257600080fd5b5061046b610c88565b60405161047891906132ab565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a3919061337a565b610c8e565b005b3480156104b657600080fd5b506104d160048036038101906104cc91906133ba565b610d1c565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613413565b610d7f565b005b34801561050857600080fd5b50610511610da4565b60405161051e91906131c7565b60405180910390f35b34801561053357600080fd5b5061053c610db7565b005b34801561054a57600080fd5b50610565600480360381019061056091906133ba565b610ecc565b60405161057291906132ab565b60405180910390f35b34801561058757600080fd5b50610590610f1d565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613440565b610f31565b005b6105d560048036038101906105d09190613440565b611041565b005b3480156105e357600080fd5b506105ec61112d565b6040516105f9919061335f565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613413565b611156565b005b34801561063757600080fd5b5061064061118d565b60405161064d91906132ab565b60405180910390f35b34801561066257600080fd5b5061066b611193565b6040516106789190613114565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a3919061346d565b6111d0565b005b3480156106b657600080fd5b506106bf6111fa565b6040516106cc91906132ab565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f7919061316c565b611200565b60405161070991906131c7565b60405180910390f35b34801561071e57600080fd5b50610739600480360381019061073491906131e2565b61121e565b005b34801561074757600080fd5b50610762600480360381019061075d91906133ba565b611238565b60405161076f91906131c7565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061352f565b611258565b005b3480156107ad57600080fd5b506107c860048036038101906107c3919061337a565b611305565b6040516107d591906132ab565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906133ba565b61138c565b005b34801561081357600080fd5b5061082e60048036038101906108299190613440565b6113d8565b005b34801561083c57600080fd5b50610857600480360381019061085291906133ba565b6113ea565b005b34801561086557600080fd5b5061086e61146d565b60405161087b91906132ab565b60405180910390f35b34801561089057600080fd5b50610899611473565b6040516108a691906131c7565b60405180910390f35b6108b761149c565b60005b8151811015610948576001600e60008484815181106108dc576108db61358f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610940906135ed565b9150506108ba565b5050565b60606040518060400160405280601381526020017f4f4e45204d494c4c494f4e20484f4c4445525300000000000000000000000000815250905090565b600061099d61099661151a565b8484611522565b6001905092915050565b6109af61149c565b81601681905550806017819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a6109f79190613768565b6305f5e100610a0691906137b3565b905090565b6000610a188484846116eb565b610ad984610a2461151a565b610ad48560405180606001604052806028815260200161423a60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8a61151a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123659092919063ffffffff16565b611522565b600190509392505050565b60165481565b60006009905090565b60135481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b2761149c565b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b61919061335f565b602060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba2919061380a565b1015610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90613883565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610c409291906138a3565b6020604051808303816000875af1158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8391906138e1565b505050565b60175481565b610c9661149c565b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610d2461149c565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d8761149c565b80601260166101000a81548160ff02191690831515021790555050565b601260169054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610df861151a565b73ffffffffffffffffffffffffffffffffffffffff161480610e6e5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e5661151a565b73ffffffffffffffffffffffffffffffffffffffff16145b80610eb25750610e7c61112d565b73ffffffffffffffffffffffffffffffffffffffff16610e9a61151a565b73ffffffffffffffffffffffffffffffffffffffff16145b610ebb57600080fd5b6000479050610ec9816123ba565b50565b6000610f16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248c565b9050919050565b610f2561149c565b610f2f60006124fa565b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f7261151a565b73ffffffffffffffffffffffffffffffffffffffff161480610fe85750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610fd061151a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061102c5750610ff661112d565b73ffffffffffffffffffffffffffffffffffffffff1661101461151a565b73ffffffffffffffffffffffffffffffffffffffff16145b61103557600080fd5b61103e816125be565b50565b61104961149c565b61107630601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611522565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430846000806110c261112d565b426040518863ffffffff1660e01b81526004016110e496959493929190613949565b60606040518083038185885af1158015611102573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061112791906139aa565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61115e61149c565b60006019540361117057426019819055505b80601260146101000a81548160ff02191690831515021790555050565b60155481565b60606040518060400160405280600381526020017f4f4d480000000000000000000000000000000000000000000000000000000000815250905090565b6111d861149c565b8360068190555082600881905550816007819055508060098190555050505050565b60195481565b600061121461120d61151a565b84846116eb565b6001905092915050565b61122661149c565b81601381905550806014819055505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b61126061149c565b60005b838390508110156112ff5781600360008686858181106112865761128561358f565b5b905060200201602081019061129b91906133ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112f7906135ed565b915050611263565b50505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61139461149c565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113e061149c565b8060158190555050565b6113f261149c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613a6f565b60405180910390fd5b61146a816124fa565b50565b60145481565b601260149054906101000a900460ff1681565b600081836114949190613abe565b905092915050565b6114a461151a565b73ffffffffffffffffffffffffffffffffffffffff166114c261112d565b73ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90613b3b565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613bcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613c5f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116de91906132ab565b60405180910390a3505050565b6000811161172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590613cf1565b60405180910390fd5b61173661112d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117a4575061177461112d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117dc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561206457601260149054906101000a900460ff166118a1576117fd61112d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061186157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613d83565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119455750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613e15565b60405180910390fd5b601954421480156119e25750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611a40576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ae45750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b3a5750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2c57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611bea5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3557601354811115611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613e81565b60405180910390fd5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611ce05750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d2b57601454811115611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613e81565b60405180910390fd5b5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611dd05750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e265750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e805750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611edd5760155481611e9284610ecc565b611e9c9190613ea1565b10611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390613f47565b60405180910390fd5b5b6000611ee830610ecc565b905060006016548210159050808015611f0e5750601260159054906101000a900460ff16155b8015611f685750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f805750601260169054906101000a900460ff165b8015611fd65750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561202c5750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561206157601754831115612047576120466016546125be565b5b6000479050600081111561205f5761205e476123ba565b5b505b50505b600060019050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061210b5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121be5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121bd5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156121cc5760009050612353565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156122775750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561228f57600654600a81905550600754600b819055505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561233a5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561235257600854600a81905550600954600b819055505b5b61235f84848484612841565b50505050565b60008383111582906123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a49190613114565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161240290613f98565b60006040518083038185875af1925050503d806000811461243f576040519150601f19603f3d011682016040523d82523d6000602084013e612444565b606091505b5050905080612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613ff9565b60405180910390fd5b5050565b60006004548211156124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca9061408b565b60405180910390fd5b60006124dd61286e565b90506124f2818461148690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260156101000a81548160ff0219169083151502179055506000810315612823576000600267ffffffffffffffff8111156125ff576125fe612eab565b5b60405190808252806020026020018201604052801561262d5781602001602082028036833780820191505090505b50905030816000815181106126455761264461358f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271091906140c0565b816001815181106127245761272361358f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061278b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611522565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127ef9594939291906141ab565b600060405180830381600087803b15801561280957600080fd5b505af115801561281d573d6000803e3d6000fd5b50505050505b6000601260156101000a81548160ff02191690831515021790555050565b8061284f5761284e612899565b5b61285a8484846128d6565b8061286857612867612aac565b5b50505050565b600080600061287b612ac0565b91509150612892818361148690919063ffffffff16565b9250505090565b6000600a541480156128ad57506000600b54145b6128d457600a54600c81905550600b54600d819055506000600a819055506000600b819055505b565b6000806000806000806128e887612b5b565b95509550955095509550955061294686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129db85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115612a3257612a31818a612bef565b5b612a3c8483612d12565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a9991906132ab565b60405180910390a3505050505050505050565b600c54600a81905550600d54600b81905550565b6000806000600454905060006009600a612ada9190613768565b6305f5e100612ae991906137b3565b9050612b1c6009600a612afc9190613768565b6305f5e100612b0b91906137b3565b60045461148690919063ffffffff16565b821015612b4e576004546009600a612b349190613768565b6305f5e100612b4391906137b3565b935093505050612b57565b81819350935050505b9091565b6000806000806000806000806000612b788a600a54600b54612d4c565b9250925092506000612b8861286e565b90506000806000612b9b8e878787612de2565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008183612bd19190614205565b905092915050565b60008183612be79190613ea1565b905092915050565b6000612bf961286e565b90506000612c108285612e6b90919063ffffffff16565b9050612c6481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d0491906132ab565b60405180910390a350505050565b612d2782600454612bc390919063ffffffff16565b600481905550612d4281600554612bd990919063ffffffff16565b6005819055505050565b600080600080612d786064612d6a888a612e6b90919063ffffffff16565b61148690919063ffffffff16565b90506000612da26064612d94888b612e6b90919063ffffffff16565b61148690919063ffffffff16565b90506000612dcb82612dbd858c612bc390919063ffffffff16565b612bc390919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612dfb8589612e6b90919063ffffffff16565b90506000612e128689612e6b90919063ffffffff16565b90506000612e298789612e6b90919063ffffffff16565b90506000612e5282612e448587612bc390919063ffffffff16565b612bc390919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612e7991906137b3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ee382612e9a565b810181811067ffffffffffffffff82111715612f0257612f01612eab565b5b80604052505050565b6000612f15612e81565b9050612f218282612eda565b919050565b600067ffffffffffffffff821115612f4157612f40612eab565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f8282612f57565b9050919050565b612f9281612f77565b8114612f9d57600080fd5b50565b600081359050612faf81612f89565b92915050565b6000612fc8612fc384612f26565b612f0b565b90508083825260208201905060208402830185811115612feb57612fea612f52565b5b835b8181101561301457806130008882612fa0565b845260208401935050602081019050612fed565b5050509392505050565b600082601f83011261303357613032612e95565b5b8135613043848260208601612fb5565b91505092915050565b60006020828403121561306257613061612e8b565b5b600082013567ffffffffffffffff8111156130805761307f612e90565b5b61308c8482850161301e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130cf5780820151818401526020810190506130b4565b60008484015250505050565b60006130e682613095565b6130f081856130a0565b93506131008185602086016130b1565b61310981612e9a565b840191505092915050565b6000602082019050818103600083015261312e81846130db565b905092915050565b6000819050919050565b61314981613136565b811461315457600080fd5b50565b60008135905061316681613140565b92915050565b6000806040838503121561318357613182612e8b565b5b600061319185828601612fa0565b92505060206131a285828601613157565b9150509250929050565b60008115159050919050565b6131c1816131ac565b82525050565b60006020820190506131dc60008301846131b8565b92915050565b600080604083850312156131f9576131f8612e8b565b5b600061320785828601613157565b925050602061321885828601613157565b9150509250929050565b6000819050919050565b600061324761324261323d84612f57565b613222565b612f57565b9050919050565b60006132598261322c565b9050919050565b600061326b8261324e565b9050919050565b61327b81613260565b82525050565b60006020820190506132966000830184613272565b92915050565b6132a581613136565b82525050565b60006020820190506132c0600083018461329c565b92915050565b6000806000606084860312156132df576132de612e8b565b5b60006132ed86828701612fa0565b93505060206132fe86828701612fa0565b925050604061330f86828701613157565b9150509250925092565b600060ff82169050919050565b61332f81613319565b82525050565b600060208201905061334a6000830184613326565b92915050565b61335981612f77565b82525050565b60006020820190506133746000830184613350565b92915050565b6000806040838503121561339157613390612e8b565b5b600061339f85828601612fa0565b92505060206133b085828601612fa0565b9150509250929050565b6000602082840312156133d0576133cf612e8b565b5b60006133de84828501612fa0565b91505092915050565b6133f0816131ac565b81146133fb57600080fd5b50565b60008135905061340d816133e7565b92915050565b60006020828403121561342957613428612e8b565b5b6000613437848285016133fe565b91505092915050565b60006020828403121561345657613455612e8b565b5b600061346484828501613157565b91505092915050565b6000806000806080858703121561348757613486612e8b565b5b600061349587828801613157565b94505060206134a687828801613157565b93505060406134b787828801613157565b92505060606134c887828801613157565b91505092959194509250565b600080fd5b60008083601f8401126134ef576134ee612e95565b5b8235905067ffffffffffffffff81111561350c5761350b6134d4565b5b60208301915083602082028301111561352857613527612f52565b5b9250929050565b60008060006040848603121561354857613547612e8b565b5b600084013567ffffffffffffffff81111561356657613565612e90565b5b613572868287016134d9565b93509350506020613585868287016133fe565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135f882613136565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361362a576136296135be565b5b600182019050919050565b60008160011c9050919050565b6000808291508390505b600185111561368c57808604811115613668576136676135be565b5b60018516156136775780820291505b808102905061368585613635565b945061364c565b94509492505050565b6000826136a55760019050613761565b816136b35760009050613761565b81600181146136c957600281146136d357613702565b6001915050613761565b60ff8411156136e5576136e46135be565b5b8360020a9150848211156136fc576136fb6135be565b5b50613761565b5060208310610133831016604e8410600b84101617156137375782820a905083811115613732576137316135be565b5b613761565b6137448484846001613642565b9250905081840481111561375b5761375a6135be565b5b81810290505b9392505050565b600061377382613136565b915061377e83613319565b92506137ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613695565b905092915050565b60006137be82613136565b91506137c983613136565b92508282026137d781613136565b915082820484148315176137ee576137ed6135be565b5b5092915050565b60008151905061380481613140565b92915050565b6000602082840312156138205761381f612e8b565b5b600061382e848285016137f5565b91505092915050565b7f302045524332302062616c616e63650000000000000000000000000000000000600082015250565b600061386d600f836130a0565b915061387882613837565b602082019050919050565b6000602082019050818103600083015261389c81613860565b9050919050565b60006040820190506138b86000830185613350565b6138c5602083018461329c565b9392505050565b6000815190506138db816133e7565b92915050565b6000602082840312156138f7576138f6612e8b565b5b6000613905848285016138cc565b91505092915050565b6000819050919050565b600061393361392e6139298461390e565b613222565b613136565b9050919050565b61394381613918565b82525050565b600060c08201905061395e6000830189613350565b61396b602083018861329c565b613978604083018761393a565b613985606083018661393a565b6139926080830185613350565b61399f60a083018461329c565b979650505050505050565b6000806000606084860312156139c3576139c2612e8b565b5b60006139d1868287016137f5565b93505060206139e2868287016137f5565b92505060406139f3868287016137f5565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a596026836130a0565b9150613a64826139fd565b604082019050919050565b60006020820190508181036000830152613a8881613a4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ac982613136565b9150613ad483613136565b925082613ae457613ae3613a8f565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b256020836130a0565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bb76024836130a0565b9150613bc282613b5b565b604082019050919050565b60006020820190508181036000830152613be681613baa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c496022836130a0565b9150613c5482613bed565b604082019050919050565b60006020820190508181036000830152613c7881613c3c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613cdb6029836130a0565b9150613ce682613c7f565b604082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000613d6d603f836130a0565b9150613d7882613d11565b604082019050919050565b60006020820190508181036000830152613d9c81613d60565b9050919050565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b6000613dff6023836130a0565b9150613e0a82613da3565b604082019050919050565b60006020820190508181036000830152613e2e81613df2565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b6000613e6b601c836130a0565b9150613e7682613e35565b602082019050919050565b60006020820190508181036000830152613e9a81613e5e565b9050919050565b6000613eac82613136565b9150613eb783613136565b9250828201905080821115613ecf57613ece6135be565b5b92915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613f316023836130a0565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b600081905092915050565b50565b6000613f82600083613f67565b9150613f8d82613f72565b600082019050919050565b6000613fa382613f75565b9150819050919050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613fe36013836130a0565b9150613fee82613fad565b602082019050919050565b6000602082019050818103600083015261401281613fd6565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614075602a836130a0565b915061408082614019565b604082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b6000815190506140ba81612f89565b92915050565b6000602082840312156140d6576140d5612e8b565b5b60006140e4848285016140ab565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61412281612f77565b82525050565b60006141348383614119565b60208301905092915050565b6000602082019050919050565b6000614158826140ed565b61416281856140f8565b935061416d83614109565b8060005b8381101561419e5781516141858882614128565b975061419083614140565b925050600181019050614171565b5085935050505092915050565b600060a0820190506141c0600083018861329c565b6141cd602083018761393a565b81810360408301526141df818661414d565b90506141ee6060830185613350565b6141fb608083018461329c565b9695505050505050565b600061421082613136565b915061421b83613136565b9250828203905081811115614233576142326135be565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209fe8a5f34a079105852c7faf9fc22f2c5693bb72ea28e2fb06c0f4d63f1fbdf564736f6c63430008110033

Deployed Bytecode Sourcemap

22047:16213:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32429:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24631:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25533:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36733:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23188:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24908:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25727:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23566:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24817:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23385:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23236:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34089:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23626:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31879:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32608:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37014:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23345:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32101:320;;;;;;;;;;;;;:::i;:::-;;25011:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18279:103;;;;;;;;;;;;;:::i;:::-;;31604:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37769:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17631:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31435:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23507:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24722:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36345:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23903:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25157:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37156:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23061:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37499:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25357:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38148:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37374:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18537:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23445:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23273:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32429:171;17517:13;:11;:13::i;:::-;32507:9:::1;32502:91;32526:5;:12;32522:1;:16;32502:91;;;32577:4;32560;:14;32565:5;32571:1;32565:8;;;;;;;;:::i;:::-;;;;;;;;32560:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32540:3;;;;;:::i;:::-;;;;32502:91;;;;32429:171:::0;:::o;24631:83::-;24668:13;24701:5;;;;;;;;;;;;;;;;;24694:12;;24631:83;:::o;25533:186::-;25633:4;25650:39;25659:12;:10;:12::i;:::-;25673:7;25682:6;25650:8;:39::i;:::-;25707:4;25700:11;;25533:186;;;;:::o;36733:229::-;17517:13;:11;:13::i;:::-;36896:18:::1;36874:19;:40;;;;36941:13;36925;:29;;;;36733:229:::0;;:::o;23188:41::-;;;;;;;;;;;;;:::o;24908:95::-;24961:7;22276:1;22566:2;:15;;;;:::i;:::-;22552:11;:29;;;;:::i;:::-;24981:14;;24908:95;:::o;25727:446::-;25859:4;25876:36;25886:6;25894:9;25905:6;25876:9;:36::i;:::-;25923:220;25946:6;25967:12;:10;:12::i;:::-;25994:138;26050:6;25994:138;;;;;;;;;;;;;;;;;:11;:19;26006:6;25994:19;;;;;;;;;;;;;;;:33;26014:12;:10;:12::i;:::-;25994:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;25923:8;:220::i;:::-;26161:4;26154:11;;25727:446;;;;;:::o;23566:53::-;;;;:::o;24817:83::-;24858:5;22276:1;24876:16;;24817:83;:::o;23385:48::-;;;;:::o;23236:28::-;;;;;;;;;;;;;:::o;34089:282::-;17517:13;:11;:13::i;:::-;34240:6:::1;34202:8;34195:26;;;34230:4;34195:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;34173:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;34307:8;34300:25;;;34334:19;;;;;;;;;;;34356:6;34300:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34089:282:::0;;:::o;23626:48::-;;;;:::o;31879:214::-;17517:13;:11;:13::i;:::-;32034:7:::1;32012:19;;:29;;;;;;;;;;;;;;;;;;32072:13;32052:17;;:33;;;;;;;;;;;;;;;;;;31879:214:::0;;:::o;32608:94::-;17517:13;:11;:13::i;:::-;32689:5:::1;32674:4;:12;32679:6;32674:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;32608:94:::0;:::o;37014:103::-;17517:13;:11;:13::i;:::-;37097:12:::1;37083:11;;:26;;;;;;;;;;;;;;;;;;37014:103:::0;:::o;23345:31::-;;;;;;;;;;;;;:::o;32101:320::-;32181:19;;;;;;;;;;;32165:35;;:12;:10;:12::i;:::-;:35;;;:89;;;;32237:17;;;;;;;;;;;32221:33;;:12;:10;:12::i;:::-;:33;;;32165:89;:133;;;;32291:7;:5;:7::i;:::-;32275:23;;:12;:10;:12::i;:::-;:23;;;32165:133;32143:166;;;;;;32320:26;32349:21;32320:50;;32381:32;32394:18;32381:12;:32::i;:::-;32132:289;32101:320::o;25011:138::-;25077:7;25104:37;25124:7;:16;25132:7;25124:16;;;;;;;;;;;;;;;;25104:19;:37::i;:::-;25097:44;;25011:138;;;:::o;18279:103::-;17517:13;:11;:13::i;:::-;18344:30:::1;18371:1;18344:18;:30::i;:::-;18279:103::o:0;31604:267::-;31698:19;;;;;;;;;;;31682:35;;:12;:10;:12::i;:::-;:35;;;:89;;;;31754:17;;;;;;;;;;;31738:33;;:12;:10;:12::i;:::-;:33;;;31682:89;:133;;;;31808:7;:5;:7::i;:::-;31792:23;;:12;:10;:12::i;:::-;:23;;;31682:133;31660:166;;;;;;31839:24;31856:6;31839:16;:24::i;:::-;31604:267;:::o;37769:359::-;17517:13;:11;:13::i;:::-;37849:62:::1;37866:4;37881:15;;;;;;;;;;;37899:11;37849:8;:62::i;:::-;37922:15;;;;;;;;;;;:31;;;37961:9;37994:4;38014:11;38040:1;38056::::0;38072:7:::1;:5;:7::i;:::-;38094:15;37922:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37769:359:::0;:::o;17631:87::-;17677:7;17704:6;;;;;;;;;;;17697:13;;17631:87;:::o;31435:161::-;17517:13;:11;:13::i;:::-;31518:1:::1;31506:8;;:13:::0;31502:50:::1;;31534:15;31523:8;:26;;;;31502:50;31576:12;31562:11;;:26;;;;;;;;;;;;;;;;;;31435:161:::0;:::o;23507:47::-;;;;:::o;24722:87::-;24761:13;24794:7;;;;;;;;;;;;;;;;;24787:14;;24722:87;:::o;36345:336::-;17517:13;:11;:13::i;:::-;36541::::1;36524:14;:30;;;;36583:14;36565:15;:32;;;;36623:11;36608:12;:26;;;;36661:12;36645:13;:28;;;;36345:336:::0;;;;:::o;23903:23::-;;;;:::o;25157:192::-;25260:4;25277:42;25287:12;:10;:12::i;:::-;25301:9;25312:6;25277:9;:42::i;:::-;25337:4;25330:11;;25157:192;;;;:::o;37156:210::-;17517:13;:11;:13::i;:::-;37301:14:::1;37283:15;:32;;;;37345:13;37326:16;:32;;;;37156:210:::0;;:::o;23061:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;37499:262::-;17517:13;:11;:13::i;:::-;37644:9:::1;37639:115;37663:8;;:15;;37659:1;:19;37639:115;;;37734:8;37700:18;:31;37719:8;;37728:1;37719:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37700:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;37680:3;;;;;:::i;:::-;;;;37639:115;;;;37499:262:::0;;;:::o;25357:168::-;25463:7;25490:11;:18;25502:5;25490:18;;;;;;;;;;;;;;;:27;25509:7;25490:27;;;;;;;;;;;;;;;;25483:34;;25357:168;;;;:::o;38148:109::-;17517:13;:11;:13::i;:::-;38241:8:::1;38225:13;;:24;;;;;;;;;;;;;;;;;;38148:109:::0;:::o;37374:117::-;17517:13;:11;:13::i;:::-;37470::::1;37453:14;:30;;;;37374:117:::0;:::o;18537:201::-;17517:13;:11;:13::i;:::-;18646:1:::1;18626:22;;:8;:22;;::::0;18618:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18702:28;18721:8;18702:18;:28::i;:::-;18537:201:::0;:::o;23445:50::-;;;;:::o;23273:31::-;;;;;;;;;;;;;:::o;12475:98::-;12533:7;12564:1;12560;:5;;;;:::i;:::-;12553:12;;12475:98;;;;:::o;17796:132::-;17871:12;:10;:12::i;:::-;17860:23;;:7;:5;:7::i;:::-;:23;;;17852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17796:132::o;16182:98::-;16235:7;16262:10;16255:17;;16182:98;:::o;26848:335::-;26958:1;26941:19;;:5;:19;;;26933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27039:1;27020:21;;:7;:21;;;27012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27121:6;27091:11;:18;27103:5;27091:18;;;;;;;;;;;;;;;:27;27110:7;27091:27;;;;;;;;;;;;;;;:36;;;;27159:7;27143:32;;27152:5;27143:32;;;27168:6;27143:32;;;;;;:::i;:::-;;;;;;;;26848:335;;;:::o;27191:3448::-;27288:1;27279:6;:10;27271:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27360:7;:5;:7::i;:::-;27352:15;;:4;:15;;;;:32;;;;;27377:7;:5;:7::i;:::-;27371:13;;:2;:13;;;;27352:32;:57;;;;;27404:4;27388:21;;:4;:21;;;;27352:57;27348:2531;;;27464:11;;;;;;;;;;;27459:230;;27534:7;:5;:7::i;:::-;27526:15;;:4;:15;;;:40;;;;27561:4;27545:21;;:4;:21;;;27526:40;27496:177;;;;;;;;;;;;:::i;:::-;;;;;;;;;27459:230;27732:4;:10;27737:4;27732:10;;;;;;;;;;;;;;;;;;;;;;;;;27731:11;:24;;;;;27747:4;:8;27752:2;27747:8;;;;;;;;;;;;;;;;;;;;;;;;;27746:9;27731:24;27705:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;27866:8;;27847:15;:27;:52;;;;;27886:13;;;;;;;;;;;27878:21;;:4;:21;;;27847:52;27843:123;;;27944:4;27933;:8;27938:2;27933:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;27843:123;28005:18;:24;28024:4;28005:24;;;;;;;;;;;;;;;;;;;;;;;;;28004:25;:69;;;;;28051:18;:22;28070:2;28051:22;;;;;;;;;;;;;;;;;;;;;;;;;28050:23;28004:69;:120;;;;;28095:18;:29;28114:9;28095:29;;;;;;;;;;;;;;;;;;;;;;;;;28094:30;28004:120;27982:754;;;28199:13;;;;;;;;;;;28191:21;;:4;:21;;;:55;;;;;28230:15;;;;;;;;;;;28216:30;;:2;:30;;;;28191:55;28187:243;;;28315:15;;28305:6;:25;;28271:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;28187:243;28487:13;;;;;;;;;;;28481:19;;:2;:19;;;:55;;;;;28520:15;;;;;;;;;;;28504:32;;:4;:32;;;;28481:55;28477:244;;;28605:16;;28595:6;:26;;28561:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28477:244;27982:754;28775:18;:24;28794:4;28775:24;;;;;;;;;;;;;;;;;;;;;;;;;28774:25;:69;;;;;28821:18;:22;28840:2;28821:22;;;;;;;;;;;;;;;;;;;;;;;;;28820:23;28774:69;:120;;;;;28865:18;:29;28884:9;28865:29;;;;;;;;;;;;;;;;;;;;;;;;;28864:30;28774:120;:160;;;;;28921:13;;;;;;;;;;;28915:19;;:2;:19;;;;28774:160;28752:381;;;29024:14;;29015:6;28999:13;29009:2;28999:9;:13::i;:::-;:22;;;;:::i;:::-;:39;28969:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;28752:381;29149:28;29180:24;29198:4;29180:9;:24::i;:::-;29149:55;;29219:12;29258:19;;29234:20;:43;;29219:58;;29316:7;:35;;;;;29345:6;;;;;;;;;;;29344:7;29316:35;:77;;;;;29380:13;;;;;;;;;;;29372:21;;:4;:21;;;;29316:77;:109;;;;;29414:11;;;;;;;;;;;29316:109;:155;;;;;29447:18;:24;29466:4;29447:24;;;;;;;;;;;;;;;;;;;;;;;;;29446:25;29316:155;:199;;;;;29493:18;:22;29512:2;29493:22;;;;;;;;;;;;;;;;;;;;;;;;;29492:23;29316:199;29294:574;;;29563:13;;29554:6;:22;29550:108;;;29601:37;29618:19;;29601:16;:37::i;:::-;29550:108;29678:26;29707:21;29678:50;;29772:1;29751:18;:22;29747:106;;;29798:35;29811:21;29798:12;:35::i;:::-;29747:106;29531:337;29294:574;27411:2468;;27348:2531;29891:12;29906:4;29891:19;;29969:18;:24;29988:4;29969:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29997:18;:22;30016:2;29997:22;;;;;;;;;;;;;;;;;;;;;;;;;29969:50;29968:115;;;;30046:13;;;;;;;;;;;30038:21;;:4;:21;;;;:44;;;;;30069:13;;;;;;;;;;;30063:19;;:2;:19;;;;30038:44;29968:115;29950:628;;;30120:5;30110:15;;29950:628;;;30202:13;;;;;;;;;;;30194:21;;:4;:21;;;:55;;;;;30233:15;;;;;;;;;;;30219:30;;:2;:30;;;;30194:55;30190:163;;;30282:14;;30270:9;:26;;;;30325:12;;30315:7;:22;;;;30190:163;30412:13;;;;;;;;;;;30406:19;;:2;:19;;;:55;;;;;30445:15;;;;;;;;;;;30429:32;;:4;:32;;;;30406:55;30402:165;;;30494:15;;30482:9;:27;;;;30538:13;;30528:7;:23;;;;30402:165;29950:628;30590:41;30605:4;30611:2;30615:6;30623:7;30590:14;:41::i;:::-;27260:3379;27191:3448;;;:::o;13617:240::-;13737:7;13795:1;13790;:6;;13798:12;13782:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13837:1;13833;:5;13826:12;;13617:240;;;;;:::o;31203:224::-;31261:20;31295:17;;;;;;;;;;;31287:31;;31340:6;31287:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31260:101;;;31380:15;31372:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31249:178;31203:224;:::o;26181:307::-;26265:7;26318;;26307;:18;;26285:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26406:19;26428:10;:8;:10::i;:::-;26406:32;;26456:24;26468:11;26456:7;:11;;:24;;;;:::i;:::-;26449:31;;;26181:307;;;:::o;18898:191::-;18972:16;18991:6;;;;;;;;;;;18972:25;;19017:8;19008:6;;:17;;;;;;;;;;;;;;;;;;19072:8;19041:40;;19062:8;19041:40;;;;;;;;;;;;18961:128;18898:191;:::o;30647:548::-;23781:4;23772:6;;:13;;;;;;;;;;;;;;;;;;30744:1:::1;30729:11;:16:::0;30725:55;30762:7:::1;30725:55;30790:21;30828:1;30814:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30790:40;;30859:4;30841;30846:1;30841:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30885:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30875:4;30880:1;30875:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;30918:62;30935:4;30950:15;;;;;;;;;;;30968:11;30918:8;:62::i;:::-;30991:15;;;;;;;;;;;:66;;;31072:11;31098:1;31114:4;31141;31161:15;30991:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30714:481;23796:1;23817:5:::0;23808:6;;:14;;;;;;;;;;;;;;;;;;30647:548;:::o;32710:282::-;32866:7;32861:28;;32875:14;:12;:14::i;:::-;32861:28;32900:44;32918:6;32926:9;32937:6;32900:17;:44::i;:::-;32960:7;32955:29;;32969:15;:13;:15::i;:::-;32955:29;32710:282;;;;:::o;35908:164::-;35950:7;35971:15;35988;36007:19;:17;:19::i;:::-;35970:56;;;;36044:20;36056:7;36044;:11;;:20;;;;:::i;:::-;36037:27;;;;35908:164;:::o;26496:219::-;26556:1;26543:9;;:14;:30;;;;;26572:1;26561:7;;:12;26543:30;26575:7;26539:43;26614:9;;26594:17;:29;;;;26652:7;;26634:15;:25;;;;26684:1;26672:9;:13;;;;26706:1;26696:7;:11;;;;26496:219;:::o;33000:637::-;33147:15;33177:23;33215:12;33242:23;33280:12;33307:13;33334:19;33345:7;33334:10;:19::i;:::-;33132:221;;;;;;;;;;;;33382:28;33402:7;33382;:15;33390:6;33382:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33364:7;:15;33372:6;33364:15;;;;;;;;;;;;;;;:46;;;;33442:39;33465:15;33442:7;:18;33450:9;33442:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33421:7;:18;33429:9;33421:18;;;;;;;;;;;;;;;:60;;;;33504:1;33496:5;:9;33492:44;;;33509:24;33519:5;33526:6;33509:9;:24::i;:::-;33492:44;33546:23;33558:4;33564;33546:11;:23::i;:::-;33602:9;33585:44;;33594:6;33585:44;;;33613:15;33585:44;;;;;;:::i;:::-;;;;;;;;33121:516;;;;;;33000:637;;;:::o;26723:117::-;26779:17;;26767:9;:29;;;;26817:15;;26807:7;:25;;;;26723:117::o;36080:257::-;36131:7;36140;36160:15;36178:7;;36160:25;;36196:15;22276:1;22566:2;:15;;;;:::i;:::-;22552:11;:29;;;;:::i;:::-;36196:25;;36246:20;22276:1;22566:2;:15;;;;:::i;:::-;22552:11;:29;;;;:::i;:::-;36246:7;;:11;;:20;;;;:::i;:::-;36236:7;:30;36232:61;;;36276:7;;22276:1;22566:2;:15;;;;:::i;:::-;22552:11;:29;;;;:::i;:::-;36268:25;;;;;;;;36232:61;36312:7;36321;36304:25;;;;;;36080:257;;;:::o;34416:629::-;34518:7;34527;34536;34545;34554;34563;34589:23;34614:12;34628:13;34645:90;34671:7;34693:9;;34717:7;;34645:11;:90::i;:::-;34588:147;;;;;;34746:19;34768:10;:8;:10::i;:::-;34746:32;;34790:15;34807:23;34832:12;34848:109;34874:7;34896:4;34915:5;34935:11;34848;:109::i;:::-;34789:168;;;;;;34976:7;34985:15;35002:4;35008:15;35025:4;35031:5;34968:69;;;;;;;;;;;;;;;;;;;34416:629;;;;;;;:::o;11719:98::-;11777:7;11808:1;11804;:5;;;;:::i;:::-;11797:12;;11719:98;;;;:::o;11338:::-;11396:7;11427:1;11423;:5;;;;:::i;:::-;11416:12;;11338:98;;;;:::o;33645:281::-;33714:19;33736:10;:8;:10::i;:::-;33714:32;;33757:13;33773:22;33783:11;33773:5;:9;;:22;;;;:::i;:::-;33757:38;;33831:33;33858:5;33831:7;:22;33847:4;33831:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;33806:7;:22;33822:4;33806:22;;;;;;;;;;;;;;;:58;;;;33905:4;33880:38;;33889:6;33880:38;;;33912:5;33880:38;;;;;;:::i;:::-;;;;;;;;33703:223;;33645:281;;:::o;33934:147::-;34012:17;34024:4;34012:7;;:11;;:17;;;;:::i;:::-;34002:7;:27;;;;34053:20;34068:4;34053:10;;:14;;:20;;;;:::i;:::-;34040:10;:33;;;;33934:147;;:::o;35053:387::-;35181:7;35190;35199;35219:12;35234:30;35260:3;35234:21;35246:8;35234:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;35219:45;;35275:13;35291:28;35315:3;35291:19;35303:6;35291:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;35275:44;;35330:23;35356:28;35378:5;35356:17;35368:4;35356:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;35330:54;;35403:15;35420:4;35426:5;35395:37;;;;;;;;;35053:387;;;;;;;:::o;35448:452::-;35601:7;35610;35619;35639:15;35657:24;35669:11;35657:7;:11;;:24;;;;:::i;:::-;35639:42;;35692:12;35707:21;35716:11;35707:4;:8;;:21;;;;:::i;:::-;35692:36;;35739:13;35755:22;35765:11;35755:5;:9;;:22;;;;:::i;:::-;35739:38;;35788:23;35814:28;35836:5;35814:17;35826:4;35814:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;35788:54;;35861:7;35870:15;35887:4;35853:39;;;;;;;;;;35448:452;;;;;;;;:::o;12076:98::-;12134:7;12165:1;12161;:5;;;;:::i;:::-;12154:12;;12076:98;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:99::-;3843:6;3877:5;3871:12;3861:22;;3791:99;;;:::o;3896:169::-;3980:11;4014:6;4009:3;4002:19;4054:4;4049:3;4045:14;4030:29;;3896:169;;;;:::o;4071:246::-;4152:1;4162:113;4176:6;4173:1;4170:13;4162:113;;;4261:1;4256:3;4252:11;4246:18;4242:1;4237:3;4233:11;4226:39;4198:2;4195:1;4191:10;4186:15;;4162:113;;;4309:1;4300:6;4295:3;4291:16;4284:27;4133:184;4071:246;;;:::o;4323:377::-;4411:3;4439:39;4472:5;4439:39;:::i;:::-;4494:71;4558:6;4553:3;4494:71;:::i;:::-;4487:78;;4574:65;4632:6;4627:3;4620:4;4613:5;4609:16;4574:65;:::i;:::-;4664:29;4686:6;4664:29;:::i;:::-;4659:3;4655:39;4648:46;;4415:285;4323:377;;;;:::o;4706:313::-;4819:4;4857:2;4846:9;4842:18;4834:26;;4906:9;4900:4;4896:20;4892:1;4881:9;4877:17;4870:47;4934:78;5007:4;4998:6;4934:78;:::i;:::-;4926:86;;4706:313;;;;:::o;5025:77::-;5062:7;5091:5;5080:16;;5025:77;;;:::o;5108:122::-;5181:24;5199:5;5181:24;:::i;:::-;5174:5;5171:35;5161:63;;5220:1;5217;5210:12;5161:63;5108:122;:::o;5236:139::-;5282:5;5320:6;5307:20;5298:29;;5336:33;5363:5;5336:33;:::i;:::-;5236:139;;;;:::o;5381:474::-;5449:6;5457;5506:2;5494:9;5485:7;5481:23;5477:32;5474:119;;;5512:79;;:::i;:::-;5474:119;5632:1;5657:53;5702:7;5693:6;5682:9;5678:22;5657:53;:::i;:::-;5647:63;;5603:117;5759:2;5785:53;5830:7;5821:6;5810:9;5806:22;5785:53;:::i;:::-;5775:63;;5730:118;5381:474;;;;;:::o;5861:90::-;5895:7;5938:5;5931:13;5924:21;5913:32;;5861:90;;;:::o;5957:109::-;6038:21;6053:5;6038:21;:::i;:::-;6033:3;6026:34;5957:109;;:::o;6072:210::-;6159:4;6197:2;6186:9;6182:18;6174:26;;6210:65;6272:1;6261:9;6257:17;6248:6;6210:65;:::i;:::-;6072:210;;;;:::o;6288:474::-;6356:6;6364;6413:2;6401:9;6392:7;6388:23;6384:32;6381:119;;;6419:79;;:::i;:::-;6381:119;6539:1;6564:53;6609:7;6600:6;6589:9;6585:22;6564:53;:::i;:::-;6554:63;;6510:117;6666:2;6692:53;6737:7;6728:6;6717:9;6713:22;6692:53;:::i;:::-;6682:63;;6637:118;6288:474;;;;;:::o;6768:60::-;6796:3;6817:5;6810:12;;6768:60;;;:::o;6834:142::-;6884:9;6917:53;6935:34;6944:24;6962:5;6944:24;:::i;:::-;6935:34;:::i;:::-;6917:53;:::i;:::-;6904:66;;6834:142;;;:::o;6982:126::-;7032:9;7065:37;7096:5;7065:37;:::i;:::-;7052:50;;6982:126;;;:::o;7114:152::-;7190:9;7223:37;7254:5;7223:37;:::i;:::-;7210:50;;7114:152;;;:::o;7272:183::-;7385:63;7442:5;7385:63;:::i;:::-;7380:3;7373:76;7272:183;;:::o;7461:274::-;7580:4;7618:2;7607:9;7603:18;7595:26;;7631:97;7725:1;7714:9;7710:17;7701:6;7631:97;:::i;:::-;7461:274;;;;:::o;7741:118::-;7828:24;7846:5;7828:24;:::i;:::-;7823:3;7816:37;7741:118;;:::o;7865:222::-;7958:4;7996:2;7985:9;7981:18;7973:26;;8009:71;8077:1;8066:9;8062:17;8053:6;8009:71;:::i;:::-;7865:222;;;;:::o;8093:619::-;8170:6;8178;8186;8235:2;8223:9;8214:7;8210:23;8206:32;8203:119;;;8241:79;;:::i;:::-;8203:119;8361:1;8386:53;8431:7;8422:6;8411:9;8407:22;8386:53;:::i;:::-;8376:63;;8332:117;8488:2;8514:53;8559:7;8550:6;8539:9;8535:22;8514:53;:::i;:::-;8504:63;;8459:118;8616:2;8642:53;8687:7;8678:6;8667:9;8663:22;8642:53;:::i;:::-;8632:63;;8587:118;8093:619;;;;;:::o;8718:86::-;8753:7;8793:4;8786:5;8782:16;8771:27;;8718:86;;;:::o;8810:112::-;8893:22;8909:5;8893:22;:::i;:::-;8888:3;8881:35;8810:112;;:::o;8928:214::-;9017:4;9055:2;9044:9;9040:18;9032:26;;9068:67;9132:1;9121:9;9117:17;9108:6;9068:67;:::i;:::-;8928:214;;;;:::o;9148:118::-;9235:24;9253:5;9235:24;:::i;:::-;9230:3;9223:37;9148:118;;:::o;9272:222::-;9365:4;9403:2;9392:9;9388:18;9380:26;;9416:71;9484:1;9473:9;9469:17;9460:6;9416:71;:::i;:::-;9272:222;;;;:::o;9500:474::-;9568:6;9576;9625:2;9613:9;9604:7;9600:23;9596:32;9593:119;;;9631:79;;:::i;:::-;9593:119;9751:1;9776:53;9821:7;9812:6;9801:9;9797:22;9776:53;:::i;:::-;9766:63;;9722:117;9878:2;9904:53;9949:7;9940:6;9929:9;9925:22;9904:53;:::i;:::-;9894:63;;9849:118;9500:474;;;;;:::o;9980:329::-;10039:6;10088:2;10076:9;10067:7;10063:23;10059:32;10056:119;;;10094:79;;:::i;:::-;10056:119;10214:1;10239:53;10284:7;10275:6;10264:9;10260:22;10239:53;:::i;:::-;10229:63;;10185:117;9980:329;;;;:::o;10315:116::-;10385:21;10400:5;10385:21;:::i;:::-;10378:5;10375:32;10365:60;;10421:1;10418;10411:12;10365:60;10315:116;:::o;10437:133::-;10480:5;10518:6;10505:20;10496:29;;10534:30;10558:5;10534:30;:::i;:::-;10437:133;;;;:::o;10576:323::-;10632:6;10681:2;10669:9;10660:7;10656:23;10652:32;10649:119;;;10687:79;;:::i;:::-;10649:119;10807:1;10832:50;10874:7;10865:6;10854:9;10850:22;10832:50;:::i;:::-;10822:60;;10778:114;10576:323;;;;:::o;10905:329::-;10964:6;11013:2;11001:9;10992:7;10988:23;10984:32;10981:119;;;11019:79;;:::i;:::-;10981:119;11139:1;11164:53;11209:7;11200:6;11189:9;11185:22;11164:53;:::i;:::-;11154:63;;11110:117;10905:329;;;;:::o;11240:765::-;11326:6;11334;11342;11350;11399:3;11387:9;11378:7;11374:23;11370:33;11367:120;;;11406:79;;:::i;:::-;11367:120;11526:1;11551:53;11596:7;11587:6;11576:9;11572:22;11551:53;:::i;:::-;11541:63;;11497:117;11653:2;11679:53;11724:7;11715:6;11704:9;11700:22;11679:53;:::i;:::-;11669:63;;11624:118;11781:2;11807:53;11852:7;11843:6;11832:9;11828:22;11807:53;:::i;:::-;11797:63;;11752:118;11909:2;11935:53;11980:7;11971:6;11960:9;11956:22;11935:53;:::i;:::-;11925:63;;11880:118;11240:765;;;;;;;:::o;12011:117::-;12120:1;12117;12110:12;12151:568;12224:8;12234:6;12284:3;12277:4;12269:6;12265:17;12261:27;12251:122;;12292:79;;:::i;:::-;12251:122;12405:6;12392:20;12382:30;;12435:18;12427:6;12424:30;12421:117;;;12457:79;;:::i;:::-;12421:117;12571:4;12563:6;12559:17;12547:29;;12625:3;12617:4;12609:6;12605:17;12595:8;12591:32;12588:41;12585:128;;;12632:79;;:::i;:::-;12585:128;12151:568;;;;;:::o;12725:698::-;12817:6;12825;12833;12882:2;12870:9;12861:7;12857:23;12853:32;12850:119;;;12888:79;;:::i;:::-;12850:119;13036:1;13025:9;13021:17;13008:31;13066:18;13058:6;13055:30;13052:117;;;13088:79;;:::i;:::-;13052:117;13201:80;13273:7;13264:6;13253:9;13249:22;13201:80;:::i;:::-;13183:98;;;;12979:312;13330:2;13356:50;13398:7;13389:6;13378:9;13374:22;13356:50;:::i;:::-;13346:60;;13301:115;12725:698;;;;;:::o;13429:180::-;13477:77;13474:1;13467:88;13574:4;13571:1;13564:15;13598:4;13595:1;13588:15;13615:180;13663:77;13660:1;13653:88;13760:4;13757:1;13750:15;13784:4;13781:1;13774:15;13801:233;13840:3;13863:24;13881:5;13863:24;:::i;:::-;13854:33;;13909:66;13902:5;13899:77;13896:103;;13979:18;;:::i;:::-;13896:103;14026:1;14019:5;14015:13;14008:20;;13801:233;;;:::o;14040:102::-;14082:8;14129:5;14126:1;14122:13;14101:34;;14040:102;;;:::o;14148:848::-;14209:5;14216:4;14240:6;14231:15;;14264:5;14255:14;;14278:712;14299:1;14289:8;14286:15;14278:712;;;14394:4;14389:3;14385:14;14379:4;14376:24;14373:50;;;14403:18;;:::i;:::-;14373:50;14453:1;14443:8;14439:16;14436:451;;;14868:4;14861:5;14857:16;14848:25;;14436:451;14918:4;14912;14908:15;14900:23;;14948:32;14971:8;14948:32;:::i;:::-;14936:44;;14278:712;;;14148:848;;;;;;;:::o;15002:1073::-;15056:5;15247:8;15237:40;;15268:1;15259:10;;15270:5;;15237:40;15296:4;15286:36;;15313:1;15304:10;;15315:5;;15286:36;15382:4;15430:1;15425:27;;;;15466:1;15461:191;;;;15375:277;;15425:27;15443:1;15434:10;;15445:5;;;15461:191;15506:3;15496:8;15493:17;15490:43;;;15513:18;;:::i;:::-;15490:43;15562:8;15559:1;15555:16;15546:25;;15597:3;15590:5;15587:14;15584:40;;;15604:18;;:::i;:::-;15584:40;15637:5;;;15375:277;;15761:2;15751:8;15748:16;15742:3;15736:4;15733:13;15729:36;15711:2;15701:8;15698:16;15693:2;15687:4;15684:12;15680:35;15664:111;15661:246;;;15817:8;15811:4;15807:19;15798:28;;15852:3;15845:5;15842:14;15839:40;;;15859:18;;:::i;:::-;15839:40;15892:5;;15661:246;15932:42;15970:3;15960:8;15954:4;15951:1;15932:42;:::i;:::-;15917:57;;;;16006:4;16001:3;15997:14;15990:5;15987:25;15984:51;;;16015:18;;:::i;:::-;15984:51;16064:4;16057:5;16053:16;16044:25;;15002:1073;;;;;;:::o;16081:281::-;16139:5;16163:23;16181:4;16163:23;:::i;:::-;16155:31;;16207:25;16223:8;16207:25;:::i;:::-;16195:37;;16251:104;16288:66;16278:8;16272:4;16251:104;:::i;:::-;16242:113;;16081:281;;;;:::o;16368:410::-;16408:7;16431:20;16449:1;16431:20;:::i;:::-;16426:25;;16465:20;16483:1;16465:20;:::i;:::-;16460:25;;16520:1;16517;16513:9;16542:30;16560:11;16542:30;:::i;:::-;16531:41;;16721:1;16712:7;16708:15;16705:1;16702:22;16682:1;16675:9;16655:83;16632:139;;16751:18;;:::i;:::-;16632:139;16416:362;16368:410;;;;:::o;16784:143::-;16841:5;16872:6;16866:13;16857:22;;16888:33;16915:5;16888:33;:::i;:::-;16784:143;;;;:::o;16933:351::-;17003:6;17052:2;17040:9;17031:7;17027:23;17023:32;17020:119;;;17058:79;;:::i;:::-;17020:119;17178:1;17203:64;17259:7;17250:6;17239:9;17235:22;17203:64;:::i;:::-;17193:74;;17149:128;16933:351;;;;:::o;17290:165::-;17430:17;17426:1;17418:6;17414:14;17407:41;17290:165;:::o;17461:366::-;17603:3;17624:67;17688:2;17683:3;17624:67;:::i;:::-;17617:74;;17700:93;17789:3;17700:93;:::i;:::-;17818:2;17813:3;17809:12;17802:19;;17461:366;;;:::o;17833:419::-;17999:4;18037:2;18026:9;18022:18;18014:26;;18086:9;18080:4;18076:20;18072:1;18061:9;18057:17;18050:47;18114:131;18240:4;18114:131;:::i;:::-;18106:139;;17833:419;;;:::o;18258:332::-;18379:4;18417:2;18406:9;18402:18;18394:26;;18430:71;18498:1;18487:9;18483:17;18474:6;18430:71;:::i;:::-;18511:72;18579:2;18568:9;18564:18;18555:6;18511:72;:::i;:::-;18258:332;;;;;:::o;18596:137::-;18650:5;18681:6;18675:13;18666:22;;18697:30;18721:5;18697:30;:::i;:::-;18596:137;;;;:::o;18739:345::-;18806:6;18855:2;18843:9;18834:7;18830:23;18826:32;18823:119;;;18861:79;;:::i;:::-;18823:119;18981:1;19006:61;19059:7;19050:6;19039:9;19035:22;19006:61;:::i;:::-;18996:71;;18952:125;18739:345;;;;:::o;19090:85::-;19135:7;19164:5;19153:16;;19090:85;;;:::o;19181:158::-;19239:9;19272:61;19290:42;19299:32;19325:5;19299:32;:::i;:::-;19290:42;:::i;:::-;19272:61;:::i;:::-;19259:74;;19181:158;;;:::o;19345:147::-;19440:45;19479:5;19440:45;:::i;:::-;19435:3;19428:58;19345:147;;:::o;19498:807::-;19747:4;19785:3;19774:9;19770:19;19762:27;;19799:71;19867:1;19856:9;19852:17;19843:6;19799:71;:::i;:::-;19880:72;19948:2;19937:9;19933:18;19924:6;19880:72;:::i;:::-;19962:80;20038:2;20027:9;20023:18;20014:6;19962:80;:::i;:::-;20052;20128:2;20117:9;20113:18;20104:6;20052:80;:::i;:::-;20142:73;20210:3;20199:9;20195:19;20186:6;20142:73;:::i;:::-;20225;20293:3;20282:9;20278:19;20269:6;20225:73;:::i;:::-;19498:807;;;;;;;;;:::o;20311:663::-;20399:6;20407;20415;20464:2;20452:9;20443:7;20439:23;20435:32;20432:119;;;20470:79;;:::i;:::-;20432:119;20590:1;20615:64;20671:7;20662:6;20651:9;20647:22;20615:64;:::i;:::-;20605:74;;20561:128;20728:2;20754:64;20810:7;20801:6;20790:9;20786:22;20754:64;:::i;:::-;20744:74;;20699:129;20867:2;20893:64;20949:7;20940:6;20929:9;20925:22;20893:64;:::i;:::-;20883:74;;20838:129;20311:663;;;;;:::o;20980:225::-;21120:34;21116:1;21108:6;21104:14;21097:58;21189:8;21184:2;21176:6;21172:15;21165:33;20980:225;:::o;21211:366::-;21353:3;21374:67;21438:2;21433:3;21374:67;:::i;:::-;21367:74;;21450:93;21539:3;21450:93;:::i;:::-;21568:2;21563:3;21559:12;21552:19;;21211:366;;;:::o;21583:419::-;21749:4;21787:2;21776:9;21772:18;21764:26;;21836:9;21830:4;21826:20;21822:1;21811:9;21807:17;21800:47;21864:131;21990:4;21864:131;:::i;:::-;21856:139;;21583:419;;;:::o;22008:180::-;22056:77;22053:1;22046:88;22153:4;22150:1;22143:15;22177:4;22174:1;22167:15;22194:185;22234:1;22251:20;22269:1;22251:20;:::i;:::-;22246:25;;22285:20;22303:1;22285:20;:::i;:::-;22280:25;;22324:1;22314:35;;22329:18;;:::i;:::-;22314:35;22371:1;22368;22364:9;22359:14;;22194:185;;;;:::o;22385:182::-;22525:34;22521:1;22513:6;22509:14;22502:58;22385:182;:::o;22573:366::-;22715:3;22736:67;22800:2;22795:3;22736:67;:::i;:::-;22729:74;;22812:93;22901:3;22812:93;:::i;:::-;22930:2;22925:3;22921:12;22914:19;;22573:366;;;:::o;22945:419::-;23111:4;23149:2;23138:9;23134:18;23126:26;;23198:9;23192:4;23188:20;23184:1;23173:9;23169:17;23162:47;23226:131;23352:4;23226:131;:::i;:::-;23218:139;;22945:419;;;:::o;23370:223::-;23510:34;23506:1;23498:6;23494:14;23487:58;23579:6;23574:2;23566:6;23562:15;23555:31;23370:223;:::o;23599:366::-;23741:3;23762:67;23826:2;23821:3;23762:67;:::i;:::-;23755:74;;23838:93;23927:3;23838:93;:::i;:::-;23956:2;23951:3;23947:12;23940:19;;23599:366;;;:::o;23971:419::-;24137:4;24175:2;24164:9;24160:18;24152:26;;24224:9;24218:4;24214:20;24210:1;24199:9;24195:17;24188:47;24252:131;24378:4;24252:131;:::i;:::-;24244:139;;23971:419;;;:::o;24396:221::-;24536:34;24532:1;24524:6;24520:14;24513:58;24605:4;24600:2;24592:6;24588:15;24581:29;24396:221;:::o;24623:366::-;24765:3;24786:67;24850:2;24845:3;24786:67;:::i;:::-;24779:74;;24862:93;24951:3;24862:93;:::i;:::-;24980:2;24975:3;24971:12;24964:19;;24623:366;;;:::o;24995:419::-;25161:4;25199:2;25188:9;25184:18;25176:26;;25248:9;25242:4;25238:20;25234:1;25223:9;25219:17;25212:47;25276:131;25402:4;25276:131;:::i;:::-;25268:139;;24995:419;;;:::o;25420:228::-;25560:34;25556:1;25548:6;25544:14;25537:58;25629:11;25624:2;25616:6;25612:15;25605:36;25420:228;:::o;25654:366::-;25796:3;25817:67;25881:2;25876:3;25817:67;:::i;:::-;25810:74;;25893:93;25982:3;25893:93;:::i;:::-;26011:2;26006:3;26002:12;25995:19;;25654:366;;;:::o;26026:419::-;26192:4;26230:2;26219:9;26215:18;26207:26;;26279:9;26273:4;26269:20;26265:1;26254:9;26250:17;26243:47;26307:131;26433:4;26307:131;:::i;:::-;26299:139;;26026:419;;;:::o;26451:250::-;26591:34;26587:1;26579:6;26575:14;26568:58;26660:33;26655:2;26647:6;26643:15;26636:58;26451:250;:::o;26707:366::-;26849:3;26870:67;26934:2;26929:3;26870:67;:::i;:::-;26863:74;;26946:93;27035:3;26946:93;:::i;:::-;27064:2;27059:3;27055:12;27048:19;;26707:366;;;:::o;27079:419::-;27245:4;27283:2;27272:9;27268:18;27260:26;;27332:9;27326:4;27322:20;27318:1;27307:9;27303:17;27296:47;27360:131;27486:4;27360:131;:::i;:::-;27352:139;;27079:419;;;:::o;27504:222::-;27644:34;27640:1;27632:6;27628:14;27621:58;27713:5;27708:2;27700:6;27696:15;27689:30;27504:222;:::o;27732:366::-;27874:3;27895:67;27959:2;27954:3;27895:67;:::i;:::-;27888:74;;27971:93;28060:3;27971:93;:::i;:::-;28089:2;28084:3;28080:12;28073:19;;27732:366;;;:::o;28104:419::-;28270:4;28308:2;28297:9;28293:18;28285:26;;28357:9;28351:4;28347:20;28343:1;28332:9;28328:17;28321:47;28385:131;28511:4;28385:131;:::i;:::-;28377:139;;28104:419;;;:::o;28529:178::-;28669:30;28665:1;28657:6;28653:14;28646:54;28529:178;:::o;28713:366::-;28855:3;28876:67;28940:2;28935:3;28876:67;:::i;:::-;28869:74;;28952:93;29041:3;28952:93;:::i;:::-;29070:2;29065:3;29061:12;29054:19;;28713:366;;;:::o;29085:419::-;29251:4;29289:2;29278:9;29274:18;29266:26;;29338:9;29332:4;29328:20;29324:1;29313:9;29309:17;29302:47;29366:131;29492:4;29366:131;:::i;:::-;29358:139;;29085:419;;;:::o;29510:191::-;29550:3;29569:20;29587:1;29569:20;:::i;:::-;29564:25;;29603:20;29621:1;29603:20;:::i;:::-;29598:25;;29646:1;29643;29639:9;29632:16;;29667:3;29664:1;29661:10;29658:36;;;29674:18;;:::i;:::-;29658:36;29510:191;;;;:::o;29707:222::-;29847:34;29843:1;29835:6;29831:14;29824:58;29916:5;29911:2;29903:6;29899:15;29892:30;29707:222;:::o;29935:366::-;30077:3;30098:67;30162:2;30157:3;30098:67;:::i;:::-;30091:74;;30174:93;30263:3;30174:93;:::i;:::-;30292:2;30287:3;30283:12;30276:19;;29935:366;;;:::o;30307:419::-;30473:4;30511:2;30500:9;30496:18;30488:26;;30560:9;30554:4;30550:20;30546:1;30535:9;30531:17;30524:47;30588:131;30714:4;30588:131;:::i;:::-;30580:139;;30307:419;;;:::o;30732:147::-;30833:11;30870:3;30855:18;;30732:147;;;;:::o;30885:114::-;;:::o;31005:398::-;31164:3;31185:83;31266:1;31261:3;31185:83;:::i;:::-;31178:90;;31277:93;31366:3;31277:93;:::i;:::-;31395:1;31390:3;31386:11;31379:18;;31005:398;;;:::o;31409:379::-;31593:3;31615:147;31758:3;31615:147;:::i;:::-;31608:154;;31779:3;31772:10;;31409:379;;;:::o;31794:169::-;31934:21;31930:1;31922:6;31918:14;31911:45;31794:169;:::o;31969:366::-;32111:3;32132:67;32196:2;32191:3;32132:67;:::i;:::-;32125:74;;32208:93;32297:3;32208:93;:::i;:::-;32326:2;32321:3;32317:12;32310:19;;31969:366;;;:::o;32341:419::-;32507:4;32545:2;32534:9;32530:18;32522:26;;32594:9;32588:4;32584:20;32580:1;32569:9;32565:17;32558:47;32622:131;32748:4;32622:131;:::i;:::-;32614:139;;32341:419;;;:::o;32766:229::-;32906:34;32902:1;32894:6;32890:14;32883:58;32975:12;32970:2;32962:6;32958:15;32951:37;32766:229;:::o;33001:366::-;33143:3;33164:67;33228:2;33223:3;33164:67;:::i;:::-;33157:74;;33240:93;33329:3;33240:93;:::i;:::-;33358:2;33353:3;33349:12;33342:19;;33001:366;;;:::o;33373:419::-;33539:4;33577:2;33566:9;33562:18;33554:26;;33626:9;33620:4;33616:20;33612:1;33601:9;33597:17;33590:47;33654:131;33780:4;33654:131;:::i;:::-;33646:139;;33373:419;;;:::o;33798:143::-;33855:5;33886:6;33880:13;33871:22;;33902:33;33929:5;33902:33;:::i;:::-;33798:143;;;;:::o;33947:351::-;34017:6;34066:2;34054:9;34045:7;34041:23;34037:32;34034:119;;;34072:79;;:::i;:::-;34034:119;34192:1;34217:64;34273:7;34264:6;34253:9;34249:22;34217:64;:::i;:::-;34207:74;;34163:128;33947:351;;;;:::o;34304:114::-;34371:6;34405:5;34399:12;34389:22;;34304:114;;;:::o;34424:184::-;34523:11;34557:6;34552:3;34545:19;34597:4;34592:3;34588:14;34573:29;;34424:184;;;;:::o;34614:132::-;34681:4;34704:3;34696:11;;34734:4;34729:3;34725:14;34717:22;;34614:132;;;:::o;34752:108::-;34829:24;34847:5;34829:24;:::i;:::-;34824:3;34817:37;34752:108;;:::o;34866:179::-;34935:10;34956:46;34998:3;34990:6;34956:46;:::i;:::-;35034:4;35029:3;35025:14;35011:28;;34866:179;;;;:::o;35051:113::-;35121:4;35153;35148:3;35144:14;35136:22;;35051:113;;;:::o;35200:732::-;35319:3;35348:54;35396:5;35348:54;:::i;:::-;35418:86;35497:6;35492:3;35418:86;:::i;:::-;35411:93;;35528:56;35578:5;35528:56;:::i;:::-;35607:7;35638:1;35623:284;35648:6;35645:1;35642:13;35623:284;;;35724:6;35718:13;35751:63;35810:3;35795:13;35751:63;:::i;:::-;35744:70;;35837:60;35890:6;35837:60;:::i;:::-;35827:70;;35683:224;35670:1;35667;35663:9;35658:14;;35623:284;;;35627:14;35923:3;35916:10;;35324:608;;;35200:732;;;;:::o;35938:831::-;36201:4;36239:3;36228:9;36224:19;36216:27;;36253:71;36321:1;36310:9;36306:17;36297:6;36253:71;:::i;:::-;36334:80;36410:2;36399:9;36395:18;36386:6;36334:80;:::i;:::-;36461:9;36455:4;36451:20;36446:2;36435:9;36431:18;36424:48;36489:108;36592:4;36583:6;36489:108;:::i;:::-;36481:116;;36607:72;36675:2;36664:9;36660:18;36651:6;36607:72;:::i;:::-;36689:73;36757:3;36746:9;36742:19;36733:6;36689:73;:::i;:::-;35938:831;;;;;;;;:::o;36775:194::-;36815:4;36835:20;36853:1;36835:20;:::i;:::-;36830:25;;36869:20;36887:1;36869:20;:::i;:::-;36864:25;;36913:1;36910;36906:9;36898:17;;36937:1;36931:4;36928:11;36925:37;;;36942:18;;:::i;:::-;36925:37;36775:194;;;;:::o

Swarm Source

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