ETH Price: $3,332.95 (-1.24%)
 

Overview

Max Total Supply

1,000,000,000,000 AdidasINU

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,598,894.626328699 AdidasINU

Value
$0.00
0x55ef45cc3323177218fdaee9b573a7a3006355a3
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:
AdidasINU

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-24
*/

/*
AdidasINU ... Probably Nothing
https://t.me/adidasinu
*/


pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

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


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

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



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


contract AdidasINU is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
   
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "AdidasINU";
    string private _symbol = "AdidasINU";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _devFee;
    uint256 private _previousDevFee = _devFee;

    address payable public _devWalletAddress;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndSend;
    bool public swapAndSendEnabled = true;
    
    bool private tradingEnabled = false;
    
    uint256 public _maxTxAmount = 9000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 500 * 10**6 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    address private _admin;
    event SwapAndSendEnabledUpdated(bool enabled);
    event SwapAndSend(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    
    modifier lockTheSwap {
        inSwapAndSend = true;
        _;
        inSwapAndSend = false;
    }
    
    constructor (address payable devWalletAddress) {
        _devWalletAddress = devWalletAddress;
        _admin = _msgSender();
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }
    
    function setDevFeeDisabled(bool _devFeeEnabled ) public returns (bool){
        require(msg.sender == _admin, "OnlyAdmin can disable dev fee");
        swapAndSendEnabled = _devFeeEnabled;
        return(swapAndSendEnabled);
    }
    
    
    /*depl address can always change fees to lower than 10 to allow the project to scale*/
    function setTaxFee(uint256 taxFee, uint256 devFee ) public {
        require(msg.sender == _admin, "OnlyAdmin can disable dev fee");
        require(taxFee<12, "Reflection tax can not be greater than 10");
        require(devFee<12, "Dev tax can not be greater than 10");
        _taxFee = devFee;
        _devFee = devFee;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function _setdevWallet(address payable devWalletAddress) external onlyOwner() {
        _devWalletAddress = devWalletAddress;
    }
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndSendEnabled(bool _enabled) public onlyOwner {
        swapAndSendEnabled = _enabled;
        emit SwapAndSendEnabledUpdated(_enabled);
    }
    
        
    function manualswap() external {
        require(_msgSender() == _admin);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() external {
        require(_msgSender() == _admin);
        uint256 contractETHBalance = address(this).balance;
        sendETHTodev(contractETHBalance);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateDevFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        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;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devFee).div(
            10**2
        );
    }
    

    
    function openTrading() external onlyOwner() {
        require(!tradingEnabled, "Trading has already Been enabled");
        _taxFee = 2;
        _devFee = 9;
        tradingEnabled = true;
        swapAndSendEnabled = true;
    }
    
    
    function removeAllFee() private {
        if(_taxFee == 0 && _devFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousDevFee = _devFee;
        
        _taxFee = 0;
        _devFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _devFee = _previousDevFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function getDevFee() public view returns(uint256) {
        return _devFee;
    }

    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(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            require(tradingEnabled, "Trading has not been enabled");
        }
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndSend &&
            from != uniswapV2Pair &&
            swapAndSendEnabled
        ) {
            //add liquidity
            swapAndSend(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndSend(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 tokenBalance = contractTokenBalance;

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(tokenBalance); // <-  breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        sendETHTodev(newBalance);
        // add liquidity to uniswap
        
        emit SwapAndSend(tokenBalance, newBalance);
    }

    function sendETHTodev(uint256 amount) private {
      _devWalletAddress.transfer(amount);
    }

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _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 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"devWalletAddress","type":"address"}],"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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","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":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"devWalletAddress","type":"address"}],"name":"_setdevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_devFeeEnabled","type":"bool"}],"name":"setDevFeeDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052683635c9adc5dea0000060095560095460001962000023919062000901565b6000196200003291906200083e565b600a556040518060400160405280600981526020017f416469646173494e550000000000000000000000000000000000000000000000815250600c9080519060200190620000829291906200069c565b506040518060400160405280600981526020017f416469646173494e550000000000000000000000000000000000000000000000815250600d9080519060200190620000d09291906200069c565b506009600e60006101000a81548160ff021916908360ff160217905550600f546010556011546012556001601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff021916908315150217905550677ce66c50e28400006014556706f05b59d3b200006015553480156200015457600080fd5b50604051620061593803806200615983398181016040528101906200017a9190620007a6565b60006200018c6200066b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027b6200066b60201b60201c565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460036000620002d26200066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037057600080fd5b505afa15801562000385573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ab91906200077a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040e57600080fd5b505afa15801562000423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044991906200077a565b6040518363ffffffff1660e01b815260040162000468929190620007f4565b602060405180830381600087803b1580156200048357600080fd5b505af115801562000498573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004be91906200077a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620005416200067360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005fa6200066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200065b919062000821565b60405180910390a35050620009fa565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006aa90620008cb565b90600052602060002090601f016020900481019282620006ce57600085556200071a565b82601f10620006e957805160ff19168380011785556200071a565b828001600101855582156200071a579182015b8281111562000719578251825591602001919060010190620006fc565b5b5090506200072991906200072d565b5090565b5b80821115620007485760008160009055506001016200072e565b5090565b6000815190506200075d81620009c6565b92915050565b6000815190506200077481620009e0565b92915050565b6000602082840312156200078d57600080fd5b60006200079d848285016200074c565b91505092915050565b600060208284031215620007b957600080fd5b6000620007c98482850162000763565b91505092915050565b620007dd8162000879565b82525050565b620007ee81620008c1565b82525050565b60006040820190506200080b6000830185620007d2565b6200081a6020830184620007d2565b9392505050565b6000602082019050620008386000830184620007e3565b92915050565b60006200084b82620008c1565b91506200085883620008c1565b9250828210156200086e576200086d62000939565b5b828203905092915050565b60006200088682620008a1565b9050919050565b60006200089a82620008a1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008e457607f821691505b60208210811415620008fb57620008fa62000997565b5b50919050565b60006200090e82620008c1565b91506200091b83620008c1565b9250826200092e576200092d62000968565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620009d18162000879565b8114620009dd57600080fd5b50565b620009eb816200088d565b8114620009f757600080fd5b50565b60805160601c60a05160601c61571762000a42600039600081816114370152612917015260008181610a3301528181612d8601528181612e9c0152612ec301526157176000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063b425bac3116100ab578063d543dbeb1161006f578063d543dbeb14610894578063dd62ed3e146108bd578063e379382a146108fa578063ea2f0b3714610925578063f2fde38b1461094e57610246565b8063b425bac3146107e7578063c3c8cd8014610812578063c552849014610829578063c7287e9d14610852578063c9567bf91461087d57610246565b8063a0c072d4116100f2578063a0c072d4146106dc578063a457c2d714610705578063a9059cbb14610742578063aa45026b1461077f578063aae11571146107aa57610246565b8063715018a6146106075780637d1db4a51461061e57806388f82020146106495780638da5cb5b1461068657806395d89b41146106b157610246565b806339509351116101bc57806349bd5a5e1161018057806349bd5a5e1461052257806352390c021461054d5780635342acb4146105765780636fc3eaec146105b357806370a08231146105ca57610246565b8063395093511461042b5780633b124fe7146104685780633bd5d17314610493578063437823ec146104bc5780634549b039146104e557610246565b806323b872dd1161020357806323b872dd146103345780632663236f146103715780632d8381191461039a578063313ce567146103d75780633685d4191461040257610246565b806306fdde031461024b578063095ea7b31461027657806313114a9d146102b35780631694505e146102de57806318160ddd1461030957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610977565b60405161026d9190614ad7565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906145a5565b610a09565b6040516102aa9190614aa1565b60405180910390f35b3480156102bf57600080fd5b506102c8610a27565b6040516102d59190614d59565b60405180910390f35b3480156102ea57600080fd5b506102f3610a31565b6040516103009190614abc565b60405180910390f35b34801561031557600080fd5b5061031e610a55565b60405161032b9190614d59565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190614556565b610a5f565b6040516103689190614aa1565b60405180910390f35b34801561037d57600080fd5b50610398600480360381019061039391906145e1565b610b38565b005b3480156103a657600080fd5b506103c160048036038101906103bc919061460a565b610c21565b6040516103ce9190614d59565b60405180910390f35b3480156103e357600080fd5b506103ec610c8f565b6040516103f99190614df7565b60405180910390f35b34801561040e57600080fd5b506104296004803603810190610424919061449f565b610ca6565b005b34801561043757600080fd5b50610452600480360381019061044d91906145a5565b61108d565b60405161045f9190614aa1565b60405180910390f35b34801561047457600080fd5b5061047d611140565b60405161048a9190614d59565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b5919061460a565b611146565b005b3480156104c857600080fd5b506104e360048036038101906104de919061449f565b6112c1565b005b3480156104f157600080fd5b5061050c60048036038101906105079190614633565b6113b1565b6040516105199190614d59565b60405180910390f35b34801561052e57600080fd5b50610537611435565b6040516105449190614a6b565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f919061449f565b611459565b005b34801561058257600080fd5b5061059d6004803603810190610598919061449f565b61170d565b6040516105aa9190614aa1565b60405180910390f35b3480156105bf57600080fd5b506105c8611763565b005b3480156105d657600080fd5b506105f160048036038101906105ec919061449f565b6117d5565b6040516105fe9190614d59565b60405180910390f35b34801561061357600080fd5b5061061c6118c0565b005b34801561062a57600080fd5b50610633611a13565b6040516106409190614d59565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b919061449f565b611a19565b60405161067d9190614aa1565b60405180910390f35b34801561069257600080fd5b5061069b611a6f565b6040516106a89190614a6b565b60405180910390f35b3480156106bd57600080fd5b506106c6611a98565b6040516106d39190614ad7565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe91906144f1565b611b2a565b005b34801561071157600080fd5b5061072c600480360381019061072791906145a5565b611c03565b6040516107399190614aa1565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906145a5565b611cd0565b6040516107769190614aa1565b60405180910390f35b34801561078b57600080fd5b50610794611cee565b6040516107a19190614d59565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc91906145e1565b611cf4565b6040516107de9190614aa1565b60405180910390f35b3480156107f357600080fd5b506107fc611db7565b6040516108099190614a86565b60405180910390f35b34801561081e57600080fd5b50610827611ddd565b005b34801561083557600080fd5b50610850600480360381019061084b919061466f565b611e57565b005b34801561085e57600080fd5b50610867611f7f565b6040516108749190614d59565b60405180910390f35b34801561088957600080fd5b50610892611f89565b005b3480156108a057600080fd5b506108bb60048036038101906108b6919061460a565b6120b6565b005b3480156108c957600080fd5b506108e460048036038101906108df919061451a565b61217c565b6040516108f19190614d59565b60405180910390f35b34801561090657600080fd5b5061090f612203565b60405161091c9190614aa1565b60405180910390f35b34801561093157600080fd5b5061094c6004803603810190610947919061449f565b612216565b005b34801561095a57600080fd5b506109756004803603810190610970919061449f565b612306565b005b6060600c80546109869061504c565b80601f01602080910402602001604051908101604052809291908181526020018280546109b29061504c565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a1d610a166124c8565b84846124d0565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610a6c84848461269b565b610b2d84610a786124c8565b610b288560405180606001604052806028815260200161569560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ade6124c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a529092919063ffffffff16565b6124d0565b600190509392505050565b610b406124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490614c59565b60405180910390fd5b80601360156101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610c169190614aa1565b60405180910390a150565b6000600a54821115610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90614b19565b60405180910390fd5b6000610c72612ab6565b9050610c878184612ae190919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610cae6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290614c59565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90614b99565b60405180910390fd5b60005b600880549050811015611089578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110765760086001600880549050610e839190614f48565b81548110610eba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061103c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611089565b80806110819061507e565b915050610dca565b5050565b600061113661109a6124c8565b8461113185600560006110ab6124c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b6124d0565b6001905092915050565b600f5481565b60006111506124c8565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690614d19565b60405180910390fd5b60006111ea83612b89565b5050505050905061124381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061129b81600a54612be590919063ffffffff16565b600a819055506112b683600b54612b2b90919063ffffffff16565b600b81905550505050565b6112c96124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90614c59565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90614bb9565b60405180910390fd5b8161141857600061140884612b89565b505050505090508091505061142f565b600061142384612b89565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6114616124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614c59565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290614b99565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561164f5761160b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c21565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117a46124c8565b73ffffffffffffffffffffffffffffffffffffffff16146117c457600080fd5b60004790506117d281612c2f565b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187057600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118bb565b6118b8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c21565b90505b919050565b6118c86124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614c59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054611aa79061504c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad39061504c565b8015611b205780601f10611af557610100808354040283529160200191611b20565b820191906000526020600020905b815481529060010190602001808311611b0357829003601f168201915b5050505050905090565b611b326124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614c59565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611cc6611c106124c8565b84611cc1856040518060600160405280602581526020016156bd6025913960056000611c3a6124c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a529092919063ffffffff16565b6124d0565b6001905092915050565b6000611ce4611cdd6124c8565b848461269b565b6001905092915050565b60115481565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614cd9565b60405180910390fd5b81601360156101000a81548160ff021916908315150217905550601360159054906101000a900460ff169050919050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e1e6124c8565b73ffffffffffffffffffffffffffffffffffffffff1614611e3e57600080fd5b6000611e49306117d5565b9050611e5481612c9b565b50565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede90614cd9565b60405180910390fd5b600c8210611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614d39565b60405180910390fd5b600c8110611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614c39565b60405180910390fd5b80600f81905550806011819055505050565b6000601154905090565b611f916124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590614c59565b60405180910390fd5b601360169054906101000a900460ff161561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614c79565b60405180910390fd5b6002600f8190555060096011819055506001601360166101000a81548160ff0219169083151502179055506001601360156101000a81548160ff021916908315150217905550565b6120be6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614c59565b60405180910390fd5b612173606461216583600954612f5990919063ffffffff16565b612ae190919063ffffffff16565b60148190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601360159054906101000a900460ff1681565b61221e6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a290614c59565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61230e6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239290614c59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614b39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253790614cf9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790614b59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161268e9190614d59565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290614cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614af9565b60405180910390fd5b600081116127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614c99565b60405180910390fd5b6127c6611a6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128345750612804611a6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128ce5760145481111561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614bd9565b60405180910390fd5b601360169054906101000a900460ff166128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490614bf9565b60405180910390fd5b5b60006128d9306117d5565b905060145481106128ea5760145490505b6000601554821015905080801561290e5750601360149054906101000a900460ff16155b801561296657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561297e5750601360159054906101000a900460ff165b1561298d5761298c82612fd4565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a345750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a3e57600090505b612a4a8686868461307c565b505050505050565b6000838311158290612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a919190614ad7565b60405180910390fd5b5060008385612aa99190614f48565b9050809150509392505050565b6000806000612ac361338d565b91509150612ada8183612ae190919063ffffffff16565b9250505090565b6000612b2383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136d8565b905092915050565b6000808284612b3a9190614e67565b905083811015612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690614b79565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ba08a61373b565b9250925092506000806000612bbe8d8686612bb9612ab6565b613795565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612c2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a52565b905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c97573d6000803e3d6000fd5b5050565b6000600267ffffffffffffffff811115612cde577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612d0c5781602001602082028036833780820191505090505b5090503081600081518110612d4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612dea57600080fd5b505afa158015612dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2291906144c8565b81600181518110612e5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ec1307f0000000000000000000000000000000000000000000000000000000000000000846124d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f23959493929190614d74565b600060405180830381600087803b158015612f3d57600080fd5b505af1158015612f51573d6000803e3d6000fd5b505050505050565b600080831415612f6c5760009050612fce565b60008284612f7a9190614eee565b9050828482612f899190614ebd565b14612fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc090614c19565b60405180910390fd5b809150505b92915050565b6001601360146101000a81548160ff0219169083151502179055506000819050600047905061300282612c9b565b60006130178247612be590919063ffffffff16565b905061302281612c2f565b7f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8382604051613053929190614dce565b60405180910390a15050506000601360146101000a81548160ff02191690831515021790555050565b8061308a5761308961381e565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131425761313d848484613861565b613379565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e55750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131fa576131f5848484613ac1565b613378565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561329e5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b3576132ae848484613d21565b613377565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336a57613365848484613eec565b613376565b613375848484613d21565b5b5b5b5b80613387576133866141e1565b5b50505050565b6000806000600a5490506000600954905060005b60088054905081101561369b578260036000600884815481106133ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135015750816004600060088481548110613499577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561351857600a54600954945094505050506136d4565b6135ce6003600060088481548110613559577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612be590919063ffffffff16565b92506136866004600060088481548110613611577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612be590919063ffffffff16565b915080806136939061507e565b9150506133a1565b506136b3600954600a54612ae190919063ffffffff16565b8210156136cb57600a546009549350935050506136d4565b81819350935050505b9091565b6000808311829061371f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137169190614ad7565b60405180910390fd5b506000838561372e9190614ebd565b9050809150509392505050565b60008060008061374a856141f5565b9050600061375786614226565b9050600061378082613772858a612be590919063ffffffff16565b612be590919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137ae8589612f5990919063ffffffff16565b905060006137c58689612f5990919063ffffffff16565b905060006137dc8789612f5990919063ffffffff16565b90506000613805826137f78587612be590919063ffffffff16565b612be590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600f5414801561383257506000601154145b1561383c5761385f565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b60008060008060008061387387612b89565b9550955095509550955095506138d187600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061396686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139fb85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a4781614257565b613a5184836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613aae9190614d59565b60405180910390a3505050505050505050565b600080600080600080613ad387612b89565b955095509550955095509550613b3186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc683600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5b85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca781614257565b613cb184836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d0e9190614d59565b60405180910390a3505050505050505050565b600080600080600080613d3387612b89565b955095509550955095509550613d9186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7281614257565b613e7c84836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ed99190614d59565b60405180910390a3505050505050505050565b600080600080600080613efe87612b89565b955095509550955095509550613f5c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ff186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061408683600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411b85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416781614257565b61417184836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141ce9190614d59565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550565b600061421f6064614211600f5485612f5990919063ffffffff16565b612ae190919063ffffffff16565b9050919050565b6000614250606461424260115485612f5990919063ffffffff16565b612ae190919063ffffffff16565b9050919050565b6000614261612ab6565b905060006142788284612f5990919063ffffffff16565b90506142cc81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143f7576143b383600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61441182600a54612be590919063ffffffff16565b600a8190555061442c81600b54612b2b90919063ffffffff16565b600b819055505050565b60008135905061444581615638565b92915050565b60008151905061445a81615638565b92915050565b60008135905061446f8161564f565b92915050565b60008135905061448481615666565b92915050565b6000813590506144998161567d565b92915050565b6000602082840312156144b157600080fd5b60006144bf84828501614436565b91505092915050565b6000602082840312156144da57600080fd5b60006144e88482850161444b565b91505092915050565b60006020828403121561450357600080fd5b600061451184828501614460565b91505092915050565b6000806040838503121561452d57600080fd5b600061453b85828601614436565b925050602061454c85828601614436565b9150509250929050565b60008060006060848603121561456b57600080fd5b600061457986828701614436565b935050602061458a86828701614436565b925050604061459b8682870161448a565b9150509250925092565b600080604083850312156145b857600080fd5b60006145c685828601614436565b92505060206145d78582860161448a565b9150509250929050565b6000602082840312156145f357600080fd5b600061460184828501614475565b91505092915050565b60006020828403121561461c57600080fd5b600061462a8482850161448a565b91505092915050565b6000806040838503121561464657600080fd5b60006146548582860161448a565b925050602061466585828601614475565b9150509250929050565b6000806040838503121561468257600080fd5b60006146908582860161448a565b92505060206146a18582860161448a565b9150509250929050565b60006146b783836146d2565b60208301905092915050565b6146cc81614f8e565b82525050565b6146db81614f7c565b82525050565b6146ea81614f7c565b82525050565b60006146fb82614e22565b6147058185614e45565b935061471083614e12565b8060005b8381101561474157815161472888826146ab565b975061473383614e38565b925050600181019050614714565b5085935050505092915050565b61475781614fa0565b82525050565b61476681614fe3565b82525050565b61477581615007565b82525050565b600061478682614e2d565b6147908185614e56565b93506147a0818560208601615019565b6147a981615154565b840191505092915050565b60006147c1602383614e56565b91506147cc82615165565b604082019050919050565b60006147e4602a83614e56565b91506147ef826151b4565b604082019050919050565b6000614807602683614e56565b915061481282615203565b604082019050919050565b600061482a602283614e56565b915061483582615252565b604082019050919050565b600061484d601b83614e56565b9150614858826152a1565b602082019050919050565b6000614870601b83614e56565b915061487b826152ca565b602082019050919050565b6000614893601f83614e56565b915061489e826152f3565b602082019050919050565b60006148b6602883614e56565b91506148c18261531c565b604082019050919050565b60006148d9601c83614e56565b91506148e48261536b565b602082019050919050565b60006148fc602183614e56565b915061490782615394565b604082019050919050565b600061491f602283614e56565b915061492a826153e3565b604082019050919050565b6000614942602083614e56565b915061494d82615432565b602082019050919050565b6000614965602083614e56565b91506149708261545b565b602082019050919050565b6000614988602983614e56565b915061499382615484565b604082019050919050565b60006149ab602583614e56565b91506149b6826154d3565b604082019050919050565b60006149ce601d83614e56565b91506149d982615522565b602082019050919050565b60006149f1602483614e56565b91506149fc8261554b565b604082019050919050565b6000614a14602c83614e56565b9150614a1f8261559a565b604082019050919050565b6000614a37602983614e56565b9150614a42826155e9565b604082019050919050565b614a5681614fcc565b82525050565b614a6581614fd6565b82525050565b6000602082019050614a8060008301846146e1565b92915050565b6000602082019050614a9b60008301846146c3565b92915050565b6000602082019050614ab6600083018461474e565b92915050565b6000602082019050614ad1600083018461475d565b92915050565b60006020820190508181036000830152614af1818461477b565b905092915050565b60006020820190508181036000830152614b12816147b4565b9050919050565b60006020820190508181036000830152614b32816147d7565b9050919050565b60006020820190508181036000830152614b52816147fa565b9050919050565b60006020820190508181036000830152614b728161481d565b9050919050565b60006020820190508181036000830152614b9281614840565b9050919050565b60006020820190508181036000830152614bb281614863565b9050919050565b60006020820190508181036000830152614bd281614886565b9050919050565b60006020820190508181036000830152614bf2816148a9565b9050919050565b60006020820190508181036000830152614c12816148cc565b9050919050565b60006020820190508181036000830152614c32816148ef565b9050919050565b60006020820190508181036000830152614c5281614912565b9050919050565b60006020820190508181036000830152614c7281614935565b9050919050565b60006020820190508181036000830152614c9281614958565b9050919050565b60006020820190508181036000830152614cb28161497b565b9050919050565b60006020820190508181036000830152614cd28161499e565b9050919050565b60006020820190508181036000830152614cf2816149c1565b9050919050565b60006020820190508181036000830152614d12816149e4565b9050919050565b60006020820190508181036000830152614d3281614a07565b9050919050565b60006020820190508181036000830152614d5281614a2a565b9050919050565b6000602082019050614d6e6000830184614a4d565b92915050565b600060a082019050614d896000830188614a4d565b614d96602083018761476c565b8181036040830152614da881866146f0565b9050614db760608301856146e1565b614dc46080830184614a4d565b9695505050505050565b6000604082019050614de36000830185614a4d565b614df06020830184614a4d565b9392505050565b6000602082019050614e0c6000830184614a5c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614e7282614fcc565b9150614e7d83614fcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614eb257614eb16150c7565b5b828201905092915050565b6000614ec882614fcc565b9150614ed383614fcc565b925082614ee357614ee26150f6565b5b828204905092915050565b6000614ef982614fcc565b9150614f0483614fcc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f3d57614f3c6150c7565b5b828202905092915050565b6000614f5382614fcc565b9150614f5e83614fcc565b925082821015614f7157614f706150c7565b5b828203905092915050565b6000614f8782614fac565b9050919050565b6000614f9982614fac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614fee82614ff5565b9050919050565b600061500082614fac565b9050919050565b600061501282614fcc565b9050919050565b60005b8381101561503757808201518184015260208101905061501c565b83811115615046576000848401525b50505050565b6000600282049050600182168061506457607f821691505b6020821081141561507857615077615125565b5b50919050565b600061508982614fcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150bc576150bb6150c7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f54726164696e6720686173206e6f74206265656e20656e61626c656400000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f446576207461782063616e206e6f742062652067726561746572207468616e2060008201527f3130000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54726164696e672068617320616c7265616479204265656e20656e61626c6564600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7941646d696e2063616e2064697361626c652064657620666565000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f5265666c656374696f6e207461782063616e206e6f742062652067726561746560008201527f72207468616e2031300000000000000000000000000000000000000000000000602082015250565b61564181614f7c565b811461564c57600080fd5b50565b61565881614f8e565b811461566357600080fd5b50565b61566f81614fa0565b811461567a57600080fd5b50565b61568681614fcc565b811461569157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202cc21b53c460a525c268013dd8c2f38baca405873ef8608394ff8e75b027d15c64736f6c6343000804003300000000000000000000000050125c90bccb9fcae85afafff4d11c9f9f2e6a64

Deployed Bytecode

0x60806040526004361061023f5760003560e01c8063715018a61161012e578063b425bac3116100ab578063d543dbeb1161006f578063d543dbeb14610894578063dd62ed3e146108bd578063e379382a146108fa578063ea2f0b3714610925578063f2fde38b1461094e57610246565b8063b425bac3146107e7578063c3c8cd8014610812578063c552849014610829578063c7287e9d14610852578063c9567bf91461087d57610246565b8063a0c072d4116100f2578063a0c072d4146106dc578063a457c2d714610705578063a9059cbb14610742578063aa45026b1461077f578063aae11571146107aa57610246565b8063715018a6146106075780637d1db4a51461061e57806388f82020146106495780638da5cb5b1461068657806395d89b41146106b157610246565b806339509351116101bc57806349bd5a5e1161018057806349bd5a5e1461052257806352390c021461054d5780635342acb4146105765780636fc3eaec146105b357806370a08231146105ca57610246565b8063395093511461042b5780633b124fe7146104685780633bd5d17314610493578063437823ec146104bc5780634549b039146104e557610246565b806323b872dd1161020357806323b872dd146103345780632663236f146103715780632d8381191461039a578063313ce567146103d75780633685d4191461040257610246565b806306fdde031461024b578063095ea7b31461027657806313114a9d146102b35780631694505e146102de57806318160ddd1461030957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610977565b60405161026d9190614ad7565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906145a5565b610a09565b6040516102aa9190614aa1565b60405180910390f35b3480156102bf57600080fd5b506102c8610a27565b6040516102d59190614d59565b60405180910390f35b3480156102ea57600080fd5b506102f3610a31565b6040516103009190614abc565b60405180910390f35b34801561031557600080fd5b5061031e610a55565b60405161032b9190614d59565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190614556565b610a5f565b6040516103689190614aa1565b60405180910390f35b34801561037d57600080fd5b50610398600480360381019061039391906145e1565b610b38565b005b3480156103a657600080fd5b506103c160048036038101906103bc919061460a565b610c21565b6040516103ce9190614d59565b60405180910390f35b3480156103e357600080fd5b506103ec610c8f565b6040516103f99190614df7565b60405180910390f35b34801561040e57600080fd5b506104296004803603810190610424919061449f565b610ca6565b005b34801561043757600080fd5b50610452600480360381019061044d91906145a5565b61108d565b60405161045f9190614aa1565b60405180910390f35b34801561047457600080fd5b5061047d611140565b60405161048a9190614d59565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b5919061460a565b611146565b005b3480156104c857600080fd5b506104e360048036038101906104de919061449f565b6112c1565b005b3480156104f157600080fd5b5061050c60048036038101906105079190614633565b6113b1565b6040516105199190614d59565b60405180910390f35b34801561052e57600080fd5b50610537611435565b6040516105449190614a6b565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f919061449f565b611459565b005b34801561058257600080fd5b5061059d6004803603810190610598919061449f565b61170d565b6040516105aa9190614aa1565b60405180910390f35b3480156105bf57600080fd5b506105c8611763565b005b3480156105d657600080fd5b506105f160048036038101906105ec919061449f565b6117d5565b6040516105fe9190614d59565b60405180910390f35b34801561061357600080fd5b5061061c6118c0565b005b34801561062a57600080fd5b50610633611a13565b6040516106409190614d59565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b919061449f565b611a19565b60405161067d9190614aa1565b60405180910390f35b34801561069257600080fd5b5061069b611a6f565b6040516106a89190614a6b565b60405180910390f35b3480156106bd57600080fd5b506106c6611a98565b6040516106d39190614ad7565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe91906144f1565b611b2a565b005b34801561071157600080fd5b5061072c600480360381019061072791906145a5565b611c03565b6040516107399190614aa1565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906145a5565b611cd0565b6040516107769190614aa1565b60405180910390f35b34801561078b57600080fd5b50610794611cee565b6040516107a19190614d59565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc91906145e1565b611cf4565b6040516107de9190614aa1565b60405180910390f35b3480156107f357600080fd5b506107fc611db7565b6040516108099190614a86565b60405180910390f35b34801561081e57600080fd5b50610827611ddd565b005b34801561083557600080fd5b50610850600480360381019061084b919061466f565b611e57565b005b34801561085e57600080fd5b50610867611f7f565b6040516108749190614d59565b60405180910390f35b34801561088957600080fd5b50610892611f89565b005b3480156108a057600080fd5b506108bb60048036038101906108b6919061460a565b6120b6565b005b3480156108c957600080fd5b506108e460048036038101906108df919061451a565b61217c565b6040516108f19190614d59565b60405180910390f35b34801561090657600080fd5b5061090f612203565b60405161091c9190614aa1565b60405180910390f35b34801561093157600080fd5b5061094c6004803603810190610947919061449f565b612216565b005b34801561095a57600080fd5b506109756004803603810190610970919061449f565b612306565b005b6060600c80546109869061504c565b80601f01602080910402602001604051908101604052809291908181526020018280546109b29061504c565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a1d610a166124c8565b84846124d0565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b6000610a6c84848461269b565b610b2d84610a786124c8565b610b288560405180606001604052806028815260200161569560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ade6124c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a529092919063ffffffff16565b6124d0565b600190509392505050565b610b406124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490614c59565b60405180910390fd5b80601360156101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610c169190614aa1565b60405180910390a150565b6000600a54821115610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90614b19565b60405180910390fd5b6000610c72612ab6565b9050610c878184612ae190919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610cae6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290614c59565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90614b99565b60405180910390fd5b60005b600880549050811015611089578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110765760086001600880549050610e839190614f48565b81548110610eba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061103c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611089565b80806110819061507e565b915050610dca565b5050565b600061113661109a6124c8565b8461113185600560006110ab6124c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b6124d0565b6001905092915050565b600f5481565b60006111506124c8565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690614d19565b60405180910390fd5b60006111ea83612b89565b5050505050905061124381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061129b81600a54612be590919063ffffffff16565b600a819055506112b683600b54612b2b90919063ffffffff16565b600b81905550505050565b6112c96124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90614c59565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90614bb9565b60405180910390fd5b8161141857600061140884612b89565b505050505090508091505061142f565b600061142384612b89565b50505050915050809150505b92915050565b7f000000000000000000000000009d82155dce2e052e0230b9e5af7ad9582a7f1581565b6114616124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614c59565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290614b99565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561164f5761160b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c21565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117a46124c8565b73ffffffffffffffffffffffffffffffffffffffff16146117c457600080fd5b60004790506117d281612c2f565b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187057600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118bb565b6118b8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c21565b90505b919050565b6118c86124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614c59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054611aa79061504c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad39061504c565b8015611b205780601f10611af557610100808354040283529160200191611b20565b820191906000526020600020905b815481529060010190602001808311611b0357829003601f168201915b5050505050905090565b611b326124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614c59565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611cc6611c106124c8565b84611cc1856040518060600160405280602581526020016156bd6025913960056000611c3a6124c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a529092919063ffffffff16565b6124d0565b6001905092915050565b6000611ce4611cdd6124c8565b848461269b565b6001905092915050565b60115481565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614cd9565b60405180910390fd5b81601360156101000a81548160ff021916908315150217905550601360159054906101000a900460ff169050919050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e1e6124c8565b73ffffffffffffffffffffffffffffffffffffffff1614611e3e57600080fd5b6000611e49306117d5565b9050611e5481612c9b565b50565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede90614cd9565b60405180910390fd5b600c8210611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614d39565b60405180910390fd5b600c8110611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614c39565b60405180910390fd5b80600f81905550806011819055505050565b6000601154905090565b611f916124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590614c59565b60405180910390fd5b601360169054906101000a900460ff161561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614c79565b60405180910390fd5b6002600f8190555060096011819055506001601360166101000a81548160ff0219169083151502179055506001601360156101000a81548160ff021916908315150217905550565b6120be6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614c59565b60405180910390fd5b612173606461216583600954612f5990919063ffffffff16565b612ae190919063ffffffff16565b60148190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601360159054906101000a900460ff1681565b61221e6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a290614c59565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61230e6124c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239290614c59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614b39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253790614cf9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790614b59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161268e9190614d59565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290614cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614af9565b60405180910390fd5b600081116127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614c99565b60405180910390fd5b6127c6611a6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128345750612804611a6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128ce5760145481111561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614bd9565b60405180910390fd5b601360169054906101000a900460ff166128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490614bf9565b60405180910390fd5b5b60006128d9306117d5565b905060145481106128ea5760145490505b6000601554821015905080801561290e5750601360149054906101000a900460ff16155b801561296657507f000000000000000000000000009d82155dce2e052e0230b9e5af7ad9582a7f1573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561297e5750601360159054906101000a900460ff165b1561298d5761298c82612fd4565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a345750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a3e57600090505b612a4a8686868461307c565b505050505050565b6000838311158290612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a919190614ad7565b60405180910390fd5b5060008385612aa99190614f48565b9050809150509392505050565b6000806000612ac361338d565b91509150612ada8183612ae190919063ffffffff16565b9250505090565b6000612b2383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136d8565b905092915050565b6000808284612b3a9190614e67565b905083811015612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690614b79565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ba08a61373b565b9250925092506000806000612bbe8d8686612bb9612ab6565b613795565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612c2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a52565b905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c97573d6000803e3d6000fd5b5050565b6000600267ffffffffffffffff811115612cde577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612d0c5781602001602082028036833780820191505090505b5090503081600081518110612d4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612dea57600080fd5b505afa158015612dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2291906144c8565b81600181518110612e5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ec1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124d0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f23959493929190614d74565b600060405180830381600087803b158015612f3d57600080fd5b505af1158015612f51573d6000803e3d6000fd5b505050505050565b600080831415612f6c5760009050612fce565b60008284612f7a9190614eee565b9050828482612f899190614ebd565b14612fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc090614c19565b60405180910390fd5b809150505b92915050565b6001601360146101000a81548160ff0219169083151502179055506000819050600047905061300282612c9b565b60006130178247612be590919063ffffffff16565b905061302281612c2f565b7f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8382604051613053929190614dce565b60405180910390a15050506000601360146101000a81548160ff02191690831515021790555050565b8061308a5761308961381e565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131425761313d848484613861565b613379565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e55750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131fa576131f5848484613ac1565b613378565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561329e5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b3576132ae848484613d21565b613377565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336a57613365848484613eec565b613376565b613375848484613d21565b5b5b5b5b80613387576133866141e1565b5b50505050565b6000806000600a5490506000600954905060005b60088054905081101561369b578260036000600884815481106133ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135015750816004600060088481548110613499577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561351857600a54600954945094505050506136d4565b6135ce6003600060088481548110613559577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612be590919063ffffffff16565b92506136866004600060088481548110613611577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612be590919063ffffffff16565b915080806136939061507e565b9150506133a1565b506136b3600954600a54612ae190919063ffffffff16565b8210156136cb57600a546009549350935050506136d4565b81819350935050505b9091565b6000808311829061371f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137169190614ad7565b60405180910390fd5b506000838561372e9190614ebd565b9050809150509392505050565b60008060008061374a856141f5565b9050600061375786614226565b9050600061378082613772858a612be590919063ffffffff16565b612be590919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137ae8589612f5990919063ffffffff16565b905060006137c58689612f5990919063ffffffff16565b905060006137dc8789612f5990919063ffffffff16565b90506000613805826137f78587612be590919063ffffffff16565b612be590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600f5414801561383257506000601154145b1561383c5761385f565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b60008060008060008061387387612b89565b9550955095509550955095506138d187600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061396686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139fb85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a4781614257565b613a5184836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613aae9190614d59565b60405180910390a3505050505050505050565b600080600080600080613ad387612b89565b955095509550955095509550613b3186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc683600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5b85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca781614257565b613cb184836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d0e9190614d59565b60405180910390a3505050505050505050565b600080600080600080613d3387612b89565b955095509550955095509550613d9186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7281614257565b613e7c84836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ed99190614d59565b60405180910390a3505050505050505050565b600080600080600080613efe87612b89565b955095509550955095509550613f5c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ff186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061408683600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411b85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416781614257565b61417184836143fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141ce9190614d59565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550565b600061421f6064614211600f5485612f5990919063ffffffff16565b612ae190919063ffffffff16565b9050919050565b6000614250606461424260115485612f5990919063ffffffff16565b612ae190919063ffffffff16565b9050919050565b6000614261612ab6565b905060006142788284612f5990919063ffffffff16565b90506142cc81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143f7576143b383600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2b90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61441182600a54612be590919063ffffffff16565b600a8190555061442c81600b54612b2b90919063ffffffff16565b600b819055505050565b60008135905061444581615638565b92915050565b60008151905061445a81615638565b92915050565b60008135905061446f8161564f565b92915050565b60008135905061448481615666565b92915050565b6000813590506144998161567d565b92915050565b6000602082840312156144b157600080fd5b60006144bf84828501614436565b91505092915050565b6000602082840312156144da57600080fd5b60006144e88482850161444b565b91505092915050565b60006020828403121561450357600080fd5b600061451184828501614460565b91505092915050565b6000806040838503121561452d57600080fd5b600061453b85828601614436565b925050602061454c85828601614436565b9150509250929050565b60008060006060848603121561456b57600080fd5b600061457986828701614436565b935050602061458a86828701614436565b925050604061459b8682870161448a565b9150509250925092565b600080604083850312156145b857600080fd5b60006145c685828601614436565b92505060206145d78582860161448a565b9150509250929050565b6000602082840312156145f357600080fd5b600061460184828501614475565b91505092915050565b60006020828403121561461c57600080fd5b600061462a8482850161448a565b91505092915050565b6000806040838503121561464657600080fd5b60006146548582860161448a565b925050602061466585828601614475565b9150509250929050565b6000806040838503121561468257600080fd5b60006146908582860161448a565b92505060206146a18582860161448a565b9150509250929050565b60006146b783836146d2565b60208301905092915050565b6146cc81614f8e565b82525050565b6146db81614f7c565b82525050565b6146ea81614f7c565b82525050565b60006146fb82614e22565b6147058185614e45565b935061471083614e12565b8060005b8381101561474157815161472888826146ab565b975061473383614e38565b925050600181019050614714565b5085935050505092915050565b61475781614fa0565b82525050565b61476681614fe3565b82525050565b61477581615007565b82525050565b600061478682614e2d565b6147908185614e56565b93506147a0818560208601615019565b6147a981615154565b840191505092915050565b60006147c1602383614e56565b91506147cc82615165565b604082019050919050565b60006147e4602a83614e56565b91506147ef826151b4565b604082019050919050565b6000614807602683614e56565b915061481282615203565b604082019050919050565b600061482a602283614e56565b915061483582615252565b604082019050919050565b600061484d601b83614e56565b9150614858826152a1565b602082019050919050565b6000614870601b83614e56565b915061487b826152ca565b602082019050919050565b6000614893601f83614e56565b915061489e826152f3565b602082019050919050565b60006148b6602883614e56565b91506148c18261531c565b604082019050919050565b60006148d9601c83614e56565b91506148e48261536b565b602082019050919050565b60006148fc602183614e56565b915061490782615394565b604082019050919050565b600061491f602283614e56565b915061492a826153e3565b604082019050919050565b6000614942602083614e56565b915061494d82615432565b602082019050919050565b6000614965602083614e56565b91506149708261545b565b602082019050919050565b6000614988602983614e56565b915061499382615484565b604082019050919050565b60006149ab602583614e56565b91506149b6826154d3565b604082019050919050565b60006149ce601d83614e56565b91506149d982615522565b602082019050919050565b60006149f1602483614e56565b91506149fc8261554b565b604082019050919050565b6000614a14602c83614e56565b9150614a1f8261559a565b604082019050919050565b6000614a37602983614e56565b9150614a42826155e9565b604082019050919050565b614a5681614fcc565b82525050565b614a6581614fd6565b82525050565b6000602082019050614a8060008301846146e1565b92915050565b6000602082019050614a9b60008301846146c3565b92915050565b6000602082019050614ab6600083018461474e565b92915050565b6000602082019050614ad1600083018461475d565b92915050565b60006020820190508181036000830152614af1818461477b565b905092915050565b60006020820190508181036000830152614b12816147b4565b9050919050565b60006020820190508181036000830152614b32816147d7565b9050919050565b60006020820190508181036000830152614b52816147fa565b9050919050565b60006020820190508181036000830152614b728161481d565b9050919050565b60006020820190508181036000830152614b9281614840565b9050919050565b60006020820190508181036000830152614bb281614863565b9050919050565b60006020820190508181036000830152614bd281614886565b9050919050565b60006020820190508181036000830152614bf2816148a9565b9050919050565b60006020820190508181036000830152614c12816148cc565b9050919050565b60006020820190508181036000830152614c32816148ef565b9050919050565b60006020820190508181036000830152614c5281614912565b9050919050565b60006020820190508181036000830152614c7281614935565b9050919050565b60006020820190508181036000830152614c9281614958565b9050919050565b60006020820190508181036000830152614cb28161497b565b9050919050565b60006020820190508181036000830152614cd28161499e565b9050919050565b60006020820190508181036000830152614cf2816149c1565b9050919050565b60006020820190508181036000830152614d12816149e4565b9050919050565b60006020820190508181036000830152614d3281614a07565b9050919050565b60006020820190508181036000830152614d5281614a2a565b9050919050565b6000602082019050614d6e6000830184614a4d565b92915050565b600060a082019050614d896000830188614a4d565b614d96602083018761476c565b8181036040830152614da881866146f0565b9050614db760608301856146e1565b614dc46080830184614a4d565b9695505050505050565b6000604082019050614de36000830185614a4d565b614df06020830184614a4d565b9392505050565b6000602082019050614e0c6000830184614a5c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614e7282614fcc565b9150614e7d83614fcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614eb257614eb16150c7565b5b828201905092915050565b6000614ec882614fcc565b9150614ed383614fcc565b925082614ee357614ee26150f6565b5b828204905092915050565b6000614ef982614fcc565b9150614f0483614fcc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f3d57614f3c6150c7565b5b828202905092915050565b6000614f5382614fcc565b9150614f5e83614fcc565b925082821015614f7157614f706150c7565b5b828203905092915050565b6000614f8782614fac565b9050919050565b6000614f9982614fac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614fee82614ff5565b9050919050565b600061500082614fac565b9050919050565b600061501282614fcc565b9050919050565b60005b8381101561503757808201518184015260208101905061501c565b83811115615046576000848401525b50505050565b6000600282049050600182168061506457607f821691505b6020821081141561507857615077615125565b5b50919050565b600061508982614fcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150bc576150bb6150c7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f54726164696e6720686173206e6f74206265656e20656e61626c656400000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f446576207461782063616e206e6f742062652067726561746572207468616e2060008201527f3130000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54726164696e672068617320616c7265616479204265656e20656e61626c6564600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7941646d696e2063616e2064697361626c652064657620666565000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f5265666c656374696f6e207461782063616e206e6f742062652067726561746560008201527f72207468616e2031300000000000000000000000000000000000000000000000602082015250565b61564181614f7c565b811461564c57600080fd5b50565b61565881614f8e565b811461566357600080fd5b50565b61566f81614fa0565b811461567a57600080fd5b50565b61568681614fcc565b811461569157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202cc21b53c460a525c268013dd8c2f38baca405873ef8608394ff8e75b027d15c64736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000050125c90bccb9fcae85afafff4d11c9f9f2e6a64

-----Decoded View---------------
Arg [0] : devWalletAddress (address): 0x50125C90BCCB9fcaE85afAFfF4d11c9f9F2e6a64

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000050125c90bccb9fcae85afafff4d11c9f9f2e6a64


Deployed Bytecode Sourcemap

24911:19314:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27445:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29048:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25899:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28413:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29217:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33514:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31093:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27631:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31809:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29538:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25692:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30264:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32954:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30649:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25957:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31354:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37601:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33896:185;;;;;;;;;;;;;:::i;:::-;;28516:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16260:148;;;;;;;;;;;;;:::i;:::-;;26131:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30041:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15617:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27536:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33199:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29764:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28722:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25771:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27726:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25850:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33698:186;;;;;;;;;;;;;:::i;:::-;;28070:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37736:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36985:235;;;;;;;;;;;;;:::i;:::-;;33344:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28897:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26033:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33077:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16563:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27445:83;27482:13;27515:5;27508:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27445:83;:::o;29048:161::-;29123:4;29140:39;29149:12;:10;:12::i;:::-;29163:7;29172:6;29140:8;:39::i;:::-;29197:4;29190:11;;29048:161;;;;:::o;30169:87::-;30211:7;30238:10;;30231:17;;30169:87;:::o;25899:51::-;;;:::o;28413:95::-;28466:7;28493;;28486:14;;28413:95;:::o;29217:313::-;29315:4;29332:36;29342:6;29350:9;29361:6;29332:9;:36::i;:::-;29379:121;29388:6;29396:12;:10;:12::i;:::-;29410:89;29448:6;29410:89;;;;;;;;;;;;;;;;;:11;:19;29422:6;29410:19;;;;;;;;;;;;;;;:33;29430:12;:10;:12::i;:::-;29410:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29379:8;:121::i;:::-;29518:4;29511:11;;29217:313;;;;;:::o;33514:162::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33609:8:::1;33588:18;;:29;;;;;;;;;;;;;;;;;;33633:35;33659:8;33633:35;;;;;;:::i;:::-;;;;;;;;33514:162:::0;:::o;31093:253::-;31159:7;31198;;31187;:18;;31179:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31263:19;31286:10;:8;:10::i;:::-;31263:33;;31314:24;31326:11;31314:7;:11;;:24;;;;:::i;:::-;31307:31;;;31093:253;;;:::o;27631:83::-;27672:5;27697:9;;;;;;;;;;;27690:16;;27631:83;:::o;31809:479::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31891:11:::1;:20;31903:7;31891:20;;;;;;;;;;;;;;;;;;;;;;;;;31883:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31959:9;31954:327;31978:9;:16;;;;31974:1;:20;31954:327;;;32036:7;32020:23;;:9;32030:1;32020:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;32016:254;;;32079:9;32108:1;32089:9;:16;;;;:20;;;;:::i;:::-;32079:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32064:9;32074:1;32064:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32148:1;32129:7;:16;32137:7;32129:16;;;;;;;;;;;;;;;:20;;;;32191:5;32168:11;:20;32180:7;32168:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32215:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32249:5;;32016:254;31996:3;;;;;:::i;:::-;;;;31954:327;;;;31809:479:::0;:::o;29538:218::-;29626:4;29643:83;29652:12;:10;:12::i;:::-;29666:7;29675:50;29714:10;29675:11;:25;29687:12;:10;:12::i;:::-;29675:25;;;;;;;;;;;;;;;:34;29701:7;29675:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29643:8;:83::i;:::-;29744:4;29737:11;;29538:218;;;;:::o;25692:22::-;;;;:::o;30264:377::-;30316:14;30333:12;:10;:12::i;:::-;30316:29;;30365:11;:19;30377:6;30365:19;;;;;;;;;;;;;;;;;;;;;;;;;30364:20;30356:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30445:15;30469:19;30480:7;30469:10;:19::i;:::-;30444:44;;;;;;;30517:28;30537:7;30517;:15;30525:6;30517:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30499:7;:15;30507:6;30499:15;;;;;;;;;;;;;;;:46;;;;30566:20;30578:7;30566;;:11;;:20;;;;:::i;:::-;30556:7;:30;;;;30610:23;30625:7;30610:10;;:14;;:23;;;;:::i;:::-;30597:10;:36;;;;30264:377;;;:::o;32954:111::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33053:4:::1;33023:18;:27;33042:7;33023:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32954:111:::0;:::o;30649:436::-;30739:7;30778;;30767;:18;;30759:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30837:17;30832:246;;30872:15;30896:19;30907:7;30896:10;:19::i;:::-;30871:44;;;;;;;30937:7;30930:14;;;;;30832:246;30979:23;31010:19;31021:7;31010:10;:19::i;:::-;30977:52;;;;;;;31051:15;31044:22;;;30649:436;;;;;:::o;25957:38::-;;;:::o;31354:447::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31551:11:::1;:20;31563:7;31551:20;;;;;;;;;;;;;;;;;;;;;;;;;31550:21;31542:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31636:1;31617:7;:16;31625:7;31617:16;;;;;;;;;;;;;;;;:20;31614:108;;;31673:37;31693:7;:16;31701:7;31693:16;;;;;;;;;;;;;;;;31673:19;:37::i;:::-;31654:7;:16;31662:7;31654:16;;;;;;;;;;;;;;;:56;;;;31614:108;31755:4;31732:11;:20;31744:7;31732:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31770:9;31785:7;31770:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31354:447:::0;:::o;37601:123::-;37665:4;37689:18;:27;37708:7;37689:27;;;;;;;;;;;;;;;;;;;;;;;;;37682:34;;37601:123;;;:::o;33896:185::-;33962:6;;;;;;;;;;;33946:22;;:12;:10;:12::i;:::-;:22;;;33938:31;;;;;;33980:26;34009:21;33980:50;;34041:32;34054:18;34041:12;:32::i;:::-;33896:185;:::o;28516:198::-;28582:7;28606:11;:20;28618:7;28606:20;;;;;;;;;;;;;;;;;;;;;;;;;28602:49;;;28635:7;:16;28643:7;28635:16;;;;;;;;;;;;;;;;28628:23;;;;28602:49;28669:37;28689:7;:16;28697:7;28689:16;;;;;;;;;;;;;;;;28669:19;:37::i;:::-;28662:44;;28516:198;;;;:::o;16260:148::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16367:1:::1;16330:40;;16351:6;::::0;::::1;;;;;;;;16330:40;;;;;;;;;;;;16398:1;16381:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16260:148::o:0;26131:50::-;;;;:::o;30041:120::-;30109:4;30133:11;:20;30145:7;30133:20;;;;;;;;;;;;;;;;;;;;;;;;;30126:27;;30041:120;;;:::o;15617:79::-;15655:7;15682:6;;;;;;;;;;;15675:13;;15617:79;:::o;27536:87::-;27575:13;27608:7;27601:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27536:87;:::o;33199:133::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33308:16:::1;33288:17;;:36;;;;;;;;;;;;;;;;;;33199:133:::0;:::o;29764:269::-;29857:4;29874:129;29883:12;:10;:12::i;:::-;29897:7;29906:96;29945:15;29906:96;;;;;;;;;;;;;;;;;:11;:25;29918:12;:10;:12::i;:::-;29906:25;;;;;;;;;;;;;;;:34;29932:7;29906:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29874:8;:129::i;:::-;30021:4;30014:11;;29764:269;;;;:::o;28722:167::-;28800:4;28817:42;28827:12;:10;:12::i;:::-;28841:9;28852:6;28817:9;:42::i;:::-;28877:4;28870:11;;28722:167;;;;:::o;25771:22::-;;;;:::o;27726:234::-;27791:4;27829:6;;;;;;;;;;;27815:20;;:10;:20;;;27807:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27901:14;27880:18;;:35;;;;;;;;;;;;;;;;;;27933:18;;;;;;;;;;;27926:26;;27726:234;;;:::o;25850:40::-;;;;;;;;;;;;;:::o;33698:186::-;33764:6;;;;;;;;;;;33748:22;;:12;:10;:12::i;:::-;:22;;;33740:31;;;;;;33782:23;33808:24;33826:4;33808:9;:24::i;:::-;33782:50;;33843:33;33860:15;33843:16;:33::i;:::-;33698:186;:::o;28070:335::-;28162:6;;;;;;;;;;;28148:20;;:10;:20;;;28140:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28228:2;28221:6;:9;28213:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28302:2;28295:6;:9;28287:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28364:6;28354:7;:16;;;;28391:6;28381:7;:16;;;;28070:335;;:::o;37736:83::-;37777:7;37804;;37797:14;;37736:83;:::o;36985:235::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37049:14:::1;;;;;;;;;;;37048:15;37040:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37121:1;37111:7;:11;;;;37143:1;37133:7;:11;;;;37172:4;37155:14;;:21;;;;;;;;;;;;;;;;;;37208:4;37187:18;;:25;;;;;;;;;;;;;;;;;;36985:235::o:0;33344:162::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33438:60:::1;33482:5;33438:25;33450:12;33438:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;33423:12;:75;;;;33344:162:::0;:::o;28897:143::-;28978:7;29005:11;:18;29017:5;29005:18;;;;;;;;;;;;;;;:27;29024:7;29005:27;;;;;;;;;;;;;;;;28998:34;;28897:143;;;;:::o;26033:37::-;;;;;;;;;;;;;:::o;33077:110::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33174:5:::1;33144:18;:27;33163:7;33144:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33077:110:::0;:::o;16563:244::-;15839:12;:10;:12::i;:::-;15829:22;;:6;;;;;;;;;;:22;;;15821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16672:1:::1;16652:22;;:8;:22;;;;16644:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16762:8;16733:38;;16754:6;::::0;::::1;;;;;;;;16733:38;;;;;;;;;;;;16791:8;16782:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16563:244:::0;:::o;8042:98::-;8095:7;8122:10;8115:17;;8042:98;:::o;37827:337::-;37937:1;37920:19;;:5;:19;;;;37912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38018:1;37999:21;;:7;:21;;;;37991:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38102:6;38072:11;:18;38084:5;38072:18;;;;;;;;;;;;;;;:27;38091:7;38072:27;;;;;;;;;;;;;;;:36;;;;38140:7;38124:32;;38133:5;38124:32;;;38149:6;38124:32;;;;;;:::i;:::-;;;;;;;;37827:337;;;:::o;38172:1838::-;38310:1;38294:18;;:4;:18;;;;38286:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38387:1;38373:16;;:2;:16;;;;38365:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38457:1;38448:6;:10;38440:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38546:7;:5;:7::i;:::-;38538:15;;:4;:15;;;;:32;;;;;38563:7;:5;:7::i;:::-;38557:13;;:2;:13;;;;38538:32;38535:209;;;38605:12;;38595:6;:22;;38587:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38685:14;;;;;;;;;;;38677:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38535:209;39036:28;39067:24;39085:4;39067:9;:24::i;:::-;39036:55;;39139:12;;39115:20;:36;39112:112;;39200:12;;39177:35;;39112:112;39244:24;39295:29;;39271:20;:53;;39244:80;;39353:19;:50;;;;;39390:13;;;;;;;;;;;39389:14;39353:50;:88;;;;;39428:13;39420:21;;:4;:21;;;;39353:88;:123;;;;;39458:18;;;;;;;;;;;39353:123;39335:242;;;39532:33;39544:20;39532:11;:33::i;:::-;39335:242;39658:12;39673:4;39658:19;;39785:18;:24;39804:4;39785:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;39813:18;:22;39832:2;39813:22;;;;;;;;;;;;;;;;;;;;;;;;;39785:50;39782:96;;;39861:5;39851:15;;39782:96;39964:38;39979:4;39984:2;39987:6;39994:7;39964:14;:38::i;:::-;38172:1838;;;;;;:::o;4450:192::-;4536:7;4569:1;4564;:6;;4572:12;4556:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4596:9;4612:1;4608;:5;;;;:::i;:::-;4596:17;;4633:1;4626:8;;;4450:192;;;;;:::o;35538:163::-;35579:7;35600:15;35617;35636:19;:17;:19::i;:::-;35599:56;;;;35673:20;35685:7;35673;:11;;:20;;;;:::i;:::-;35666:27;;;;35538:163;:::o;5848:132::-;5906:7;5933:39;5937:1;5940;5933:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5926:46;;5848:132;;;;:::o;3547:181::-;3605:7;3625:9;3641:1;3637;:5;;;;:::i;:::-;3625:17;;3666:1;3661;:6;;3653:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3719:1;3712:8;;;3547:181;;;;:::o;34342:419::-;34401:7;34410;34419;34428;34437;34446;34467:23;34492:12;34506:18;34528:20;34540:7;34528:11;:20::i;:::-;34466:82;;;;;;34560:15;34577:23;34602:12;34618:50;34630:7;34639:4;34645:10;34657;:8;:10::i;:::-;34618:11;:50::i;:::-;34559:109;;;;;;34687:7;34696:15;34713:4;34719:15;34736:4;34742:10;34679:74;;;;;;;;;;;;;;;;;;34342:419;;;;;;;:::o;4011:136::-;4069:7;4096:43;4100:1;4103;4096:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4089:50;;4011:136;;;;:::o;40935:97::-;40990:17;;;;;;;;;;;:26;;:34;41017:6;40990:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40935:97;:::o;41040:589::-;41166:21;41204:1;41190:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41166:40;;41235:4;41217;41222:1;41217:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41261:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41251:4;41256:1;41251:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;41296:62;41313:4;41328:15;41346:11;41296:8;:62::i;:::-;41397:15;:66;;;41478:11;41504:1;41548:4;41575;41595:15;41397:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41040:589;;:::o;4901:471::-;4959:7;5209:1;5204;:6;5200:47;;;5234:1;5227:8;;;;5200:47;5259:9;5275:1;5271;:5;;;;:::i;:::-;5259:17;;5304:1;5299;5295;:5;;;;:::i;:::-;:10;5287:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5363:1;5356:8;;;4901:471;;;;;:::o;40018:909::-;26564:4;26548:13;;:20;;;;;;;;;;;;;;;;;;40151::::1;40174;40151:43;;40472:22;40497:21;40472:46;;40563:30;40580:12;40563:16;:30::i;:::-;40720:18;40741:41;40767:14;40741:21;:25;;:41;;;;:::i;:::-;40720:62;;40795:24;40808:10;40795:12;:24::i;:::-;40882:37;40894:12;40908:10;40882:37;;;;;;;:::i;:::-;;;;;;;;26579:1;;;26607:5:::0;26591:13;;:21;;;;;;;;;;;;;;;;;;40018:909;:::o;41710:834::-;41821:7;41817:40;;41843:14;:12;:14::i;:::-;41817:40;41882:11;:19;41894:6;41882:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41906:11;:22;41918:9;41906:22;;;;;;;;;;;;;;;;;;;;;;;;;41905:23;41882:46;41878:597;;;41945:48;41967:6;41975:9;41986:6;41945:21;:48::i;:::-;41878:597;;;42016:11;:19;42028:6;42016:19;;;;;;;;;;;;;;;;;;;;;;;;;42015:20;:46;;;;;42039:11;:22;42051:9;42039:22;;;;;;;;;;;;;;;;;;;;;;;;;42015:46;42011:464;;;42078:46;42098:6;42106:9;42117:6;42078:19;:46::i;:::-;42011:464;;;42147:11;:19;42159:6;42147:19;;;;;;;;;;;;;;;;;;;;;;;;;42146:20;:47;;;;;42171:11;:22;42183:9;42171:22;;;;;;;;;;;;;;;;;;;;;;;;;42170:23;42146:47;42142:333;;;42210:44;42228:6;42236:9;42247:6;42210:17;:44::i;:::-;42142:333;;;42276:11;:19;42288:6;42276:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42299:11;:22;42311:9;42299:22;;;;;;;;;;;;;;;;;;;;;;;;;42276:45;42272:203;;;42338:48;42360:6;42368:9;42379:6;42338:21;:48::i;:::-;42272:203;;;42419:44;42437:6;42445:9;42456:6;42419:17;:44::i;:::-;42272:203;42142:333;42011:464;41878:597;42499:7;42495:41;;42521:15;:13;:15::i;:::-;42495:41;41710:834;;;;:::o;35709:561::-;35759:7;35768;35788:15;35806:7;;35788:25;;35824:15;35842:7;;35824:25;;35871:9;35866:289;35890:9;:16;;;;35886:1;:20;35866:289;;;35956:7;35932;:21;35940:9;35950:1;35940:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35932:21;;;;;;;;;;;;;;;;:31;:66;;;;35991:7;35967;:21;35975:9;35985:1;35975:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35967:21;;;;;;;;;;;;;;;;:31;35932:66;35928:97;;;36008:7;;36017;;36000:25;;;;;;;;;35928:97;36050:34;36062:7;:21;36070:9;36080:1;36070:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36062:21;;;;;;;;;;;;;;;;36050:7;:11;;:34;;;;:::i;:::-;36040:44;;36109:34;36121:7;:21;36129:9;36139:1;36129:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36121:21;;;;;;;;;;;;;;;;36109:7;:11;;:34;;;;:::i;:::-;36099:44;;35908:3;;;;;:::i;:::-;;;;35866:289;;;;36179:20;36191:7;;36179;;:11;;:20;;;;:::i;:::-;36169:7;:30;36165:61;;;36209:7;;36218;;36201:25;;;;;;;;36165:61;36245:7;36254;36237:25;;;;;;35709:561;;;:::o;6476:278::-;6562:7;6594:1;6590;:5;6597:12;6582:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6621:9;6637:1;6633;:5;;;;:::i;:::-;6621:17;;6745:1;6738:8;;;6476:278;;;;;:::o;34769:324::-;34829:7;34838;34847;34867:12;34882:24;34898:7;34882:15;:24::i;:::-;34867:39;;34917:18;34938:24;34954:7;34938:15;:24::i;:::-;34917:45;;34973:23;34999:33;35021:10;34999:17;35011:4;34999:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34973:59;;35051:15;35068:4;35074:10;35043:42;;;;;;;;;34769:324;;;;;:::o;35101:429::-;35216:7;35225;35234;35254:15;35272:24;35284:11;35272:7;:11;;:24;;;;:::i;:::-;35254:42;;35307:12;35322:21;35331:11;35322:4;:8;;:21;;;;:::i;:::-;35307:36;;35354:18;35375:27;35390:11;35375:10;:14;;:27;;;;:::i;:::-;35354:48;;35413:23;35439:33;35461:10;35439:17;35451:4;35439:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;35413:59;;35491:7;35500:15;35517:4;35483:39;;;;;;;;;;35101:429;;;;;;;;:::o;37238:226::-;37295:1;37284:7;;:12;:28;;;;;37311:1;37300:7;;:12;37284:28;37281:40;;;37314:7;;37281:40;37359:7;;37341:15;:25;;;;37395:7;;37377:15;:25;;;;37433:1;37423:7;:11;;;;37455:1;37445:7;:11;;;;37238:226;:::o;43656:566::-;43759:15;43776:23;43801:12;43815:23;43840:12;43854:18;43876:19;43887:7;43876:10;:19::i;:::-;43758:137;;;;;;;;;;;;43924:28;43944:7;43924;:15;43932:6;43924:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43906:7;:15;43914:6;43906:15;;;;;;;;;;;;;;;:46;;;;43981:28;44001:7;43981;:15;43989:6;43981:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43963:7;:15;43971:6;43963:15;;;;;;;;;;;;;;;:46;;;;44041:39;44064:15;44041:7;:18;44049:9;44041:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44020:7;:18;44028:9;44020:18;;;;;;;;;;;;;;;:60;;;;44094:26;44109:10;44094:14;:26::i;:::-;44131:23;44143:4;44149;44131:11;:23::i;:::-;44187:9;44170:44;;44179:6;44170:44;;;44198:15;44170:44;;;;;;:::i;:::-;;;;;;;;43656:566;;;;;;;;;:::o;43062:586::-;43163:15;43180:23;43205:12;43219:23;43244:12;43258:18;43280:19;43291:7;43280:10;:19::i;:::-;43162:137;;;;;;;;;;;;43328:28;43348:7;43328;:15;43336:6;43328:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43310:7;:15;43318:6;43310:15;;;;;;;;;;;;;;;:46;;;;43388:39;43411:15;43388:7;:18;43396:9;43388:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43367:7;:18;43375:9;43367:18;;;;;;;;;;;;;;;:60;;;;43459:39;43482:15;43459:7;:18;43467:9;43459:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43438:7;:18;43446:9;43438:18;;;;;;;;;;;;;;;:60;;;;43520:26;43535:10;43520:14;:26::i;:::-;43557:23;43569:4;43575;43557:11;:23::i;:::-;43613:9;43596:44;;43605:6;43596:44;;;43624:15;43596:44;;;;;;:::i;:::-;;;;;;;;43062:586;;;;;;;;;:::o;42552:502::-;42651:15;42668:23;42693:12;42707:23;42732:12;42746:18;42768:19;42779:7;42768:10;:19::i;:::-;42650:137;;;;;;;;;;;;42816:28;42836:7;42816;:15;42824:6;42816:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42798:7;:15;42806:6;42798:15;;;;;;;;;;;;;;;:46;;;;42876:39;42899:15;42876:7;:18;42884:9;42876:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42855:7;:18;42863:9;42855:18;;;;;;;;;;;;;;;:60;;;;42926:26;42941:10;42926:14;:26::i;:::-;42963:23;42975:4;42981;42963:11;:23::i;:::-;43019:9;43002:44;;43011:6;43002:44;;;43030:15;43002:44;;;;;;:::i;:::-;;;;;;;;42552:502;;;;;;;;;:::o;32300:642::-;32403:15;32420:23;32445:12;32459:23;32484:12;32498:18;32520:19;32531:7;32520:10;:19::i;:::-;32402:137;;;;;;;;;;;;32568:28;32588:7;32568;:15;32576:6;32568:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32550:7;:15;32558:6;32550:15;;;;;;;;;;;;;;;:46;;;;32625:28;32645:7;32625;:15;32633:6;32625:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32607:7;:15;32615:6;32607:15;;;;;;;;;;;;;;;:46;;;;32685:39;32708:15;32685:7;:18;32693:9;32685:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32664:7;:18;32672:9;32664:18;;;;;;;;;;;;;;;:60;;;;32756:39;32779:15;32756:7;:18;32764:9;32756:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32735:7;:18;32743:9;32735:18;;;;;;;;;;;;;;;:60;;;;32814:26;32829:10;32814:14;:26::i;:::-;32851:23;32863:4;32869;32851:11;:23::i;:::-;32907:9;32890:44;;32899:6;32890:44;;;32918:15;32890:44;;;;;;:::i;:::-;;;;;;;;32300:642;;;;;;;;;:::o;37476:113::-;37530:15;;37520:7;:25;;;;37566:15;;37556:7;:25;;;;37476:113::o;36649:154::-;36713:7;36740:55;36779:5;36740:20;36752:7;;36740;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36733:62;;36649:154;;;:::o;36811:::-;36875:7;36902:55;36941:5;36902:20;36914:7;;36902;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36895:62;;36811:154;;;:::o;36282:355::-;36345:19;36368:10;:8;:10::i;:::-;36345:33;;36389:18;36410:27;36425:11;36410:10;:14;;:27;;;;:::i;:::-;36389:48;;36473:38;36500:10;36473:7;:22;36489:4;36473:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36448:7;:22;36464:4;36448:22;;;;;;;;;;;;;;;:63;;;;36525:11;:26;36545:4;36525:26;;;;;;;;;;;;;;;;;;;;;;;;;36522:107;;;36591:38;36618:10;36591:7;:22;36607:4;36591:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36566:7;:22;36582:4;36566:22;;;;;;;;;;;;;;;:63;;;;36522:107;36282:355;;;:::o;34187:147::-;34265:17;34277:4;34265:7;;:11;;:17;;;;:::i;:::-;34255:7;:27;;;;34306:20;34321:4;34306:10;;:14;;:20;;;;:::i;:::-;34293:10;:33;;;;34187:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;653:87;;;;:::o;746:262::-;805:6;854:2;842:9;833:7;829:23;825:32;822:2;;;870:1;867;860:12;822:2;913:1;938:53;983:7;974:6;963:9;959:22;938:53;:::i;:::-;928:63;;884:117;812:196;;;;:::o;1014:284::-;1084:6;1133:2;1121:9;1112:7;1108:23;1104:32;1101:2;;;1149:1;1146;1139:12;1101:2;1192:1;1217:64;1273:7;1264:6;1253:9;1249:22;1217:64;:::i;:::-;1207:74;;1163:128;1091:207;;;;:::o;1304:278::-;1371:6;1420:2;1408:9;1399:7;1395:23;1391:32;1388:2;;;1436:1;1433;1426:12;1388:2;1479:1;1504:61;1557:7;1548:6;1537:9;1533:22;1504:61;:::i;:::-;1494:71;;1450:125;1378:204;;;;:::o;1588:407::-;1656:6;1664;1713:2;1701:9;1692:7;1688:23;1684:32;1681:2;;;1729:1;1726;1719:12;1681:2;1772:1;1797:53;1842:7;1833:6;1822:9;1818:22;1797:53;:::i;:::-;1787:63;;1743:117;1899:2;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1870:118;1671:324;;;;;:::o;2001:552::-;2078:6;2086;2094;2143:2;2131:9;2122:7;2118:23;2114:32;2111:2;;;2159:1;2156;2149:12;2111:2;2202:1;2227:53;2272:7;2263:6;2252:9;2248:22;2227:53;:::i;:::-;2217:63;;2173:117;2329:2;2355:53;2400:7;2391:6;2380:9;2376:22;2355:53;:::i;:::-;2345:63;;2300:118;2457:2;2483:53;2528:7;2519:6;2508:9;2504:22;2483:53;:::i;:::-;2473:63;;2428:118;2101:452;;;;;:::o;2559:407::-;2627:6;2635;2684:2;2672:9;2663:7;2659:23;2655:32;2652:2;;;2700:1;2697;2690:12;2652:2;2743:1;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2714:117;2870:2;2896:53;2941:7;2932:6;2921:9;2917:22;2896:53;:::i;:::-;2886:63;;2841:118;2642:324;;;;;:::o;2972:256::-;3028:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:2;;;3093:1;3090;3083:12;3045:2;3136:1;3161:50;3203:7;3194:6;3183:9;3179:22;3161:50;:::i;:::-;3151:60;;3107:114;3035:193;;;;:::o;3234:262::-;3293:6;3342:2;3330:9;3321:7;3317:23;3313:32;3310:2;;;3358:1;3355;3348:12;3310:2;3401:1;3426:53;3471:7;3462:6;3451:9;3447:22;3426:53;:::i;:::-;3416:63;;3372:117;3300:196;;;;:::o;3502:401::-;3567:6;3575;3624:2;3612:9;3603:7;3599:23;3595:32;3592:2;;;3640:1;3637;3630:12;3592:2;3683:1;3708:53;3753:7;3744:6;3733:9;3729:22;3708:53;:::i;:::-;3698:63;;3654:117;3810:2;3836:50;3878:7;3869:6;3858:9;3854:22;3836:50;:::i;:::-;3826:60;;3781:115;3582:321;;;;;:::o;3909:407::-;3977:6;3985;4034:2;4022:9;4013:7;4009:23;4005:32;4002:2;;;4050:1;4047;4040:12;4002:2;4093:1;4118:53;4163:7;4154:6;4143:9;4139:22;4118:53;:::i;:::-;4108:63;;4064:117;4220:2;4246:53;4291:7;4282:6;4271:9;4267:22;4246:53;:::i;:::-;4236:63;;4191:118;3992:324;;;;;:::o;4322:179::-;4391:10;4412:46;4454:3;4446:6;4412:46;:::i;:::-;4490:4;4485:3;4481:14;4467:28;;4402:99;;;;:::o;4507:142::-;4610:32;4636:5;4610:32;:::i;:::-;4605:3;4598:45;4588:61;;:::o;4655:108::-;4732:24;4750:5;4732:24;:::i;:::-;4727:3;4720:37;4710:53;;:::o;4769:118::-;4856:24;4874:5;4856:24;:::i;:::-;4851:3;4844:37;4834:53;;:::o;4923:732::-;5042:3;5071:54;5119:5;5071:54;:::i;:::-;5141:86;5220:6;5215:3;5141:86;:::i;:::-;5134:93;;5251:56;5301:5;5251:56;:::i;:::-;5330:7;5361:1;5346:284;5371:6;5368:1;5365:13;5346:284;;;5447:6;5441:13;5474:63;5533:3;5518:13;5474:63;:::i;:::-;5467:70;;5560:60;5613:6;5560:60;:::i;:::-;5550:70;;5406:224;5393:1;5390;5386:9;5381:14;;5346:284;;;5350:14;5646:3;5639:10;;5047:608;;;;;;;:::o;5661:109::-;5742:21;5757:5;5742:21;:::i;:::-;5737:3;5730:34;5720:50;;:::o;5776:185::-;5890:64;5948:5;5890:64;:::i;:::-;5885:3;5878:77;5868:93;;:::o;5967:147::-;6062:45;6101:5;6062:45;:::i;:::-;6057:3;6050:58;6040:74;;:::o;6120:364::-;6208:3;6236:39;6269:5;6236:39;:::i;:::-;6291:71;6355:6;6350:3;6291:71;:::i;:::-;6284:78;;6371:52;6416:6;6411:3;6404:4;6397:5;6393:16;6371:52;:::i;:::-;6448:29;6470:6;6448:29;:::i;:::-;6443:3;6439:39;6432:46;;6212:272;;;;;:::o;6490:366::-;6632:3;6653:67;6717:2;6712:3;6653:67;:::i;:::-;6646:74;;6729:93;6818:3;6729:93;:::i;:::-;6847:2;6842:3;6838:12;6831:19;;6636:220;;;:::o;6862:366::-;7004:3;7025:67;7089:2;7084:3;7025:67;:::i;:::-;7018:74;;7101:93;7190:3;7101:93;:::i;:::-;7219:2;7214:3;7210:12;7203:19;;7008:220;;;:::o;7234:366::-;7376:3;7397:67;7461:2;7456:3;7397:67;:::i;:::-;7390:74;;7473:93;7562:3;7473:93;:::i;:::-;7591:2;7586:3;7582:12;7575:19;;7380:220;;;:::o;7606:366::-;7748:3;7769:67;7833:2;7828:3;7769:67;:::i;:::-;7762:74;;7845:93;7934:3;7845:93;:::i;:::-;7963:2;7958:3;7954:12;7947:19;;7752:220;;;:::o;7978:366::-;8120:3;8141:67;8205:2;8200:3;8141:67;:::i;:::-;8134:74;;8217:93;8306:3;8217:93;:::i;:::-;8335:2;8330:3;8326:12;8319:19;;8124:220;;;:::o;8350:366::-;8492:3;8513:67;8577:2;8572:3;8513:67;:::i;:::-;8506:74;;8589:93;8678:3;8589:93;:::i;:::-;8707:2;8702:3;8698:12;8691:19;;8496:220;;;:::o;8722:366::-;8864:3;8885:67;8949:2;8944:3;8885:67;:::i;:::-;8878:74;;8961:93;9050:3;8961:93;:::i;:::-;9079:2;9074:3;9070:12;9063:19;;8868:220;;;:::o;9094:366::-;9236:3;9257:67;9321:2;9316:3;9257:67;:::i;:::-;9250:74;;9333:93;9422:3;9333:93;:::i;:::-;9451:2;9446:3;9442:12;9435:19;;9240:220;;;:::o;9466:366::-;9608:3;9629:67;9693:2;9688:3;9629:67;:::i;:::-;9622:74;;9705:93;9794:3;9705:93;:::i;:::-;9823:2;9818:3;9814:12;9807:19;;9612:220;;;:::o;9838:366::-;9980:3;10001:67;10065:2;10060:3;10001:67;:::i;:::-;9994:74;;10077:93;10166:3;10077:93;:::i;:::-;10195:2;10190:3;10186:12;10179:19;;9984:220;;;:::o;10210:366::-;10352:3;10373:67;10437:2;10432:3;10373:67;:::i;:::-;10366:74;;10449:93;10538:3;10449:93;:::i;:::-;10567:2;10562:3;10558:12;10551:19;;10356:220;;;:::o;10582:366::-;10724:3;10745:67;10809:2;10804:3;10745:67;:::i;:::-;10738:74;;10821:93;10910:3;10821:93;:::i;:::-;10939:2;10934:3;10930:12;10923:19;;10728:220;;;:::o;10954:366::-;11096:3;11117:67;11181:2;11176:3;11117:67;:::i;:::-;11110:74;;11193:93;11282:3;11193:93;:::i;:::-;11311:2;11306:3;11302:12;11295:19;;11100:220;;;:::o;11326:366::-;11468:3;11489:67;11553:2;11548:3;11489:67;:::i;:::-;11482:74;;11565:93;11654:3;11565:93;:::i;:::-;11683:2;11678:3;11674:12;11667:19;;11472:220;;;:::o;11698:366::-;11840:3;11861:67;11925:2;11920:3;11861:67;:::i;:::-;11854:74;;11937:93;12026:3;11937:93;:::i;:::-;12055:2;12050:3;12046:12;12039:19;;11844:220;;;:::o;12070:366::-;12212:3;12233:67;12297:2;12292:3;12233:67;:::i;:::-;12226:74;;12309:93;12398:3;12309:93;:::i;:::-;12427:2;12422:3;12418:12;12411:19;;12216:220;;;:::o;12442:366::-;12584:3;12605:67;12669:2;12664:3;12605:67;:::i;:::-;12598:74;;12681:93;12770:3;12681:93;:::i;:::-;12799:2;12794:3;12790:12;12783:19;;12588:220;;;:::o;12814:366::-;12956:3;12977:67;13041:2;13036:3;12977:67;:::i;:::-;12970:74;;13053:93;13142:3;13053:93;:::i;:::-;13171:2;13166:3;13162:12;13155:19;;12960:220;;;:::o;13186:366::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13332:220;;;:::o;13558:118::-;13645:24;13663:5;13645:24;:::i;:::-;13640:3;13633:37;13623:53;;:::o;13682:112::-;13765:22;13781:5;13765:22;:::i;:::-;13760:3;13753:35;13743:51;;:::o;13800:222::-;13893:4;13931:2;13920:9;13916:18;13908:26;;13944:71;14012:1;14001:9;13997:17;13988:6;13944:71;:::i;:::-;13898:124;;;;:::o;14028:254::-;14137:4;14175:2;14164:9;14160:18;14152:26;;14188:87;14272:1;14261:9;14257:17;14248:6;14188:87;:::i;:::-;14142:140;;;;:::o;14288:210::-;14375:4;14413:2;14402:9;14398:18;14390:26;;14426:65;14488:1;14477:9;14473:17;14464:6;14426:65;:::i;:::-;14380:118;;;;:::o;14504:276::-;14624:4;14662:2;14651:9;14647:18;14639:26;;14675:98;14770:1;14759:9;14755:17;14746:6;14675:98;:::i;:::-;14629:151;;;;:::o;14786:313::-;14899:4;14937:2;14926:9;14922:18;14914:26;;14986:9;14980:4;14976:20;14972:1;14961:9;14957:17;14950:47;15014:78;15087:4;15078:6;15014:78;:::i;:::-;15006:86;;14904:195;;;;:::o;15105:419::-;15271:4;15309:2;15298:9;15294:18;15286:26;;15358:9;15352:4;15348:20;15344:1;15333:9;15329:17;15322:47;15386:131;15512:4;15386:131;:::i;:::-;15378:139;;15276:248;;;:::o;15530:419::-;15696:4;15734:2;15723:9;15719:18;15711:26;;15783:9;15777:4;15773:20;15769:1;15758:9;15754:17;15747:47;15811:131;15937:4;15811:131;:::i;:::-;15803:139;;15701:248;;;:::o;15955:419::-;16121:4;16159:2;16148:9;16144:18;16136:26;;16208:9;16202:4;16198:20;16194:1;16183:9;16179:17;16172:47;16236:131;16362:4;16236:131;:::i;:::-;16228:139;;16126:248;;;:::o;16380:419::-;16546:4;16584:2;16573:9;16569:18;16561:26;;16633:9;16627:4;16623:20;16619:1;16608:9;16604:17;16597:47;16661:131;16787:4;16661:131;:::i;:::-;16653:139;;16551:248;;;:::o;16805:419::-;16971:4;17009:2;16998:9;16994:18;16986:26;;17058:9;17052:4;17048:20;17044:1;17033:9;17029:17;17022:47;17086:131;17212:4;17086:131;:::i;:::-;17078:139;;16976:248;;;:::o;17230:419::-;17396:4;17434:2;17423:9;17419:18;17411:26;;17483:9;17477:4;17473:20;17469:1;17458:9;17454:17;17447:47;17511:131;17637:4;17511:131;:::i;:::-;17503:139;;17401:248;;;:::o;17655:419::-;17821:4;17859:2;17848:9;17844:18;17836:26;;17908:9;17902:4;17898:20;17894:1;17883:9;17879:17;17872:47;17936:131;18062:4;17936:131;:::i;:::-;17928:139;;17826:248;;;:::o;18080:419::-;18246:4;18284:2;18273:9;18269:18;18261:26;;18333:9;18327:4;18323:20;18319:1;18308:9;18304:17;18297:47;18361:131;18487:4;18361:131;:::i;:::-;18353:139;;18251:248;;;:::o;18505:419::-;18671:4;18709:2;18698:9;18694:18;18686:26;;18758:9;18752:4;18748:20;18744:1;18733:9;18729:17;18722:47;18786:131;18912:4;18786:131;:::i;:::-;18778:139;;18676:248;;;:::o;18930:419::-;19096:4;19134:2;19123:9;19119:18;19111:26;;19183:9;19177:4;19173:20;19169:1;19158:9;19154:17;19147:47;19211:131;19337:4;19211:131;:::i;:::-;19203:139;;19101:248;;;:::o;19355:419::-;19521:4;19559:2;19548:9;19544:18;19536:26;;19608:9;19602:4;19598:20;19594:1;19583:9;19579:17;19572:47;19636:131;19762:4;19636:131;:::i;:::-;19628:139;;19526:248;;;:::o;19780:419::-;19946:4;19984:2;19973:9;19969:18;19961:26;;20033:9;20027:4;20023:20;20019:1;20008:9;20004:17;19997:47;20061:131;20187:4;20061:131;:::i;:::-;20053:139;;19951:248;;;:::o;20205:419::-;20371:4;20409:2;20398:9;20394:18;20386:26;;20458:9;20452:4;20448:20;20444:1;20433:9;20429:17;20422:47;20486:131;20612:4;20486:131;:::i;:::-;20478:139;;20376:248;;;:::o;20630:419::-;20796:4;20834:2;20823:9;20819:18;20811:26;;20883:9;20877:4;20873:20;20869:1;20858:9;20854:17;20847:47;20911:131;21037:4;20911:131;:::i;:::-;20903:139;;20801:248;;;:::o;21055:419::-;21221:4;21259:2;21248:9;21244:18;21236:26;;21308:9;21302:4;21298:20;21294:1;21283:9;21279:17;21272:47;21336:131;21462:4;21336:131;:::i;:::-;21328:139;;21226:248;;;:::o;21480:419::-;21646:4;21684:2;21673:9;21669:18;21661:26;;21733:9;21727:4;21723:20;21719:1;21708:9;21704:17;21697:47;21761:131;21887:4;21761:131;:::i;:::-;21753:139;;21651:248;;;:::o;21905:419::-;22071:4;22109:2;22098:9;22094:18;22086:26;;22158:9;22152:4;22148:20;22144:1;22133:9;22129:17;22122:47;22186:131;22312:4;22186:131;:::i;:::-;22178:139;;22076:248;;;:::o;22330:419::-;22496:4;22534:2;22523:9;22519:18;22511:26;;22583:9;22577:4;22573:20;22569:1;22558:9;22554:17;22547:47;22611:131;22737:4;22611:131;:::i;:::-;22603:139;;22501:248;;;:::o;22755:419::-;22921:4;22959:2;22948:9;22944:18;22936:26;;23008:9;23002:4;22998:20;22994:1;22983:9;22979:17;22972:47;23036:131;23162:4;23036:131;:::i;:::-;23028:139;;22926:248;;;:::o;23180:222::-;23273:4;23311:2;23300:9;23296:18;23288:26;;23324:71;23392:1;23381:9;23377:17;23368:6;23324:71;:::i;:::-;23278:124;;;;:::o;23408:831::-;23671:4;23709:3;23698:9;23694:19;23686:27;;23723:71;23791:1;23780:9;23776:17;23767:6;23723:71;:::i;:::-;23804:80;23880:2;23869:9;23865:18;23856:6;23804:80;:::i;:::-;23931:9;23925:4;23921:20;23916:2;23905:9;23901:18;23894:48;23959:108;24062:4;24053:6;23959:108;:::i;:::-;23951:116;;24077:72;24145:2;24134:9;24130:18;24121:6;24077:72;:::i;:::-;24159:73;24227:3;24216:9;24212:19;24203:6;24159:73;:::i;:::-;23676:563;;;;;;;;:::o;24245:332::-;24366:4;24404:2;24393:9;24389:18;24381:26;;24417:71;24485:1;24474:9;24470:17;24461:6;24417:71;:::i;:::-;24498:72;24566:2;24555:9;24551:18;24542:6;24498:72;:::i;:::-;24371:206;;;;;:::o;24583:214::-;24672:4;24710:2;24699:9;24695:18;24687:26;;24723:67;24787:1;24776:9;24772:17;24763:6;24723:67;:::i;:::-;24677:120;;;;:::o;24803:132::-;24870:4;24893:3;24885:11;;24923:4;24918:3;24914:14;24906:22;;24875:60;;;:::o;24941:114::-;25008:6;25042:5;25036:12;25026:22;;25015:40;;;:::o;25061:99::-;25113:6;25147:5;25141:12;25131:22;;25120:40;;;:::o;25166:113::-;25236:4;25268;25263:3;25259:14;25251:22;;25241:38;;;:::o;25285:184::-;25384:11;25418:6;25413:3;25406:19;25458:4;25453:3;25449:14;25434:29;;25396:73;;;;:::o;25475:169::-;25559:11;25593:6;25588:3;25581:19;25633:4;25628:3;25624:14;25609:29;;25571:73;;;;:::o;25650:305::-;25690:3;25709:20;25727:1;25709:20;:::i;:::-;25704:25;;25743:20;25761:1;25743:20;:::i;:::-;25738:25;;25897:1;25829:66;25825:74;25822:1;25819:81;25816:2;;;25903:18;;:::i;:::-;25816:2;25947:1;25944;25940:9;25933:16;;25694:261;;;;:::o;25961:185::-;26001:1;26018:20;26036:1;26018:20;:::i;:::-;26013:25;;26052:20;26070:1;26052:20;:::i;:::-;26047:25;;26091:1;26081:2;;26096:18;;:::i;:::-;26081:2;26138:1;26135;26131:9;26126:14;;26003:143;;;;:::o;26152:348::-;26192:7;26215:20;26233:1;26215:20;:::i;:::-;26210:25;;26249:20;26267:1;26249:20;:::i;:::-;26244:25;;26437:1;26369:66;26365:74;26362:1;26359:81;26354:1;26347:9;26340:17;26336:105;26333:2;;;26444:18;;:::i;:::-;26333:2;26492:1;26489;26485:9;26474:20;;26200:300;;;;:::o;26506:191::-;26546:4;26566:20;26584:1;26566:20;:::i;:::-;26561:25;;26600:20;26618:1;26600:20;:::i;:::-;26595:25;;26639:1;26636;26633:8;26630:2;;;26644:18;;:::i;:::-;26630:2;26689:1;26686;26682:9;26674:17;;26551:146;;;;:::o;26703:96::-;26740:7;26769:24;26787:5;26769:24;:::i;:::-;26758:35;;26748:51;;;:::o;26805:104::-;26850:7;26879:24;26897:5;26879:24;:::i;:::-;26868:35;;26858:51;;;:::o;26915:90::-;26949:7;26992:5;26985:13;26978:21;26967:32;;26957:48;;;:::o;27011:126::-;27048:7;27088:42;27081:5;27077:54;27066:65;;27056:81;;;:::o;27143:77::-;27180:7;27209:5;27198:16;;27188:32;;;:::o;27226:86::-;27261:7;27301:4;27294:5;27290:16;27279:27;;27269:43;;;:::o;27318:180::-;27395:9;27428:64;27486:5;27428:64;:::i;:::-;27415:77;;27405:93;;;:::o;27504:140::-;27581:9;27614:24;27632:5;27614:24;:::i;:::-;27601:37;;27591:53;;;:::o;27650:121::-;27708:9;27741:24;27759:5;27741:24;:::i;:::-;27728:37;;27718:53;;;:::o;27777:307::-;27845:1;27855:113;27869:6;27866:1;27863:13;27855:113;;;27954:1;27949:3;27945:11;27939:18;27935:1;27930:3;27926:11;27919:39;27891:2;27888:1;27884:10;27879:15;;27855:113;;;27986:6;27983:1;27980:13;27977:2;;;28066:1;28057:6;28052:3;28048:16;28041:27;27977:2;27826:258;;;;:::o;28090:320::-;28134:6;28171:1;28165:4;28161:12;28151:22;;28218:1;28212:4;28208:12;28239:18;28229:2;;28295:4;28287:6;28283:17;28273:27;;28229:2;28357;28349:6;28346:14;28326:18;28323:38;28320:2;;;28376:18;;:::i;:::-;28320:2;28141:269;;;;:::o;28416:233::-;28455:3;28478:24;28496:5;28478:24;:::i;:::-;28469:33;;28524:66;28517:5;28514:77;28511:2;;;28594:18;;:::i;:::-;28511:2;28641:1;28634:5;28630:13;28623:20;;28459:190;;;:::o;28655:180::-;28703:77;28700:1;28693:88;28800:4;28797:1;28790:15;28824:4;28821:1;28814:15;28841:180;28889:77;28886:1;28879:88;28986:4;28983:1;28976:15;29010:4;29007:1;29000:15;29027:180;29075:77;29072:1;29065:88;29172:4;29169:1;29162:15;29196:4;29193:1;29186:15;29213:102;29254:6;29305:2;29301:7;29296:2;29289:5;29285:14;29281:28;29271:38;;29261:54;;;:::o;29321:222::-;29461:34;29457:1;29449:6;29445:14;29438:58;29530:5;29525:2;29517:6;29513:15;29506:30;29427:116;:::o;29549:229::-;29689:34;29685:1;29677:6;29673:14;29666:58;29758:12;29753:2;29745:6;29741:15;29734:37;29655:123;:::o;29784:225::-;29924:34;29920:1;29912:6;29908:14;29901:58;29993:8;29988:2;29980:6;29976:15;29969:33;29890:119;:::o;30015:221::-;30155:34;30151:1;30143:6;30139:14;30132:58;30224:4;30219:2;30211:6;30207:15;30200:29;30121:115;:::o;30242:177::-;30382:29;30378:1;30370:6;30366:14;30359:53;30348:71;:::o;30425:177::-;30565:29;30561:1;30553:6;30549:14;30542:53;30531:71;:::o;30608:181::-;30748:33;30744:1;30736:6;30732:14;30725:57;30714:75;:::o;30795:227::-;30935:34;30931:1;30923:6;30919:14;30912:58;31004:10;30999:2;30991:6;30987:15;30980:35;30901:121;:::o;31028:178::-;31168:30;31164:1;31156:6;31152:14;31145:54;31134:72;:::o;31212:220::-;31352:34;31348:1;31340:6;31336:14;31329:58;31421:3;31416:2;31408:6;31404:15;31397:28;31318:114;:::o;31438:221::-;31578:34;31574:1;31566:6;31562:14;31555:58;31647:4;31642:2;31634:6;31630:15;31623:29;31544:115;:::o;31665:182::-;31805:34;31801:1;31793:6;31789:14;31782:58;31771:76;:::o;31853:182::-;31993:34;31989:1;31981:6;31977:14;31970:58;31959:76;:::o;32041:228::-;32181:34;32177:1;32169:6;32165:14;32158:58;32250:11;32245:2;32237:6;32233:15;32226:36;32147:122;:::o;32275:224::-;32415:34;32411:1;32403:6;32399:14;32392:58;32484:7;32479:2;32471:6;32467:15;32460:32;32381:118;:::o;32505:179::-;32645:31;32641:1;32633:6;32629:14;32622:55;32611:73;:::o;32690:223::-;32830:34;32826:1;32818:6;32814:14;32807:58;32899:6;32894:2;32886:6;32882:15;32875:31;32796:117;:::o;32919:231::-;33059:34;33055:1;33047:6;33043:14;33036:58;33128:14;33123:2;33115:6;33111:15;33104:39;33025:125;:::o;33156:228::-;33296:34;33292:1;33284:6;33280:14;33273:58;33365:11;33360:2;33352:6;33348:15;33341:36;33262:122;:::o;33390:::-;33463:24;33481:5;33463:24;:::i;:::-;33456:5;33453:35;33443:2;;33502:1;33499;33492:12;33443:2;33433:79;:::o;33518:138::-;33599:32;33625:5;33599:32;:::i;:::-;33592:5;33589:43;33579:2;;33646:1;33643;33636:12;33579:2;33569:87;:::o;33662:116::-;33732:21;33747:5;33732:21;:::i;:::-;33725:5;33722:32;33712:2;;33768:1;33765;33758:12;33712:2;33702:76;:::o;33784:122::-;33857:24;33875:5;33857:24;:::i;:::-;33850:5;33847:35;33837:2;;33896:1;33893;33886:12;33837:2;33827:79;:::o

Swarm Source

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