ETH Price: $3,241.81 (+0.16%)

Token

BabyFUD (bbFUD)
 

Overview

Max Total Supply

1,000,000,000 bbFUD

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
554,994.992742723 bbFUD

Value
$0.00
0x9B4e6A6F1576D413f9B020A226A9C2eb40bA6A0e
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:
eT

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-30
*/

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.6.12;

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

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

interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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 () internal {
        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;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

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

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

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 implementation
contract eT 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;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'BabyFUD';
    string private _symbol = 'bbFUD';
    uint8 private _decimals = 9;

    // Tax and charity fees will start at 0 so we don't have a big impact when deploying to Uniswap
    // Charity wallet address is null but the method to set the address is exposed
    uint256 private _taxFee = 7; // 7% reflection fee for every holder
    uint256 private _charityFee = 13; // 13% charity
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousCharityFee = _charityFee;

    address payable public _charityWalletAddress = payable(0x3DeC1F9a221d43237246188d0F7f9638B7D84734);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;

    uint256 private _maxTxAmount = _tTotal;
    // We will set a minimum amount of tokens to be swapped => 500k
    uint256 private _numOfTokensToExchangeForCharity = 500 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

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

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

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

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

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

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

    function 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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

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

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

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

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

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

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

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

        _previousTaxFee = _taxFee;
        _previousCharityFee = _charityFee;

        _taxFee = 0;
        _charityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _charityFee = _previousCharityFee;
    }

    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 sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[recipient], "You have no power here!");
        require(!_isBlackListedBot[msg.sender], "You have no power here!");

        if(sender != owner() && recipient != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular charity event.
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForCharity;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the charity wallet
            swapTokensForEth(contractTokenBalance);

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

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

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

        //transfer amount, it will take tax and charity fee
        _tokenTransfer(sender,recipient,amount,takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
        // 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 sendETHToCharity(uint256 amount) private {
        _charityWalletAddress.transfer(amount);
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSwapAmount(uint256 amount) public onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= amount , 'contract balance should be greater then amount');

        swapTokensForEth(amount);
    }

    function manualSend() public onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToCharity(contractETHBalance);
    }

    function manualSwapAndSend(uint256 amount) external onlyOwner() {
        manualSwapAmount(amount);
        manualSend();
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

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

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _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);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeCharity(uint256 tCharity) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rCharity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tCharity);
    }

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

    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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 _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 10, 'taxFee should be in 1 - 10');
        _taxFee = taxFee;
    }

    function _setCharityFee(uint256 charityFee) external onlyOwner() {
        require(charityFee >= 1 && charityFee <= 11, 'charityFee should be in 1 - 11');
        _charityFee = charityFee;
    }

    function _setCharityWallet(address payable charityWalletAddress) external onlyOwner() {
        _charityWalletAddress = charityWalletAddress;
    }

    function _setNumOfTokensToExchangeForCharity(uint256 numOfTokensToExchangeForCharity) external onlyOwner() {
        require(numOfTokensToExchangeForCharity >= 10**9 , 'numOfTokensToExchangeForCharity should be greater than total 1e9');
        _numOfTokensToExchangeForCharity = numOfTokensToExchangeForCharity;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }
}

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":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"_charityWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"_setCharityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"charityWalletAddress","type":"address"}],"name":"_setCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numOfTokensToExchangeForCharity","type":"uint256"}],"name":"_setNumOfTokensToExchangeForCharity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052670de0b6b3a7640000600b55600b54600019816200001e57fe5b0660001903600c556040518060400160405280600781526020017f4261627946554400000000000000000000000000000000000000000000000000815250600e9080519060200190620000739291906200065f565b506040518060400160405280600581526020017f6262465544000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c19291906200065f565b506009601060006101000a81548160ff021916908360ff1602179055506007601155600d601255601154601355601254601455733dec1f9a221d43237246188d0f7f9638b7d84734601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601560146101000a81548160ff02191690831515021790555060016015806101000a81548160ff021916908315150217905550600b5460165564746a5288006017553480156200019a57600080fd5b506000620001ad6200062e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460036000620002626200062e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030057600080fd5b505afa15801562000315573d6000803e3d6000fd5b505050506040513d60208110156200032c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a057600080fd5b505afa158015620003b5573d6000803e3d6000fd5b505050506040513d6020811015620003cc57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200044757600080fd5b505af11580156200045c573d6000803e3d6000fd5b505050506040513d60208110156200047357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620005076200063660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005c06200062e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35062000705565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006a257805160ff1916838001178555620006d3565b82800160010185558215620006d3579182015b82811115620006d2578251825591602001919060010190620006b5565b5b509050620006e29190620006e6565b5090565b5b8082111562000701576000816000905550600101620006e7565b5090565b60805160601c60a05160601c615d4662000743600039806119b45280613fb2525080610fce528061440d52806144f952806145205250615d466000f3fe6080604052600436106102605760003560e01c806376d4ab9911610144578063b6c52324116100b6578063e01af92c1161007a578063e01af92c14610d90578063f2cc0c1814610dcd578063f2fde38b14610e1e578063f429389014610e6f578063f815a84214610e86578063f84354f114610eb157610267565b8063b6c5232414610bed578063cba0e99614610c18578063d047e4b714610c7f578063dd46706414610cd0578063dd62ed3e14610d0b57610267565b8063a24a8d0f11610108578063a24a8d0f14610a21578063a457c2d714610a5c578063a69df4b514610acd578063a9059cbb14610ae4578063af9549e014610b55578063b665f05b14610bb257610267565b806376d4ab99146108835780637ded4d6a146108c457806388e0853e146109155780638da5cb5b1461095057806395d89b411461099157610267565b80633bd5d173116101dd57806351bc3c85116101a157806351bc3c85146107215780635342acb4146107385780635880b8731461079f5780636ddd1713146107da57806370a0823114610807578063715018a61461086c57610267565b80633bd5d173146105be5780634303443d146105f95780634549b0391461064a578063474fe03f146106a557806349bd5a5e146106e057610267565b80631bbae6e0116102245780631bbae6e01461040457806323b872dd1461043f5780632d838119146104d0578063313ce5671461051f578063395093511461054d57610267565b806306fdde031461026c578063095ea7b3146102fc57806313114a9d1461036d5780631694505e1461039857806318160ddd146103d957610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610f02565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030857600080fd5b506103556004803603604081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fa4565b60405180821515815260200191505060405180910390f35b34801561037957600080fd5b50610382610fc2565b6040518082815260200191505060405180910390f35b3480156103a457600080fd5b506103ad610fcc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e557600080fd5b506103ee610ff0565b6040518082815260200191505060405180910390f35b34801561041057600080fd5b5061043d6004803603602081101561042757600080fd5b8101908080359060200190929190505050610ffa565b005b34801561044b57600080fd5b506104b86004803603606081101561046257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611129565b60405180821515815260200191505060405180910390f35b3480156104dc57600080fd5b50610509600480360360208110156104f357600080fd5b8101908080359060200190929190505050611202565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b50610534611286565b604051808260ff16815260200191505060405180910390f35b34801561055957600080fd5b506105a66004803603604081101561057057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061129d565b60405180821515815260200191505060405180910390f35b3480156105ca57600080fd5b506105f7600480360360208110156105e157600080fd5b8101908080359060200190929190505050611350565b005b34801561060557600080fd5b506106486004803603602081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e1565b005b34801561065657600080fd5b5061068f6004803603604081101561066d57600080fd5b81019080803590602001909291908035151590602001909291905050506117c0565b6040518082815260200191505060405180910390f35b3480156106b157600080fd5b506106de600480360360208110156106c857600080fd5b8101908080359060200190929190505050611877565b005b3480156106ec57600080fd5b506106f56119b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072d57600080fd5b506107366119d6565b005b34801561074457600080fd5b506107876004803603602081101561075b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ab7565b60405180821515815260200191505060405180910390f35b3480156107ab57600080fd5b506107d8600480360360208110156107c257600080fd5b8101908080359060200190929190505050611b0d565b005b3480156107e657600080fd5b506107ef611c63565b60405180821515815260200191505060405180910390f35b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c74565b6040518082815260200191505060405180910390f35b34801561087857600080fd5b50610881611d5f565b005b34801561088f57600080fd5b50610898611ee5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108d057600080fd5b50610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f0b565b005b34801561092157600080fd5b5061094e6004803603602081101561093857600080fd5b8101908080359060200190929190505050612250565b005b34801561095c57600080fd5b5061096561232c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099d57600080fd5b506109a6612355565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109e65780820151818401526020810190506109cb565b50505050905090810190601f168015610a135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a2d57600080fd5b50610a5a60048036036020811015610a4457600080fd5b81019080803590602001909291905050506123f7565b005b348015610a6857600080fd5b50610ab560048036036040811015610a7f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061254d565b60405180821515815260200191505060405180910390f35b348015610ad957600080fd5b50610ae261261a565b005b348015610af057600080fd5b50610b3d60048036036040811015610b0757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612837565b60405180821515815260200191505060405180910390f35b348015610b6157600080fd5b50610bb060048036036040811015610b7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612855565b005b348015610bbe57600080fd5b50610beb60048036036020811015610bd557600080fd5b8101908080359060200190929190505050612978565b005b348015610bf957600080fd5b50610c02612aa7565b6040518082815260200191505060405180910390f35b348015610c2457600080fd5b50610c6760048036036020811015610c3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ab1565b60405180821515815260200191505060405180910390f35b348015610c8b57600080fd5b50610cce60048036036020811015610ca257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b07565b005b348015610cdc57600080fd5b50610d0960048036036020811015610cf357600080fd5b8101908080359060200190929190505050612c13565b005b348015610d1757600080fd5b50610d7a60048036036040811015610d2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e04565b6040518082815260200191505060405180910390f35b348015610d9c57600080fd5b50610dcb60048036036020811015610db357600080fd5b81019080803515159060200190929190505050612e8b565b005b348015610dd957600080fd5b50610e1c60048036036020811015610df057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f6f565b005b348015610e2a57600080fd5b50610e6d60048036036020811015610e4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613322565b005b348015610e7b57600080fd5b50610e8461352d565b005b348015610e9257600080fd5b50610e9b613606565b6040518082815260200191505060405180910390f35b348015610ebd57600080fd5b50610f0060048036036020811015610ed457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061360e565b005b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b6000610fb8610fb1613998565b84846139a0565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b611002613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca0081101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615b70602c913960400191505060405180910390fd5b8060168190555050565b6000611136848484613b97565b6111f784611142613998565b6111f285604051806060016040528060288152602001615bbd60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111a8613998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140ee9092919063ffffffff16565b6139a0565b600190509392505050565b6000600c5482111561125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a96602a913960400191505060405180910390fd5b60006112696141ae565b905061127e81846141d990919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b60006113466112aa613998565b8461134185600560006112bb613998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b6139a0565b6001905092915050565b600061135a613998565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615c9d602c913960400191505060405180910390fd5b600061140a836142ab565b5050505050905061146381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114bb81600c5461431290919063ffffffff16565b600c819055506114d683600d5461422390919063ffffffff16565b600d81905550505050565b6114e9613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c0e6024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b5483111561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161185a57600061184a846142ab565b5050505050905080915050611871565b6000611865846142ab565b50505050915050809150505b92915050565b61187f613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061194a30611c74565b9050818110156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615a68602e913960400191505060405180910390fd5b6119ae8261435c565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6119de613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611aa930611c74565b9050611ab48161435c565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611b15613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611be75750600a8111155b611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b8060118190555050565b60158054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d0f57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d5a565b611d57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611202565b90505b919050565b611d67613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f13613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a8054905081101561224c578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106120c657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561223f57600a6001600a80549050038154811061212257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061215a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061220557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561224c565b8080600101915050612095565b5050565b612258613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61232181611877565b61232961352d565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123ed5780601f106123c2576101008083540402835291602001916123ed565b820191906000526020600020905b8154815290600101906020018083116123d057829003601f168201915b5050505050905090565b6123ff613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156124d15750600b8111155b612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f636861726974794665652073686f756c6420626520696e2031202d203131000081525060200191505060405180910390fd5b8060128190555050565b600061261061255a613998565b8461260b85604051806060016040528060258152602001615cec6025913960056000612584613998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140ee9092919063ffffffff16565b6139a0565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615cc96023913960400191505060405180910390fd5b6002544211612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061284b612844613998565b8484613b97565b6001905092915050565b61285d613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612980613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015612a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180615b086040913960400191505060405180910390fd5b8060178190555050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612b0f613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c1b613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612e93613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b612f77613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c7b6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561326457613220600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611202565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61332a613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615ac06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613535613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600047905061360381614640565b50565b600047905090565b613616613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015613994578173ffffffffffffffffffffffffffffffffffffffff16600882815481106137c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139875760086001600880549050038154811061382557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061385d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061394d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613994565b8080600101915050613798565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c576024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615ae66022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c326025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a456023913960400191505060405180910390fd5b60008111613cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615be56029913960400191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b613e8461232c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613ef25750613ec261232c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613f5357601654811115613f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615b486028913960400191505060405180910390fd5b5b6000613f5e30611c74565b90506016548110613f6f5760165490505b60006017548210159050601560149054906101000a900460ff16158015613fa0575060158054906101000a900460ff165b8015613fa95750805b801561400157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156140295761400f8261435c565b600047905060008111156140275761402647614640565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806140d05750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156140da57600090505b6140e6868686846146ac565b505050505050565b600083831115829061419b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614160578082015181840152602081019050614145565b50505050905090810190601f16801561418d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006141bb6149bd565b915091506141d281836141d990919063ffffffff16565b9250505090565b600061421b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c4e565b905092915050565b6000808284019050838110156142a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006142c88a601154601254614d14565b92509250925060006142d86141ae565b905060008060006142ea8e8786614daa565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061435483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140ee565b905092915050565b6001601560146101000a81548160ff0219169083151502179055506060600267ffffffffffffffff8111801561439157600080fd5b506040519080825280602002602001820160405280156143c05781602001602082028036833780820191505090505b50905030816000815181106143d157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561447157600080fd5b505afa158015614485573d6000803e3d6000fd5b505050506040513d602081101561449b57600080fd5b8101908080519060200190929190505050816001815181106144b957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061451e307f0000000000000000000000000000000000000000000000000000000000000000846139a0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156145e05780820151818401526020810190506145c5565b505050509050019650505050505050600060405180830381600087803b15801561460957600080fd5b505af115801561461d573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156146a8573d6000803e3d6000fd5b5050565b806146ba576146b9614e08565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561475d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156147725761476d848484614e4b565b6149a9565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156148155750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561482a576148258484846150ab565b6149a8565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156148ce5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156148e3576148de84848461530b565b6149a7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156149855750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561499a576149958484846154d6565b6149a6565b6149a584848461530b565b5b5b5b5b806149b7576149b66157cb565b5b50505050565b6000806000600c5490506000600b54905060005b600880549050811015614c11578260036000600884815481106149f057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614ad75750816004600060088481548110614a6f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614aee57600c54600b5494509450505050614c4a565b614b776003600060088481548110614b0257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461431290919063ffffffff16565b9250614c026004600060088481548110614b8d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361431290919063ffffffff16565b915080806001019150506149d1565b50614c29600b54600c546141d990919063ffffffff16565b821015614c4157600c54600b54935093505050614c4a565b81819350935050505b9091565b60008083118290614cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cbf578082015181840152602081019050614ca4565b50505050905090810190601f168015614cec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d0657fe5b049050809150509392505050565b600080600080614d406064614d32888a6157df90919063ffffffff16565b6141d990919063ffffffff16565b90506000614d6a6064614d5c888b6157df90919063ffffffff16565b6141d990919063ffffffff16565b90506000614d9382614d85858c61431290919063ffffffff16565b61431290919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614dc385886157df90919063ffffffff16565b90506000614dda86886157df90919063ffffffff16565b90506000614df1828461431290919063ffffffff16565b905082818395509550955050505093509350939050565b6000601154148015614e1c57506000601254145b15614e2657614e49565b601154601381905550601254601481905550600060118190555060006012819055505b565b600080600080600080614e5d876142ab565b955095509550955095509550614ebb87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f5086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fe585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061503181615865565b61503b8483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806150bd876142ab565b95509550955095509550955061511b86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151b083600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061524585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061529181615865565b61529b8483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061531d876142ab565b95509550955095509550955061537b86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061541085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061545c81615865565b6154668483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806154e8876142ab565b95509550955095509550955061554687600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506155db86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061567083600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061570585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061575181615865565b61575b8483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601354601181905550601454601281905550565b6000808314156157f2576000905061585f565b600082840290508284828161580357fe5b041461585a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b9c6021913960400191505060405180910390fd5b809150505b92915050565b600061586f6141ae565b9050600061588682846157df90919063ffffffff16565b90506158da81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615a05576159c183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615a1f82600c5461431290919063ffffffff16565b600c81905550615a3a81600d5461422390919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373636f6e74726163742062616c616e63652073686f756c642062652067726561746572207468656e20616d6f756e74416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736e756d4f66546f6b656e73546f45786368616e6765466f72436861726974792073686f756c642062652067726561746572207468616e20746f74616c203165395472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122035cf1b9df8a9ced0ad4405072c8ccae7c1c224b213c8a5ccd56beb3aca72d0ee64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806376d4ab9911610144578063b6c52324116100b6578063e01af92c1161007a578063e01af92c14610d90578063f2cc0c1814610dcd578063f2fde38b14610e1e578063f429389014610e6f578063f815a84214610e86578063f84354f114610eb157610267565b8063b6c5232414610bed578063cba0e99614610c18578063d047e4b714610c7f578063dd46706414610cd0578063dd62ed3e14610d0b57610267565b8063a24a8d0f11610108578063a24a8d0f14610a21578063a457c2d714610a5c578063a69df4b514610acd578063a9059cbb14610ae4578063af9549e014610b55578063b665f05b14610bb257610267565b806376d4ab99146108835780637ded4d6a146108c457806388e0853e146109155780638da5cb5b1461095057806395d89b411461099157610267565b80633bd5d173116101dd57806351bc3c85116101a157806351bc3c85146107215780635342acb4146107385780635880b8731461079f5780636ddd1713146107da57806370a0823114610807578063715018a61461086c57610267565b80633bd5d173146105be5780634303443d146105f95780634549b0391461064a578063474fe03f146106a557806349bd5a5e146106e057610267565b80631bbae6e0116102245780631bbae6e01461040457806323b872dd1461043f5780632d838119146104d0578063313ce5671461051f578063395093511461054d57610267565b806306fdde031461026c578063095ea7b3146102fc57806313114a9d1461036d5780631694505e1461039857806318160ddd146103d957610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610f02565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030857600080fd5b506103556004803603604081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fa4565b60405180821515815260200191505060405180910390f35b34801561037957600080fd5b50610382610fc2565b6040518082815260200191505060405180910390f35b3480156103a457600080fd5b506103ad610fcc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e557600080fd5b506103ee610ff0565b6040518082815260200191505060405180910390f35b34801561041057600080fd5b5061043d6004803603602081101561042757600080fd5b8101908080359060200190929190505050610ffa565b005b34801561044b57600080fd5b506104b86004803603606081101561046257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611129565b60405180821515815260200191505060405180910390f35b3480156104dc57600080fd5b50610509600480360360208110156104f357600080fd5b8101908080359060200190929190505050611202565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b50610534611286565b604051808260ff16815260200191505060405180910390f35b34801561055957600080fd5b506105a66004803603604081101561057057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061129d565b60405180821515815260200191505060405180910390f35b3480156105ca57600080fd5b506105f7600480360360208110156105e157600080fd5b8101908080359060200190929190505050611350565b005b34801561060557600080fd5b506106486004803603602081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114e1565b005b34801561065657600080fd5b5061068f6004803603604081101561066d57600080fd5b81019080803590602001909291908035151590602001909291905050506117c0565b6040518082815260200191505060405180910390f35b3480156106b157600080fd5b506106de600480360360208110156106c857600080fd5b8101908080359060200190929190505050611877565b005b3480156106ec57600080fd5b506106f56119b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072d57600080fd5b506107366119d6565b005b34801561074457600080fd5b506107876004803603602081101561075b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ab7565b60405180821515815260200191505060405180910390f35b3480156107ab57600080fd5b506107d8600480360360208110156107c257600080fd5b8101908080359060200190929190505050611b0d565b005b3480156107e657600080fd5b506107ef611c63565b60405180821515815260200191505060405180910390f35b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c74565b6040518082815260200191505060405180910390f35b34801561087857600080fd5b50610881611d5f565b005b34801561088f57600080fd5b50610898611ee5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108d057600080fd5b50610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f0b565b005b34801561092157600080fd5b5061094e6004803603602081101561093857600080fd5b8101908080359060200190929190505050612250565b005b34801561095c57600080fd5b5061096561232c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099d57600080fd5b506109a6612355565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109e65780820151818401526020810190506109cb565b50505050905090810190601f168015610a135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a2d57600080fd5b50610a5a60048036036020811015610a4457600080fd5b81019080803590602001909291905050506123f7565b005b348015610a6857600080fd5b50610ab560048036036040811015610a7f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061254d565b60405180821515815260200191505060405180910390f35b348015610ad957600080fd5b50610ae261261a565b005b348015610af057600080fd5b50610b3d60048036036040811015610b0757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612837565b60405180821515815260200191505060405180910390f35b348015610b6157600080fd5b50610bb060048036036040811015610b7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612855565b005b348015610bbe57600080fd5b50610beb60048036036020811015610bd557600080fd5b8101908080359060200190929190505050612978565b005b348015610bf957600080fd5b50610c02612aa7565b6040518082815260200191505060405180910390f35b348015610c2457600080fd5b50610c6760048036036020811015610c3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ab1565b60405180821515815260200191505060405180910390f35b348015610c8b57600080fd5b50610cce60048036036020811015610ca257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b07565b005b348015610cdc57600080fd5b50610d0960048036036020811015610cf357600080fd5b8101908080359060200190929190505050612c13565b005b348015610d1757600080fd5b50610d7a60048036036040811015610d2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e04565b6040518082815260200191505060405180910390f35b348015610d9c57600080fd5b50610dcb60048036036020811015610db357600080fd5b81019080803515159060200190929190505050612e8b565b005b348015610dd957600080fd5b50610e1c60048036036020811015610df057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f6f565b005b348015610e2a57600080fd5b50610e6d60048036036020811015610e4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613322565b005b348015610e7b57600080fd5b50610e8461352d565b005b348015610e9257600080fd5b50610e9b613606565b6040518082815260200191505060405180910390f35b348015610ebd57600080fd5b50610f0060048036036020811015610ed457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061360e565b005b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b6000610fb8610fb1613998565b84846139a0565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b611002613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca0081101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615b70602c913960400191505060405180910390fd5b8060168190555050565b6000611136848484613b97565b6111f784611142613998565b6111f285604051806060016040528060288152602001615bbd60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111a8613998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140ee9092919063ffffffff16565b6139a0565b600190509392505050565b6000600c5482111561125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a96602a913960400191505060405180910390fd5b60006112696141ae565b905061127e81846141d990919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b60006113466112aa613998565b8461134185600560006112bb613998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b6139a0565b6001905092915050565b600061135a613998565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615c9d602c913960400191505060405180910390fd5b600061140a836142ab565b5050505050905061146381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114bb81600c5461431290919063ffffffff16565b600c819055506114d683600d5461422390919063ffffffff16565b600d81905550505050565b6114e9613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c0e6024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b5483111561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161185a57600061184a846142ab565b5050505050905080915050611871565b6000611865846142ab565b50505050915050809150505b92915050565b61187f613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061194a30611c74565b9050818110156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615a68602e913960400191505060405180910390fd5b6119ae8261435c565b5050565b7f000000000000000000000000f648bfe2b7ce42d1e68a3e60ede615d620282dbe81565b6119de613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611aa930611c74565b9050611ab48161435c565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611b15613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611be75750600a8111155b611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b8060118190555050565b60158054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d0f57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d5a565b611d57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611202565b90505b919050565b611d67613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f13613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a8054905081101561224c578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106120c657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561223f57600a6001600a80549050038154811061212257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061215a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061220557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561224c565b8080600101915050612095565b5050565b612258613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61232181611877565b61232961352d565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123ed5780601f106123c2576101008083540402835291602001916123ed565b820191906000526020600020905b8154815290600101906020018083116123d057829003601f168201915b5050505050905090565b6123ff613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156124d15750600b8111155b612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f636861726974794665652073686f756c6420626520696e2031202d203131000081525060200191505060405180910390fd5b8060128190555050565b600061261061255a613998565b8461260b85604051806060016040528060258152602001615cec6025913960056000612584613998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140ee9092919063ffffffff16565b6139a0565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615cc96023913960400191505060405180910390fd5b6002544211612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061284b612844613998565b8484613b97565b6001905092915050565b61285d613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612980613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015612a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180615b086040913960400191505060405180910390fd5b8060178190555050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612b0f613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c1b613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612e93613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b612f77613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c7b6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561326457613220600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611202565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61332a613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615ac06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613535613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600047905061360381614640565b50565b600047905090565b613616613998565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015613994578173ffffffffffffffffffffffffffffffffffffffff16600882815481106137c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139875760086001600880549050038154811061382557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061385d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061394d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613994565b8080600101915050613798565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c576024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615ae66022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c326025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a456023913960400191505060405180910390fd5b60008111613cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615be56029913960400191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b613e8461232c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613ef25750613ec261232c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613f5357601654811115613f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615b486028913960400191505060405180910390fd5b5b6000613f5e30611c74565b90506016548110613f6f5760165490505b60006017548210159050601560149054906101000a900460ff16158015613fa0575060158054906101000a900460ff165b8015613fa95750805b801561400157507f000000000000000000000000f648bfe2b7ce42d1e68a3e60ede615d620282dbe73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156140295761400f8261435c565b600047905060008111156140275761402647614640565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806140d05750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156140da57600090505b6140e6868686846146ac565b505050505050565b600083831115829061419b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614160578082015181840152602081019050614145565b50505050905090810190601f16801561418d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006141bb6149bd565b915091506141d281836141d990919063ffffffff16565b9250505090565b600061421b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c4e565b905092915050565b6000808284019050838110156142a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006142c88a601154601254614d14565b92509250925060006142d86141ae565b905060008060006142ea8e8786614daa565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061435483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140ee565b905092915050565b6001601560146101000a81548160ff0219169083151502179055506060600267ffffffffffffffff8111801561439157600080fd5b506040519080825280602002602001820160405280156143c05781602001602082028036833780820191505090505b50905030816000815181106143d157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561447157600080fd5b505afa158015614485573d6000803e3d6000fd5b505050506040513d602081101561449b57600080fd5b8101908080519060200190929190505050816001815181106144b957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061451e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846139a0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156145e05780820151818401526020810190506145c5565b505050509050019650505050505050600060405180830381600087803b15801561460957600080fd5b505af115801561461d573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156146a8573d6000803e3d6000fd5b5050565b806146ba576146b9614e08565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561475d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156147725761476d848484614e4b565b6149a9565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156148155750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561482a576148258484846150ab565b6149a8565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156148ce5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156148e3576148de84848461530b565b6149a7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156149855750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561499a576149958484846154d6565b6149a6565b6149a584848461530b565b5b5b5b5b806149b7576149b66157cb565b5b50505050565b6000806000600c5490506000600b54905060005b600880549050811015614c11578260036000600884815481106149f057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614ad75750816004600060088481548110614a6f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614aee57600c54600b5494509450505050614c4a565b614b776003600060088481548110614b0257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461431290919063ffffffff16565b9250614c026004600060088481548110614b8d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361431290919063ffffffff16565b915080806001019150506149d1565b50614c29600b54600c546141d990919063ffffffff16565b821015614c4157600c54600b54935093505050614c4a565b81819350935050505b9091565b60008083118290614cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cbf578082015181840152602081019050614ca4565b50505050905090810190601f168015614cec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d0657fe5b049050809150509392505050565b600080600080614d406064614d32888a6157df90919063ffffffff16565b6141d990919063ffffffff16565b90506000614d6a6064614d5c888b6157df90919063ffffffff16565b6141d990919063ffffffff16565b90506000614d9382614d85858c61431290919063ffffffff16565b61431290919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614dc385886157df90919063ffffffff16565b90506000614dda86886157df90919063ffffffff16565b90506000614df1828461431290919063ffffffff16565b905082818395509550955050505093509350939050565b6000601154148015614e1c57506000601254145b15614e2657614e49565b601154601381905550601254601481905550600060118190555060006012819055505b565b600080600080600080614e5d876142ab565b955095509550955095509550614ebb87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f5086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fe585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061503181615865565b61503b8483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806150bd876142ab565b95509550955095509550955061511b86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151b083600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061524585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061529181615865565b61529b8483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061531d876142ab565b95509550955095509550955061537b86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061541085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061545c81615865565b6154668483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806154e8876142ab565b95509550955095509550955061554687600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506155db86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461431290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061567083600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061570585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061575181615865565b61575b8483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601354601181905550601454601281905550565b6000808314156157f2576000905061585f565b600082840290508284828161580357fe5b041461585a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b9c6021913960400191505060405180910390fd5b809150505b92915050565b600061586f6141ae565b9050600061588682846157df90919063ffffffff16565b90506158da81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615a05576159c183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461422390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615a1f82600c5461431290919063ffffffff16565b600c81905550615a3a81600d5461422390919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373636f6e74726163742062616c616e63652073686f756c642062652067726561746572207468656e20616d6f756e74416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736e756d4f66546f6b656e73546f45786368616e6765466f72436861726974792073686f756c642062652067726561746572207468616e20746f74616c203165395472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122035cf1b9df8a9ced0ad4405072c8ccae7c1c224b213c8a5ccd56beb3aca72d0ee64736f6c634300060c0033

Deployed Bytecode Sourcemap

24173:19406:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26838:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27750:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29006:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25547:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27115:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43375:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27919:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29930:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27024:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28240:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29101:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31128:352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29486:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35876:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25605:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35712:156;;;;;;;;;;;;;:::i;:::-;;32359:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42507:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25678:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27218:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14919:148;;;;;;;;;;;;;:::i;:::-;;25440:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31488:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36312:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14285:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26929:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42684:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28466:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15922:293;;;;;;;;;;;;;:::i;:::-;;27424:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28861:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43046:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15471:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28743:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42889:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15636:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27599:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36450:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30191:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15219:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36147:157;;;;;;;;;;;;;:::i;:::-;;42389:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30642:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26838:83;26875:13;26908:5;26901:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26838:83;:::o;27750:161::-;27825:4;27842:39;27851:12;:10;:12::i;:::-;27865:7;27874:6;27842:8;:39::i;:::-;27899:4;27892:11;;27750:161;;;;:::o;29006:87::-;29048:7;29075:10;;29068:17;;29006:87;:::o;25547:51::-;;;:::o;27115:95::-;27168:7;27195;;27188:14;;27115:95;:::o;43375:201::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43476:5:::1;43461:11;:20;;43453:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43557:11;43542:12;:26;;;;43375:201:::0;:::o;27919:313::-;28017:4;28034:36;28044:6;28052:9;28063:6;28034:9;:36::i;:::-;28081:121;28090:6;28098:12;:10;:12::i;:::-;28112:89;28150:6;28112:89;;;;;;;;;;;;;;;;;:11;:19;28124:6;28112:19;;;;;;;;;;;;;;;:33;28132:12;:10;:12::i;:::-;28112:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28081:8;:121::i;:::-;28220:4;28213:11;;27919:313;;;;;:::o;29930:253::-;29996:7;30035;;30024;:18;;30016:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30100:19;30123:10;:8;:10::i;:::-;30100:33;;30151:24;30163:11;30151:7;:11;;:24;;;;:::i;:::-;30144:31;;;29930:253;;;:::o;27024:83::-;27065:5;27090:9;;;;;;;;;;;27083:16;;27024:83;:::o;28240:218::-;28328:4;28345:83;28354:12;:10;:12::i;:::-;28368:7;28377:50;28416:10;28377:11;:25;28389:12;:10;:12::i;:::-;28377:25;;;;;;;;;;;;;;;:34;28403:7;28377:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28345:8;:83::i;:::-;28446:4;28439:11;;28240:218;;;;:::o;29101:377::-;29153:14;29170:12;:10;:12::i;:::-;29153:29;;29202:11;:19;29214:6;29202:19;;;;;;;;;;;;;;;;;;;;;;;;;29201:20;29193:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29282:15;29306:19;29317:7;29306:10;:19::i;:::-;29281:44;;;;;;;29354:28;29374:7;29354;:15;29362:6;29354:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29336:7;:15;29344:6;29336:15;;;;;;;;;;;;;;;:46;;;;29403:20;29415:7;29403;;:11;;:20;;;;:::i;:::-;29393:7;:30;;;;29447:23;29462:7;29447:10;;:14;;:23;;;;:::i;:::-;29434:10;:36;;;;29101:377;;;:::o;31128:352::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31223:42:::1;31212:53;;:7;:53;;;;31204:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31326:17;:26;31344:7;31326:26;;;;;;;;;;;;;;;;;;;;;;;;;31325:27;31317:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31427:4;31398:17;:26;31416:7;31398:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;31442:16;31464:7;31442:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31128:352:::0;:::o;29486:436::-;29576:7;29615;;29604;:18;;29596:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29674:17;29669:246;;29709:15;29733:19;29744:7;29733:10;:19::i;:::-;29708:44;;;;;;;29774:7;29767:14;;;;;29669:246;29816:23;29847:19;29858:7;29847:10;:19::i;:::-;29814:52;;;;;;;29888:15;29881:22;;;29486:436;;;;;:::o;35876:263::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35948:23:::1;35974:24;35992:4;35974:9;:24::i;:::-;35948:50;;36036:6;36017:15;:25;;36009:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36107:24;36124:6;36107:16;:24::i;:::-;14565:1;35876:263:::0;:::o;25605:38::-;;;:::o;35712:156::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35766:23:::1;35792:24;35810:4;35792:9;:24::i;:::-;35766:50;;35827:33;35844:15;35827:16;:33::i;:::-;14565:1;35712:156::o:0;32359:123::-;32423:4;32447:18;:27;32466:7;32447:27;;;;;;;;;;;;;;;;;;;;;;;;;32440:34;;32359:123;;;:::o;42507:169::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42593:1:::1;42583:6;:11;;:27;;;;;42608:2;42598:6;:12;;42583:27;42575:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42662:6;42652:7;:16;;;;42507:169:::0;:::o;25678:30::-;;;;;;;;;;;;:::o;27218:198::-;27284:7;27308:11;:20;27320:7;27308:20;;;;;;;;;;;;;;;;;;;;;;;;;27304:49;;;27337:7;:16;27345:7;27337:16;;;;;;;;;;;;;;;;27330:23;;;;27304:49;27371:37;27391:7;:16;27399:7;27391:16;;;;;;;;;;;;;;;;27371:19;:37::i;:::-;27364:44;;27218:198;;;;:::o;14919:148::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15026:1:::1;14989:40;;15010:6;::::0;::::1;;;;;;;;14989:40;;;;;;;;;;;;15057:1;15040:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;14919:148::o:0;25440:98::-;;;;;;;;;;;;;:::o;31488:500::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31577:17:::1;:26;31595:7;31577:26;;;;;;;;;;;;;;;;;;;;;;;;;31569:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31650:9;31645:336;31669:16;:23;;;;31665:1;:27;31645:336;;;31741:7;31718:30;;:16;31735:1;31718:19;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;31714:256;;;31791:16;31834:1;31808:16;:23;;;;:27;31791:45;;;;;;;;;;;;;;;;;;;;;;;;;31769:16;31786:1;31769:19;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;31884:5;31855:17;:26;31873:7;31855:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31908:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31949:5;;31714:256;31694:3;;;;;;;31645:336;;;;31488:500:::0;:::o;36312:130::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:24:::1;36404:6;36387:16;:24::i;:::-;36422:12;:10;:12::i;:::-;36312:130:::0;:::o;14285:79::-;14323:7;14350:6;;;;;;;;;;;14343:13;;14285:79;:::o;26929:87::-;26968:13;27001:7;26994:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26929:87;:::o;42684:197::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42782:1:::1;42768:10;:15;;:35;;;;;42801:2;42787:10;:16;;42768:35;42760:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42863:10;42849:11;:24;;;;42684:197:::0;:::o;28466:269::-;28559:4;28576:129;28585:12;:10;:12::i;:::-;28599:7;28608:96;28647:15;28608:96;;;;;;;;;;;;;;;;;:11;:25;28620:12;:10;:12::i;:::-;28608:25;;;;;;;;;;;;;;;:34;28634:7;28608:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;28576:8;:129::i;:::-;28723:4;28716:11;;28466:269;;;;:::o;15922:293::-;15992:10;15974:28;;:14;;;;;;;;;;;:28;;;15966:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16067:9;;16061:3;:15;16053:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16158:14;;;;;;;;;;;16129:44;;16150:6;;;;;;;;;;16129:44;;;;;;;;;;;;16193:14;;;;;;;;;;;16184:6;;:23;;;;;;;;;;;;;;;;;;15922:293::o;27424:167::-;27502:4;27519:42;27529:12;:10;:12::i;:::-;27543:9;27554:6;27519:9;:42::i;:::-;27579:4;27572:11;;27424:167;;;;:::o;28861:137::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28982:8:::1;28952:18;:27;28971:7;28952:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;28861:137:::0;;:::o;43046:321::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43207:5:::1;43172:31;:40;;43164:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43328:31;43293:32;:66;;;;43046:321:::0;:::o;15471:89::-;15516:7;15543:9;;15536:16;;15471:89;:::o;28743:110::-;28801:4;28825:11;:20;28837:7;28825:20;;;;;;;;;;;;;;;;;;;;;;;;;28818:27;;28743:110;;;:::o;42889:149::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43010:20:::1;42986:21;;:44;;;;;;;;;;;;;;;;;;42889:149:::0;:::o;15636:214::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15717:6:::1;::::0;::::1;;;;;;;;15700:14;;:23;;;;;;;;;;;;;;;;;;15751:1;15734:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15782:4;15776:3;:10;15764:9;:22;;;;15839:1;15802:40;;15823:6;::::0;::::1;;;;;;;;15802:40;;;;;;;;;;;;15636:214:::0;:::o;27599:143::-;27680:7;27707:11;:18;27719:5;27707:18;;;;;;;;;;;;;;;:27;27726:7;27707:27;;;;;;;;;;;;;;;;27700:34;;27599:143;;;;:::o;36450:98::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36533:7:::1;36519:11;::::0;:21:::1;;;;;;;;;;;;;;;;;;36450:98:::0;:::o;30191:443::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30283:42:::1;30272:53;;:7;:53;;;;30264:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30384:11;:20;30396:7;30384:20;;;;;;;;;;;;;;;;;;;;;;;;;30383:21;30375:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30469:1;30450:7;:16;30458:7;30450:16;;;;;;;;;;;;;;;;:20;30447:108;;;30506:37;30526:7;:16;30534:7;30526:16;;;;;;;;;;;;;;;;30506:19;:37::i;:::-;30487:7;:16;30495:7;30487:16;;;;;;;;;;;;;;;:56;;;;30447:108;30588:4;30565:11;:20;30577:7;30565:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30603:9;30618:7;30603:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30191:443:::0;:::o;15219:244::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15328:1:::1;15308:22;;:8;:22;;;;15300:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15418:8;15389:38;;15410:6;::::0;::::1;;;;;;;;15389:38;;;;;;;;;;;;15447:8;15438:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15219:244:::0;:::o;36147:157::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36199:26:::1;36228:21;36199:50;;36260:36;36277:18;36260:16;:36::i;:::-;14565:1;36147:157::o:0;42389:110::-;42435:15;42470:21;42463:28;;42389:110;:::o;30642:478::-;14505:12;:10;:12::i;:::-;14495:22;;:6;;;;;;;;;;:22;;;14487:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30723:11:::1;:20;30735:7;30723:20;;;;;;;;;;;;;;;;;;;;;;;;;30715:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30791:9;30786:327;30810:9;:16;;;;30806:1;:20;30786:327;;;30868:7;30852:23;;:9;30862:1;30852:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30848:254;;;30911:9;30940:1;30921:9;:16;;;;:20;30911:31;;;;;;;;;;;;;;;;;;;;;;;;;30896:9;30906:1;30896:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30980:1;30961:7;:16;30969:7;30961:16;;;;;;;;;;;;;;;:20;;;;31023:5;31000:11;:20;31012:7;31000:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31047:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31081:5;;30848:254;30828:3;;;;;;;30786:327;;;;30642:478:::0;:::o;106:106::-;159:15;194:10;187:17;;106:106;:::o;32490:337::-;32600:1;32583:19;;:5;:19;;;;32575:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32681:1;32662:21;;:7;:21;;;;32654:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32765:6;32735:11;:18;32747:5;32735:18;;;;;;;;;;;;;;;:27;32754:7;32735:27;;;;;;;;;;;;;;;:36;;;;32803:7;32787:32;;32796:5;32787:32;;;32812:6;32787:32;;;;;;;;;;;;;;;;;;32490:337;;;:::o;32835:2004::-;32950:1;32932:20;;:6;:20;;;;32924:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33034:1;33013:23;;:9;:23;;;;33005:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33104:1;33095:6;:10;33087:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33171:17;:28;33189:9;33171:28;;;;;;;;;;;;;;;;;;;;;;;;;33170:29;33162:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33247:17;:29;33265:10;33247:29;;;;;;;;;;;;;;;;;;;;;;;;;33246:30;33238:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33330:7;:5;:7::i;:::-;33320:17;;:6;:17;;;;:41;;;;;33354:7;:5;:7::i;:::-;33341:20;;:9;:20;;;;33320:41;33317:134;;;33394:12;;33384:6;:22;;33376:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33317:134;33717:28;33748:24;33766:4;33748:9;:24::i;:::-;33717:55;;33812:12;;33788:20;:36;33785:112;;33873:12;;33850:35;;33785:112;33909:24;33960:32;;33936:20;:56;;33909:83;;34008:6;;;;;;;;;;;34007:7;:22;;;;;34018:11;;;;;;;;;;34007:22;:45;;;;;34033:19;34007:45;:72;;;;;34066:13;34056:23;;:6;:23;;;;34007:72;34003:414;;;34185:38;34202:20;34185:16;:38::i;:::-;34240:26;34269:21;34240:50;;34329:1;34308:18;:22;34305:101;;;34351:39;34368:21;34351:16;:39::i;:::-;34305:101;34003:414;;34490:12;34505:4;34490:19;;34609:18;:26;34628:6;34609:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;34639:18;:29;34658:9;34639:29;;;;;;;;;;;;;;;;;;;;;;;;;34609:59;34606:105;;;34694:5;34684:15;;34606:105;34784:47;34799:6;34806:9;34816:6;34823:7;34784:14;:47::i;:::-;32835:2004;;;;;;:::o;4193:192::-;4279:7;4312:1;4307;:6;;4315:12;4299:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4339:9;4355:1;4351;:5;4339:17;;4376:1;4369:8;;;4193:192;;;;;:::o;41459:163::-;41500:7;41521:15;41538;41557:19;:17;:19::i;:::-;41520:56;;;;41594:20;41606:7;41594;:11;;:20;;;;:::i;:::-;41587:27;;;;41459:163;:::o;5571:132::-;5629:7;5656:39;5660:1;5663;5656:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5649:46;;5571:132;;;;:::o;3308:181::-;3366:7;3386:9;3402:1;3398;:5;3386:17;;3427:1;3422;:6;;3414:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3480:1;3473:8;;;3308:181;;;;:::o;40265:470::-;40324:7;40333;40342;40351;40360;40369;40390:23;40415:12;40429:16;40449:42;40461:7;40470;;40479:11;;40449;:42::i;:::-;40389:102;;;;;;40502:19;40525:10;:8;:10::i;:::-;40502:33;;40547:15;40564:23;40589:12;40605:39;40617:7;40626:4;40632:11;40605;:39::i;:::-;40546:98;;;;;;40663:7;40672:15;40689:4;40695:15;40712:4;40718:8;40655:72;;;;;;;;;;;;;;;;;;;40265:470;;;;;;;:::o;3763:136::-;3821:7;3848:43;3852:1;3855;3848:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3841:50;;3763:136;;;;:::o;34847:600::-;26058:4;26049:6;;:13;;;;;;;;;;;;;;;;;;34984:21:::1;35022:1;35008:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34984:40;;35053:4;35035;35040:1;35035:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;35079:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;35069:4;35074:1;35069:7;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;35114:62;35131:4;35146:15;35164:11;35114:8;:62::i;:::-;35215:15;:66;;;35296:11;35322:1;35366:4;35393;35413:15;35215:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26073:1;26094:5:::0;26085:6;;:14;;;;;;;;;;;;;;;;;;34847:600;:::o;35455:107::-;35516:21;;;;;;;;;;;:30;;:38;35547:6;35516:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35455:107;:::o;36556:819::-;36668:7;36664:40;;36690:14;:12;:14::i;:::-;36664:40;36721:11;:19;36733:6;36721:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;36745:11;:22;36757:9;36745:22;;;;;;;;;;;;;;;;;;;;;;;;;36744:23;36721:46;36717:597;;;36784:48;36806:6;36814:9;36825:6;36784:21;:48::i;:::-;36717:597;;;36855:11;:19;36867:6;36855:19;;;;;;;;;;;;;;;;;;;;;;;;;36854:20;:46;;;;;36878:11;:22;36890:9;36878:22;;;;;;;;;;;;;;;;;;;;;;;;;36854:46;36850:464;;;36917:46;36937:6;36945:9;36956:6;36917:19;:46::i;:::-;36850:464;;;36986:11;:19;36998:6;36986:19;;;;;;;;;;;;;;;;;;;;;;;;;36985:20;:47;;;;;37010:11;:22;37022:9;37010:22;;;;;;;;;;;;;;;;;;;;;;;;;37009:23;36985:47;36981:333;;;37049:44;37067:6;37075:9;37086:6;37049:17;:44::i;:::-;36981:333;;;37115:11;:19;37127:6;37115:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;37138:11;:22;37150:9;37138:22;;;;;;;;;;;;;;;;;;;;;;;;;37115:45;37111:203;;;37177:48;37199:6;37207:9;37218:6;37177:21;:48::i;:::-;37111:203;;;37258:44;37276:6;37284:9;37295:6;37258:17;:44::i;:::-;37111:203;36981:333;36850:464;36717:597;37330:7;37326:41;;37352:15;:13;:15::i;:::-;37326:41;36556:819;;;;:::o;41630:555::-;41680:7;41689;41709:15;41727:7;;41709:25;;41745:15;41763:7;;41745:25;;41786:9;41781:289;41805:9;:16;;;;41801:1;:20;41781:289;;;41871:7;41847;:21;41855:9;41865:1;41855:12;;;;;;;;;;;;;;;;;;;;;;;;;41847:21;;;;;;;;;;;;;;;;:31;:66;;;;41906:7;41882;:21;41890:9;41900:1;41890:12;;;;;;;;;;;;;;;;;;;;;;;;;41882:21;;;;;;;;;;;;;;;;:31;41847:66;41843:97;;;41923:7;;41932;;41915:25;;;;;;;;;41843:97;41965:34;41977:7;:21;41985:9;41995:1;41985:12;;;;;;;;;;;;;;;;;;;;;;;;;41977:21;;;;;;;;;;;;;;;;41965:7;:11;;:34;;;;:::i;:::-;41955:44;;42024:34;42036:7;:21;42044:9;42054:1;42044:12;;;;;;;;;;;;;;;;;;;;;;;;;42036:21;;;;;;;;;;;;;;;;42024:7;:11;;:34;;;;:::i;:::-;42014:44;;41823:3;;;;;;;41781:289;;;;42094:20;42106:7;;42094;;:11;;:20;;;;:::i;:::-;42084:7;:30;42080:61;;;42124:7;;42133;;42116:25;;;;;;;;42080:61;42160:7;42169;42152:25;;;;;;41630:555;;;:::o;6188:278::-;6274:7;6306:1;6302;:5;6309:12;6294:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6333:9;6349:1;6345;:5;;;;;;6333:17;;6457:1;6450:8;;;6188:278;;;;;:::o;40743:366::-;40839:7;40848;40857;40877:12;40892:28;40916:3;40892:19;40904:6;40892:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;40877:43;;40931:16;40950:32;40978:3;40950:23;40962:10;40950:7;:11;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;40931:51;;40993:23;41019:31;41041:8;41019:17;41031:4;41019:7;:11;;:17;;;;:::i;:::-;:21;;:31;;;;:::i;:::-;40993:57;;41069:15;41086:4;41092:8;41061:40;;;;;;;;;40743:366;;;;;;;:::o;41117:334::-;41212:7;41221;41230;41250:15;41268:24;41280:11;41268:7;:11;;:24;;;;:::i;:::-;41250:42;;41303:12;41318:21;41327:11;41318:4;:8;;:21;;;;:::i;:::-;41303:36;;41350:23;41376:17;41388:4;41376:7;:11;;:17;;;;:::i;:::-;41350:43;;41412:7;41421:15;41438:4;41404:39;;;;;;;;;41117:334;;;;;;;:::o;31996:226::-;32053:1;32042:7;;:12;:32;;;;;32073:1;32058:11;;:16;32042:32;32039:44;;;32076:7;;32039:44;32113:7;;32095:15;:25;;;;32153:11;;32131:19;:33;;;;32187:1;32177:7;:11;;;;32213:1;32199:11;:15;;;;31996:226;:::o;38464:557::-;38567:15;38584:23;38609:12;38623:23;38648:12;38662:16;38682:19;38693:7;38682:10;:19::i;:::-;38566:135;;;;;;;;;;;;38730:28;38750:7;38730;:15;38738:6;38730:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38712:7;:15;38720:6;38712:15;;;;;;;;;;;;;;;:46;;;;38787:28;38807:7;38787;:15;38795:6;38787:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38769:7;:15;38777:6;38769:15;;;;;;;;;;;;;;;:46;;;;38847:39;38870:15;38847:7;:18;38855:9;38847:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38826:7;:18;38834:9;38826:18;;;;;;;;;;;;;;;:60;;;;38897:22;38910:8;38897:12;:22::i;:::-;38930:23;38942:4;38948;38930:11;:23::i;:::-;38986:9;38969:44;;38978:6;38969:44;;;38997:15;38969:44;;;;;;;;;;;;;;;;;;38464:557;;;;;;;;;:::o;37887:569::-;37988:15;38005:23;38030:12;38044:23;38069:12;38083:16;38103:19;38114:7;38103:10;:19::i;:::-;37987:135;;;;;;;;;;;;38151:28;38171:7;38151;:15;38159:6;38151:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38133:7;:15;38141:6;38133:15;;;;;;;;;;;;;;;:46;;;;38211:39;38234:15;38211:7;:18;38219:9;38211:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38190:7;:18;38198:9;38190:18;;;;;;;;;;;;;;;:60;;;;38282:39;38305:15;38282:7;:18;38290:9;38282:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38261:7;:18;38269:9;38261:18;;;;;;;;;;;;;;;:60;;;;38332:22;38345:8;38332:12;:22::i;:::-;38365:23;38377:4;38383;38365:11;:23::i;:::-;38421:9;38404:44;;38413:6;38404:44;;;38432:15;38404:44;;;;;;;;;;;;;;;;;;37887:569;;;;;;;;;:::o;37383:496::-;37482:15;37499:23;37524:12;37538:23;37563:12;37577:16;37597:19;37608:7;37597:10;:19::i;:::-;37481:135;;;;;;;;;;;;37645:28;37665:7;37645;:15;37653:6;37645:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37627:7;:15;37635:6;37627:15;;;;;;;;;;;;;;;:46;;;;37705:39;37728:15;37705:7;:18;37713:9;37705:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37684:7;:18;37692:9;37684:18;;;;;;;;;;;;;;;:60;;;;37755:22;37768:8;37755:12;:22::i;:::-;37788:23;37800:4;37806;37788:11;:23::i;:::-;37844:9;37827:44;;37836:6;37827:44;;;37855:15;37827:44;;;;;;;;;;;;;;;;;;37383:496;;;;;;;;;:::o;39029:628::-;39132:15;39149:23;39174:12;39188:23;39213:12;39227:16;39247:19;39258:7;39247:10;:19::i;:::-;39131:135;;;;;;;;;;;;39295:28;39315:7;39295;:15;39303:6;39295:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39277:7;:15;39285:6;39277:15;;;;;;;;;;;;;;;:46;;;;39352:28;39372:7;39352;:15;39360:6;39352:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39334:7;:15;39342:6;39334:15;;;;;;;;;;;;;;;:46;;;;39412:39;39435:15;39412:7;:18;39420:9;39412:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39391:7;:18;39399:9;39391:18;;;;;;;;;;;;;;;:60;;;;39483:39;39506:15;39483:7;:18;39491:9;39483:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39462:7;:18;39470:9;39462:18;;;;;;;;;;;;;;;:60;;;;39533:22;39546:8;39533:12;:22::i;:::-;39566:23;39578:4;39584;39566:11;:23::i;:::-;39622:9;39605:44;;39614:6;39605:44;;;39633:15;39605:44;;;;;;;;;;;;;;;;;;39029:628;;;;;;;;;:::o;32230:121::-;32284:15;;32274:7;:25;;;;32324:19;;32310:11;:33;;;;32230:121::o;4635:471::-;4693:7;4943:1;4938;:6;4934:47;;;4968:1;4961:8;;;;4934:47;4993:9;5009:1;5005;:5;4993:17;;5038:1;5033;5029;:5;;;;;;:10;5021:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5097:1;5090:8;;;4635:471;;;;;:::o;39665:343::-;39724:19;39747:10;:8;:10::i;:::-;39724:33;;39768:16;39787:25;39800:11;39787:8;:12;;:25;;;;:::i;:::-;39768:44;;39848:36;39875:8;39848:7;:22;39864:4;39848:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;39823:7;:22;39839:4;39823:22;;;;;;;;;;;;;;;:61;;;;39898:11;:26;39918:4;39898:26;;;;;;;;;;;;;;;;;;;;;;;;;39895:105;;;39964:36;39991:8;39964:7;:22;39980:4;39964:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;39939:7;:22;39955:4;39939:22;;;;;;;;;;;;;;;:61;;;;39895:105;39665:343;;;:::o;40016:147::-;40094:17;40106:4;40094:7;;:11;;:17;;;;:::i;:::-;40084:7;:27;;;;40135:20;40150:4;40135:10;;:14;;:20;;;;:::i;:::-;40122:10;:33;;;;40016:147;;:::o

Swarm Source

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