ETH Price: $2,720.41 (+12.30%)
 

Overview

Max Total Supply

100,000,000,000,000,000 OCCT

Holders

1,033

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
243,163,354,478,622.434162499947074295 OCCT

Value
$0.00
0xE72ebc58c5FB9fa8a9A07f46c828F40CCb855b89
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:
OCCT

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 ██████   ██████  ██████ ████████ 
██    ██ ██      ██         ██    
██    ██ ██      ██         ██    
██    ██ ██      ██         ██    
 ██████   ██████  ██████    ██    
*/
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

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 payable) {
        return payable(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 OCCT 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 public _tTotal = 100000000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string public _name = "Official Crypto Cowboy Token";
    string public _symbol = "OCCT";
    uint8 public _decimals = 18;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 0;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 1;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _marketingFee = 1;
    address private marketingWallet = 0x55FC33E87064553C95085ec8719372935b56376A; 

    uint256 private _previousmarketingFee = _marketingFee;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 2000000000000000 * 10**18;
    uint256 private numTokensSellToAddToLiquidity = 500000000 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet
         // 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;
        
        // exclude marketing and burn adress from Reward
        _isExcluded[marketingWallet] = true;
        _isExcluded[deadAddress] = 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 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 setMarketingFeePercent(uint256 newMarketingFee) external onlyOwner() {
        _marketingFee = newMarketingFee;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
     function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
     function setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        _burnFee = burnFee;
    }
    
    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 _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);
    }
    

    
     //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 = calculateLiquidityFee(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 calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = 1;
        _liquidityFee = 0;
        _burnFee = 1;
        _marketingFee = 1;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

        // 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));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // 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(half); // <- this 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);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            removeAllFee();
        }
        else{
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        
        //Calculate burn amount and marketing amount
        uint256 burnAmt = amount.mul(_burnFee).div(100);
        uint256 marketingAmt = amount.mul(_marketingFee).div(100);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)));
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)));
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)));
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)));
        } else {
            _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)));
        }
        
        //Temporarily remove fees to transfer to burn address and marketing wallet
        _taxFee = 0;
        _liquidityFee = 0;

        //Send transfers to burn and marketing wallet
        _transferToExcluded(sender, deadAddress, burnAmt);
        _transferToExcluded(sender, marketingWallet, marketingAmt);

        //Restore tax and liquidity fees
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;


        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
            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);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    

    function setmarketingWallet(address newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount ;
    }
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        require(maxTxPercent > 1, "Cannot set transaction amount less than 10 percent!");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"includeInFee","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"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":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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"}]

60c06040526e13426172c74d822b878fe80000000060095560095460001962000029919062000994565b600019620000389190620008e5565b600a556040518060400160405280601c81526020017f4f6666696369616c2043727970746f20436f77626f7920546f6b656e00000000815250600c90805190602001906200008892919062000786565b506040518060400160405280600481526020017f4f43435400000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000d692919062000786565b506012600e60006101000a81548160ff021916908360ff1602179055506001600f55600f546010556000601155601154601255600160135560135460145560016015557355fc33e87064553c95085ec8719372935b56376a601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060155460175561dead601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601860156101000a81548160ff0219169083151502179055506d629b8c891b267182b614000000006019556b019d971e4fe8401e74000000601a553480156200020157600080fd5b506000620002146200075560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002c96200075560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036757600080fd5b505afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a291906200084d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040557600080fd5b505afa1580156200041a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044091906200084d565b6040518363ffffffff1660e01b81526004016200045f9291906200089b565b602060405180830381600087803b1580156200047a57600080fd5b505af11580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b591906200084d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620005386200075d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e56200075560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620007469190620008c8565b60405180910390a35062000a73565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000794906200095e565b90600052602060002090601f016020900481019282620007b8576000855562000804565b82601f10620007d357805160ff191683800117855562000804565b8280016001018555821562000804579182015b8281111562000803578251825591602001919060010190620007e6565b5b50905062000813919062000817565b5090565b5b808211156200083257600081600090555060010162000818565b5090565b600081519050620008478162000a59565b92915050565b6000602082840312156200086057600080fd5b6000620008708482850162000836565b91505092915050565b620008848162000920565b82525050565b620008958162000954565b82525050565b6000604082019050620008b2600083018562000879565b620008c1602083018462000879565b9392505050565b6000602082019050620008df60008301846200088a565b92915050565b6000620008f28262000954565b9150620008ff8362000954565b925082821015620009155762000914620009cc565b5b828203905092915050565b60006200092d8262000934565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200097757607f821691505b602082108114156200098e576200098d62000a2a565b5b50919050565b6000620009a18262000954565b9150620009ae8362000954565b925082620009c157620009c0620009fb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000a648162000920565b811462000a7057600080fd5b50565b60805160601c60a05160601c61518062000ac96000396000818161128501526122b6015260008181610b9a015281816132130152818161332901528181613350015281816133ec015261341301526151806000f3fe6080604052600436106102605760003560e01c80635342acb411610144578063af465a27116100b6578063d28d88521161007a578063d28d885214610933578063d543dbeb1461095e578063dd62ed3e14610987578063ea2f0b37146109c4578063ec28438a146109ed578063f2fde38b14610a1657610267565b8063af465a2714610860578063b09f12661461088b578063c0b0fda2146108b6578063c49b9a80146108e1578063cea269581461090a57610267565b806388f820201161010857806388f820201461072a5780638da5cb5b146107675780638ee88c531461079257806395d89b41146107bb578063a457c2d7146107e6578063a9059cbb1461082357610267565b80635342acb4146106435780636bc87c3a1461068057806370a08231146106ab578063715018a6146106e85780637d1db4a5146106ff57610267565b80632d838119116101dd5780633bd5d173116101a15780633bd5d17314610535578063437823ec1461055e5780634549b03914610587578063457c194c146105c457806349bd5a5e146105ed5780634a74bb021461061857610267565b80632d8381191461043a578063313ce5671461047757806332424aa3146104a257806339509351146104cd5780633b124fe71461050a57610267565b806318160ddd1161022457806318160ddd14610353578063224611731461037e57806322976e0d146103a757806323b872dd146103d257806327c8f8351461040f57610267565b8063061c82d01461026c57806306fdde0314610295578063095ea7b3146102c057806313114a9d146102fd5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190614286565b610a3f565b005b3480156102a157600080fd5b506102aa610ade565b6040516102b791906146ee565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190614221565b610b70565b6040516102f491906146b8565b60405180910390f35b34801561030957600080fd5b50610312610b8e565b60405161031f91906148d0565b60405180910390f35b34801561033457600080fd5b5061033d610b98565b60405161034a91906146d3565b60405180910390f35b34801561035f57600080fd5b50610368610bbc565b60405161037591906148d0565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190614144565b610bc6565b005b3480156103b357600080fd5b506103bc610c9f565b6040516103c991906148d0565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906141d2565b610ca5565b60405161040691906146b8565b60405180910390f35b34801561041b57600080fd5b50610424610d7e565b604051610431919061463c565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190614286565b610da4565b60405161046e91906148d0565b60405180910390f35b34801561048357600080fd5b5061048c610e12565b604051610499919061497c565b60405180910390f35b3480156104ae57600080fd5b506104b7610e29565b6040516104c4919061497c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614221565b610e3c565b60405161050191906146b8565b60405180910390f35b34801561051657600080fd5b5061051f610eef565b60405161052c91906148d0565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614286565b610ef5565b005b34801561056a57600080fd5b5061058560048036038101906105809190614144565b611070565b005b34801561059357600080fd5b506105ae60048036038101906105a991906142af565b611160565b6040516105bb91906148d0565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190614286565b6111e4565b005b3480156105f957600080fd5b50610602611283565b60405161060f919061463c565b60405180910390f35b34801561062457600080fd5b5061062d6112a7565b60405161063a91906146b8565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614144565b6112ba565b60405161067791906146b8565b60405180910390f35b34801561068c57600080fd5b50610695611310565b6040516106a291906148d0565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190614144565b611316565b6040516106df91906148d0565b60405180910390f35b3480156106f457600080fd5b506106fd611401565b005b34801561070b57600080fd5b50610714611554565b60405161072191906148d0565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190614144565b61155a565b60405161075e91906146b8565b60405180910390f35b34801561077357600080fd5b5061077c6115b0565b604051610789919061463c565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190614286565b6115d9565b005b3480156107c757600080fd5b506107d0611678565b6040516107dd91906146ee565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190614221565b61170a565b60405161081a91906146b8565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190614221565b6117d7565b60405161085791906146b8565b60405180910390f35b34801561086c57600080fd5b506108756117f5565b60405161088291906148d0565b60405180910390f35b34801561089757600080fd5b506108a06117fb565b6040516108ad91906146ee565b60405180910390f35b3480156108c257600080fd5b506108cb611889565b6040516108d891906148d0565b60405180910390f35b3480156108ed57600080fd5b506109086004803603810190610903919061425d565b61188f565b005b34801561091657600080fd5b50610931600480360381019061092c9190614286565b611978565b005b34801561093f57600080fd5b50610948611a17565b60405161095591906146ee565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190614286565b611aa5565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614196565b611bae565b6040516109bb91906148d0565b60405180910390f35b3480156109d057600080fd5b506109eb60048036038101906109e69190614144565b611c35565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614286565b611d25565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190614144565b611dc4565b005b610a47611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90614830565b60405180910390fd5b80600f8190555050565b6060600c8054610aed90614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1990614bbf565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b84610b7d611f86565b8484611f8e565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b610bce611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290614830565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610cb2848484612159565b610d7384610cbe611f86565b610d6e856040518060600160405280602881526020016150fe60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d24611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b600190509392505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290614730565b60405180910390fd5b6000610df56123a7565b9050610e0a81846123d290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b600e60009054906101000a900460ff1681565b6000610ee5610e49611f86565b84610ee08560056000610e5a611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b611f8e565b6001905092915050565b600f5481565b6000610eff611f86565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906148b0565b60405180910390fd5b6000610f998361247a565b50505050509050610ff281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061104a81600a546124d690919063ffffffff16565b600a8190555061106583600b5461241c90919063ffffffff16565b600b81905550505050565b611078611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614830565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906147b0565b60405180910390fd5b816111c75760006111b78461247a565b50505050509050809150506111de565b60006111d28461247a565b50505050915050809150505b92915050565b6111ec611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614830565b60405180910390fd5b8060158190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113b157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113fc565b6113f9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da4565b90505b919050565b611409611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115e1611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614830565b60405180910390fd5b8060118190555050565b6060600d805461168790614bbf565b80601f01602080910402602001604051908101604052809291908181526020018280546116b390614bbf565b80156117005780601f106116d557610100808354040283529160200191611700565b820191906000526020600020905b8154815290600101906020018083116116e357829003601f168201915b5050505050905090565b60006117cd611717611f86565b846117c8856040518060600160405280602581526020016151266025913960056000611741611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b6001905092915050565b60006117eb6117e4611f86565b8484612159565b6001905092915050565b60095481565b600d805461180890614bbf565b80601f016020809104026020016040519081016040528092919081815260200182805461183490614bbf565b80156118815780601f1061185657610100808354040283529160200191611881565b820191906000526020600020905b81548152906001019060200180831161186457829003601f168201915b505050505081565b60135481565b611897611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614830565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161196d91906146b8565b60405180910390a150565b611980611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614830565b60405180910390fd5b8060138190555050565b600c8054611a2490614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5090614bbf565b8015611a9d5780601f10611a7257610100808354040283529160200191611a9d565b820191906000526020600020905b815481529060010190602001808311611a8057829003601f168201915b505050505081565b611aad611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614830565b60405180910390fd5b60018111611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906147f0565b60405180910390fd5b611ba56064611b978360095461252090919063ffffffff16565b6123d290919063ffffffff16565b60198190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c3d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190614830565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d2d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614830565b60405180910390fd5b8060198190555050565b611dcc611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090614750565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614890565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614770565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161214c91906148d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614710565b60405180910390fd5b6000811161227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614850565b60405180910390fd5b600061228730611316565b90506000601a5482101590508080156122ad5750601860149054906101000a900460ff16155b801561230557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561231d5750601860159054906101000a900460ff165b1561233157601a5491506123308261259b565b5b61233c858585612671565b5050505050565b600083831115829061238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238291906146ee565b60405180910390fd5b506000838561239a9190614acd565b9050809150509392505050565b60008060006123b4612c97565b915091506123cb81836123d290919063ffffffff16565b9250505090565b600061241483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fe2565b905092915050565b600080828461242b91906149ec565b905083811015612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614790565b60405180910390fd5b8091505092915050565b60008060008060008060008060006124918a613045565b92509250925060008060006124af8d86866124aa6123a7565b61309f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061251883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612343565b905092915050565b6000808314156125335760009050612595565b600082846125419190614a73565b90508284826125509190614a42565b14612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614810565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff02191690831515021790555060006125cc6002836123d290919063ffffffff16565b905060006125e382846124d690919063ffffffff16565b905060004790506125f383613128565b600061260882476124d690919063ffffffff16565b905061261483826133e6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161264793929190614945565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127125750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127245761271f6134d6565b61276a565b601954811115612769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612760906147d0565b60405180910390fd5b5b600061279460646127866013548561252090919063ffffffff16565b6123d290919063ffffffff16565b905060006127c060646127b26015548661252090919063ffffffff16565b6123d290919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128655750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289e5761289985856128948461288687896124d690919063ffffffff16565b6124d690919063ffffffff16565b6134f8565b612b65565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129415750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561297a5761297585856129708461296287896124d690919063ffffffff16565b6124d690919063ffffffff16565b613758565b612b64565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a1e5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a5757612a528585612a4d84612a3f87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b612b63565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af95750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3257612b2d8585612b2884612b1a87896124d690919063ffffffff16565b6124d690919063ffffffff16565b613b83565b612b62565b612b618585612b5c84612b4e87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b5b5b5b5b6000600f819055506000601181905550612ba285601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613758565b612bcf85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613758565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c825750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9057612c8f613e78565b5b5050505050565b6000806000600a5490506000600954905060005b600880549050811015612fa557826003600060088481548110612cf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e0b5750816004600060088481548110612da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e2257600a5460095494509450505050612fde565b612ed86003600060088481548110612e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846124d690919063ffffffff16565b9250612f906004600060088481548110612f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836124d690919063ffffffff16565b91508080612f9d90614bf1565b915050612cab565b50612fbd600954600a546123d290919063ffffffff16565b821015612fd557600a54600954935093505050612fde565b81819350935050505b9091565b60008083118290613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302091906146ee565b60405180910390fd5b50600083856130389190614a42565b9050809150509392505050565b60008060008061305485613e9a565b9050600061306186613ecb565b9050600061308a8261307c858a6124d690919063ffffffff16565b6124d690919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130b8858961252090919063ffffffff16565b905060006130cf868961252090919063ffffffff16565b905060006130e6878961252090919063ffffffff16565b9050600061310f8261310185876124d690919063ffffffff16565b6124d690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561316b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131995781602001602082028036833780820191505090505b50905030816000815181106131d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561327757600080fd5b505afa15801561328b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132af919061416d565b816001815181106132e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334e307f000000000000000000000000000000000000000000000000000000000000000084611f8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133b09594939291906148eb565b600060405180830381600087803b1580156133ca57600080fd5b505af11580156133de573d6000803e3d6000fd5b505050505050565b613411307f000000000000000000000000000000000000000000000000000000000000000084611f8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061345b6115b0565b426040518863ffffffff1660e01b815260040161347d96959493929190614657565b6060604051808303818588803b15801561349657600080fd5b505af11580156134aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134cf91906142eb565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b60008060008060008061350a8761247a565b95509550955095509550955061356887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136de81613efc565b6136e884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161374591906148d0565b60405180910390a3505050505050505050565b60008060008060008061376a8761247a565b9550955095509550955095506137c886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138f285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061393e81613efc565b61394884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139a591906148d0565b60405180910390a3505050505050505050565b6000806000806000806139ca8761247a565b955095509550955095509550613a2886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613abd85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b0981613efc565b613b1384836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b7091906148d0565b60405180910390a3505050505050505050565b600080600080600080613b958761247a565b955095509550955095509550613bf387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dfe81613efc565b613e0884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e6591906148d0565b60405180910390a3505050505050505050565b6001600f81905550600060118190555060016013819055506001601581905550565b6000613ec46064613eb6600f548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613ef56064613ee76011548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613f066123a7565b90506000613f1d828461252090919063ffffffff16565b9050613f7181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561409c5761405883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6140b682600a546124d690919063ffffffff16565b600a819055506140d181600b5461241c90919063ffffffff16565b600b819055505050565b6000813590506140ea816150b8565b92915050565b6000815190506140ff816150b8565b92915050565b600081359050614114816150cf565b92915050565b600081359050614129816150e6565b92915050565b60008151905061413e816150e6565b92915050565b60006020828403121561415657600080fd5b6000614164848285016140db565b91505092915050565b60006020828403121561417f57600080fd5b600061418d848285016140f0565b91505092915050565b600080604083850312156141a957600080fd5b60006141b7858286016140db565b92505060206141c8858286016140db565b9150509250929050565b6000806000606084860312156141e757600080fd5b60006141f5868287016140db565b9350506020614206868287016140db565b92505060406142178682870161411a565b9150509250925092565b6000806040838503121561423457600080fd5b6000614242858286016140db565b92505060206142538582860161411a565b9150509250929050565b60006020828403121561426f57600080fd5b600061427d84828501614105565b91505092915050565b60006020828403121561429857600080fd5b60006142a68482850161411a565b91505092915050565b600080604083850312156142c257600080fd5b60006142d08582860161411a565b92505060206142e185828601614105565b9150509250929050565b60008060006060848603121561430057600080fd5b600061430e8682870161412f565b935050602061431f8682870161412f565b92505060406143308682870161412f565b9150509250925092565b60006143468383614352565b60208301905092915050565b61435b81614b01565b82525050565b61436a81614b01565b82525050565b600061437b826149a7565b61438581856149ca565b935061439083614997565b8060005b838110156143c15781516143a8888261433a565b97506143b3836149bd565b925050600181019050614394565b5085935050505092915050565b6143d781614b13565b82525050565b6143e681614b56565b82525050565b6143f581614b7a565b82525050565b6000614406826149b2565b61441081856149db565b9350614420818560208601614b8c565b61442981614cc7565b840191505092915050565b60006144416023836149db565b915061444c82614cd8565b604082019050919050565b6000614464602a836149db565b915061446f82614d27565b604082019050919050565b60006144876026836149db565b915061449282614d76565b604082019050919050565b60006144aa6022836149db565b91506144b582614dc5565b604082019050919050565b60006144cd601b836149db565b91506144d882614e14565b602082019050919050565b60006144f0601f836149db565b91506144fb82614e3d565b602082019050919050565b60006145136028836149db565b915061451e82614e66565b604082019050919050565b60006145366033836149db565b915061454182614eb5565b604082019050919050565b60006145596021836149db565b915061456482614f04565b604082019050919050565b600061457c6020836149db565b915061458782614f53565b602082019050919050565b600061459f6029836149db565b91506145aa82614f7c565b604082019050919050565b60006145c26025836149db565b91506145cd82614fcb565b604082019050919050565b60006145e56024836149db565b91506145f08261501a565b604082019050919050565b6000614608602c836149db565b915061461382615069565b604082019050919050565b61462781614b3f565b82525050565b61463681614b49565b82525050565b60006020820190506146516000830184614361565b92915050565b600060c08201905061466c6000830189614361565b614679602083018861461e565b61468660408301876143ec565b61469360608301866143ec565b6146a06080830185614361565b6146ad60a083018461461e565b979650505050505050565b60006020820190506146cd60008301846143ce565b92915050565b60006020820190506146e860008301846143dd565b92915050565b6000602082019050818103600083015261470881846143fb565b905092915050565b6000602082019050818103600083015261472981614434565b9050919050565b6000602082019050818103600083015261474981614457565b9050919050565b600060208201905081810360008301526147698161447a565b9050919050565b600060208201905081810360008301526147898161449d565b9050919050565b600060208201905081810360008301526147a9816144c0565b9050919050565b600060208201905081810360008301526147c9816144e3565b9050919050565b600060208201905081810360008301526147e981614506565b9050919050565b6000602082019050818103600083015261480981614529565b9050919050565b600060208201905081810360008301526148298161454c565b9050919050565b600060208201905081810360008301526148498161456f565b9050919050565b6000602082019050818103600083015261486981614592565b9050919050565b60006020820190508181036000830152614889816145b5565b9050919050565b600060208201905081810360008301526148a9816145d8565b9050919050565b600060208201905081810360008301526148c9816145fb565b9050919050565b60006020820190506148e5600083018461461e565b92915050565b600060a082019050614900600083018861461e565b61490d60208301876143ec565b818103604083015261491f8186614370565b905061492e6060830185614361565b61493b608083018461461e565b9695505050505050565b600060608201905061495a600083018661461e565b614967602083018561461e565b614974604083018461461e565b949350505050565b6000602082019050614991600083018461462d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149f782614b3f565b9150614a0283614b3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a3757614a36614c3a565b5b828201905092915050565b6000614a4d82614b3f565b9150614a5883614b3f565b925082614a6857614a67614c69565b5b828204905092915050565b6000614a7e82614b3f565b9150614a8983614b3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ac257614ac1614c3a565b5b828202905092915050565b6000614ad882614b3f565b9150614ae383614b3f565b925082821015614af657614af5614c3a565b5b828203905092915050565b6000614b0c82614b1f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b6182614b68565b9050919050565b6000614b7382614b1f565b9050919050565b6000614b8582614b3f565b9050919050565b60005b83811015614baa578082015181840152602081019050614b8f565b83811115614bb9576000848401525b50505050565b60006002820490506001821680614bd757607f821691505b60208210811415614beb57614bea614c98565b5b50919050565b6000614bfc82614b3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c3a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e2031302070657263656e742100000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6150c181614b01565b81146150cc57600080fd5b50565b6150d881614b13565b81146150e357600080fd5b50565b6150ef81614b3f565b81146150fa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208fa04c0bb13c137c92dab8de37823901203d46f8b7f413fdcd406d8b9105fff964736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80635342acb411610144578063af465a27116100b6578063d28d88521161007a578063d28d885214610933578063d543dbeb1461095e578063dd62ed3e14610987578063ea2f0b37146109c4578063ec28438a146109ed578063f2fde38b14610a1657610267565b8063af465a2714610860578063b09f12661461088b578063c0b0fda2146108b6578063c49b9a80146108e1578063cea269581461090a57610267565b806388f820201161010857806388f820201461072a5780638da5cb5b146107675780638ee88c531461079257806395d89b41146107bb578063a457c2d7146107e6578063a9059cbb1461082357610267565b80635342acb4146106435780636bc87c3a1461068057806370a08231146106ab578063715018a6146106e85780637d1db4a5146106ff57610267565b80632d838119116101dd5780633bd5d173116101a15780633bd5d17314610535578063437823ec1461055e5780634549b03914610587578063457c194c146105c457806349bd5a5e146105ed5780634a74bb021461061857610267565b80632d8381191461043a578063313ce5671461047757806332424aa3146104a257806339509351146104cd5780633b124fe71461050a57610267565b806318160ddd1161022457806318160ddd14610353578063224611731461037e57806322976e0d146103a757806323b872dd146103d257806327c8f8351461040f57610267565b8063061c82d01461026c57806306fdde0314610295578063095ea7b3146102c057806313114a9d146102fd5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190614286565b610a3f565b005b3480156102a157600080fd5b506102aa610ade565b6040516102b791906146ee565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190614221565b610b70565b6040516102f491906146b8565b60405180910390f35b34801561030957600080fd5b50610312610b8e565b60405161031f91906148d0565b60405180910390f35b34801561033457600080fd5b5061033d610b98565b60405161034a91906146d3565b60405180910390f35b34801561035f57600080fd5b50610368610bbc565b60405161037591906148d0565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190614144565b610bc6565b005b3480156103b357600080fd5b506103bc610c9f565b6040516103c991906148d0565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906141d2565b610ca5565b60405161040691906146b8565b60405180910390f35b34801561041b57600080fd5b50610424610d7e565b604051610431919061463c565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190614286565b610da4565b60405161046e91906148d0565b60405180910390f35b34801561048357600080fd5b5061048c610e12565b604051610499919061497c565b60405180910390f35b3480156104ae57600080fd5b506104b7610e29565b6040516104c4919061497c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614221565b610e3c565b60405161050191906146b8565b60405180910390f35b34801561051657600080fd5b5061051f610eef565b60405161052c91906148d0565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614286565b610ef5565b005b34801561056a57600080fd5b5061058560048036038101906105809190614144565b611070565b005b34801561059357600080fd5b506105ae60048036038101906105a991906142af565b611160565b6040516105bb91906148d0565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190614286565b6111e4565b005b3480156105f957600080fd5b50610602611283565b60405161060f919061463c565b60405180910390f35b34801561062457600080fd5b5061062d6112a7565b60405161063a91906146b8565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614144565b6112ba565b60405161067791906146b8565b60405180910390f35b34801561068c57600080fd5b50610695611310565b6040516106a291906148d0565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190614144565b611316565b6040516106df91906148d0565b60405180910390f35b3480156106f457600080fd5b506106fd611401565b005b34801561070b57600080fd5b50610714611554565b60405161072191906148d0565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190614144565b61155a565b60405161075e91906146b8565b60405180910390f35b34801561077357600080fd5b5061077c6115b0565b604051610789919061463c565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190614286565b6115d9565b005b3480156107c757600080fd5b506107d0611678565b6040516107dd91906146ee565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190614221565b61170a565b60405161081a91906146b8565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190614221565b6117d7565b60405161085791906146b8565b60405180910390f35b34801561086c57600080fd5b506108756117f5565b60405161088291906148d0565b60405180910390f35b34801561089757600080fd5b506108a06117fb565b6040516108ad91906146ee565b60405180910390f35b3480156108c257600080fd5b506108cb611889565b6040516108d891906148d0565b60405180910390f35b3480156108ed57600080fd5b506109086004803603810190610903919061425d565b61188f565b005b34801561091657600080fd5b50610931600480360381019061092c9190614286565b611978565b005b34801561093f57600080fd5b50610948611a17565b60405161095591906146ee565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190614286565b611aa5565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614196565b611bae565b6040516109bb91906148d0565b60405180910390f35b3480156109d057600080fd5b506109eb60048036038101906109e69190614144565b611c35565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614286565b611d25565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190614144565b611dc4565b005b610a47611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90614830565b60405180910390fd5b80600f8190555050565b6060600c8054610aed90614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1990614bbf565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b84610b7d611f86565b8484611f8e565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b610bce611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290614830565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610cb2848484612159565b610d7384610cbe611f86565b610d6e856040518060600160405280602881526020016150fe60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d24611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b600190509392505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290614730565b60405180910390fd5b6000610df56123a7565b9050610e0a81846123d290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b600e60009054906101000a900460ff1681565b6000610ee5610e49611f86565b84610ee08560056000610e5a611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b611f8e565b6001905092915050565b600f5481565b6000610eff611f86565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906148b0565b60405180910390fd5b6000610f998361247a565b50505050509050610ff281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061104a81600a546124d690919063ffffffff16565b600a8190555061106583600b5461241c90919063ffffffff16565b600b81905550505050565b611078611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614830565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906147b0565b60405180910390fd5b816111c75760006111b78461247a565b50505050509050809150506111de565b60006111d28461247a565b50505050915050809150505b92915050565b6111ec611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614830565b60405180910390fd5b8060158190555050565b7f0000000000000000000000001de750ccfc4a08f8419bd0836e3e71056f9ab69d81565b601860159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113b157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113fc565b6113f9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da4565b90505b919050565b611409611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115e1611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614830565b60405180910390fd5b8060118190555050565b6060600d805461168790614bbf565b80601f01602080910402602001604051908101604052809291908181526020018280546116b390614bbf565b80156117005780601f106116d557610100808354040283529160200191611700565b820191906000526020600020905b8154815290600101906020018083116116e357829003601f168201915b5050505050905090565b60006117cd611717611f86565b846117c8856040518060600160405280602581526020016151266025913960056000611741611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b6001905092915050565b60006117eb6117e4611f86565b8484612159565b6001905092915050565b60095481565b600d805461180890614bbf565b80601f016020809104026020016040519081016040528092919081815260200182805461183490614bbf565b80156118815780601f1061185657610100808354040283529160200191611881565b820191906000526020600020905b81548152906001019060200180831161186457829003601f168201915b505050505081565b60135481565b611897611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614830565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161196d91906146b8565b60405180910390a150565b611980611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614830565b60405180910390fd5b8060138190555050565b600c8054611a2490614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5090614bbf565b8015611a9d5780601f10611a7257610100808354040283529160200191611a9d565b820191906000526020600020905b815481529060010190602001808311611a8057829003601f168201915b505050505081565b611aad611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614830565b60405180910390fd5b60018111611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906147f0565b60405180910390fd5b611ba56064611b978360095461252090919063ffffffff16565b6123d290919063ffffffff16565b60198190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c3d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190614830565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d2d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614830565b60405180910390fd5b8060198190555050565b611dcc611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090614750565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614890565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614770565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161214c91906148d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614710565b60405180910390fd5b6000811161227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614850565b60405180910390fd5b600061228730611316565b90506000601a5482101590508080156122ad5750601860149054906101000a900460ff16155b801561230557507f0000000000000000000000001de750ccfc4a08f8419bd0836e3e71056f9ab69d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561231d5750601860159054906101000a900460ff165b1561233157601a5491506123308261259b565b5b61233c858585612671565b5050505050565b600083831115829061238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238291906146ee565b60405180910390fd5b506000838561239a9190614acd565b9050809150509392505050565b60008060006123b4612c97565b915091506123cb81836123d290919063ffffffff16565b9250505090565b600061241483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fe2565b905092915050565b600080828461242b91906149ec565b905083811015612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614790565b60405180910390fd5b8091505092915050565b60008060008060008060008060006124918a613045565b92509250925060008060006124af8d86866124aa6123a7565b61309f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061251883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612343565b905092915050565b6000808314156125335760009050612595565b600082846125419190614a73565b90508284826125509190614a42565b14612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614810565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff02191690831515021790555060006125cc6002836123d290919063ffffffff16565b905060006125e382846124d690919063ffffffff16565b905060004790506125f383613128565b600061260882476124d690919063ffffffff16565b905061261483826133e6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161264793929190614945565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127125750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127245761271f6134d6565b61276a565b601954811115612769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612760906147d0565b60405180910390fd5b5b600061279460646127866013548561252090919063ffffffff16565b6123d290919063ffffffff16565b905060006127c060646127b26015548661252090919063ffffffff16565b6123d290919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128655750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289e5761289985856128948461288687896124d690919063ffffffff16565b6124d690919063ffffffff16565b6134f8565b612b65565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129415750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561297a5761297585856129708461296287896124d690919063ffffffff16565b6124d690919063ffffffff16565b613758565b612b64565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a1e5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a5757612a528585612a4d84612a3f87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b612b63565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af95750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3257612b2d8585612b2884612b1a87896124d690919063ffffffff16565b6124d690919063ffffffff16565b613b83565b612b62565b612b618585612b5c84612b4e87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b5b5b5b5b6000600f819055506000601181905550612ba285601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613758565b612bcf85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613758565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c825750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9057612c8f613e78565b5b5050505050565b6000806000600a5490506000600954905060005b600880549050811015612fa557826003600060088481548110612cf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e0b5750816004600060088481548110612da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e2257600a5460095494509450505050612fde565b612ed86003600060088481548110612e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846124d690919063ffffffff16565b9250612f906004600060088481548110612f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836124d690919063ffffffff16565b91508080612f9d90614bf1565b915050612cab565b50612fbd600954600a546123d290919063ffffffff16565b821015612fd557600a54600954935093505050612fde565b81819350935050505b9091565b60008083118290613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302091906146ee565b60405180910390fd5b50600083856130389190614a42565b9050809150509392505050565b60008060008061305485613e9a565b9050600061306186613ecb565b9050600061308a8261307c858a6124d690919063ffffffff16565b6124d690919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130b8858961252090919063ffffffff16565b905060006130cf868961252090919063ffffffff16565b905060006130e6878961252090919063ffffffff16565b9050600061310f8261310185876124d690919063ffffffff16565b6124d690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561316b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131995781602001602082028036833780820191505090505b50905030816000815181106131d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561327757600080fd5b505afa15801561328b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132af919061416d565b816001815181106132e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f8e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133b09594939291906148eb565b600060405180830381600087803b1580156133ca57600080fd5b505af11580156133de573d6000803e3d6000fd5b505050505050565b613411307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f8e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061345b6115b0565b426040518863ffffffff1660e01b815260040161347d96959493929190614657565b6060604051808303818588803b15801561349657600080fd5b505af11580156134aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134cf91906142eb565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b60008060008060008061350a8761247a565b95509550955095509550955061356887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136de81613efc565b6136e884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161374591906148d0565b60405180910390a3505050505050505050565b60008060008060008061376a8761247a565b9550955095509550955095506137c886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138f285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061393e81613efc565b61394884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139a591906148d0565b60405180910390a3505050505050505050565b6000806000806000806139ca8761247a565b955095509550955095509550613a2886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613abd85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b0981613efc565b613b1384836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b7091906148d0565b60405180910390a3505050505050505050565b600080600080600080613b958761247a565b955095509550955095509550613bf387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dfe81613efc565b613e0884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e6591906148d0565b60405180910390a3505050505050505050565b6001600f81905550600060118190555060016013819055506001601581905550565b6000613ec46064613eb6600f548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613ef56064613ee76011548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613f066123a7565b90506000613f1d828461252090919063ffffffff16565b9050613f7181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561409c5761405883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6140b682600a546124d690919063ffffffff16565b600a819055506140d181600b5461241c90919063ffffffff16565b600b819055505050565b6000813590506140ea816150b8565b92915050565b6000815190506140ff816150b8565b92915050565b600081359050614114816150cf565b92915050565b600081359050614129816150e6565b92915050565b60008151905061413e816150e6565b92915050565b60006020828403121561415657600080fd5b6000614164848285016140db565b91505092915050565b60006020828403121561417f57600080fd5b600061418d848285016140f0565b91505092915050565b600080604083850312156141a957600080fd5b60006141b7858286016140db565b92505060206141c8858286016140db565b9150509250929050565b6000806000606084860312156141e757600080fd5b60006141f5868287016140db565b9350506020614206868287016140db565b92505060406142178682870161411a565b9150509250925092565b6000806040838503121561423457600080fd5b6000614242858286016140db565b92505060206142538582860161411a565b9150509250929050565b60006020828403121561426f57600080fd5b600061427d84828501614105565b91505092915050565b60006020828403121561429857600080fd5b60006142a68482850161411a565b91505092915050565b600080604083850312156142c257600080fd5b60006142d08582860161411a565b92505060206142e185828601614105565b9150509250929050565b60008060006060848603121561430057600080fd5b600061430e8682870161412f565b935050602061431f8682870161412f565b92505060406143308682870161412f565b9150509250925092565b60006143468383614352565b60208301905092915050565b61435b81614b01565b82525050565b61436a81614b01565b82525050565b600061437b826149a7565b61438581856149ca565b935061439083614997565b8060005b838110156143c15781516143a8888261433a565b97506143b3836149bd565b925050600181019050614394565b5085935050505092915050565b6143d781614b13565b82525050565b6143e681614b56565b82525050565b6143f581614b7a565b82525050565b6000614406826149b2565b61441081856149db565b9350614420818560208601614b8c565b61442981614cc7565b840191505092915050565b60006144416023836149db565b915061444c82614cd8565b604082019050919050565b6000614464602a836149db565b915061446f82614d27565b604082019050919050565b60006144876026836149db565b915061449282614d76565b604082019050919050565b60006144aa6022836149db565b91506144b582614dc5565b604082019050919050565b60006144cd601b836149db565b91506144d882614e14565b602082019050919050565b60006144f0601f836149db565b91506144fb82614e3d565b602082019050919050565b60006145136028836149db565b915061451e82614e66565b604082019050919050565b60006145366033836149db565b915061454182614eb5565b604082019050919050565b60006145596021836149db565b915061456482614f04565b604082019050919050565b600061457c6020836149db565b915061458782614f53565b602082019050919050565b600061459f6029836149db565b91506145aa82614f7c565b604082019050919050565b60006145c26025836149db565b91506145cd82614fcb565b604082019050919050565b60006145e56024836149db565b91506145f08261501a565b604082019050919050565b6000614608602c836149db565b915061461382615069565b604082019050919050565b61462781614b3f565b82525050565b61463681614b49565b82525050565b60006020820190506146516000830184614361565b92915050565b600060c08201905061466c6000830189614361565b614679602083018861461e565b61468660408301876143ec565b61469360608301866143ec565b6146a06080830185614361565b6146ad60a083018461461e565b979650505050505050565b60006020820190506146cd60008301846143ce565b92915050565b60006020820190506146e860008301846143dd565b92915050565b6000602082019050818103600083015261470881846143fb565b905092915050565b6000602082019050818103600083015261472981614434565b9050919050565b6000602082019050818103600083015261474981614457565b9050919050565b600060208201905081810360008301526147698161447a565b9050919050565b600060208201905081810360008301526147898161449d565b9050919050565b600060208201905081810360008301526147a9816144c0565b9050919050565b600060208201905081810360008301526147c9816144e3565b9050919050565b600060208201905081810360008301526147e981614506565b9050919050565b6000602082019050818103600083015261480981614529565b9050919050565b600060208201905081810360008301526148298161454c565b9050919050565b600060208201905081810360008301526148498161456f565b9050919050565b6000602082019050818103600083015261486981614592565b9050919050565b60006020820190508181036000830152614889816145b5565b9050919050565b600060208201905081810360008301526148a9816145d8565b9050919050565b600060208201905081810360008301526148c9816145fb565b9050919050565b60006020820190506148e5600083018461461e565b92915050565b600060a082019050614900600083018861461e565b61490d60208301876143ec565b818103604083015261491f8186614370565b905061492e6060830185614361565b61493b608083018461461e565b9695505050505050565b600060608201905061495a600083018661461e565b614967602083018561461e565b614974604083018461461e565b949350505050565b6000602082019050614991600083018461462d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149f782614b3f565b9150614a0283614b3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a3757614a36614c3a565b5b828201905092915050565b6000614a4d82614b3f565b9150614a5883614b3f565b925082614a6857614a67614c69565b5b828204905092915050565b6000614a7e82614b3f565b9150614a8983614b3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ac257614ac1614c3a565b5b828202905092915050565b6000614ad882614b3f565b9150614ae383614b3f565b925082821015614af657614af5614c3a565b5b828203905092915050565b6000614b0c82614b1f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b6182614b68565b9050919050565b6000614b7382614b1f565b9050919050565b6000614b8582614b3f565b9050919050565b60005b83811015614baa578082015181840152602081019050614b8f565b83811115614bb9576000848401525b50505050565b60006002820490506001821680614bd757607f821691505b60208210811415614beb57614bea614c98565b5b50919050565b6000614bfc82614b3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c3a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e2031302070657263656e742100000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6150c181614b01565b81146150cc57600080fd5b50565b6150d881614b13565b81146150e357600080fd5b50565b6150ef81614b3f565b81146150fa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208fa04c0bb13c137c92dab8de37823901203d46f8b7f413fdcd406d8b9105fff964736f6c63430008040033

Deployed Bytecode Sourcemap

25197:18888:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30388:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28115:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29027:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30148:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26523:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28392:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43394:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26254:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29196:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26439:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31577:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28301:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25940:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29517:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25980:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30748:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43147:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31133:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30248:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26581:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26660:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35709:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26067:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28495:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16544:148;;;;;;;;;;;;;:::i;:::-;;26709:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30020:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15901:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30499:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28206:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29743:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28701:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25694:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25903:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26168:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43905:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30634:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25844:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43644:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28876:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43270:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43520:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16847:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30388:98;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30472:6:::1;30462:7;:16;;;;30388:98:::0;:::o;28115:83::-;28152:13;28185:5;28178:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28115:83;:::o;29027:161::-;29102:4;29119:39;29128:12;:10;:12::i;:::-;29142:7;29151:6;29119:8;:39::i;:::-;29176:4;29169:11;;29027:161;;;;:::o;30148:87::-;30190:7;30217:10;;30210:17;;30148:87;:::o;26523:51::-;;;:::o;28392:95::-;28445:7;28472;;28465:14;;28392:95;:::o;43394:114::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43491:9:::1;43473:15;;:27;;;;;;;;;;;;;;;;;;43394:114:::0;:::o;26254:32::-;;;;:::o;29196:313::-;29294:4;29311:36;29321:6;29329:9;29340:6;29311:9;:36::i;:::-;29358:121;29367:6;29375:12;:10;:12::i;:::-;29389:89;29427:6;29389:89;;;;;;;;;;;;;;;;;:11;:19;29401:6;29389:19;;;;;;;;;;;;;;;:33;29409:12;:10;:12::i;:::-;29389:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29358:8;:121::i;:::-;29497:4;29490:11;;29196:313;;;;;:::o;26439:71::-;;;;;;;;;;;;;:::o;31577:253::-;31643:7;31682;;31671;:18;;31663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31747:19;31770:10;:8;:10::i;:::-;31747:33;;31798:24;31810:11;31798:7;:11;;:24;;;;:::i;:::-;31791:31;;;31577:253;;;:::o;28301:83::-;28342:5;28367:9;;;;;;;;;;;28360:16;;28301:83;:::o;25940:27::-;;;;;;;;;;;;;:::o;29517:218::-;29605:4;29622:83;29631:12;:10;:12::i;:::-;29645:7;29654:50;29693:10;29654:11;:25;29666:12;:10;:12::i;:::-;29654:25;;;;;;;;;;;;;;;:34;29680:7;29654:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29622:8;:83::i;:::-;29723:4;29716:11;;29517:218;;;;:::o;25980:26::-;;;;:::o;30748:377::-;30800:14;30817:12;:10;:12::i;:::-;30800:29;;30849:11;:19;30861:6;30849:19;;;;;;;;;;;;;;;;;;;;;;;;;30848:20;30840:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30929:15;30953:19;30964:7;30953:10;:19::i;:::-;30928:44;;;;;;;31001:28;31021:7;31001;:15;31009:6;31001:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30983:7;:15;30991:6;30983:15;;;;;;;;;;;;;;;:46;;;;31050:20;31062:7;31050;;:11;;:20;;;;:::i;:::-;31040:7;:30;;;;31094:23;31109:7;31094:10;;:14;;:23;;;;:::i;:::-;31081:10;:36;;;;30748:377;;;:::o;43147:111::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43246:4:::1;43216:18;:27;43235:7;43216:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43147:111:::0;:::o;31133:436::-;31223:7;31262;;31251;:18;;31243:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31321:17;31316:246;;31356:15;31380:19;31391:7;31380:10;:19::i;:::-;31355:44;;;;;;;31421:7;31414:14;;;;;31316:246;31463:23;31494:19;31505:7;31494:10;:19::i;:::-;31461:52;;;;;;;31535:15;31528:22;;;31133:436;;;;;:::o;30248:128::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30353:15:::1;30337:13;:31;;;;30248:128:::0;:::o;26581:38::-;;;:::o;26660:40::-;;;;;;;;;;;;;:::o;35709:123::-;35773:4;35797:18;:27;35816:7;35797:27;;;;;;;;;;;;;;;;;;;;;;;;;35790:34;;35709:123;;;:::o;26067:32::-;;;;:::o;28495:198::-;28561:7;28585:11;:20;28597:7;28585:20;;;;;;;;;;;;;;;;;;;;;;;;;28581:49;;;28614:7;:16;28622:7;28614:16;;;;;;;;;;;;;;;;28607:23;;;;28581:49;28648:37;28668:7;:16;28676:7;28668:16;;;;;;;;;;;;;;;;28648:19;:37::i;:::-;28641:44;;28495:198;;;;:::o;16544:148::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16651:1:::1;16614:40;;16635:6;::::0;::::1;;;;;;;;16614:40;;;;;;;;;;;;16682:1;16665:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16544:148::o:0;26709:55::-;;;;:::o;30020:120::-;30088:4;30112:11;:20;30124:7;30112:20;;;;;;;;;;;;;;;;;;;;;;;;;30105:27;;30020:120;;;:::o;15901:79::-;15939:7;15966:6;;;;;;;;;;;15959:13;;15901:79;:::o;30499:122::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30601:12:::1;30585:13;:28;;;;30499:122:::0;:::o;28206:87::-;28245:13;28278:7;28271:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28206:87;:::o;29743:269::-;29836:4;29853:129;29862:12;:10;:12::i;:::-;29876:7;29885:96;29924:15;29885:96;;;;;;;;;;;;;;;;;:11;:25;29897:12;:10;:12::i;:::-;29885:25;;;;;;;;;;;;;;;:34;29911:7;29885:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29853:8;:129::i;:::-;30000:4;29993:11;;29743:269;;;;:::o;28701:167::-;28779:4;28796:42;28806:12;:10;:12::i;:::-;28820:9;28831:6;28796:9;:42::i;:::-;28856:4;28849:11;;28701:167;;;;:::o;25694:52::-;;;;:::o;25903:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26168:27::-;;;;:::o;43905:171::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44006:8:::1;43982:21;;:32;;;;;;;;;;;;;;;;;;44030:38;44059:8;44030:38;;;;;;:::i;:::-;;;;;;;;43905:171:::0;:::o;30634:102::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30721:7:::1;30710:8;:18;;;;30634:102:::0;:::o;25844:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43644:253::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43746:1:::1;43731:12;:16;43723:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43829:60;43873:5;43829:25;43841:12;43829:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;43814:12;:75;;;;43644:253:::0;:::o;28876:143::-;28957:7;28984:11;:18;28996:5;28984:18;;;;;;;;;;;;;;;:27;29003:7;28984:27;;;;;;;;;;;;;;;;28977:34;;28876:143;;;;:::o;43270:110::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43367:5:::1;43337:18;:27;43356:7;43337:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43270:110:::0;:::o;43520:112::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43612:11:::1;43597:12;:26;;;;43520:112:::0;:::o;16847:244::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16956:1:::1;16936:22;;:8;:22;;;;16928:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17046:8;17017:38;;17038:6;::::0;::::1;;;;;;;;17017:38;;;;;;;;;;;;17075:8;17066:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16847:244:::0;:::o;8310:115::-;8363:15;8406:10;8391:26;;8310:115;:::o;35840:337::-;35950:1;35933:19;;:5;:19;;;;35925:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36031:1;36012:21;;:7;:21;;;;36004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36115:6;36085:11;:18;36097:5;36085:18;;;;;;;;;;;;;;;:27;36104:7;36085:27;;;;;;;;;;;;;;;:36;;;;36153:7;36137:32;;36146:5;36137:32;;;36162:6;36137:32;;;;;;:::i;:::-;;;;;;;;35840:337;;;:::o;36185:1234::-;36323:1;36307:18;;:4;:18;;;;36299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36400:1;36386:16;;:2;:16;;;;36378:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36470:1;36461:6;:10;36453:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36812:28;36843:24;36861:4;36843:9;:24::i;:::-;36812:55;;36886:24;36937:29;;36913:20;:53;;36886:80;;36995:19;:53;;;;;37032:16;;;;;;;;;;;37031:17;36995:53;:91;;;;;37073:13;37065:21;;:4;:21;;;;36995:91;:129;;;;;37103:21;;;;;;;;;;;36995:129;36977:318;;;37174:29;;37151:52;;37247:36;37262:20;37247:14;:36::i;:::-;36977:318;37381:30;37396:4;37401:2;37404:6;37381:14;:30::i;:::-;36185:1234;;;;;:::o;4720:192::-;4806:7;4839:1;4834;:6;;4842:12;4826:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4866:9;4882:1;4878;:5;;;;:::i;:::-;4866:17;;4903:1;4896:8;;;4720:192;;;;;:::o;33951:163::-;33992:7;34013:15;34030;34049:19;:17;:19::i;:::-;34012:56;;;;34086:20;34098:7;34086;:11;;:20;;;;:::i;:::-;34079:27;;;;33951:163;:::o;6118:132::-;6176:7;6203:39;6207:1;6210;6203:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6196:46;;6118:132;;;;:::o;3817:181::-;3875:7;3895:9;3911:1;3907;:5;;;;:::i;:::-;3895:17;;3936:1;3931;:6;;3923:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3989:1;3982:8;;;3817:181;;;;:::o;32749:419::-;32808:7;32817;32826;32835;32844;32853;32874:23;32899:12;32913:18;32935:20;32947:7;32935:11;:20::i;:::-;32873:82;;;;;;32967:15;32984:23;33009:12;33025:50;33037:7;33046:4;33052:10;33064;:8;:10::i;:::-;33025:11;:50::i;:::-;32966:109;;;;;;33094:7;33103:15;33120:4;33126:15;33143:4;33149:10;33086:74;;;;;;;;;;;;;;;;;;32749:419;;;;;;;:::o;4281:136::-;4339:7;4366:43;4370:1;4373;4366:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4359:50;;4281:136;;;;:::o;5171:471::-;5229:7;5479:1;5474;:6;5470:47;;;5504:1;5497:8;;;;5470:47;5529:9;5545:1;5541;:5;;;;:::i;:::-;5529:17;;5574:1;5569;5565;:5;;;;:::i;:::-;:10;5557:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5633:1;5626:8;;;5171:471;;;;;:::o;37427:985::-;27163:4;27144:16;;:23;;;;;;;;;;;;;;;;;;37563:12:::1;37578:27;37603:1;37578:20;:24;;:27;;;;:::i;:::-;37563:42;;37616:17;37636:30;37661:4;37636:20;:24;;:30;;;;:::i;:::-;37616:50;;37944:22;37969:21;37944:46;;38035:22;38052:4;38035:16;:22::i;:::-;38188:18;38209:41;38235:14;38209:21;:25;;:41;;;;:::i;:::-;38188:62;;38300:35;38313:9;38324:10;38300:12;:35::i;:::-;38361:43;38376:4;38382:10;38394:9;38361:43;;;;;;;;:::i;:::-;;;;;;;;27178:1;;;;27209:5:::0;27190:16;;:24;;;;;;;;;;;;;;;;;;37427:985;:::o;39611:1850::-;39708:18;:26;39727:6;39708:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39738:18;:29;39757:9;39738:29;;;;;;;;;;;;;;;;;;;;;;;;;39708:59;39705:220;;;39783:14;:12;:14::i;:::-;39705:220;;;39856:12;;39846:6;:22;;39838:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39705:220;39999:15;40017:29;40042:3;40017:20;40028:8;;40017:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;39999:47;;40057:20;40080:34;40110:3;40080:25;40091:13;;40080:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40057:57;;40131:11;:19;40143:6;40131:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40155:11;:22;40167:9;40155:22;;;;;;;;;;;;;;;;;;;;;;;;;40154:23;40131:46;40127:762;;;40194:81;40216:6;40224:9;40236:37;40260:12;40236:19;40247:7;40236:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40194:21;:81::i;:::-;40127:762;;;40298:11;:19;40310:6;40298:19;;;;;;;;;;;;;;;;;;;;;;;;;40297:20;:46;;;;;40321:11;:22;40333:9;40321:22;;;;;;;;;;;;;;;;;;;;;;;;;40297:46;40293:596;;;40360:79;40380:6;40388:9;40400:37;40424:12;40400:19;40411:7;40400:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40360:19;:79::i;:::-;40293:596;;;40462:11;:19;40474:6;40462:19;;;;;;;;;;;;;;;;;;;;;;;;;40461:20;:47;;;;;40486:11;:22;40498:9;40486:22;;;;;;;;;;;;;;;;;;;;;;;;;40485:23;40461:47;40457:432;;;40525:77;40543:6;40551:9;40563:37;40587:12;40563:19;40574:7;40563:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40525:17;:77::i;:::-;40457:432;;;40624:11;:19;40636:6;40624:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40647:11;:22;40659:9;40647:22;;;;;;;;;;;;;;;;;;;;;;;;;40624:45;40620:269;;;40686:81;40708:6;40716:9;40728:37;40752:12;40728:19;40739:7;40728:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40686:21;:81::i;:::-;40620:269;;;40800:77;40818:6;40826:9;40838:37;40862:12;40838:19;40849:7;40838:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40800:17;:77::i;:::-;40620:269;40457:432;40293:596;40127:762;41003:1;40993:7;:11;;;;41031:1;41015:13;:17;;;;41100:49;41120:6;41128:11;;;;;;;;;;;41141:7;41100:19;:49::i;:::-;41160:58;41180:6;41188:15;;;;;;;;;;;41205:12;41160:19;:58::i;:::-;41283:15;;41273:7;:25;;;;41325:21;;41309:13;:37;;;;41364:18;:26;41383:6;41364:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41394:18;:29;41413:9;41394:29;;;;;;;;;;;;;;;;;;;;;;;;;41364:59;41361:92;;;41438:15;:13;:15::i;:::-;41361:92;39611:1850;;;;;:::o;34122:561::-;34172:7;34181;34201:15;34219:7;;34201:25;;34237:15;34255:7;;34237:25;;34284:9;34279:289;34303:9;:16;;;;34299:1;:20;34279:289;;;34369:7;34345;:21;34353:9;34363:1;34353:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34345:21;;;;;;;;;;;;;;;;:31;:66;;;;34404:7;34380;:21;34388:9;34398:1;34388:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34380:21;;;;;;;;;;;;;;;;:31;34345:66;34341:97;;;34421:7;;34430;;34413:25;;;;;;;;;34341:97;34463:34;34475:7;:21;34483:9;34493:1;34483:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34475:21;;;;;;;;;;;;;;;;34463:7;:11;;:34;;;;:::i;:::-;34453:44;;34522:34;34534:7;:21;34542:9;34552:1;34542:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34534:21;;;;;;;;;;;;;;;;34522:7;:11;;:34;;;;:::i;:::-;34512:44;;34321:3;;;;;:::i;:::-;;;;34279:289;;;;34592:20;34604:7;;34592;;:11;;:20;;;;:::i;:::-;34582:7;:30;34578:61;;;34622:7;;34631;;34614:25;;;;;;;;34578:61;34658:7;34667;34650:25;;;;;;34122:561;;;:::o;6746:278::-;6832:7;6864:1;6860;:5;6867:12;6852:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6891:9;6907:1;6903;:5;;;;:::i;:::-;6891:17;;7015:1;7008:8;;;6746:278;;;;;:::o;33176:330::-;33236:7;33245;33254;33274:12;33289:24;33305:7;33289:15;:24::i;:::-;33274:39;;33324:18;33345:30;33367:7;33345:21;:30::i;:::-;33324:51;;33386:23;33412:33;33434:10;33412:17;33424:4;33412:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33386:59;;33464:15;33481:4;33487:10;33456:42;;;;;;;;;33176:330;;;;;:::o;33514:429::-;33629:7;33638;33647;33667:15;33685:24;33697:11;33685:7;:11;;:24;;;;:::i;:::-;33667:42;;33720:12;33735:21;33744:11;33735:4;:8;;:21;;;;:::i;:::-;33720:36;;33767:18;33788:27;33803:11;33788:10;:14;;:27;;;;:::i;:::-;33767:48;;33826:23;33852:33;33874:10;33852:17;33864:4;33852:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33826:59;;33904:7;33913:15;33930:4;33896:39;;;;;;;;;;33514:429;;;;;;;;:::o;38420:589::-;38546:21;38584:1;38570:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38546:40;;38615:4;38597;38602:1;38597:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;38641:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38631:4;38636:1;38631:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;38676:62;38693:4;38708:15;38726:11;38676:8;:62::i;:::-;38777:15;:66;;;38858:11;38884:1;38928:4;38955;38975:15;38777:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38420:589;;:::o;39017:513::-;39165:62;39182:4;39197:15;39215:11;39165:8;:62::i;:::-;39270:15;:31;;;39309:9;39342:4;39362:11;39388:1;39431;39474:7;:5;:7::i;:::-;39496:15;39270:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39017:513;;:::o;35402:141::-;35455:1;35445:7;:11;;;;35483:1;35467:13;:17;;;;35506:1;35495:8;:12;;;;35534:1;35518:13;:17;;;;35402:141::o;42573:566::-;42676:15;42693:23;42718:12;42732:23;42757:12;42771:18;42793:19;42804:7;42793:10;:19::i;:::-;42675:137;;;;;;;;;;;;42841:28;42861:7;42841;:15;42849:6;42841:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42823:7;:15;42831:6;42823:15;;;;;;;;;;;;;;;:46;;;;42898:28;42918:7;42898;:15;42906:6;42898:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42880:7;:15;42888:6;42880:15;;;;;;;;;;;;;;;:46;;;;42958:39;42981:15;42958:7;:18;42966:9;42958:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42937:7;:18;42945:9;42937:18;;;;;;;;;;;;;;;:60;;;;43011:26;43026:10;43011:14;:26::i;:::-;43048:23;43060:4;43066;43048:11;:23::i;:::-;43104:9;43087:44;;43096:6;43087:44;;;43115:15;43087:44;;;;;;:::i;:::-;;;;;;;;42573:566;;;;;;;;;:::o;41979:586::-;42080:15;42097:23;42122:12;42136:23;42161:12;42175:18;42197:19;42208:7;42197:10;:19::i;:::-;42079:137;;;;;;;;;;;;42245:28;42265:7;42245;:15;42253:6;42245:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42227:7;:15;42235:6;42227:15;;;;;;;;;;;;;;;:46;;;;42305:39;42328:15;42305:7;:18;42313:9;42305:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42284:7;:18;42292:9;42284:18;;;;;;;;;;;;;;;:60;;;;42376:39;42399:15;42376:7;:18;42384:9;42376:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42355:7;:18;42363:9;42355:18;;;;;;;;;;;;;;;:60;;;;42437:26;42452:10;42437:14;:26::i;:::-;42474:23;42486:4;42492;42474:11;:23::i;:::-;42530:9;42513:44;;42522:6;42513:44;;;42541:15;42513:44;;;;;;:::i;:::-;;;;;;;;41979:586;;;;;;;;;:::o;41469:502::-;41568:15;41585:23;41610:12;41624:23;41649:12;41663:18;41685:19;41696:7;41685:10;:19::i;:::-;41567:137;;;;;;;;;;;;41733:28;41753:7;41733;:15;41741:6;41733:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41715:7;:15;41723:6;41715:15;;;;;;;;;;;;;;;:46;;;;41793:39;41816:15;41793:7;:18;41801:9;41793:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41772:7;:18;41780:9;41772:18;;;;;;;;;;;;;;;:60;;;;41843:26;41858:10;41843:14;:26::i;:::-;41880:23;41892:4;41898;41880:11;:23::i;:::-;41936:9;41919:44;;41928:6;41919:44;;;41947:15;41919:44;;;;;;:::i;:::-;;;;;;;;41469:502;;;;;;;;;:::o;31838:642::-;31941:15;31958:23;31983:12;31997:23;32022:12;32036:18;32058:19;32069:7;32058:10;:19::i;:::-;31940:137;;;;;;;;;;;;32106:28;32126:7;32106;:15;32114:6;32106:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32088:7;:15;32096:6;32088:15;;;;;;;;;;;;;;;:46;;;;32163:28;32183:7;32163;:15;32171:6;32163:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32145:7;:15;32153:6;32145:15;;;;;;;;;;;;;;;:46;;;;32223:39;32246:15;32223:7;:18;32231:9;32223:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32202:7;:18;32210:9;32202:18;;;;;;;;;;;;;;;:60;;;;32294:39;32317:15;32294:7;:18;32302:9;32294:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32273:7;:18;32281:9;32273:18;;;;;;;;;;;;;;;:60;;;;32352:26;32367:10;32352:14;:26::i;:::-;32389:23;32401:4;32407;32389:11;:23::i;:::-;32445:9;32428:44;;32437:6;32428:44;;;32456:15;32428:44;;;;;;:::i;:::-;;;;;;;;31838:642;;;;;;;;;:::o;35555:142::-;35609:1;35599:7;:11;;;;35637:1;35621:13;:17;;;;35660:1;35649:8;:12;;;;35688:1;35672:13;:17;;;;35555:142::o;35062:154::-;35126:7;35153:55;35192:5;35153:20;35165:7;;35153;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35146:62;;35062:154;;;:::o;35224:166::-;35294:7;35321:61;35366:5;35321:26;35333:13;;35321:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35314:68;;35224:166;;;:::o;34695:355::-;34758:19;34781:10;:8;:10::i;:::-;34758:33;;34802:18;34823:27;34838:11;34823:10;:14;;:27;;;;:::i;:::-;34802:48;;34886:38;34913:10;34886:7;:22;34902:4;34886:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34861:7;:22;34877:4;34861:22;;;;;;;;;;;;;;;:63;;;;34938:11;:26;34958:4;34938:26;;;;;;;;;;;;;;;;;;;;;;;;;34935:107;;;35004:38;35031:10;35004:7;:22;35020:4;35004:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34979:7;:22;34995:4;34979:22;;;;;;;;;;;;;;;:63;;;;34935:107;34695:355;;;:::o;32594:147::-;32672:17;32684:4;32672:7;;:11;;:17;;;;:::i;:::-;32662:7;:27;;;;32713:20;32728:4;32713:10;;:14;;:20;;;;:::i;:::-;32700:10;:33;;;;32594: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:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;2331:6;2339;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;2732:6;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;2997:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;3701:6;3709;3717;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;4284:10;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;4787:3;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;5953:3;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;6377:3;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;6749:3;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;7121:3;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;7493:3;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;7865:3;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;8237:3;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;8609:3;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;8981:3;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;9353:3;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;10097:3;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;10469:3;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;10841:3;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:366::-;11213:3;11234:67;11298:2;11293:3;11234:67;:::i;:::-;11227:74;;11310:93;11399:3;11310:93;:::i;:::-;11428:2;11423:3;11419:12;11412:19;;11217:220;;;:::o;11443:118::-;11530:24;11548:5;11530:24;:::i;:::-;11525:3;11518:37;11508:53;;:::o;11567:112::-;11650:22;11666:5;11650:22;:::i;:::-;11645:3;11638:35;11628:51;;:::o;11685:222::-;11778:4;11816:2;11805:9;11801:18;11793:26;;11829:71;11897:1;11886:9;11882:17;11873:6;11829:71;:::i;:::-;11783:124;;;;:::o;11913:807::-;12162:4;12200:3;12189:9;12185:19;12177:27;;12214:71;12282:1;12271:9;12267:17;12258:6;12214:71;:::i;:::-;12295:72;12363:2;12352:9;12348:18;12339:6;12295:72;:::i;:::-;12377:80;12453:2;12442:9;12438:18;12429:6;12377:80;:::i;:::-;12467;12543:2;12532:9;12528:18;12519:6;12467:80;:::i;:::-;12557:73;12625:3;12614:9;12610:19;12601:6;12557:73;:::i;:::-;12640;12708:3;12697:9;12693:19;12684:6;12640:73;:::i;:::-;12167:553;;;;;;;;;:::o;12726:210::-;12813:4;12851:2;12840:9;12836:18;12828:26;;12864:65;12926:1;12915:9;12911:17;12902:6;12864:65;:::i;:::-;12818:118;;;;:::o;12942:276::-;13062:4;13100:2;13089:9;13085:18;13077:26;;13113:98;13208:1;13197:9;13193:17;13184:6;13113:98;:::i;:::-;13067:151;;;;:::o;13224:313::-;13337:4;13375:2;13364:9;13360:18;13352:26;;13424:9;13418:4;13414:20;13410:1;13399:9;13395:17;13388:47;13452:78;13525:4;13516:6;13452:78;:::i;:::-;13444:86;;13342:195;;;;:::o;13543:419::-;13709:4;13747:2;13736:9;13732:18;13724:26;;13796:9;13790:4;13786:20;13782:1;13771:9;13767:17;13760:47;13824:131;13950:4;13824:131;:::i;:::-;13816:139;;13714:248;;;:::o;13968:419::-;14134:4;14172:2;14161:9;14157:18;14149:26;;14221:9;14215:4;14211:20;14207:1;14196:9;14192:17;14185:47;14249:131;14375:4;14249:131;:::i;:::-;14241:139;;14139:248;;;:::o;14393:419::-;14559:4;14597:2;14586:9;14582:18;14574:26;;14646:9;14640:4;14636:20;14632:1;14621:9;14617:17;14610:47;14674:131;14800:4;14674:131;:::i;:::-;14666:139;;14564:248;;;:::o;14818:419::-;14984:4;15022:2;15011:9;15007:18;14999:26;;15071:9;15065:4;15061:20;15057:1;15046:9;15042:17;15035:47;15099:131;15225:4;15099:131;:::i;:::-;15091:139;;14989:248;;;:::o;15243:419::-;15409:4;15447:2;15436:9;15432:18;15424:26;;15496:9;15490:4;15486:20;15482:1;15471:9;15467:17;15460:47;15524:131;15650:4;15524:131;:::i;:::-;15516:139;;15414:248;;;:::o;15668:419::-;15834:4;15872:2;15861:9;15857:18;15849:26;;15921:9;15915:4;15911:20;15907:1;15896:9;15892:17;15885:47;15949:131;16075:4;15949:131;:::i;:::-;15941:139;;15839:248;;;:::o;16093:419::-;16259:4;16297:2;16286:9;16282:18;16274:26;;16346:9;16340:4;16336:20;16332:1;16321:9;16317:17;16310:47;16374:131;16500:4;16374:131;:::i;:::-;16366:139;;16264:248;;;:::o;16518:419::-;16684:4;16722:2;16711:9;16707:18;16699:26;;16771:9;16765:4;16761:20;16757:1;16746:9;16742:17;16735:47;16799:131;16925:4;16799:131;:::i;:::-;16791:139;;16689:248;;;:::o;16943:419::-;17109:4;17147:2;17136:9;17132:18;17124:26;;17196:9;17190:4;17186:20;17182:1;17171:9;17167:17;17160:47;17224:131;17350:4;17224:131;:::i;:::-;17216:139;;17114:248;;;:::o;17368:419::-;17534:4;17572:2;17561:9;17557:18;17549:26;;17621:9;17615:4;17611:20;17607:1;17596:9;17592:17;17585:47;17649:131;17775:4;17649:131;:::i;:::-;17641:139;;17539:248;;;:::o;17793:419::-;17959:4;17997:2;17986:9;17982:18;17974:26;;18046:9;18040:4;18036:20;18032:1;18021:9;18017:17;18010:47;18074:131;18200:4;18074:131;:::i;:::-;18066:139;;17964:248;;;:::o;18218:419::-;18384:4;18422:2;18411:9;18407:18;18399:26;;18471:9;18465:4;18461:20;18457:1;18446:9;18442:17;18435:47;18499:131;18625:4;18499:131;:::i;:::-;18491:139;;18389:248;;;:::o;18643:419::-;18809:4;18847:2;18836:9;18832:18;18824:26;;18896:9;18890:4;18886:20;18882:1;18871:9;18867:17;18860:47;18924:131;19050:4;18924:131;:::i;:::-;18916:139;;18814:248;;;:::o;19068:419::-;19234:4;19272:2;19261:9;19257:18;19249:26;;19321:9;19315:4;19311:20;19307:1;19296:9;19292:17;19285:47;19349:131;19475:4;19349:131;:::i;:::-;19341:139;;19239:248;;;:::o;19493:222::-;19586:4;19624:2;19613:9;19609:18;19601:26;;19637:71;19705:1;19694:9;19690:17;19681:6;19637:71;:::i;:::-;19591:124;;;;:::o;19721:831::-;19984:4;20022:3;20011:9;20007:19;19999:27;;20036:71;20104:1;20093:9;20089:17;20080:6;20036:71;:::i;:::-;20117:80;20193:2;20182:9;20178:18;20169:6;20117:80;:::i;:::-;20244:9;20238:4;20234:20;20229:2;20218:9;20214:18;20207:48;20272:108;20375:4;20366:6;20272:108;:::i;:::-;20264:116;;20390:72;20458:2;20447:9;20443:18;20434:6;20390:72;:::i;:::-;20472:73;20540:3;20529:9;20525:19;20516:6;20472:73;:::i;:::-;19989:563;;;;;;;;:::o;20558:442::-;20707:4;20745:2;20734:9;20730:18;20722:26;;20758:71;20826:1;20815:9;20811:17;20802:6;20758:71;:::i;:::-;20839:72;20907:2;20896:9;20892:18;20883:6;20839:72;:::i;:::-;20921;20989:2;20978:9;20974:18;20965:6;20921:72;:::i;:::-;20712:288;;;;;;:::o;21006:214::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21146:67;21210:1;21199:9;21195:17;21186:6;21146:67;:::i;:::-;21100:120;;;;:::o;21226:132::-;21293:4;21316:3;21308:11;;21346:4;21341:3;21337:14;21329:22;;21298:60;;;:::o;21364:114::-;21431:6;21465:5;21459:12;21449:22;;21438:40;;;:::o;21484:99::-;21536:6;21570:5;21564:12;21554:22;;21543:40;;;:::o;21589:113::-;21659:4;21691;21686:3;21682:14;21674:22;;21664:38;;;:::o;21708:184::-;21807:11;21841:6;21836:3;21829:19;21881:4;21876:3;21872:14;21857:29;;21819:73;;;;:::o;21898:169::-;21982:11;22016:6;22011:3;22004:19;22056:4;22051:3;22047:14;22032:29;;21994:73;;;;:::o;22073:305::-;22113:3;22132:20;22150:1;22132:20;:::i;:::-;22127:25;;22166:20;22184:1;22166:20;:::i;:::-;22161:25;;22320:1;22252:66;22248:74;22245:1;22242:81;22239:2;;;22326:18;;:::i;:::-;22239:2;22370:1;22367;22363:9;22356:16;;22117:261;;;;:::o;22384:185::-;22424:1;22441:20;22459:1;22441:20;:::i;:::-;22436:25;;22475:20;22493:1;22475:20;:::i;:::-;22470:25;;22514:1;22504:2;;22519:18;;:::i;:::-;22504:2;22561:1;22558;22554:9;22549:14;;22426:143;;;;:::o;22575:348::-;22615:7;22638:20;22656:1;22638:20;:::i;:::-;22633:25;;22672:20;22690:1;22672:20;:::i;:::-;22667:25;;22860:1;22792:66;22788:74;22785:1;22782:81;22777:1;22770:9;22763:17;22759:105;22756:2;;;22867:18;;:::i;:::-;22756:2;22915:1;22912;22908:9;22897:20;;22623:300;;;;:::o;22929:191::-;22969:4;22989:20;23007:1;22989:20;:::i;:::-;22984:25;;23023:20;23041:1;23023:20;:::i;:::-;23018:25;;23062:1;23059;23056:8;23053:2;;;23067:18;;:::i;:::-;23053:2;23112:1;23109;23105:9;23097:17;;22974:146;;;;:::o;23126:96::-;23163:7;23192:24;23210:5;23192:24;:::i;:::-;23181:35;;23171:51;;;:::o;23228:90::-;23262:7;23305:5;23298:13;23291:21;23280:32;;23270:48;;;:::o;23324:126::-;23361:7;23401:42;23394:5;23390:54;23379:65;;23369:81;;;:::o;23456:77::-;23493:7;23522:5;23511:16;;23501:32;;;:::o;23539:86::-;23574:7;23614:4;23607:5;23603:16;23592:27;;23582:43;;;:::o;23631:180::-;23708:9;23741:64;23799:5;23741:64;:::i;:::-;23728:77;;23718:93;;;:::o;23817:140::-;23894:9;23927:24;23945:5;23927:24;:::i;:::-;23914:37;;23904:53;;;:::o;23963:121::-;24021:9;24054:24;24072:5;24054:24;:::i;:::-;24041:37;;24031:53;;;:::o;24090:307::-;24158:1;24168:113;24182:6;24179:1;24176:13;24168:113;;;24267:1;24262:3;24258:11;24252:18;24248:1;24243:3;24239:11;24232:39;24204:2;24201:1;24197:10;24192:15;;24168:113;;;24299:6;24296:1;24293:13;24290:2;;;24379:1;24370:6;24365:3;24361:16;24354:27;24290:2;24139:258;;;;:::o;24403:320::-;24447:6;24484:1;24478:4;24474:12;24464:22;;24531:1;24525:4;24521:12;24552:18;24542:2;;24608:4;24600:6;24596:17;24586:27;;24542:2;24670;24662:6;24659:14;24639:18;24636:38;24633:2;;;24689:18;;:::i;:::-;24633:2;24454:269;;;;:::o;24729:233::-;24768:3;24791:24;24809:5;24791:24;:::i;:::-;24782:33;;24837:66;24830:5;24827:77;24824:2;;;24907:18;;:::i;:::-;24824:2;24954:1;24947:5;24943:13;24936:20;;24772:190;;;:::o;24968:180::-;25016:77;25013:1;25006:88;25113:4;25110:1;25103:15;25137:4;25134:1;25127:15;25154:180;25202:77;25199:1;25192:88;25299:4;25296:1;25289:15;25323:4;25320:1;25313:15;25340:180;25388:77;25385:1;25378:88;25485:4;25482:1;25475:15;25509:4;25506:1;25499:15;25526:102;25567:6;25618:2;25614:7;25609:2;25602:5;25598:14;25594:28;25584:38;;25574:54;;;:::o;25634:222::-;25774:34;25770:1;25762:6;25758:14;25751:58;25843:5;25838:2;25830:6;25826:15;25819:30;25740:116;:::o;25862:229::-;26002:34;25998:1;25990:6;25986:14;25979:58;26071:12;26066:2;26058:6;26054:15;26047:37;25968:123;:::o;26097:225::-;26237:34;26233:1;26225:6;26221:14;26214:58;26306:8;26301:2;26293:6;26289:15;26282:33;26203:119;:::o;26328:221::-;26468:34;26464:1;26456:6;26452:14;26445:58;26537:4;26532:2;26524:6;26520:15;26513:29;26434:115;:::o;26555:177::-;26695:29;26691:1;26683:6;26679:14;26672:53;26661:71;:::o;26738:181::-;26878:33;26874:1;26866:6;26862:14;26855:57;26844:75;:::o;26925:227::-;27065:34;27061:1;27053:6;27049:14;27042:58;27134:10;27129:2;27121:6;27117:15;27110:35;27031:121;:::o;27158:238::-;27298:34;27294:1;27286:6;27282:14;27275:58;27367:21;27362:2;27354:6;27350:15;27343:46;27264:132;:::o;27402:220::-;27542:34;27538:1;27530:6;27526:14;27519:58;27611:3;27606:2;27598:6;27594:15;27587:28;27508:114;:::o;27628:182::-;27768:34;27764:1;27756:6;27752:14;27745:58;27734:76;:::o;27816:228::-;27956:34;27952:1;27944:6;27940:14;27933:58;28025:11;28020:2;28012:6;28008:15;28001:36;27922:122;:::o;28050:224::-;28190:34;28186:1;28178:6;28174:14;28167:58;28259:7;28254:2;28246:6;28242:15;28235:32;28156:118;:::o;28280:223::-;28420:34;28416:1;28408:6;28404:14;28397:58;28489:6;28484:2;28476:6;28472:15;28465:31;28386:117;:::o;28509:231::-;28649:34;28645:1;28637:6;28633:14;28626:58;28718:14;28713:2;28705:6;28701:15;28694:39;28615:125;:::o;28746:122::-;28819:24;28837:5;28819:24;:::i;:::-;28812:5;28809:35;28799:2;;28858:1;28855;28848:12;28799:2;28789:79;:::o;28874:116::-;28944:21;28959:5;28944:21;:::i;:::-;28937:5;28934:32;28924:2;;28980:1;28977;28970:12;28924:2;28914:76;:::o;28996:122::-;29069:24;29087:5;29069:24;:::i;:::-;29062:5;29059:35;29049:2;;29108:1;29105;29098:12;29049:2;29039:79;:::o

Swarm Source

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