ETH Price: $2,581.13 (-2.14%)

Contract

0x0f4b2BD5F0128b9e7b6348ec23A11e30De130650
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve159068032022-11-05 22:29:35654 days ago1667687375IN
0x0f4b2BD5...0De130650
0 ETH0.0005770312.35813188
Approve147847462022-05-16 6:45:11827 days ago1652683511IN
0x0f4b2BD5...0De130650
0 ETH0.0011100423.77333987
Approve141539152022-02-06 17:34:38926 days ago1644168878IN
0x0f4b2BD5...0De130650
0 ETH0.00291646119.48310074
Team Rescue Toke...137441932021-12-05 5:26:34989 days ago1638681994IN
0x0f4b2BD5...0De130650
0 ETH0.0043998482.63394726
Team Rescue Toke...137441742021-12-05 5:21:41989 days ago1638681701IN
0x0f4b2BD5...0De130650
0 ETH0.0059369797.17451967
Approve137093362021-11-29 15:18:13995 days ago1638199093IN
0x0f4b2BD5...0De130650
0 ETH0.00731686156.70159007
Approve136841972021-11-25 15:13:14999 days ago1637853194IN
0x0f4b2BD5...0De130650
0 ETH0.00863426184.91564332
Transfer136685102021-11-23 3:32:071001 days ago1637638327IN
0x0f4b2BD5...0De130650
0 ETH0.00740512197.24901037
Team Rescue Toke...136684962021-11-23 3:27:591001 days ago1637638079IN
0x0f4b2BD5...0De130650
0 ETH0.00909196170.75721071
Team Avoid Burni...136684872021-11-23 3:26:591001 days ago1637638019IN
0x0f4b2BD5...0De130650
0 ETH0.00653072214.24149913
Approve136569832021-11-21 8:06:491003 days ago1637482009IN
0x0f4b2BD5...0De130650
0 ETH0.0043165292.44481392
Transfer136567692021-11-21 7:14:541003 days ago1637478894IN
0x0f4b2BD5...0De130650
0.07 ETH0.0017013780.80617667
Approve136529942021-11-20 16:37:031004 days ago1637426223IN
0x0f4b2BD5...0De130650
0 ETH0.0040090685.86001564
Approve136489932021-11-20 1:24:111004 days ago1637371451IN
0x0f4b2BD5...0De130650
0 ETH0.004011985.92098206
Approve136376972021-11-18 6:24:541006 days ago1637216694IN
0x0f4b2BD5...0De130650
0 ETH0.00812742174.06097939
Transfer136367672021-11-18 2:44:491006 days ago1637203489IN
0x0f4b2BD5...0De130650
0.1 ETH0.00255716121.45182089
Team Avoid Burni...136367672021-11-18 2:44:491006 days ago1637203489IN
0x0f4b2BD5...0De130650
0 ETH0.00370221121.45182089
Team Manual Gene...136367592021-11-18 2:42:351006 days ago1637203355IN
0x0f4b2BD5...0De130650
0 ETH0.00435654102.86520824
Team Manual Gene...136367462021-11-18 2:40:191006 days ago1637203219IN
0x0f4b2BD5...0De130650
0 ETH0.00544975128.67770969
Approve136367382021-11-18 2:38:401006 days ago1637203120IN
0x0f4b2BD5...0De130650
0 ETH0.00691056148
Team Manual Gene...136367342021-11-18 2:37:441006 days ago1637203064IN
0x0f4b2BD5...0De130650
0 ETH0.03414782129.58980421
Team Update Limi...136367282021-11-18 2:36:261006 days ago1637202986IN
0x0f4b2BD5...0De130650
0 ETH0.00428752122.90458706
Team Manual Gene...136367202021-11-18 2:35:041006 days ago1637202904IN
0x0f4b2BD5...0De130650
0 ETH0.03598865136.5757219
Transfer136367142021-11-18 2:33:021006 days ago1637202782IN
0x0f4b2BD5...0De130650
0 ETH0.00518309138.06133101
Approve136366942021-11-18 2:27:351006 days ago1637202455IN
0x0f4b2BD5...0De130650
0 ETH0.00474506101.6225614
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
136684872021-11-23 3:26:591001 days ago1637638019
0x0f4b2BD5...0De130650
1.14985365 ETH
136639442021-11-22 10:25:571002 days ago1637576757
0x0f4b2BD5...0De130650
0.00165093 ETH
136639442021-11-22 10:25:571002 days ago1637576757
0x0f4b2BD5...0De130650
0.0272539 ETH
136639442021-11-22 10:25:571002 days ago1637576757
0x0f4b2BD5...0De130650
0.1090156 ETH
136639392021-11-22 10:23:291002 days ago1637576609
0x0f4b2BD5...0De130650
0.00455149 ETH
136639392021-11-22 10:23:291002 days ago1637576609
0x0f4b2BD5...0De130650
0.04898851 ETH
136639392021-11-22 10:23:291002 days ago1637576609
0x0f4b2BD5...0De130650
0.19595407 ETH
136473252021-11-19 19:09:151005 days ago1637348955
0x0f4b2BD5...0De130650
0.00416438 ETH
136473252021-11-19 19:09:151005 days ago1637348955
0x0f4b2BD5...0De130650
0.04543076 ETH
136473252021-11-19 19:09:151005 days ago1637348955
0x0f4b2BD5...0De130650
0.18172305 ETH
136422392021-11-18 23:21:561006 days ago1637277716
0x0f4b2BD5...0De130650
0.00250547 ETH
136422392021-11-18 23:21:561006 days ago1637277716
0x0f4b2BD5...0De130650
0.03584045 ETH
136422392021-11-18 23:21:561006 days ago1637277716
0x0f4b2BD5...0De130650
0.14336181 ETH
136415392021-11-18 20:42:291006 days ago1637268149
0x0f4b2BD5...0De130650
0.00373366 ETH
136415392021-11-18 20:42:291006 days ago1637268149
0x0f4b2BD5...0De130650
0.04705794 ETH
136415392021-11-18 20:42:291006 days ago1637268149
0x0f4b2BD5...0De130650
0.18823179 ETH
136389702021-11-18 11:06:391006 days ago1637233599
0x0f4b2BD5...0De130650
0.0056825 ETH
136389702021-11-18 11:06:391006 days ago1637233599
0x0f4b2BD5...0De130650
0.06252489 ETH
136389702021-11-18 11:06:391006 days ago1637233599
0x0f4b2BD5...0De130650
0.25009956 ETH
136378072021-11-18 6:50:291006 days ago1637218229
0x0f4b2BD5...0De130650
0.00005745 ETH
136378072021-11-18 6:50:291006 days ago1637218229
0x0f4b2BD5...0De130650
0.00735171 ETH
136378072021-11-18 6:50:291006 days ago1637218229
0x0f4b2BD5...0De130650
0.02940684 ETH
136369882021-11-18 3:39:341006 days ago1637206774
0x0f4b2BD5...0De130650
0.00103238 ETH
136369882021-11-18 3:39:341006 days ago1637206774
0x0f4b2BD5...0De130650
0.02596053 ETH
136369882021-11-18 3:39:341006 days ago1637206774
0x0f4b2BD5...0De130650
0.10384214 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OSINU

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IBEP20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface IPancakeERC20 {
    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;
}

interface IPancakeFactory {
    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 IPancakeRouter01 {
    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 factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 IPancakeRouter02 is IPancakeRouter01 {
    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;
}



/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = msg.sender;
        _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() == msg.sender, "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 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 onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}




////////////////////////////////////////////////////////////////////////////////////////////////////////
//OSINU Contract ////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
contract OSINU is IBEP20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;
    
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _sellLock;
	mapping (address => bool) public wListed;
	
	mapping (address => bool) priv_buyer;
	mapping (address => bool) priv_retrieved;
	uint256 priv_amount = 200000 * 10**_decimals;
	

    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _whiteList;
    EnumerableSet.AddressSet private _excludedFromSellLock;
    EnumerableSet.AddressSet private _excludedFromRaffle;
    
    mapping (address => bool) public _blacklist;
    bool isBlacklist = true;
    
    //Token Info 
    string private constant _name = 'OSINU Token';
    string private constant _symbol = 'OSINU';
    uint8 private constant _decimals = 9;
    uint256 public constant InitialSupply= 100 * 10**6 * 10**_decimals;//equals 100.000.000 token

    uint256 swapLimit = 1 * 10**5 * 10**_decimals;
    bool isSwapPegged = true;
    
    //Divider for the buyLimit based on circulating Supply (1%)
    uint16 public constant BuyLimitDivider=100;
    //Divider for the MaxBalance based on circulating Supply (1.5%)
    uint8 public constant BalanceLimitDivider=65;
    //Divider for the Whitelist MaxBalance based on initial Supply(1.5%)
    uint16 public constant WhiteListBalanceLimitDivider=65;
    //Divider for sellLimit based on circulating Supply (1%)
    uint16 public constant SellLimitDivider=100;
    //Sellers get locked for MaxSellLockTime so they can't dump repeatedly
    uint16 public constant MaxSellLockTime= 1 seconds;
    // Team wallets
    address public constant TeamWallet=0xc0de1dB35182980F61C85137167c439dED4C815c;
    address public constant SecondTeamWallet=0xCbeb3C6aEC7040e4949F22234573bd06B31DE83b;
    //TODO: Change to Mainnet
    //TestNet
    //address private constant PancakeRouter=0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //MainNet
    // 0x10ED43C718714eb63d5aA57B78B54704E256024E
    address private constant PancakeRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    //variables that track balanceLimit and sellLimit,
    //can be updated based on circulating supply and Sell- and BalanceLimitDividers
    uint256 private _circulatingSupply =InitialSupply;
    uint256 public  balanceLimit = _circulatingSupply;
    uint256 public  sellLimit = _circulatingSupply;
    uint256 public  buyLimit = _circulatingSupply;
    address[] public triedToDump;

    //Limits max tax, only gets applied for tax changes, doesn't affect inital Tax
    uint8 public constant MaxTax=95;
    
    //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
    uint8 private _buyTax;
    uint8 private _sellTax;
    uint8 private _transferTax;
    bool botRekt = true;
    uint8 private _liquidityTax;
    uint8 private _marketingTax;
    
    bool isTokenSwapManual = true;

       
    address private _pancakePairAddress; 
    IPancakeRouter02 private  _pancakeRouter;
    
    //modifier for functions only the team can call
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not in Team");
        _;
    }
    //Checks if address is in Team, is needed to give Team access even if contract is renounced
    //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||addr==TeamWallet||addr==SecondTeamWallet;
    }


    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Constructor///////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    constructor (address[] memory addy) {
        

        //contract creator gets 90% of the token to create LP-Pair
        uint256 deployerBalance=_circulatingSupply*7/10;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
        //contract gets 10% of the token to generate LP token and Marketing Budget fase
        //contract will sell token over the first 200 sells to generate maximum LP and BNB
        uint256 injectBalance=_circulatingSupply-deployerBalance;
        _balances[address(this)]=injectBalance;
       emit Transfer(address(0), address(this),injectBalance);

        uint256 i;
        for(i=0; i<addy.length; i++) {
            _balances[addy[i]] += 200000 * 10**_decimals;
            _balances[address(this)] -= 200000 * 10**_decimals;
            emit Transfer(address(this), addy[i], 200000 * 10**_decimals);
        }
        
        // Pancake Router
        _pancakeRouter = IPancakeRouter02(PancakeRouter);
        //Creates a Pancake Pair
        _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH());
        
        //Sets Buy/Sell limits
        balanceLimit=InitialSupply/BalanceLimitDivider;
        sellLimit=InitialSupply/SellLimitDivider;
        buyLimit=InitialSupply/BuyLimitDivider;

       //Sets sellLockTime to be 2 seconds by default
        sellLockTime=2 seconds;


        _buyTax=10;
        _sellTax=11;
        _transferTax=10;

        _liquidityTax=40;
        _marketingTax=60;
        //Team wallet and deployer are excluded from Taxes
        _excluded.add(TeamWallet);
        _excluded.add(SecondTeamWallet);
        _excluded.add(msg.sender);
        //excludes Pancake Router, pair, contract and burn address from staking
        _excludedFromRaffle.add(address(_pancakeRouter));
        _excludedFromRaffle.add(_pancakePairAddress);
        _excludedFromRaffle.add(address(this));
        _excludedFromRaffle.add(0x000000000000000000000000000000000000dEaD);
        _excludedFromSellLock.add(address(_pancakeRouter));
        _excludedFromSellLock.add(_pancakePairAddress);
        _excludedFromSellLock.add(address(this));
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Transfer functionality////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    //transfer function, every transfer runs through this function
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        
        
        //Manually Excluded adresses are transfering tax and lock free
        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));
        
        //Transactions from and to the contract are always tax and lock free
        bool isContractTransfer=(sender==address(this) || recipient==address(this));
        
        //transfers between PancakeRouter and PancakePair are tax and lock free
        address pancakeRouter=address(_pancakeRouter);
        bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) 
        || (recipient == _pancakePairAddress && sender == pancakeRouter));

        //differentiate between buy/sell/transfer to apply different taxes/restrictions
        bool isBuy=sender==_pancakePairAddress|| sender == pancakeRouter;
        bool isSell=recipient==_pancakePairAddress|| recipient == pancakeRouter;

        //Pick transfer
        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{ 
            //once trading is enabled, it can't be turned off again
            if (!tradingEnabled) {
                if (sender != owner() && recipient != owner()) {
                    if (!wListed[sender] && !wListed[recipient]) {
                        if (botRekt) {
                           emit Transfer(sender,recipient,0);
                           return;
                        }
                        else {
                            require(tradingEnabled,"trading not yet enabled");
                        }
                    }
                }
            }
            if(whiteListTrading){
                _whiteListTransfer(sender,recipient,amount,isBuy,isSell);
            }
            else{
                _taxedTransfer(sender,recipient,amount,isBuy,isSell);                  
            }
        }
    }
    //if whitelist is active, all taxed transfers run through this
    function _whiteListTransfer(address sender, address recipient,uint256 amount,bool isBuy,bool isSell) private{
        //only apply whitelist restrictions during buys and transfers
        if(!isSell){
            //the recipient needs to be on Whitelist. Works for both buys and transfers.
            //transfers to other whitelisted addresses are allowed.
            require(_whiteList.contains(recipient),"recipient not on whitelist");
            //Limit is 1/500 of initialSupply during whitelist, to allow for a large whitelist without causing a massive
            //price impact of the whitelist
            require((_balances[recipient]+amount<=InitialSupply/WhiteListBalanceLimitDivider),"amount exceeds whitelist max");    
        }
        _taxedTransfer(sender,recipient,amount,isBuy,isSell);

    }  
    //applies taxes, checks for limits, locks generates autoLP and stakingBNB, and autostakes
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");


        swapLimit = sellLimit/2;
        
        uint8 tax;
        if(isSell){
            if(isBlacklist) {
                require(!_blacklist[sender]);
            }
            if(!_excludedFromSellLock.contains(sender)){
                //If seller sold less than sellLockTime(2h) ago, sell is declined, can be disabled by Team         
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock");
                //Sets the time sellers get locked(2 hours by default)
                _sellLock[sender]=block.timestamp+sellLockTime;
            }
            //Sells can't exceed the sell limit(50.000 Tokens at start, can be updated to circulating supply)
            if(amount>sellLimit) {
                triedToDump.push(sender);
            }
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
            //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit
            require(recipientBalance+amount<=balanceLimit,"whale protection");
            require(amount<=buyLimit, "whale protection");
            tax=_buyTax;

        } else {//Transfer
            //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit
            require(recipientBalance+amount<=balanceLimit,"whale protection");
            //Transfers are disabled in sell lock, this doesn't stop someone from transfering before
            //selling, but there is no satisfying solution for that, and you would need to pax additional tax
            if(!_excludedFromSellLock.contains(sender))
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock");
            tax=_transferTax;

        }     
        //Swapping AutoLP and MarketingBNB is only possible if sender is not pancake pair, 
        //if its not manually disabled, if its not already swapping and if its a Sell to avoid
        // people from causing a large price impact from repeatedly transfering when theres a large backlog of Tokens
        if((sender!=_pancakePairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier))
            _swapContractToken(amount);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint256 taxedAmount=amount-(contractToken);

        //Removes token and handles staking
        _removeToken(sender,amount);
        
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;

        //Adds token and handles staking
        _addToken(recipient, taxedAmount);
        
        emit Transfer(sender,recipient,taxedAmount);
        


    }
    //Feeless transfer only transfers and autostakes
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        //Removes token and handles staking
        _removeToken(sender,amount);
        //Adds token and handles staking
        _addToken(recipient, amount);
        
        emit Transfer(sender,recipient,amount);

    }
    //Calculates the token that should be taxed
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }

    function _addToken(address addr, uint256 amount) private {
        //the amount of token after transfer
        uint256 newAmount=_balances[addr]+amount;
        _balances[addr]=newAmount;

    }
    
    
    //removes Token, adds BNB to the toBePaid mapping and resets staking
    function _removeToken(address addr, uint256 amount) private {
        //the amount of token after transfer
        uint256 newAmount=_balances[addr]-amount;
         _balances[addr]=newAmount;
    }

    //lock for the withdraw
    bool private _isTokenSwaping;
    //the total reward distributed through staking, for tracking purposes
    uint256 public totalTokenSwapGenerated;
    //the total payout through staking, for tracking purposes
    uint256 public totalPayouts;
    
    //marketing share of the TokenSwap tax
    uint8 public marketingShare=100;
    //balance that is claimable by the team
    uint256 public marketingBalance;

    //Mapping of shares that are reserved for payout
    mapping(address => uint256) private toBePaid;

    //Contract, pancake and burnAddress are excluded, other addresses like CEX
    //can be manually excluded, excluded list is limited to 30 entries to avoid a
    //out of gas exeption during sells
    function isexcludedFromRaffle(address addr) public view returns (bool){
        return _excludedFromRaffle.contains(addr);
    }

    //distributes bnb between marketing share and dividents 
    function _distributeFeesBNB(uint256 BNBamount) private {
        // Deduct marketing Tax
        uint256 marketingSplit = (BNBamount * marketingShare) / 100;

        marketingBalance+=marketingSplit;

    }
    


    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Swap Contract Tokens//////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    //tracks auto generated BNB, useful for ticker etc
    uint256 public totalLPBNB;
    //Locks the swap if already swapping
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    //swaps the token on the contract for Marketing BNB and LP Token.
    //always swaps the sellLimit of token to avoid a large price impact
    function _swapContractToken(uint256 totalMax) private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_marketingTax;
        uint256 tokenToSwap=swapLimit;
        if(tokenToSwap > totalMax) {
            if(isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
        //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
        if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }
        //splits the token in TokenForLiquidity and tokenForMarketing
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= tokenToSwap-tokenForLiquidity;

        //splits tokenForLiquidity in 2 halves
        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqBNBToken=tokenForLiquidity-liqToken;

        //swaps marktetingToken and the liquidity token half for BNB
        uint256 swapToken=liqBNBToken+tokenForMarketing;
        //Gets the initial BNB balance, so swap won't touch any staked BNB
        uint256 initialBNBBalance = address(this).balance;
        _swapTokenForBNB(swapToken);
        uint256 newBNB=(address(this).balance - initialBNBBalance);
        //calculates the amount of BNB belonging to the LP-Pair and converts them to LP
        uint256 liqBNB = (newBNB*liqBNBToken)/swapToken;
        _addLiquidity(liqToken, liqBNB);
        //Get the BNB balance after LP generation to get the
        //exact amount of token left for Staking
        uint256 generatedBNB=(address(this).balance - initialBNBBalance);
        //distributes remaining BNB between stakers and Marketing
        _distributeFeesBNB(generatedBNB);
    }
    //swaps tokens on the contract for BNB
    function _swapTokenForBNB(uint256 amount) private {
        _approve(address(this), address(_pancakeRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _pancakeRouter.WETH();

        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private {
        totalLPBNB+=bnbamount;
        _approve(address(this), address(_pancakeRouter), tokenamount);
        _pancakeRouter.addLiquidityETH{value: bnbamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //public functions /////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////// 


    function getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function getTaxes() public view returns(uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax);
    }

    function getWhitelistedStatus(address AddressToCheck) public view returns(bool){
        return _whiteList.contains(AddressToCheck);
    }
    //How long is a given address still locked from selling
    function getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
       uint256 lockTime=_sellLock[AddressToCheck];
       if(lockTime<=block.timestamp)
       {
           return 0;
       }
       return lockTime-block.timestamp;
    }
    function getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }
    
    //Functions every wallet can call
    //Resets sell lock of caller to the default sellLockTime should something go very wrong
    function AddressResetSellLock() public{
        _sellLock[msg.sender]=block.timestamp+sellLockTime;
    }
    
    
    
    function set_false_presaler(address addy) public onlyTeam {
        priv_buyer[addy] = false;
        priv_retrieved[addy] = true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Settings//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    bool public sellLockDisabled;
    uint256 public sellLockTime;
    bool public manualConversion;


    function getDumpers() public view returns(address[] memory) {
        return triedToDump;
    }
    
    
    function TeamSetWhitelistedAddressAlt(address addy, bool booly) public onlyTeam {
        wListed[addy] = booly;
    }
    
    function TeamSetWhitelistedAddress(address addy, bool booly) public onlyTeam {
        wListed[addy] = booly;
        _excluded.add(addy);
    }
    
    
    function TeamSetWhitelistedAddressesAlt( address[] memory addy, bool booly) public onlyTeam {
        uint256 i;
        for(i=0; i<addy.length; i++) {
            wListed[addy[i]] = booly;
        }
    }
    
    function TeamSetWhitelistedAddresses( address[] memory addy, bool booly) public onlyTeam {
        uint256 i;
        for(i=0; i<addy.length; i++) {
            wListed[addy[i]] = booly;
            _excluded.add(addy[i]);
        }
    }
    
    function TeamSetPeggedSwap(bool isPegged) public onlyTeam {
        isSwapPegged = isPegged;
    }
    

    //Excludes account from Staking
    function TeamExcludeFromRaffle(address addr) public onlyTeam{
        require(!isexcludedFromRaffle(addr));
        _excludedFromRaffle.add(addr);
        
    }    

    //Includes excluded Account to staking
    function TeamIncludeToRaffle(address addr) public onlyTeam{
        require(isexcludedFromRaffle(addr));
        _excludedFromRaffle.remove(addr);
    }

    function TeamWithdrawMarketingBNB() public onlyTeam{
        uint256 amount=marketingBalance;
        marketingBalance=0;
        (bool sent,) =TeamWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 


    //switches autoLiquidity and marketing BNB generation during transfers
    function TeamSwitchManualBNBConversion(bool manual) public onlyTeam{
        manualConversion=manual;
    }
    //Disables the timeLock after selling for everyone
    function TeamDisableSellLock(bool disabled) public onlyTeam{
        sellLockDisabled=disabled;
    }
    //Sets SellLockTime, needs to be lower than MaxSellLockTime
    function TeamSetSellLockTime(uint256 sellLockSeconds)public onlyTeam{
            require(sellLockSeconds<=MaxSellLockTime,"Sell Lock time too high");
            sellLockTime=sellLockSeconds;
    } 

    //Sets Taxes, is limited by MaxTax(20%) to make it impossible to create honeypot
    function TeamSetTaxes(uint8 , uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{
        uint8 totalTax=liquidityTaxes+marketingTaxes;
        require(totalTax==100, "liq+marketing needs to equal 100%");
        require(buyTax<=MaxTax&&sellTax<=MaxTax&&transferTax<=MaxTax,"taxes higher than max tax");

        _liquidityTax=liquidityTaxes;
        _marketingTax=marketingTaxes;
        
        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    //How much of the staking tax should be allocated for marketing
    function TeamChangeMarketingShare(uint8 newShare) public onlyTeam{
        marketingShare=newShare;
    }
    //manually converts contract token to LP and staking BNB
    function TeamManualGenerateTokenSwapBalance(uint256 _qty) public onlyTeam{
    _swapContractToken(_qty * 10**9);
    }
    //Exclude/Include account from fees (eg. CEX)
    function TeamExcludeAccountFromFees(address account) public onlyTeam {
        _excluded.add(account);
    }
    function TeamIncludeAccountToFees(address account) public onlyTeam {
        _excluded.remove(account);
    }
    //Exclude/Include account from fees (eg. CEX)
    function TeamExcludeAccountFromSellLock(address account) public onlyTeam {
        _excludedFromSellLock.add(account);
    }
    function TeamIncludeAccountToSellLock(address account) public onlyTeam {
        _excludedFromSellLock.remove(account);
    }
    
     //Limits need to be at least target, to avoid setting value to 0(avoid potential Honeypot)
    function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{
        //Adds decimals to limits
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;     
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Setup Functions///////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    bool public tradingEnabled;
    bool public whiteListTrading;
    address private _liquidityTokenAddress;
    //Enables whitelist trading and locks Liquidity for a short time
    function SetupEnableWhitelistTrading() public onlyTeam{
        require(!tradingEnabled);
        //Sets up the excluded from staking list
        tradingEnabled=true;
        whiteListTrading=true;
    }
    //Enables trading for everyone
    function SetupEnableTrading() public onlyTeam{
        require(tradingEnabled&&whiteListTrading);
        whiteListTrading=false;
    }

    //Sets up the LP-Token Address required for LP Release
    function SetupLiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{
        _liquidityTokenAddress=liquidityTokenAddress;
    }
    //Functions for whitelist
    function SetupAddToWhitelist(address addressToAdd) public onlyTeam{
        _whiteList.add(addressToAdd);
    }
    function SetupAddArrayToWhitelist(address[] memory addressesToAdd) public onlyTeam{
        for(uint i=0; i<addressesToAdd.length; i++){
            _whiteList.add(addressesToAdd[i]);
        }
    }
    function SetupRemoveFromWhitelist(address addressToRemove) public onlyTeam{
        _whiteList.remove(addressToRemove);
    } 
    
    
    function TeamRescueTokens(address tknAddress) public onlyTeam {
        IBEP20 token = IBEP20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance>0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }
    
    // Blacklists
    
    function setBlacklistEnabled(bool isBlacklistEnabled) public onlyTeam {
        isBlacklist = isBlacklistEnabled;
    }
    
    function setContractTokenSwapManual(bool manual) public onlyTeam {
        isTokenSwapManual = manual;
    }
    
    function setBlacklistedAddress(address toBlacklist) public onlyTeam {
        _blacklist[toBlacklist] = true;
    }
    
    function removeBlacklistedAddress(address toRemove) public onlyTeam {
        _blacklist[toRemove] = false;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Utilities/////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    function TeamAvoidBurning() public onlyTeam{
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //external//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    receive() external payable {}
    fallback() external payable {}
    // IBEP20

    function getOwner() external view override returns (address) {
        return owner();
    }

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

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

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

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    // IBEP20 - Helpers

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AddressResetSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SecondTeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressesToAdd","type":"address[]"}],"name":"SetupAddArrayToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToAdd","type":"address"}],"name":"SetupAddToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableWhitelistTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToRemove","type":"address"}],"name":"SetupRemoveFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamAvoidBurning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"TeamChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"TeamExcludeFromRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamIncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamIncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"TeamIncludeToRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"TeamManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"TeamRescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"TeamSetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"TeamSetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"TeamSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddressAlt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddressesAlt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"TeamSwitchManualBNBConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"TeamUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWithdrawMarketingBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WhiteListBalanceLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDumpers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getWhitelistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isexcludedFromRaffle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isBlacklistEnabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toBlacklist","type":"address"}],"name":"setBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"set_false_presaler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSwapGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"triedToDump","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200094d565b620000219062030d4062000a0c565b6007556011805460ff191660011790556200003f6009600a6200094d565b6200004e90620186a062000a0c565b6012556013805460ff191660011790556200006c6009600a6200094d565b6200007c906305f5e10062000a0c565b60148190556015819055601681905560175560198054660100000100000066ff0000ff00000019909116179055601d805460ff19166064179055348015620000c357600080fd5b506040516200426038038062004260833981016040819052620000e691620007ed565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000600a60145460076200013c919062000a0c565b620001489190620008e1565b336000818152600160205260408082208490555192935090916000805160206200424083398151915290620001809085815260200190565b60405180910390a36000816014546200019a919062000a2e565b306000818152600160205260408082208490555192935090916000805160206200424083398151915290620001d29085815260200190565b60405180910390a360005b83518110156200032657620001f56009600a6200094d565b620002049062030d4062000a0c565b600160008684815181106200021d576200021d62000a7c565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620002569190620008c6565b909155506200026a90506009600a6200094d565b620002799062030d4062000a0c565b30600090815260016020526040812080549091906200029a90849062000a2e565b92505081905550838181518110620002b657620002b662000a7c565b60200260200101516001600160a01b0316306001600160a01b0316600080516020620042408339815191526009600a620002f191906200094d565b620003009062030d4062000a0c565b60405190815260200160405180910390a3806200031d8162000a48565b915050620001dd565b601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200038657600080fd5b505afa1580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c19190620007cf565b6001600160a01b031663c9c6539630601a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041f57600080fd5b505afa15801562000434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045a9190620007cf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620004a357600080fd5b505af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de9190620007cf565b601980546001600160a01b039290921667010000000000000002600160381b600160d81b031990921691909117905560416200051d6009600a6200094d565b6200052d906305f5e10062000a0c565b620005399190620008e1565b60155560646200054c6009600a6200094d565b6200055c906305f5e10062000a0c565b620005689190620008e1565b60165560646200057b6009600a6200094d565b6200058b906305f5e10062000a0c565b620005979190620008e1565b60175560026022556019805465ffff00ffffff1916653c28000a0b0a179055620005e3600873c0de1db35182980f61c85137167c439ded4c815c62000740602090811b62001fa117901c565b506200061373cbeb3c6aec7040e4949f22234573bd06b31de83b60086200074060201b62001fa11790919060201c565b506200062f3360086200074060201b62001fa11790919060201c565b50601a546200065690600e906001600160a01b031662000740602090811b62001fa117901c565b5062000687601960079054906101000a90046001600160a01b0316600e6200074060201b62001fa11790919060201c565b50620006a330600e6200074060201b62001fa11790919060201c565b50620006c161dead600e6200074060201b62001fa11790919060201c565b50601a54620006e890600c906001600160a01b031662000740602090811b62001fa117901c565b5062000719601960079054906101000a90046001600160a01b0316600c6200074060201b62001fa11790919060201c565b506200073530600c6200074060201b62001fa11790919060201c565b505050505062000aa8565b600062000757836001600160a01b03841662000760565b90505b92915050565b6000818152600183016020526040812054620007a9575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200075a565b5060006200075a565b80516001600160a01b0381168114620007ca57600080fd5b919050565b600060208284031215620007e257600080fd5b6200075782620007b2565b600060208083850312156200080157600080fd5b82516001600160401b03808211156200081957600080fd5b818501915085601f8301126200082e57600080fd5b81518181111562000843576200084362000a92565b8060051b604051601f19603f830116810181811085821117156200086b576200086b62000a92565b604052828152858101935084860182860187018a10156200088b57600080fd5b600095505b83861015620008b957620008a481620007b2565b85526001959095019493860193860162000890565b5098975050505050505050565b60008219821115620008dc57620008dc62000a66565b500190565b600082620008ff57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200094557816000190482111562000929576200092962000a66565b808516156200093757918102915b93841c939080029062000909565b509250929050565b60006200075760ff84168360008262000969575060016200075a565b8162000978575060006200075a565b81600181146200099157600281146200099c57620009bc565b60019150506200075a565b60ff841115620009b057620009b062000a66565b50506001821b6200075a565b5060208310610133831016604e8410600b8410161715620009e1575081810a6200075a565b620009ed838362000904565b806000190482111562000a045762000a0462000a66565b029392505050565b600081600019048311821515161562000a295762000a2962000a66565b500290565b60008282101562000a435762000a4362000a66565b500390565b600060001982141562000a5f5762000a5f62000a66565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6137888062000ab86000396000f3fe6080604052600436106104475760003560e01c8063677a8870116102325780639728c0191161012d578063d8e8de34116100b0578063e77bf5f811610077578063e77bf5f814610dbd578063eb8e886314610ddd578063f2fde38b14610df2578063f88b0e4614610e12578063f9963ca114610e2857005b8063d8e8de3414610cf7578063da1144d614610d17578063dd62ed3e14610d37578063dff6bcbf14610d7d578063e3aa94b014610d9d57005b8063a6fc178a116100f4578063a6fc178a14610c62578063a9059cbb14610c82578063b76289b814610ca2578063b85111db14610cc2578063d51f383b14610cd757005b80639728c01914610bb2578063988c5ec914610bd25780639fa62d5f14610bf2578063a20623ce14610c12578063a457c2d714610c4257005b80638724cc72116101b55780638d2c50391161017c5780638d2c503914610b225780638da5cb5b14610aee578063914e208a14610b4257806393ab98f214610b6457806395d89b4114610b8457005b80638724cc7214610a9a5780638728ecd114610aaf578063887c60fb14610acf578063893d20e814610aee5780638d060d7714610b0c57005b806373ddf08e116101f957806373ddf08e14610a20578063762bb28214610a405780637b9e987a14610a565780637f91937314610a6b57806386d0ada814610a8057005b8063677a8870146109635780636f89e4091461098b57806370a08231146109b5578063715018a6146109eb57806371ab1f0914610a0057005b8063311a86971161034257806348e907b7116102c5578063588aeaf21161028c578063588aeaf2146108c7578063589210d9146108e757806358e55365146108fd57806363b263b31461091357806364365f131461094357005b806348e907b71461083c5780634ada218b146108525780634cdaf0ae146108715780634f91e48c1461089157806357ad67d1146108a757005b80633d8dbf5d116103095780633d8dbf5d146107b15780633e9be909146107d15780634089b170146107f15780634607e6921461080757806348e531641461082757005b8063311a869714610733578063313ce567146107485780633328b7211461075c5780633478154b1461077c578063395093511461079157005b80631285073c116103ca5780631eb25d13116103915780631eb25d13146106635780631f8b845e14610572578063230ffc421461067857806323b872dd146106b85780632973ef2d146106d857005b80631285073c146105cf57806314e91377146105ee5780631732ed7c1461060e57806318160ddd1461062e57806319e880841461064357005b80630b1daa3e1161040e5780630b1daa3e146105325780630fa6c5ff146105525780630fd99e16146105725780631193c6911461059a5780631201cbd0146105af57005b8063029a1ecd1461045057806302a89e021461047057806306fdde031461049057806309218ee7146104d6578063095ea7b31461050257005b3661044e57005b005b34801561045c57600080fd5b5061044e61046b366004613126565b610e48565b34801561047c57600080fd5b5061044e61048b3660046132b0565b610e98565b34801561049c57600080fd5b5060408051808201909152600b81526a27a9a4a72a902a37b5b2b760a91b60208201525b6040516104cd9190613452565b60405180910390f35b3480156104e257600080fd5b50601d546104f09060ff1681565b60405160ff90911681526020016104cd565b34801561050e57600080fd5b5061052261051d366004613208565b610ee1565b60405190151581526020016104cd565b34801561053e57600080fd5b5061044e61054d366004613126565b610ef8565b34801561055e57600080fd5b5061044e61056d366004613126565b610f28565b34801561057e57600080fd5b50610587606481565b60405161ffff90911681526020016104cd565b3480156105a657600080fd5b5061044e610f6a565b3480156105bb57600080fd5b5061044e6105ca3660046132b0565b610fb7565b3480156105db57600080fd5b506022545b6040519081526020016104cd565b3480156105fa57600080fd5b5061044e6106093660046132b0565b610fef565b34801561061a57600080fd5b5061044e6106293660046131da565b61102e565b34801561063a57600080fd5b506014546105e0565b34801561064f57600080fd5b5061044e61065e3660046131da565b611087565b34801561066f57600080fd5b506105e06110d7565b34801561068457600080fd5b506106a073cbeb3c6aec7040e4949f22234573bd06b31de83b81565b6040516001600160a01b0390911681526020016104cd565b3480156106c457600080fd5b506105226106d3366004613199565b6110f4565b3480156106e457600080fd5b506019546040805160ff640100000000840481168252600160281b840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a0016104cd565b34801561073f57600080fd5b506104f0604181565b34801561075457600080fd5b5060096104f0565b34801561076857600080fd5b5061044e610777366004613126565b61118b565b34801561078857600080fd5b50610587600181565b34801561079d57600080fd5b506105226107ac366004613208565b6111d1565b3480156107bd57600080fd5b5061044e6107cc366004613126565b611208565b3480156107dd57600080fd5b5061044e6107ec366004613269565b611251565b3480156107fd57600080fd5b506105e0601c5481565b34801561081357600080fd5b5061044e6108223660046132ea565b6112dd565b34801561083357600080fd5b5061044e61131b565b34801561084857600080fd5b506105e0601b5481565b34801561085e57600080fd5b5060235461052290610100900460ff1681565b34801561087d57600080fd5b5061044e61088c366004613126565b61133a565b34801561089d57600080fd5b506105e060165481565b3480156108b357600080fd5b5061044e6108c2366004613387565b61138b565b3480156108d357600080fd5b5061044e6108e2366004613126565b6114fd565b3480156108f357600080fd5b506105e060175481565b34801561090957600080fd5b506105e0601e5481565b34801561091f57600080fd5b5061052261092e366004613126565b60046020526000908152604090205460ff1681565b34801561094f57600080fd5b5061044e61095e366004613126565b61152d565b34801561096f57600080fd5b506106a073c0de1db35182980f61c85137167c439ded4c815c81565b34801561099757600080fd5b506109a061158b565b604080519283526020830191909152016104cd565b3480156109c157600080fd5b506105e06109d0366004613126565b6001600160a01b031660009081526001602052604090205490565b3480156109f757600080fd5b5061044e6115c8565b348015610a0c57600080fd5b506023546105229062010000900460ff1681565b348015610a2c57600080fd5b5061044e610a3b36600461336c565b61167b565b348015610a4c57600080fd5b506105e060155481565b348015610a6257600080fd5b5061044e6116b6565b348015610a7757600080fd5b5061044e611711565b348015610a8c57600080fd5b506023546105229060ff1681565b348015610aa657600080fd5b50610587604181565b348015610abb57600080fd5b506105e0610aca366004613126565b6117de565b348015610adb57600080fd5b5060215461052290610100900460ff1681565b348015610afa57600080fd5b506000546001600160a01b03166106a0565b348015610b1857600080fd5b506105e060205481565b348015610b2e57600080fd5b5061044e610b3d3660046132b0565b611818565b348015610b4e57600080fd5b50610b57611850565b6040516104cd919061343f565b348015610b7057600080fd5b506106a0610b7f3660046132ea565b6118b2565b348015610b9057600080fd5b506040805180820190915260058152644f53494e5560d81b60208201526104c0565b348015610bbe57600080fd5b5061044e610bcd366004613269565b6118dc565b348015610bde57600080fd5b50610522610bed366004613126565b6119a3565b348015610bfe57600080fd5b5061044e610c0d36600461331c565b6119b0565b348015610c1e57600080fd5b50610522610c2d366004613126565b60106020526000908152604090205460ff1681565b348015610c4e57600080fd5b50610522610c5d366004613208565b611a0f565b348015610c6e57600080fd5b5061044e610c7d3660046132b0565b611a8b565b348015610c8e57600080fd5b50610522610c9d366004613208565b611ac3565b348015610cae57600080fd5b5061044e610cbd366004613126565b611ad0565b348015610cce57600080fd5b5061044e611b00565b348015610ce357600080fd5b5061044e610cf23660046132ea565b611b7a565b348015610d0357600080fd5b50610522610d12366004613126565b611bf5565b348015610d2357600080fd5b5061044e610d32366004613234565b611c02565b348015610d4357600080fd5b506105e0610d52366004613160565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d8957600080fd5b5061044e610d98366004613126565b611c73565b348015610da957600080fd5b5061044e610db8366004613126565b611ca3565b348015610dc957600080fd5b5061044e610dd8366004613126565b611e1c565b348015610de957600080fd5b506104f0605f81565b348015610dfe57600080fd5b5061044e610e0d366004613126565b611e4c565b348015610e1e57600080fd5b506105e060225481565b348015610e3457600080fd5b5061044e610e43366004613126565b611f75565b610e5133611fb6565b610e765760405162461bcd60e51b8152600401610e6d906134a7565b60405180910390fd5b610e7f816119a3565b15610e8957600080fd5b610e94600e82611fa1565b5050565b610ea133611fb6565b610ebd5760405162461bcd60e51b8152600401610e6d906134a7565b6019805491151566010000000000000266ff00000000000019909216919091179055565b6000610eee33848461201b565b5060015b92915050565b610f0133611fb6565b610f1d5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c8261210e565b610f3133611fb6565b610f4d5760405162461bcd60e51b8152600401610e6d906134a7565b610f56816119a3565b610f5f57600080fd5b610e94600e8261210e565b610f7333611fb6565b610f8f5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1615610fa457600080fd5b6023805462ffff00191662010100179055565b610fc033611fb6565b610fdc5760405162461bcd60e51b8152600401610e6d906134a7565b6011805460ff1916911515919091179055565b610ff833611fb6565b6110145760405162461bcd60e51b8152600401610e6d906134a7565b602180549115156101000261ff0019909216919091179055565b61103733611fb6565b6110535760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b0382166000908152600460205260409020805460ff1916821515179055611082600883611fa1565b505050565b61109033611fb6565b6110ac5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6110e36009600a6135db565b6110f1906305f5e100613686565b81565b6000611101848484612123565b6001600160a01b03841660009081526002602090815260408083203384529091529020548281101561116c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e6d565b611180853361117b86856136a5565b61201b565b506001949350505050565b61119433611fb6565b6111b05760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610eee91859061117b908690613539565b61121133611fb6565b61122d5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b61125a33611fb6565b6112765760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061129957611299613703565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112d5816136bc565b915050611279565b6112e633611fb6565b6113025760405162461bcd60e51b8152600401610e6d906134a7565b61131861131382633b9aca00613686565b612490565b50565b6022546113289042613539565b33600090815260036020526040902055565b61134333611fb6565b61135f5760405162461bcd60e51b8152600401610e6d906134a7565b602380546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b61139433611fb6565b6113b05760405162461bcd60e51b8152600401610e6d906134a7565b60006113bc8587613551565b90508060ff1660641461141b5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610e6d565b605f60ff8516118015906114335750605f60ff841611155b80156114435750605f60ff831611155b61148f5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610e6d565b506019805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b0265ff000000000019998616640100000000029990991665ffff00000000199093169290921797909717959095169390911692909217929092179190911691909117905550565b61150633611fb6565b6115225760405162461bcd60e51b8152600401610e6d906134a7565b610e94600882611fa1565b61153633611fb6565b6115525760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152600560209081526040808320805460ff19908116909155600690925290912080549091166001179055565b60008061159a6009600a6135db565b6015546115a79190613576565b6115b36009600a6135db565b6016546115c09190613576565b915091509091565b336115db6000546001600160a01b031690565b6001600160a01b0316146116315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61168433611fb6565b6116a05760405162461bcd60e51b8152600401610e6d906134a7565b601d805460ff191660ff92909216919091179055565b6116bf33611fb6565b6116db5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1680156116fa575060235462010000900460ff165b61170357600080fd5b6023805462ff000019169055565b61171a33611fb6565b6117365760405162461bcd60e51b8152600401610e6d906134a7565b601e805460009182905560405190919073c0de1db35182980f61c85137167c439ded4c815c9083908381818185875af1925050503d8060008114611796576040519150601f19603f3d011682016040523d82523d6000602084013e61179b565b606091505b5050905080610e945760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e6d565b6001600160a01b0381166000908152600360205260408120544281116118075750600092915050565b61181142826136a5565b9392505050565b61182133611fb6565b61183d5760405162461bcd60e51b8152600401610e6d906134a7565b6023805460ff1916911515919091179055565b606060188054806020026020016040519081016040528092919081815260200182805480156118a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161188a575b5050505050905090565b601881815481106118c257600080fd5b6000918252602090912001546001600160a01b0316905081565b6118e533611fb6565b6119015760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061192457611924613703565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555061199083828151811061197857611978613703565b60200260200101516008611fa190919063ffffffff16565b508061199b816136bc565b915050611904565b6000610ef2600e836125e7565b6119b933611fb6565b6119d55760405162461bcd60e51b8152600401610e6d906134a7565b6119e16009600a6135db565b6119eb9083613686565b91506119f96009600a6135db565b611a039082613686565b60159290925550601655565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611a725760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e6d565b611a81338561117b86856136a5565b5060019392505050565b611a9433611fb6565b611ab05760405162461bcd60e51b8152600401610e6d906134a7565b6013805460ff1916911515919091179055565b6000610eee338484612123565b611ad933611fb6565b611af55760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a82611fa1565b611b0933611fb6565b611b255760405162461bcd60e51b8152600401610e6d906134a7565b604051600090339047908381818185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b505090508061131857600080fd5b611b8333611fb6565b611b9f5760405162461bcd60e51b8152600401610e6d906134a7565b6001811115611bf05760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610e6d565b602255565b6000610ef2600a836125e7565b611c0b33611fb6565b611c275760405162461bcd60e51b8152600401610e6d906134a7565b60005b8151811015610e9457611c60828281518110611c4857611c48613703565b6020026020010151600a611fa190919063ffffffff16565b5080611c6b816136bc565b915050611c2a565b611c7c33611fb6565b611c985760405162461bcd60e51b8152600401610e6d906134a7565b610e9460088261210e565b611cac33611fb6565b611cc85760405162461bcd60e51b8152600401610e6d906134a7565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015611d0c57600080fd5b505afa158015611d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d449190613303565b905060008111611d965760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e6d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906132cd565b50505050565b611e2533611fb6565b611e415760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a8261210e565b33611e5f6000546001600160a01b031690565b6001600160a01b031614611eb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b6001600160a01b038116611f1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e6d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611f7e33611fb6565b611f9a5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c825b6000611811836001600160a01b038416612609565b600080546001600160a01b0383811691161480611fef57506001600160a01b03821673c0de1db35182980f61c85137167c439ded4c815c145b80610ef257506001600160a01b03821673cbeb3c6aec7040e4949f22234573bd06b31de83b1492915050565b6001600160a01b0383166120655760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e6d565b6001600160a01b0382166120ad5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e6d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611811836001600160a01b038416612658565b6001600160a01b03831661216e5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e6d565b6001600160a01b0382166121b75760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e6d565b60006121c46008856125e7565b806121d557506121d56008846125e7565b905060006001600160a01b0385163014806121f857506001600160a01b03841630145b601a546019549192506001600160a01b0390811691600091888116600160381b9092041614801561223a5750816001600160a01b0316866001600160a01b0316145b8061227557506019546001600160a01b03878116600160381b909204161480156122755750816001600160a01b0316876001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122af5750826001600160a01b0316886001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122e95750836001600160a01b0316886001600160a01b0316145b905084806122f45750825b806122fc5750855b156123115761230c898989612745565b612485565b602354610100900460ff1661245a576000546001600160a01b038a811691161480159061234c57506000546001600160a01b03898116911614155b1561245a576001600160a01b03891660009081526004602052604090205460ff1615801561239357506001600160a01b03881660009081526004602052604090205460ff16155b1561245a576019546301000000900460ff161561240357876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516123f091815260200190565b60405180910390a3505050505050505050565b602354610100900460ff1661245a5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e6d565b60235462010000900460ff16156124785761230c8989898585612810565b6124858989898585612918565b505050505050505050565b6021805460ff1916600190811790915530600090815260209190915260408120546019549091906124d690600160281b810460ff90811691640100000000900416613551565b60ff16905060006012549050838111156124f85760135460ff16156124f85750825b80831080612508575061ffff8216155b15612515575050506125da565b60195460009061ffff84169061253690640100000000900460ff1684613686565b6125409190613576565b9050600061254e82846136a5565b9050600061255d600284613576565b9050600061256b82856136a5565b905060006125798483613539565b90504761258582612d4b565b600061259182476136a5565b90506000836125a08684613686565b6125aa9190613576565b90506125b68682612eb3565b60006125c284476136a5565b90506125cd81612f83565b5050505050505050505050505b506021805460ff19169055565b6001600160a01b03811660009081526001830160205260408120541515611811565b600081815260018301602052604081205461265057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ef2565b506000610ef2565b6000818152600183016020526040812054801561273b57600061267c6001836136a5565b8554909150600090612690906001906136a5565b905060008660000182815481106126a9576126a9613703565b90600052602060002001549050808760000184815481106126cc576126cc613703565b6000918252602080832090910192909255828152600189019091526040902084905586548790806126ff576126ff6136ed565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ef2565b6000915050610ef2565b6001600160a01b038316600090815260016020526040902054818110156127a95760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b6127b38483612fc0565b6127bd8383613005565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280291815260200190565b60405180910390a350505050565b8061290457612820600a856125e7565b61286c5760405162461bcd60e51b815260206004820152601a60248201527f726563697069656e74206e6f74206f6e2077686974656c6973740000000000006044820152606401610e6d565b604161287a6009600a6135db565b612888906305f5e100613686565b6128929190613576565b6001600160a01b0385166000908152600160205260409020546128b6908590613539565b11156129045760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e7420657863656564732077686974656c697374206d6178000000006044820152606401610e6d565b6129118585858585612918565b5050505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156129865760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b60026016546129959190613576565b60125560008315612b215760115460ff16156129d1576001600160a01b03881660009081526010602052604090205460ff16156129d157600080fd5b6129dc600c896125e7565b612a76576001600160a01b03881660009081526003602052604090205442101580612a0e5750602154610100900460ff165b612a4f5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610e6d565b602254612a5c9042613539565b6001600160a01b0389166000908152600360205260409020555b601654861115612acc57601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b038a161790555b601654861115612b105760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e6d565b50601954610100900460ff16612c33565b8415612b8057601554612b348785613539565b1115612b525760405162461bcd60e51b8152600401610e6d906134d3565b601754861115612b745760405162461bcd60e51b8152600401610e6d906134d3565b5060195460ff16612c33565b601554612b8d8785613539565b1115612bab5760405162461bcd60e51b8152600401610e6d906134d3565b612bb6600c896125e7565b612c25576001600160a01b03881660009081526003602052604090205442101580612be85750602154610100900460ff165b612c255760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e6d565b5060195462010000900460ff165b6019546001600160a01b03898116600160381b9092041614801590612c5b575060235460ff16155b8015612c6a575060215460ff16155b15612c7857612c7886612490565b601954600090612ca99088908490612ca49060ff6401000000008204811691600160281b900416613551565b613029565b90506000612cb782896136a5565b9050612cc38a89612fc0565b3060009081526001602052604081208054849290612ce2908490613539565b90915550612cf290508982613005565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d3791815260200190565b60405180910390a350505050505050505050565b601a54612d639030906001600160a01b03168361201b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d98613703565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dec57600080fd5b505afa158015612e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e249190613143565b81600181518110612e3757612e37613703565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790612e7d9085906000908690309042906004016134fd565b600060405180830381600087803b158015612e9757600080fd5b505af1158015612eab573d6000803e3d6000fd5b505050505050565b8060206000828254612ec59190613539565b9091555050601a54612ee29030906001600160a01b03168461201b565b601a5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612911919061333e565b601d54600090606490612f999060ff1684613686565b612fa39190613576565b905080601e6000828254612fb79190613539565b90915550505050565b6001600160a01b038216600090815260016020526040812054612fe49083906136a5565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612fe4908390613539565b60006127108260ff168460ff16866130419190613686565b61304b9190613686565b6130559190613576565b949350505050565b80356130688161372f565b919050565b600082601f83011261307e57600080fd5b8135602067ffffffffffffffff8083111561309b5761309b613719565b8260051b604051601f19603f830116810181811084821117156130c0576130c0613719565b604052848152838101925086840182880185018910156130df57600080fd5b600092505b85831015613109576130f58161305d565b8452928401926001929092019184016130e4565b50979650505050505050565b803560ff8116811461306857600080fd5b60006020828403121561313857600080fd5b81356118118161372f565b60006020828403121561315557600080fd5b81516118118161372f565b6000806040838503121561317357600080fd5b823561317e8161372f565b9150602083013561318e8161372f565b809150509250929050565b6000806000606084860312156131ae57600080fd5b83356131b98161372f565b925060208401356131c98161372f565b929592945050506040919091013590565b600080604083850312156131ed57600080fd5b82356131f88161372f565b9150602083013561318e81613744565b6000806040838503121561321b57600080fd5b82356132268161372f565b946020939093013593505050565b60006020828403121561324657600080fd5b813567ffffffffffffffff81111561325d57600080fd5b6130558482850161306d565b6000806040838503121561327c57600080fd5b823567ffffffffffffffff81111561329357600080fd5b61329f8582860161306d565b925050602083013561318e81613744565b6000602082840312156132c257600080fd5b813561181181613744565b6000602082840312156132df57600080fd5b815161181181613744565b6000602082840312156132fc57600080fd5b5035919050565b60006020828403121561331557600080fd5b5051919050565b6000806040838503121561332f57600080fd5b50508035926020909101359150565b60008060006060848603121561335357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561337e57600080fd5b61181182613115565b60008060008060008060c087890312156133a057600080fd5b6133a987613115565b95506133b760208801613115565b94506133c560408801613115565b93506133d360608801613115565b92506133e160808801613115565b91506133ef60a08801613115565b90509295509295509295565b600081518084526020808501945080840160005b838110156134345781516001600160a01b03168752958201959082019060010161340f565b509495945050505050565b60208152600061181160208301846133fb565b600060208083528351808285015260005b8181101561347f57858101830151858201604001528201613463565b81811115613491576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b85815284602082015260a06040820152600061351c60a08301866133fb565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561354c5761354c6136d7565b500190565b600060ff821660ff84168060ff0382111561356e5761356e6136d7565b019392505050565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156135d35781600019048211156135b9576135b96136d7565b808516156135c657918102915b93841c939080029061359d565b509250929050565b600061181160ff8416836000826135f457506001610ef2565b8161360157506000610ef2565b816001811461361757600281146136215761363d565b6001915050610ef2565b60ff841115613632576136326136d7565b50506001821b610ef2565b5060208310610133831016604e8410600b8410161715613660575081810a610ef2565b61366a8383613598565b806000190482111561367e5761367e6136d7565b029392505050565b60008160001904831182151516156136a0576136a06136d7565b500290565b6000828210156136b7576136b76136d7565b500390565b60006000198214156136d0576136d06136d7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461131857600080fd5b801515811461131857600080fdfea2646970667358221220c2d054da6d66500f10455105d437f05cf440994d0ce79f0836673836ad80a42664736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000063000000000000000000000000188b591b2fe704cb9e737b82b909b1cacc534562000000000000000000000000f7df3acad1157cc0dd501263c553c4d80dedc989000000000000000000000000dc5f24b36a31d9a84837c7329a82eb0078953d1600000000000000000000000003d602813549935e80c27b084ac14c702a496fb70000000000000000000000000f30a0710fc4f881e7f0d8cabc39ac879f7e7e020000000000000000000000001d9260a73eff66d82adb4e9cf377990b6450b7cc000000000000000000000000d61927df96283aec3f9e56480a4108710d17dba7000000000000000000000000c3b6005364dfd8a540cb9e37ebbbbaf951b581ef0000000000000000000000009ce0603fa2f48dbba1f4176a0f591ea63f02e3c8000000000000000000000000f2d2c0f3492bbde32612e29315d555e692f9540f000000000000000000000000d8c536f1c1b80eb51917d2921ae67aac95b2f4310000000000000000000000005ee42438d0d8fc399c94ef3543665e993e847b490000000000000000000000009f885471f298798485ccd9083164e6d4ee791e20000000000000000000000000e97b3791a03706c58f5c6bc3554213c3e6eb8550000000000000000000000000e2f5aa3a495c8f5526595b1b8d7b01cb3beefadc00000000000000000000000072024c2a5d597f007c7bc713619ca8270296b866000000000000000000000000a4f4eec3428d6b6e4018ffc5a30b95ef374186a30000000000000000000000005ce70e68d01d601b4e3e8cc7a2ef7cf65c7870c50000000000000000000000002386ce99cedc8356e7328709cf3760e069dd5316000000000000000000000000f1c421901ebeca6d1d67ae41345ba295bda0a1f50000000000000000000000003c4ab1c5a5c46b8f11af1903ad8ddafd8c99992a000000000000000000000000717f042b2b47a4322a288fbc48e55e41b36794b0000000000000000000000000d3f5e357b72209221b40042927802cf6735b8f29000000000000000000000000695f3c781229c1531be7eb600e2a074c2e7514ca0000000000000000000000001bcd63e7aabf27d628e3eb51ebcfc1f174b05a8600000000000000000000000039e34417811c3965636729659fdc7420f51b2e4f0000000000000000000000008a0754042add7b9d11c16705036ffa37eb80df16000000000000000000000000bebb4d1267f85d20020f9a8559081ecb54b885ca000000000000000000000000d4bc87902d570335a2765b9c76ac4b4f67db35fa000000000000000000000000b5e77a37585f64671c7defdf3fe3997b6184e420000000000000000000000000c404d1fe813dfc7206519844f47cfcf72b80f8860000000000000000000000000f8f8e77a24447185c546b68fc328808ab1505070000000000000000000000006d838b149663bf5b3d7c8956b3575fb3c7e0d4d6000000000000000000000000c92c5ec5bd10bd23d78e343d48200eb3862ed6d20000000000000000000000005acc7f6f6694f2797be4e88fd8168524d83699b30000000000000000000000007dc21cd61aa8202be9ac60753f9fcdb89a4cfb310000000000000000000000002e9cad50082be2a6975e4cf035fe4d9acf18902100000000000000000000000088e4f6bca584770c525bffcc4119841592b32ab10000000000000000000000009cbad7b2ac1a5de276f9dd41fd854e697e699fad000000000000000000000000d4a5dcfc9bc0cc30acde313cea8aac84da54f920000000000000000000000000e39784fcc980bcc02e5adfdde5514bd78fd6c3db0000000000000000000000005109a455f4db64b3981e9d1d6070089c49b4b3c70000000000000000000000000f5e1070ff5df66791e07dca371c035cb089e9b6000000000000000000000000c556aa79252afb2acb6701b7fb9bccf82777ae66000000000000000000000000e3f44e929e9d5904f0adc3b2f1f238989745bf8b0000000000000000000000009f914db0e5dbaa4cf097e0664932233c5cbe49730000000000000000000000002314ef4813836a1e572884e39cbb498317fe416a000000000000000000000000fb6ad3e405be1bb11b0ab7d718ed1ae6cf0beb84000000000000000000000000450d300203a3c6a231b934482073f0b1a764ed2f000000000000000000000000e400fc877a1506d8e91710e4604530557a61488e000000000000000000000000db80d0d07286169e7241831ae0a4d902924aabe70000000000000000000000000dc7c792651df635a81811f3df2dc7cbf6cc2a0e0000000000000000000000004b349b346030a7a4009cbe869d5aeffe0ecf3360000000000000000000000000382278e9b6a467f3260e2444b1d788152e2ca12e0000000000000000000000008fde6479e0168f3bb9b25db51bf0b2deb1f47046000000000000000000000000b1057b9c50ec3274c5850fc1499853ebf3b5d1bb0000000000000000000000003cc0fdaf9686dbefe1915910174747e8827c0b440000000000000000000000002834697f136610d14314a23e2dd31f6af7bcea4e000000000000000000000000b2d0ff0824fcb1952618d20f59f34ba45bb8fb3400000000000000000000000045f544ceaeb556fb86575b2e74c2e2789a9a32f0000000000000000000000000383aa39c09d2f0ad4d2f2762b585a1ce5ee9e120000000000000000000000000acaa43fcb35051bf70022ccb050541242b9f2212000000000000000000000000a4d0eb10b8e4423a075299e8da3d98ffdbd0483700000000000000000000000023275dec317423b5d3ae3056f334427c2ae7e637000000000000000000000000c4b5679ca3289d62827cdccf970a00bb844481600000000000000000000000009ec443315f4ab92fc89464ed23ff11d20dc6f1cb000000000000000000000000109f56969db5ca4b5c06bffa72b4498c400b6d3f000000000000000000000000b2b8fbf298864095b0fb8799dc451c924b9ec9a7000000000000000000000000697603e52acbf88abae7c5b25b7de916876d3b15000000000000000000000000f83bcebc79f2f388ae790efc06f3f2a3370c934e0000000000000000000000000897bfa5e0ae4b46fa06c709d0c9828ce72edb79000000000000000000000000fd74b8ae93f966693c020e8c2534e485acfe4ef0000000000000000000000000150bc54a89838e3f5c267c89fa5c024cbe2b77390000000000000000000000001e3d169be47dfad78ef20375d88182ad2bc3ceab000000000000000000000000e29c0663017868294e9da0fca97530593a6dc2b6000000000000000000000000fc6e67841f3b16dd6392a559191ada079bbefca60000000000000000000000003facac712880e33fa1c941d6ce26f53b5c402aff000000000000000000000000369256e09f13b6a24b22f2d47c9119cee057342a000000000000000000000000bc005b44a67854766a75276625abff5dcfe32f19000000000000000000000000ba029072033c32560873aa5c922f64c1e3daf876000000000000000000000000036eb80cc26b9796a1675006a4721ce80c9678030000000000000000000000005579e6872a364f343967ac147abc9d1a335812dd000000000000000000000000cad625ba2ac33d9fb4040f57f9d45743cab43a270000000000000000000000003c3e7ba529201972a4a0d1011e0c36b5c0041935000000000000000000000000761db0dc8018a47f48ae36a3b8247fb6f7e90053000000000000000000000000b88a66748152b5ffa55073a49d17f92d9a678b5900000000000000000000000018305dad931b8d04a6edf7ebcd1e9f8e14e6c724000000000000000000000000934f3c63ece710ba703dee9fd3d69a3345aac3c80000000000000000000000001319e8054a26b9477356d594ac3bc123a31128b6000000000000000000000000be6e9af68bd8e56e92c65f13514a6960c3c29a030000000000000000000000006ef0f3fd8514c56b25d4bb4a99b2b667d64690700000000000000000000000005ee3a8ffd016b9e3453082461fd26e0f2619f683000000000000000000000000f6a6600676e86cb0e9bb03db53421f3447bf95210000000000000000000000008760860be96358409d42cf0a0aab6c598ef78688000000000000000000000000282c69562ee01583bb527e4033adff87e934ce710000000000000000000000001f644ecfd214afbf2e4900a305825d7272ec6629000000000000000000000000c8d50dcb1d18ecc35095af9d0b8f05a7d0fe4518000000000000000000000000cbeb3c6aec7040e4949f22234573bd06b31de83b000000000000000000000000507c912f227026b38a27fa3d368a42fe83553a6f

Deployed Bytecode

0x6080604052600436106104475760003560e01c8063677a8870116102325780639728c0191161012d578063d8e8de34116100b0578063e77bf5f811610077578063e77bf5f814610dbd578063eb8e886314610ddd578063f2fde38b14610df2578063f88b0e4614610e12578063f9963ca114610e2857005b8063d8e8de3414610cf7578063da1144d614610d17578063dd62ed3e14610d37578063dff6bcbf14610d7d578063e3aa94b014610d9d57005b8063a6fc178a116100f4578063a6fc178a14610c62578063a9059cbb14610c82578063b76289b814610ca2578063b85111db14610cc2578063d51f383b14610cd757005b80639728c01914610bb2578063988c5ec914610bd25780639fa62d5f14610bf2578063a20623ce14610c12578063a457c2d714610c4257005b80638724cc72116101b55780638d2c50391161017c5780638d2c503914610b225780638da5cb5b14610aee578063914e208a14610b4257806393ab98f214610b6457806395d89b4114610b8457005b80638724cc7214610a9a5780638728ecd114610aaf578063887c60fb14610acf578063893d20e814610aee5780638d060d7714610b0c57005b806373ddf08e116101f957806373ddf08e14610a20578063762bb28214610a405780637b9e987a14610a565780637f91937314610a6b57806386d0ada814610a8057005b8063677a8870146109635780636f89e4091461098b57806370a08231146109b5578063715018a6146109eb57806371ab1f0914610a0057005b8063311a86971161034257806348e907b7116102c5578063588aeaf21161028c578063588aeaf2146108c7578063589210d9146108e757806358e55365146108fd57806363b263b31461091357806364365f131461094357005b806348e907b71461083c5780634ada218b146108525780634cdaf0ae146108715780634f91e48c1461089157806357ad67d1146108a757005b80633d8dbf5d116103095780633d8dbf5d146107b15780633e9be909146107d15780634089b170146107f15780634607e6921461080757806348e531641461082757005b8063311a869714610733578063313ce567146107485780633328b7211461075c5780633478154b1461077c578063395093511461079157005b80631285073c116103ca5780631eb25d13116103915780631eb25d13146106635780631f8b845e14610572578063230ffc421461067857806323b872dd146106b85780632973ef2d146106d857005b80631285073c146105cf57806314e91377146105ee5780631732ed7c1461060e57806318160ddd1461062e57806319e880841461064357005b80630b1daa3e1161040e5780630b1daa3e146105325780630fa6c5ff146105525780630fd99e16146105725780631193c6911461059a5780631201cbd0146105af57005b8063029a1ecd1461045057806302a89e021461047057806306fdde031461049057806309218ee7146104d6578063095ea7b31461050257005b3661044e57005b005b34801561045c57600080fd5b5061044e61046b366004613126565b610e48565b34801561047c57600080fd5b5061044e61048b3660046132b0565b610e98565b34801561049c57600080fd5b5060408051808201909152600b81526a27a9a4a72a902a37b5b2b760a91b60208201525b6040516104cd9190613452565b60405180910390f35b3480156104e257600080fd5b50601d546104f09060ff1681565b60405160ff90911681526020016104cd565b34801561050e57600080fd5b5061052261051d366004613208565b610ee1565b60405190151581526020016104cd565b34801561053e57600080fd5b5061044e61054d366004613126565b610ef8565b34801561055e57600080fd5b5061044e61056d366004613126565b610f28565b34801561057e57600080fd5b50610587606481565b60405161ffff90911681526020016104cd565b3480156105a657600080fd5b5061044e610f6a565b3480156105bb57600080fd5b5061044e6105ca3660046132b0565b610fb7565b3480156105db57600080fd5b506022545b6040519081526020016104cd565b3480156105fa57600080fd5b5061044e6106093660046132b0565b610fef565b34801561061a57600080fd5b5061044e6106293660046131da565b61102e565b34801561063a57600080fd5b506014546105e0565b34801561064f57600080fd5b5061044e61065e3660046131da565b611087565b34801561066f57600080fd5b506105e06110d7565b34801561068457600080fd5b506106a073cbeb3c6aec7040e4949f22234573bd06b31de83b81565b6040516001600160a01b0390911681526020016104cd565b3480156106c457600080fd5b506105226106d3366004613199565b6110f4565b3480156106e457600080fd5b506019546040805160ff640100000000840481168252600160281b840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a0016104cd565b34801561073f57600080fd5b506104f0604181565b34801561075457600080fd5b5060096104f0565b34801561076857600080fd5b5061044e610777366004613126565b61118b565b34801561078857600080fd5b50610587600181565b34801561079d57600080fd5b506105226107ac366004613208565b6111d1565b3480156107bd57600080fd5b5061044e6107cc366004613126565b611208565b3480156107dd57600080fd5b5061044e6107ec366004613269565b611251565b3480156107fd57600080fd5b506105e0601c5481565b34801561081357600080fd5b5061044e6108223660046132ea565b6112dd565b34801561083357600080fd5b5061044e61131b565b34801561084857600080fd5b506105e0601b5481565b34801561085e57600080fd5b5060235461052290610100900460ff1681565b34801561087d57600080fd5b5061044e61088c366004613126565b61133a565b34801561089d57600080fd5b506105e060165481565b3480156108b357600080fd5b5061044e6108c2366004613387565b61138b565b3480156108d357600080fd5b5061044e6108e2366004613126565b6114fd565b3480156108f357600080fd5b506105e060175481565b34801561090957600080fd5b506105e0601e5481565b34801561091f57600080fd5b5061052261092e366004613126565b60046020526000908152604090205460ff1681565b34801561094f57600080fd5b5061044e61095e366004613126565b61152d565b34801561096f57600080fd5b506106a073c0de1db35182980f61c85137167c439ded4c815c81565b34801561099757600080fd5b506109a061158b565b604080519283526020830191909152016104cd565b3480156109c157600080fd5b506105e06109d0366004613126565b6001600160a01b031660009081526001602052604090205490565b3480156109f757600080fd5b5061044e6115c8565b348015610a0c57600080fd5b506023546105229062010000900460ff1681565b348015610a2c57600080fd5b5061044e610a3b36600461336c565b61167b565b348015610a4c57600080fd5b506105e060155481565b348015610a6257600080fd5b5061044e6116b6565b348015610a7757600080fd5b5061044e611711565b348015610a8c57600080fd5b506023546105229060ff1681565b348015610aa657600080fd5b50610587604181565b348015610abb57600080fd5b506105e0610aca366004613126565b6117de565b348015610adb57600080fd5b5060215461052290610100900460ff1681565b348015610afa57600080fd5b506000546001600160a01b03166106a0565b348015610b1857600080fd5b506105e060205481565b348015610b2e57600080fd5b5061044e610b3d3660046132b0565b611818565b348015610b4e57600080fd5b50610b57611850565b6040516104cd919061343f565b348015610b7057600080fd5b506106a0610b7f3660046132ea565b6118b2565b348015610b9057600080fd5b506040805180820190915260058152644f53494e5560d81b60208201526104c0565b348015610bbe57600080fd5b5061044e610bcd366004613269565b6118dc565b348015610bde57600080fd5b50610522610bed366004613126565b6119a3565b348015610bfe57600080fd5b5061044e610c0d36600461331c565b6119b0565b348015610c1e57600080fd5b50610522610c2d366004613126565b60106020526000908152604090205460ff1681565b348015610c4e57600080fd5b50610522610c5d366004613208565b611a0f565b348015610c6e57600080fd5b5061044e610c7d3660046132b0565b611a8b565b348015610c8e57600080fd5b50610522610c9d366004613208565b611ac3565b348015610cae57600080fd5b5061044e610cbd366004613126565b611ad0565b348015610cce57600080fd5b5061044e611b00565b348015610ce357600080fd5b5061044e610cf23660046132ea565b611b7a565b348015610d0357600080fd5b50610522610d12366004613126565b611bf5565b348015610d2357600080fd5b5061044e610d32366004613234565b611c02565b348015610d4357600080fd5b506105e0610d52366004613160565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d8957600080fd5b5061044e610d98366004613126565b611c73565b348015610da957600080fd5b5061044e610db8366004613126565b611ca3565b348015610dc957600080fd5b5061044e610dd8366004613126565b611e1c565b348015610de957600080fd5b506104f0605f81565b348015610dfe57600080fd5b5061044e610e0d366004613126565b611e4c565b348015610e1e57600080fd5b506105e060225481565b348015610e3457600080fd5b5061044e610e43366004613126565b611f75565b610e5133611fb6565b610e765760405162461bcd60e51b8152600401610e6d906134a7565b60405180910390fd5b610e7f816119a3565b15610e8957600080fd5b610e94600e82611fa1565b5050565b610ea133611fb6565b610ebd5760405162461bcd60e51b8152600401610e6d906134a7565b6019805491151566010000000000000266ff00000000000019909216919091179055565b6000610eee33848461201b565b5060015b92915050565b610f0133611fb6565b610f1d5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c8261210e565b610f3133611fb6565b610f4d5760405162461bcd60e51b8152600401610e6d906134a7565b610f56816119a3565b610f5f57600080fd5b610e94600e8261210e565b610f7333611fb6565b610f8f5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1615610fa457600080fd5b6023805462ffff00191662010100179055565b610fc033611fb6565b610fdc5760405162461bcd60e51b8152600401610e6d906134a7565b6011805460ff1916911515919091179055565b610ff833611fb6565b6110145760405162461bcd60e51b8152600401610e6d906134a7565b602180549115156101000261ff0019909216919091179055565b61103733611fb6565b6110535760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b0382166000908152600460205260409020805460ff1916821515179055611082600883611fa1565b505050565b61109033611fb6565b6110ac5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6110e36009600a6135db565b6110f1906305f5e100613686565b81565b6000611101848484612123565b6001600160a01b03841660009081526002602090815260408083203384529091529020548281101561116c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e6d565b611180853361117b86856136a5565b61201b565b506001949350505050565b61119433611fb6565b6111b05760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610eee91859061117b908690613539565b61121133611fb6565b61122d5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b61125a33611fb6565b6112765760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061129957611299613703565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112d5816136bc565b915050611279565b6112e633611fb6565b6113025760405162461bcd60e51b8152600401610e6d906134a7565b61131861131382633b9aca00613686565b612490565b50565b6022546113289042613539565b33600090815260036020526040902055565b61134333611fb6565b61135f5760405162461bcd60e51b8152600401610e6d906134a7565b602380546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b61139433611fb6565b6113b05760405162461bcd60e51b8152600401610e6d906134a7565b60006113bc8587613551565b90508060ff1660641461141b5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610e6d565b605f60ff8516118015906114335750605f60ff841611155b80156114435750605f60ff831611155b61148f5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610e6d565b506019805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b0265ff000000000019998616640100000000029990991665ffff00000000199093169290921797909717959095169390911692909217929092179190911691909117905550565b61150633611fb6565b6115225760405162461bcd60e51b8152600401610e6d906134a7565b610e94600882611fa1565b61153633611fb6565b6115525760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152600560209081526040808320805460ff19908116909155600690925290912080549091166001179055565b60008061159a6009600a6135db565b6015546115a79190613576565b6115b36009600a6135db565b6016546115c09190613576565b915091509091565b336115db6000546001600160a01b031690565b6001600160a01b0316146116315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61168433611fb6565b6116a05760405162461bcd60e51b8152600401610e6d906134a7565b601d805460ff191660ff92909216919091179055565b6116bf33611fb6565b6116db5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1680156116fa575060235462010000900460ff165b61170357600080fd5b6023805462ff000019169055565b61171a33611fb6565b6117365760405162461bcd60e51b8152600401610e6d906134a7565b601e805460009182905560405190919073c0de1db35182980f61c85137167c439ded4c815c9083908381818185875af1925050503d8060008114611796576040519150601f19603f3d011682016040523d82523d6000602084013e61179b565b606091505b5050905080610e945760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e6d565b6001600160a01b0381166000908152600360205260408120544281116118075750600092915050565b61181142826136a5565b9392505050565b61182133611fb6565b61183d5760405162461bcd60e51b8152600401610e6d906134a7565b6023805460ff1916911515919091179055565b606060188054806020026020016040519081016040528092919081815260200182805480156118a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161188a575b5050505050905090565b601881815481106118c257600080fd5b6000918252602090912001546001600160a01b0316905081565b6118e533611fb6565b6119015760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061192457611924613703565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555061199083828151811061197857611978613703565b60200260200101516008611fa190919063ffffffff16565b508061199b816136bc565b915050611904565b6000610ef2600e836125e7565b6119b933611fb6565b6119d55760405162461bcd60e51b8152600401610e6d906134a7565b6119e16009600a6135db565b6119eb9083613686565b91506119f96009600a6135db565b611a039082613686565b60159290925550601655565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611a725760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e6d565b611a81338561117b86856136a5565b5060019392505050565b611a9433611fb6565b611ab05760405162461bcd60e51b8152600401610e6d906134a7565b6013805460ff1916911515919091179055565b6000610eee338484612123565b611ad933611fb6565b611af55760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a82611fa1565b611b0933611fb6565b611b255760405162461bcd60e51b8152600401610e6d906134a7565b604051600090339047908381818185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b505090508061131857600080fd5b611b8333611fb6565b611b9f5760405162461bcd60e51b8152600401610e6d906134a7565b6001811115611bf05760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610e6d565b602255565b6000610ef2600a836125e7565b611c0b33611fb6565b611c275760405162461bcd60e51b8152600401610e6d906134a7565b60005b8151811015610e9457611c60828281518110611c4857611c48613703565b6020026020010151600a611fa190919063ffffffff16565b5080611c6b816136bc565b915050611c2a565b611c7c33611fb6565b611c985760405162461bcd60e51b8152600401610e6d906134a7565b610e9460088261210e565b611cac33611fb6565b611cc85760405162461bcd60e51b8152600401610e6d906134a7565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015611d0c57600080fd5b505afa158015611d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d449190613303565b905060008111611d965760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e6d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906132cd565b50505050565b611e2533611fb6565b611e415760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a8261210e565b33611e5f6000546001600160a01b031690565b6001600160a01b031614611eb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b6001600160a01b038116611f1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e6d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611f7e33611fb6565b611f9a5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c825b6000611811836001600160a01b038416612609565b600080546001600160a01b0383811691161480611fef57506001600160a01b03821673c0de1db35182980f61c85137167c439ded4c815c145b80610ef257506001600160a01b03821673cbeb3c6aec7040e4949f22234573bd06b31de83b1492915050565b6001600160a01b0383166120655760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e6d565b6001600160a01b0382166120ad5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e6d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611811836001600160a01b038416612658565b6001600160a01b03831661216e5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e6d565b6001600160a01b0382166121b75760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e6d565b60006121c46008856125e7565b806121d557506121d56008846125e7565b905060006001600160a01b0385163014806121f857506001600160a01b03841630145b601a546019549192506001600160a01b0390811691600091888116600160381b9092041614801561223a5750816001600160a01b0316866001600160a01b0316145b8061227557506019546001600160a01b03878116600160381b909204161480156122755750816001600160a01b0316876001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122af5750826001600160a01b0316886001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122e95750836001600160a01b0316886001600160a01b0316145b905084806122f45750825b806122fc5750855b156123115761230c898989612745565b612485565b602354610100900460ff1661245a576000546001600160a01b038a811691161480159061234c57506000546001600160a01b03898116911614155b1561245a576001600160a01b03891660009081526004602052604090205460ff1615801561239357506001600160a01b03881660009081526004602052604090205460ff16155b1561245a576019546301000000900460ff161561240357876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516123f091815260200190565b60405180910390a3505050505050505050565b602354610100900460ff1661245a5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e6d565b60235462010000900460ff16156124785761230c8989898585612810565b6124858989898585612918565b505050505050505050565b6021805460ff1916600190811790915530600090815260209190915260408120546019549091906124d690600160281b810460ff90811691640100000000900416613551565b60ff16905060006012549050838111156124f85760135460ff16156124f85750825b80831080612508575061ffff8216155b15612515575050506125da565b60195460009061ffff84169061253690640100000000900460ff1684613686565b6125409190613576565b9050600061254e82846136a5565b9050600061255d600284613576565b9050600061256b82856136a5565b905060006125798483613539565b90504761258582612d4b565b600061259182476136a5565b90506000836125a08684613686565b6125aa9190613576565b90506125b68682612eb3565b60006125c284476136a5565b90506125cd81612f83565b5050505050505050505050505b506021805460ff19169055565b6001600160a01b03811660009081526001830160205260408120541515611811565b600081815260018301602052604081205461265057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ef2565b506000610ef2565b6000818152600183016020526040812054801561273b57600061267c6001836136a5565b8554909150600090612690906001906136a5565b905060008660000182815481106126a9576126a9613703565b90600052602060002001549050808760000184815481106126cc576126cc613703565b6000918252602080832090910192909255828152600189019091526040902084905586548790806126ff576126ff6136ed565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ef2565b6000915050610ef2565b6001600160a01b038316600090815260016020526040902054818110156127a95760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b6127b38483612fc0565b6127bd8383613005565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280291815260200190565b60405180910390a350505050565b8061290457612820600a856125e7565b61286c5760405162461bcd60e51b815260206004820152601a60248201527f726563697069656e74206e6f74206f6e2077686974656c6973740000000000006044820152606401610e6d565b604161287a6009600a6135db565b612888906305f5e100613686565b6128929190613576565b6001600160a01b0385166000908152600160205260409020546128b6908590613539565b11156129045760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e7420657863656564732077686974656c697374206d6178000000006044820152606401610e6d565b6129118585858585612918565b5050505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156129865760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b60026016546129959190613576565b60125560008315612b215760115460ff16156129d1576001600160a01b03881660009081526010602052604090205460ff16156129d157600080fd5b6129dc600c896125e7565b612a76576001600160a01b03881660009081526003602052604090205442101580612a0e5750602154610100900460ff165b612a4f5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610e6d565b602254612a5c9042613539565b6001600160a01b0389166000908152600360205260409020555b601654861115612acc57601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b038a161790555b601654861115612b105760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e6d565b50601954610100900460ff16612c33565b8415612b8057601554612b348785613539565b1115612b525760405162461bcd60e51b8152600401610e6d906134d3565b601754861115612b745760405162461bcd60e51b8152600401610e6d906134d3565b5060195460ff16612c33565b601554612b8d8785613539565b1115612bab5760405162461bcd60e51b8152600401610e6d906134d3565b612bb6600c896125e7565b612c25576001600160a01b03881660009081526003602052604090205442101580612be85750602154610100900460ff165b612c255760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e6d565b5060195462010000900460ff165b6019546001600160a01b03898116600160381b9092041614801590612c5b575060235460ff16155b8015612c6a575060215460ff16155b15612c7857612c7886612490565b601954600090612ca99088908490612ca49060ff6401000000008204811691600160281b900416613551565b613029565b90506000612cb782896136a5565b9050612cc38a89612fc0565b3060009081526001602052604081208054849290612ce2908490613539565b90915550612cf290508982613005565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d3791815260200190565b60405180910390a350505050505050505050565b601a54612d639030906001600160a01b03168361201b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d98613703565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dec57600080fd5b505afa158015612e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e249190613143565b81600181518110612e3757612e37613703565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790612e7d9085906000908690309042906004016134fd565b600060405180830381600087803b158015612e9757600080fd5b505af1158015612eab573d6000803e3d6000fd5b505050505050565b8060206000828254612ec59190613539565b9091555050601a54612ee29030906001600160a01b03168461201b565b601a5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612911919061333e565b601d54600090606490612f999060ff1684613686565b612fa39190613576565b905080601e6000828254612fb79190613539565b90915550505050565b6001600160a01b038216600090815260016020526040812054612fe49083906136a5565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612fe4908390613539565b60006127108260ff168460ff16866130419190613686565b61304b9190613686565b6130559190613576565b949350505050565b80356130688161372f565b919050565b600082601f83011261307e57600080fd5b8135602067ffffffffffffffff8083111561309b5761309b613719565b8260051b604051601f19603f830116810181811084821117156130c0576130c0613719565b604052848152838101925086840182880185018910156130df57600080fd5b600092505b85831015613109576130f58161305d565b8452928401926001929092019184016130e4565b50979650505050505050565b803560ff8116811461306857600080fd5b60006020828403121561313857600080fd5b81356118118161372f565b60006020828403121561315557600080fd5b81516118118161372f565b6000806040838503121561317357600080fd5b823561317e8161372f565b9150602083013561318e8161372f565b809150509250929050565b6000806000606084860312156131ae57600080fd5b83356131b98161372f565b925060208401356131c98161372f565b929592945050506040919091013590565b600080604083850312156131ed57600080fd5b82356131f88161372f565b9150602083013561318e81613744565b6000806040838503121561321b57600080fd5b82356132268161372f565b946020939093013593505050565b60006020828403121561324657600080fd5b813567ffffffffffffffff81111561325d57600080fd5b6130558482850161306d565b6000806040838503121561327c57600080fd5b823567ffffffffffffffff81111561329357600080fd5b61329f8582860161306d565b925050602083013561318e81613744565b6000602082840312156132c257600080fd5b813561181181613744565b6000602082840312156132df57600080fd5b815161181181613744565b6000602082840312156132fc57600080fd5b5035919050565b60006020828403121561331557600080fd5b5051919050565b6000806040838503121561332f57600080fd5b50508035926020909101359150565b60008060006060848603121561335357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561337e57600080fd5b61181182613115565b60008060008060008060c087890312156133a057600080fd5b6133a987613115565b95506133b760208801613115565b94506133c560408801613115565b93506133d360608801613115565b92506133e160808801613115565b91506133ef60a08801613115565b90509295509295509295565b600081518084526020808501945080840160005b838110156134345781516001600160a01b03168752958201959082019060010161340f565b509495945050505050565b60208152600061181160208301846133fb565b600060208083528351808285015260005b8181101561347f57858101830151858201604001528201613463565b81811115613491576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b85815284602082015260a06040820152600061351c60a08301866133fb565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561354c5761354c6136d7565b500190565b600060ff821660ff84168060ff0382111561356e5761356e6136d7565b019392505050565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156135d35781600019048211156135b9576135b96136d7565b808516156135c657918102915b93841c939080029061359d565b509250929050565b600061181160ff8416836000826135f457506001610ef2565b8161360157506000610ef2565b816001811461361757600281146136215761363d565b6001915050610ef2565b60ff841115613632576136326136d7565b50506001821b610ef2565b5060208310610133831016604e8410600b8410161715613660575081810a610ef2565b61366a8383613598565b806000190482111561367e5761367e6136d7565b029392505050565b60008160001904831182151516156136a0576136a06136d7565b500290565b6000828210156136b7576136b76136d7565b500390565b60006000198214156136d0576136d06136d7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461131857600080fd5b801515811461131857600080fdfea2646970667358221220c2d054da6d66500f10455105d437f05cf440994d0ce79f0836673836ad80a42664736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000063000000000000000000000000188b591b2fe704cb9e737b82b909b1cacc534562000000000000000000000000f7df3acad1157cc0dd501263c553c4d80dedc989000000000000000000000000dc5f24b36a31d9a84837c7329a82eb0078953d1600000000000000000000000003d602813549935e80c27b084ac14c702a496fb70000000000000000000000000f30a0710fc4f881e7f0d8cabc39ac879f7e7e020000000000000000000000001d9260a73eff66d82adb4e9cf377990b6450b7cc000000000000000000000000d61927df96283aec3f9e56480a4108710d17dba7000000000000000000000000c3b6005364dfd8a540cb9e37ebbbbaf951b581ef0000000000000000000000009ce0603fa2f48dbba1f4176a0f591ea63f02e3c8000000000000000000000000f2d2c0f3492bbde32612e29315d555e692f9540f000000000000000000000000d8c536f1c1b80eb51917d2921ae67aac95b2f4310000000000000000000000005ee42438d0d8fc399c94ef3543665e993e847b490000000000000000000000009f885471f298798485ccd9083164e6d4ee791e20000000000000000000000000e97b3791a03706c58f5c6bc3554213c3e6eb8550000000000000000000000000e2f5aa3a495c8f5526595b1b8d7b01cb3beefadc00000000000000000000000072024c2a5d597f007c7bc713619ca8270296b866000000000000000000000000a4f4eec3428d6b6e4018ffc5a30b95ef374186a30000000000000000000000005ce70e68d01d601b4e3e8cc7a2ef7cf65c7870c50000000000000000000000002386ce99cedc8356e7328709cf3760e069dd5316000000000000000000000000f1c421901ebeca6d1d67ae41345ba295bda0a1f50000000000000000000000003c4ab1c5a5c46b8f11af1903ad8ddafd8c99992a000000000000000000000000717f042b2b47a4322a288fbc48e55e41b36794b0000000000000000000000000d3f5e357b72209221b40042927802cf6735b8f29000000000000000000000000695f3c781229c1531be7eb600e2a074c2e7514ca0000000000000000000000001bcd63e7aabf27d628e3eb51ebcfc1f174b05a8600000000000000000000000039e34417811c3965636729659fdc7420f51b2e4f0000000000000000000000008a0754042add7b9d11c16705036ffa37eb80df16000000000000000000000000bebb4d1267f85d20020f9a8559081ecb54b885ca000000000000000000000000d4bc87902d570335a2765b9c76ac4b4f67db35fa000000000000000000000000b5e77a37585f64671c7defdf3fe3997b6184e420000000000000000000000000c404d1fe813dfc7206519844f47cfcf72b80f8860000000000000000000000000f8f8e77a24447185c546b68fc328808ab1505070000000000000000000000006d838b149663bf5b3d7c8956b3575fb3c7e0d4d6000000000000000000000000c92c5ec5bd10bd23d78e343d48200eb3862ed6d20000000000000000000000005acc7f6f6694f2797be4e88fd8168524d83699b30000000000000000000000007dc21cd61aa8202be9ac60753f9fcdb89a4cfb310000000000000000000000002e9cad50082be2a6975e4cf035fe4d9acf18902100000000000000000000000088e4f6bca584770c525bffcc4119841592b32ab10000000000000000000000009cbad7b2ac1a5de276f9dd41fd854e697e699fad000000000000000000000000d4a5dcfc9bc0cc30acde313cea8aac84da54f920000000000000000000000000e39784fcc980bcc02e5adfdde5514bd78fd6c3db0000000000000000000000005109a455f4db64b3981e9d1d6070089c49b4b3c70000000000000000000000000f5e1070ff5df66791e07dca371c035cb089e9b6000000000000000000000000c556aa79252afb2acb6701b7fb9bccf82777ae66000000000000000000000000e3f44e929e9d5904f0adc3b2f1f238989745bf8b0000000000000000000000009f914db0e5dbaa4cf097e0664932233c5cbe49730000000000000000000000002314ef4813836a1e572884e39cbb498317fe416a000000000000000000000000fb6ad3e405be1bb11b0ab7d718ed1ae6cf0beb84000000000000000000000000450d300203a3c6a231b934482073f0b1a764ed2f000000000000000000000000e400fc877a1506d8e91710e4604530557a61488e000000000000000000000000db80d0d07286169e7241831ae0a4d902924aabe70000000000000000000000000dc7c792651df635a81811f3df2dc7cbf6cc2a0e0000000000000000000000004b349b346030a7a4009cbe869d5aeffe0ecf3360000000000000000000000000382278e9b6a467f3260e2444b1d788152e2ca12e0000000000000000000000008fde6479e0168f3bb9b25db51bf0b2deb1f47046000000000000000000000000b1057b9c50ec3274c5850fc1499853ebf3b5d1bb0000000000000000000000003cc0fdaf9686dbefe1915910174747e8827c0b440000000000000000000000002834697f136610d14314a23e2dd31f6af7bcea4e000000000000000000000000b2d0ff0824fcb1952618d20f59f34ba45bb8fb3400000000000000000000000045f544ceaeb556fb86575b2e74c2e2789a9a32f0000000000000000000000000383aa39c09d2f0ad4d2f2762b585a1ce5ee9e120000000000000000000000000acaa43fcb35051bf70022ccb050541242b9f2212000000000000000000000000a4d0eb10b8e4423a075299e8da3d98ffdbd0483700000000000000000000000023275dec317423b5d3ae3056f334427c2ae7e637000000000000000000000000c4b5679ca3289d62827cdccf970a00bb844481600000000000000000000000009ec443315f4ab92fc89464ed23ff11d20dc6f1cb000000000000000000000000109f56969db5ca4b5c06bffa72b4498c400b6d3f000000000000000000000000b2b8fbf298864095b0fb8799dc451c924b9ec9a7000000000000000000000000697603e52acbf88abae7c5b25b7de916876d3b15000000000000000000000000f83bcebc79f2f388ae790efc06f3f2a3370c934e0000000000000000000000000897bfa5e0ae4b46fa06c709d0c9828ce72edb79000000000000000000000000fd74b8ae93f966693c020e8c2534e485acfe4ef0000000000000000000000000150bc54a89838e3f5c267c89fa5c024cbe2b77390000000000000000000000001e3d169be47dfad78ef20375d88182ad2bc3ceab000000000000000000000000e29c0663017868294e9da0fca97530593a6dc2b6000000000000000000000000fc6e67841f3b16dd6392a559191ada079bbefca60000000000000000000000003facac712880e33fa1c941d6ce26f53b5c402aff000000000000000000000000369256e09f13b6a24b22f2d47c9119cee057342a000000000000000000000000bc005b44a67854766a75276625abff5dcfe32f19000000000000000000000000ba029072033c32560873aa5c922f64c1e3daf876000000000000000000000000036eb80cc26b9796a1675006a4721ce80c9678030000000000000000000000005579e6872a364f343967ac147abc9d1a335812dd000000000000000000000000cad625ba2ac33d9fb4040f57f9d45743cab43a270000000000000000000000003c3e7ba529201972a4a0d1011e0c36b5c0041935000000000000000000000000761db0dc8018a47f48ae36a3b8247fb6f7e90053000000000000000000000000b88a66748152b5ffa55073a49d17f92d9a678b5900000000000000000000000018305dad931b8d04a6edf7ebcd1e9f8e14e6c724000000000000000000000000934f3c63ece710ba703dee9fd3d69a3345aac3c80000000000000000000000001319e8054a26b9477356d594ac3bc123a31128b6000000000000000000000000be6e9af68bd8e56e92c65f13514a6960c3c29a030000000000000000000000006ef0f3fd8514c56b25d4bb4a99b2b667d64690700000000000000000000000005ee3a8ffd016b9e3453082461fd26e0f2619f683000000000000000000000000f6a6600676e86cb0e9bb03db53421f3447bf95210000000000000000000000008760860be96358409d42cf0a0aab6c598ef78688000000000000000000000000282c69562ee01583bb527e4033adff87e934ce710000000000000000000000001f644ecfd214afbf2e4900a305825d7272ec6629000000000000000000000000c8d50dcb1d18ecc35095af9d0b8f05a7d0fe4518000000000000000000000000cbeb3c6aec7040e4949f22234573bd06b31de83b000000000000000000000000507c912f227026b38a27fa3d368a42fe83553a6f

-----Decoded View---------------
Arg [0] : addy (address[]): 0x188b591B2Fe704cb9E737B82B909B1cACc534562,0xF7df3aCaD1157Cc0dd501263c553c4D80dEdC989,0xDC5F24b36a31d9A84837C7329A82EB0078953D16,0x03D602813549935e80c27B084aC14c702a496Fb7,0x0f30a0710FC4f881e7F0D8cABC39Ac879F7E7E02,0x1d9260A73efF66D82adb4E9cf377990b6450b7Cc,0xD61927dF96283aEc3f9E56480a4108710d17DBa7,0xc3b6005364Dfd8A540cB9E37ebBBbaf951b581Ef,0x9Ce0603Fa2F48dBba1f4176a0f591Ea63f02e3c8,0xf2d2C0F3492Bbde32612e29315D555e692F9540F,0xD8c536f1c1b80EB51917d2921aE67AAC95B2F431,0x5eE42438d0D8fc399C94ef3543665E993e847b49,0x9f885471f298798485cCD9083164e6d4eE791E20,0xe97b3791A03706C58F5c6bc3554213C3e6Eb8550,0xe2f5AA3A495c8F5526595B1b8D7B01cB3bEefaDC,0x72024C2a5d597F007c7BC713619CA8270296b866,0xA4f4EEC3428D6B6e4018ffc5a30B95Ef374186a3,0x5cE70E68d01d601B4e3e8cC7A2Ef7CF65c7870c5,0x2386cE99CeDc8356e7328709Cf3760E069dd5316,0xF1c421901EBeCa6d1d67AE41345ba295BDA0a1F5,0x3C4Ab1C5a5c46b8f11aF1903ad8DDafD8C99992A,0x717f042B2B47A4322A288fbC48e55E41b36794B0,0xd3f5e357b72209221b40042927802Cf6735B8F29,0x695f3C781229c1531BE7eB600e2a074c2e7514CA,0x1bcd63e7aAbF27d628E3eB51EBcfC1F174B05A86,0x39E34417811C3965636729659fdc7420f51B2e4F,0x8A0754042adD7b9d11C16705036ffA37Eb80df16,0xbEbB4d1267f85D20020F9a8559081Ecb54b885ca,0xd4bC87902D570335a2765b9c76ac4B4F67dB35Fa,0xb5E77A37585f64671c7DeFDF3Fe3997b6184E420,0xC404d1FE813Dfc7206519844f47cFCf72b80F886,0x0f8f8e77A24447185c546B68fc328808ab150507,0x6D838B149663bF5b3D7c8956B3575FB3C7e0D4d6,0xC92C5ec5bd10BD23d78e343D48200eB3862ED6D2,0x5aCC7f6f6694F2797Be4E88FD8168524d83699B3,0x7dc21CD61aa8202Be9ac60753f9fcDB89A4cfB31,0x2E9CAd50082be2A6975E4Cf035fE4D9aCF189021,0x88e4F6BcA584770C525bffcC4119841592B32AB1,0x9cBAD7b2Ac1A5DE276f9dd41FD854E697E699fAD,0xd4A5DCFc9bC0cc30acdE313CEA8aAC84da54F920,0xE39784FcC980BCC02E5AdfDdE5514BD78fd6c3Db,0x5109A455f4dB64b3981e9D1d6070089c49b4b3C7,0x0f5E1070fF5DF66791E07DCA371c035Cb089E9B6,0xC556aA79252afb2acb6701B7fB9bcCF82777ae66,0xe3F44e929e9d5904F0Adc3b2f1f238989745bF8B,0x9F914Db0e5DbAA4Cf097E0664932233c5cbe4973,0x2314ef4813836a1E572884e39cBB498317fe416a,0xfb6ad3e405BE1bB11b0Ab7d718Ed1aE6Cf0BEb84,0x450D300203a3c6a231B934482073F0b1A764ED2F,0xE400FC877a1506D8e91710E4604530557A61488E,0xdb80D0D07286169E7241831aE0a4D902924AABe7,0x0dC7C792651df635a81811F3DF2dc7cbf6cC2a0e,0x4B349b346030A7a4009CBE869d5aEfFe0eCF3360,0x382278E9B6a467F3260E2444B1D788152e2ca12E,0x8FdE6479E0168F3BB9b25DB51bF0b2Deb1f47046,0xb1057B9C50EC3274C5850fC1499853eBF3B5d1bb,0x3CC0FDaf9686dbeFe1915910174747E8827C0b44,0x2834697f136610D14314a23e2DD31F6aF7bCEa4e,0xB2d0Ff0824fCb1952618d20f59F34Ba45BB8fb34,0x45f544cEaEb556fb86575b2e74C2e2789A9a32f0,0x383Aa39c09D2f0ad4d2f2762B585a1ce5eE9E120,0xacAA43fcb35051bF70022CCb050541242B9F2212,0xA4d0eB10B8E4423a075299e8DA3D98fFdBD04837,0x23275Dec317423B5D3aE3056f334427c2Ae7e637,0xC4B5679Ca3289d62827cdCcF970A00Bb84448160,0x9ec443315f4aB92fC89464ed23fF11D20dC6f1Cb,0x109f56969DB5CA4b5C06BfFA72B4498C400B6d3f,0xb2b8FbF298864095B0fb8799DC451C924b9ec9a7,0x697603E52aCBf88ABAE7c5B25B7DE916876D3B15,0xF83Bcebc79f2f388aE790Efc06f3F2a3370c934e,0x0897bfa5e0AE4B46FA06C709d0C9828cE72eDB79,0xfd74b8Ae93f966693C020e8c2534E485acFE4EF0,0x150bC54a89838e3F5C267C89fA5C024CBE2B7739,0x1E3D169BE47dFAd78eF20375D88182Ad2BC3cEAb,0xe29C0663017868294E9da0FCA97530593a6dc2B6,0xFC6E67841F3B16DD6392a559191aDA079BBEfCa6,0x3FAcAc712880E33fa1C941d6CE26f53b5C402Aff,0x369256e09f13B6a24b22f2d47c9119cee057342a,0xBC005b44A67854766a75276625abfF5DcFE32f19,0xBA029072033c32560873aa5c922F64c1e3daf876,0x036eB80Cc26B9796A1675006A4721Ce80C967803,0x5579e6872A364F343967Ac147ABC9D1A335812Dd,0xCAD625BA2Ac33D9fB4040F57F9d45743CAb43A27,0x3c3e7bA529201972a4a0D1011e0C36B5c0041935,0x761Db0dc8018a47F48Ae36A3B8247FB6f7E90053,0xb88a66748152b5FfA55073a49D17F92d9a678b59,0x18305DaD931b8d04a6edF7EBcd1E9f8e14e6C724,0x934f3C63EcE710Ba703deE9FD3d69a3345aac3C8,0x1319e8054A26B9477356D594AC3bC123a31128b6,0xBE6e9af68Bd8E56e92C65F13514A6960C3C29A03,0x6eF0f3Fd8514C56B25d4bB4a99b2b667d6469070,0x5eE3A8FFD016b9e3453082461FD26E0f2619F683,0xf6a6600676e86cb0E9bB03DB53421F3447BF9521,0x8760860Be96358409d42Cf0a0Aab6C598EF78688,0x282c69562Ee01583Bb527e4033ADFF87e934ce71,0x1f644eCfd214AFbF2E4900a305825D7272ec6629,0xC8D50dCb1d18eCc35095Af9d0b8f05A7D0fe4518,0xCbeb3C6aEC7040e4949F22234573bd06B31DE83b,0x507C912F227026B38a27FA3d368A42fE83553a6F

-----Encoded View---------------
101 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000063
Arg [2] : 000000000000000000000000188b591b2fe704cb9e737b82b909b1cacc534562
Arg [3] : 000000000000000000000000f7df3acad1157cc0dd501263c553c4d80dedc989
Arg [4] : 000000000000000000000000dc5f24b36a31d9a84837c7329a82eb0078953d16
Arg [5] : 00000000000000000000000003d602813549935e80c27b084ac14c702a496fb7
Arg [6] : 0000000000000000000000000f30a0710fc4f881e7f0d8cabc39ac879f7e7e02
Arg [7] : 0000000000000000000000001d9260a73eff66d82adb4e9cf377990b6450b7cc
Arg [8] : 000000000000000000000000d61927df96283aec3f9e56480a4108710d17dba7
Arg [9] : 000000000000000000000000c3b6005364dfd8a540cb9e37ebbbbaf951b581ef
Arg [10] : 0000000000000000000000009ce0603fa2f48dbba1f4176a0f591ea63f02e3c8
Arg [11] : 000000000000000000000000f2d2c0f3492bbde32612e29315d555e692f9540f
Arg [12] : 000000000000000000000000d8c536f1c1b80eb51917d2921ae67aac95b2f431
Arg [13] : 0000000000000000000000005ee42438d0d8fc399c94ef3543665e993e847b49
Arg [14] : 0000000000000000000000009f885471f298798485ccd9083164e6d4ee791e20
Arg [15] : 000000000000000000000000e97b3791a03706c58f5c6bc3554213c3e6eb8550
Arg [16] : 000000000000000000000000e2f5aa3a495c8f5526595b1b8d7b01cb3beefadc
Arg [17] : 00000000000000000000000072024c2a5d597f007c7bc713619ca8270296b866
Arg [18] : 000000000000000000000000a4f4eec3428d6b6e4018ffc5a30b95ef374186a3
Arg [19] : 0000000000000000000000005ce70e68d01d601b4e3e8cc7a2ef7cf65c7870c5
Arg [20] : 0000000000000000000000002386ce99cedc8356e7328709cf3760e069dd5316
Arg [21] : 000000000000000000000000f1c421901ebeca6d1d67ae41345ba295bda0a1f5
Arg [22] : 0000000000000000000000003c4ab1c5a5c46b8f11af1903ad8ddafd8c99992a
Arg [23] : 000000000000000000000000717f042b2b47a4322a288fbc48e55e41b36794b0
Arg [24] : 000000000000000000000000d3f5e357b72209221b40042927802cf6735b8f29
Arg [25] : 000000000000000000000000695f3c781229c1531be7eb600e2a074c2e7514ca
Arg [26] : 0000000000000000000000001bcd63e7aabf27d628e3eb51ebcfc1f174b05a86
Arg [27] : 00000000000000000000000039e34417811c3965636729659fdc7420f51b2e4f
Arg [28] : 0000000000000000000000008a0754042add7b9d11c16705036ffa37eb80df16
Arg [29] : 000000000000000000000000bebb4d1267f85d20020f9a8559081ecb54b885ca
Arg [30] : 000000000000000000000000d4bc87902d570335a2765b9c76ac4b4f67db35fa
Arg [31] : 000000000000000000000000b5e77a37585f64671c7defdf3fe3997b6184e420
Arg [32] : 000000000000000000000000c404d1fe813dfc7206519844f47cfcf72b80f886
Arg [33] : 0000000000000000000000000f8f8e77a24447185c546b68fc328808ab150507
Arg [34] : 0000000000000000000000006d838b149663bf5b3d7c8956b3575fb3c7e0d4d6
Arg [35] : 000000000000000000000000c92c5ec5bd10bd23d78e343d48200eb3862ed6d2
Arg [36] : 0000000000000000000000005acc7f6f6694f2797be4e88fd8168524d83699b3
Arg [37] : 0000000000000000000000007dc21cd61aa8202be9ac60753f9fcdb89a4cfb31
Arg [38] : 0000000000000000000000002e9cad50082be2a6975e4cf035fe4d9acf189021
Arg [39] : 00000000000000000000000088e4f6bca584770c525bffcc4119841592b32ab1
Arg [40] : 0000000000000000000000009cbad7b2ac1a5de276f9dd41fd854e697e699fad
Arg [41] : 000000000000000000000000d4a5dcfc9bc0cc30acde313cea8aac84da54f920
Arg [42] : 000000000000000000000000e39784fcc980bcc02e5adfdde5514bd78fd6c3db
Arg [43] : 0000000000000000000000005109a455f4db64b3981e9d1d6070089c49b4b3c7
Arg [44] : 0000000000000000000000000f5e1070ff5df66791e07dca371c035cb089e9b6
Arg [45] : 000000000000000000000000c556aa79252afb2acb6701b7fb9bccf82777ae66
Arg [46] : 000000000000000000000000e3f44e929e9d5904f0adc3b2f1f238989745bf8b
Arg [47] : 0000000000000000000000009f914db0e5dbaa4cf097e0664932233c5cbe4973
Arg [48] : 0000000000000000000000002314ef4813836a1e572884e39cbb498317fe416a
Arg [49] : 000000000000000000000000fb6ad3e405be1bb11b0ab7d718ed1ae6cf0beb84
Arg [50] : 000000000000000000000000450d300203a3c6a231b934482073f0b1a764ed2f
Arg [51] : 000000000000000000000000e400fc877a1506d8e91710e4604530557a61488e
Arg [52] : 000000000000000000000000db80d0d07286169e7241831ae0a4d902924aabe7
Arg [53] : 0000000000000000000000000dc7c792651df635a81811f3df2dc7cbf6cc2a0e
Arg [54] : 0000000000000000000000004b349b346030a7a4009cbe869d5aeffe0ecf3360
Arg [55] : 000000000000000000000000382278e9b6a467f3260e2444b1d788152e2ca12e
Arg [56] : 0000000000000000000000008fde6479e0168f3bb9b25db51bf0b2deb1f47046
Arg [57] : 000000000000000000000000b1057b9c50ec3274c5850fc1499853ebf3b5d1bb
Arg [58] : 0000000000000000000000003cc0fdaf9686dbefe1915910174747e8827c0b44
Arg [59] : 0000000000000000000000002834697f136610d14314a23e2dd31f6af7bcea4e
Arg [60] : 000000000000000000000000b2d0ff0824fcb1952618d20f59f34ba45bb8fb34
Arg [61] : 00000000000000000000000045f544ceaeb556fb86575b2e74c2e2789a9a32f0
Arg [62] : 000000000000000000000000383aa39c09d2f0ad4d2f2762b585a1ce5ee9e120
Arg [63] : 000000000000000000000000acaa43fcb35051bf70022ccb050541242b9f2212
Arg [64] : 000000000000000000000000a4d0eb10b8e4423a075299e8da3d98ffdbd04837
Arg [65] : 00000000000000000000000023275dec317423b5d3ae3056f334427c2ae7e637
Arg [66] : 000000000000000000000000c4b5679ca3289d62827cdccf970a00bb84448160
Arg [67] : 0000000000000000000000009ec443315f4ab92fc89464ed23ff11d20dc6f1cb
Arg [68] : 000000000000000000000000109f56969db5ca4b5c06bffa72b4498c400b6d3f
Arg [69] : 000000000000000000000000b2b8fbf298864095b0fb8799dc451c924b9ec9a7
Arg [70] : 000000000000000000000000697603e52acbf88abae7c5b25b7de916876d3b15
Arg [71] : 000000000000000000000000f83bcebc79f2f388ae790efc06f3f2a3370c934e
Arg [72] : 0000000000000000000000000897bfa5e0ae4b46fa06c709d0c9828ce72edb79
Arg [73] : 000000000000000000000000fd74b8ae93f966693c020e8c2534e485acfe4ef0
Arg [74] : 000000000000000000000000150bc54a89838e3f5c267c89fa5c024cbe2b7739
Arg [75] : 0000000000000000000000001e3d169be47dfad78ef20375d88182ad2bc3ceab
Arg [76] : 000000000000000000000000e29c0663017868294e9da0fca97530593a6dc2b6
Arg [77] : 000000000000000000000000fc6e67841f3b16dd6392a559191ada079bbefca6
Arg [78] : 0000000000000000000000003facac712880e33fa1c941d6ce26f53b5c402aff
Arg [79] : 000000000000000000000000369256e09f13b6a24b22f2d47c9119cee057342a
Arg [80] : 000000000000000000000000bc005b44a67854766a75276625abff5dcfe32f19
Arg [81] : 000000000000000000000000ba029072033c32560873aa5c922f64c1e3daf876
Arg [82] : 000000000000000000000000036eb80cc26b9796a1675006a4721ce80c967803
Arg [83] : 0000000000000000000000005579e6872a364f343967ac147abc9d1a335812dd
Arg [84] : 000000000000000000000000cad625ba2ac33d9fb4040f57f9d45743cab43a27
Arg [85] : 0000000000000000000000003c3e7ba529201972a4a0d1011e0c36b5c0041935
Arg [86] : 000000000000000000000000761db0dc8018a47f48ae36a3b8247fb6f7e90053
Arg [87] : 000000000000000000000000b88a66748152b5ffa55073a49d17f92d9a678b59
Arg [88] : 00000000000000000000000018305dad931b8d04a6edf7ebcd1e9f8e14e6c724
Arg [89] : 000000000000000000000000934f3c63ece710ba703dee9fd3d69a3345aac3c8
Arg [90] : 0000000000000000000000001319e8054a26b9477356d594ac3bc123a31128b6
Arg [91] : 000000000000000000000000be6e9af68bd8e56e92c65f13514a6960c3c29a03
Arg [92] : 0000000000000000000000006ef0f3fd8514c56b25d4bb4a99b2b667d6469070
Arg [93] : 0000000000000000000000005ee3a8ffd016b9e3453082461fd26e0f2619f683
Arg [94] : 000000000000000000000000f6a6600676e86cb0e9bb03db53421f3447bf9521
Arg [95] : 0000000000000000000000008760860be96358409d42cf0a0aab6c598ef78688
Arg [96] : 000000000000000000000000282c69562ee01583bb527e4033adff87e934ce71
Arg [97] : 0000000000000000000000001f644ecfd214afbf2e4900a305825d7272ec6629
Arg [98] : 000000000000000000000000c8d50dcb1d18ecc35095af9d0b8f05a7d0fe4518
Arg [99] : 000000000000000000000000cbeb3c6aec7040e4949f22234573bd06b31de83b
Arg [100] : 000000000000000000000000507c912f227026b38a27fa3d368a42fe83553a6f


Deployed Bytecode Sourcemap

27716:31347:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49949:165;;;;;;;;;;-1:-1:-1;49949:165:0;;;;;:::i;:::-;;:::i;55328:110::-;;;;;;;;;;-1:-1:-1;55328:110:0;;;;;:::i;:::-;;:::i;56717:94::-;;;;;;;;;;-1:-1:-1;56798:5:0;;;;;;;;;;;;-1:-1:-1;;;56798:5:0;;;;56717:94;;;;;;;:::i;:::-;;;;;;;;42385:31;;;;;;;;;;-1:-1:-1;42385:31:0;;;;;;;;;;;18971:4:1;18959:17;;;18941:36;;18929:2;18914:18;42385:31:0;18799:184:1;57602:161:0;;;;;;;;;;-1:-1:-1;57602:161:0;;;;;:::i;:::-;;:::i;:::-;;;8509:14:1;;8502:22;8484:41;;8472:2;8457:18;57602:161:0;8344:187:1;52683:127:0;;;;;;;;;;-1:-1:-1;52683:127:0;;;;;:::i;:::-;;:::i;50170:155::-;;;;;;;;;;-1:-1:-1;50170:155:0;;;;;:::i;:::-;;:::i;29311:43::-;;;;;;;;;;;;29351:3;29311:43;;;;;17290:6:1;17278:19;;;17260:38;;17248:2;17233:18;29311:43:0;17116:188:1;53760:209:0;;;;;;;;;;;;;:::i;55195:121::-;;;;;;;;;;-1:-1:-1;55195:121:0;;;;;:::i;:::-;;:::i;47946:102::-;;;;;;;;;;-1:-1:-1;48028:12:0;;47946:102;;;8690:25:1;;;8678:2;8663:18;47946:102:0;8536:185:1;50824:103:0;;;;;;;;;;-1:-1:-1;50824:103:0;;;;;:::i;:::-;;:::i;49155:147::-;;;;;;;;;;-1:-1:-1;49155:147:0;;;;;:::i;:::-;;:::i;57027:108::-;;;;;;;;;;-1:-1:-1;57109:18:0;;57027:108;;49023:120;;;;;;;;;;-1:-1:-1;49023:120:0;;;;;:::i;:::-;;:::i;28690:66::-;;;;;;;;;;;;;:::i;29598:83::-;;;;;;;;;;;;29639:42;29598:83;;;;;-1:-1:-1;;;;;7143:32:1;;;7125:51;;7113:2;7098:18;29598:83:0;6979:203:1;58076:392:0;;;;;;;;;;-1:-1:-1;58076:392:0;;;;;:::i;:::-;;:::i;47229:221::-;;;;;;;;;;-1:-1:-1;47384:13:0;;47229:221;;;47384:13;;;;;;18590:25:1;;-1:-1:-1;;;47398:13:0;;;;18646:2:1;18631:18;;18624:34;47412:7:0;;;18674:18:1;;;18667:34;;;;47384:13:0;47420:8;;;;18732:2:1;18717:18;;18710:34;47429:12:0;;;;;18775:3:1;18760:19;;18753:35;18577:3;18562:19;47229:221:0;18331:463:1;29063:44:0;;;;;;;;;;;;29105:2;29063:44;;56925:94;;;;;;;;;;-1:-1:-1;28682:1:0;56925:94;;55579:115;;;;;;;;;;-1:-1:-1;55579:115:0;;;;;:::i;:::-;;:::i;29437:49::-;;;;;;;;;;;;29477:9;29437:49;;58503:205;;;;;;;;;;-1:-1:-1;58503:205:0;;;;;:::i;:::-;;:::i;55450:117::-;;;;;;;;;;-1:-1:-1;55450:117:0;;;;;:::i;:::-;;:::i;49320:210::-;;;;;;;;;;-1:-1:-1;49320:210:0;;;;;:::i;:::-;;:::i;42301:27::-;;;;;;;;;;;;;;;;52090:120;;;;;;;;;;-1:-1:-1;52090:120:0;;;;;:::i;:::-;;:::i;48192:107::-;;;;;;;;;;;;;:::i;42193:38::-;;;;;;;;;;;;;;;;53577:26;;;;;;;;;;-1:-1:-1;53577:26:0;;;;;;;;;;;54217:145;;;;;;;;;;-1:-1:-1;54217:145:0;;;;;:::i;:::-;;:::i;30233:46::-;;;;;;;;;;;;;;;;51294:546;;;;;;;;;;-1:-1:-1;51294:546:0;;;;;:::i;:::-;;:::i;52267:110::-;;;;;;;;;;-1:-1:-1;52267:110:0;;;;;:::i;:::-;;:::i;30286:45::-;;;;;;;;;;;;;;;;42468:31;;;;;;;;;;;;;;;;28030:40;;;;;;;;;;-1:-1:-1;28030:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48323:139;;;;;;;;;;-1:-1:-1;48323:139:0;;;;;:::i;:::-;;:::i;29514:77::-;;;;;;;;;;;;29549:42;29514:77;;47072:149;;;;;;;;;;;;;:::i;:::-;;;;18252:25:1;;;18308:2;18293:18;;18286:34;;;;18225:18;47072:149:0;18078:248:1;57143:121:0;;;;;;;;;;-1:-1:-1;57143:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;57238:18:0;57211:7;57238:18;;;:9;:18;;;;;;;57143:121;9297:140;;;;;;;;;;;;;:::i;53610:28::-;;;;;;;;;;-1:-1:-1;53610:28:0;;;;;;;;;;;51915:107;;;;;;;;;;-1:-1:-1;51915:107:0;;;;;:::i;:::-;;:::i;30177:49::-;;;;;;;;;;;;;;;;54011:138;;;;;;;;;;;;;:::i;50333:233::-;;;;;;;;;;;;;:::i;48869:28::-;;;;;;;;;;-1:-1:-1;48869:28:0;;;;;;;;29188:54;;;;;;;;;;;;29240:2;29188:54;;47665:275;;;;;;;;;;-1:-1:-1;47665:275:0;;;;;:::i;:::-;;:::i;48800:28::-;;;;;;;;;;-1:-1:-1;48800:28:0;;;;;;;;;;;56615:94;;;;;;;;;;-1:-1:-1;56667:7:0;8721:6;-1:-1:-1;;;;;8721:6:0;56615:94;;43639:25;;;;;;;;;;;;;;;;50653:109;;;;;;;;;;-1:-1:-1;50653:109:0;;;;;:::i;:::-;;:::i;48908:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30338:28::-;;;;;;;;;;-1:-1:-1;30338:28:0;;;;;:::i;:::-;;:::i;56819:98::-;;;;;;;;;;-1:-1:-1;56902:7:0;;;;;;;;;;;;-1:-1:-1;;;56902:7:0;;;;56819:98;;49542:244;;;;;;;;;;-1:-1:-1;49542:244:0;;;;;:::i;:::-;;:::i;42818:130::-;;;;;;;;;;-1:-1:-1;42818:130:0;;;;;:::i;:::-;;:::i;52919:318::-;;;;;;;;;;-1:-1:-1;52919:318:0;;;;;:::i;:::-;;:::i;28442:43::-;;;;;;;;;;-1:-1:-1;28442:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;58716:342;;;;;;;;;;-1:-1:-1;58716:342:0;;;;;:::i;:::-;;:::i;49798:100::-;;;;;;;;;;-1:-1:-1;49798:100:0;;;;;:::i;:::-;;:::i;57272:167::-;;;;;;;;;;-1:-1:-1;57272:167:0;;;;;:::i;:::-;;:::i;54399:113::-;;;;;;;;;;-1:-1:-1;54399:113:0;;;;;:::i;:::-;;:::i;56038:151::-;;;;;;;;;;;;;:::i;50998:201::-;;;;;;;;;;-1:-1:-1;50998:201:0;;;;;:::i;:::-;;:::i;47458:140::-;;;;;;;;;;-1:-1:-1;47458:140:0;;;;;:::i;:::-;;:::i;54518:203::-;;;;;;;;;;-1:-1:-1;54518:203:0;;;;;:::i;:::-;;:::i;57447:147::-;;;;;;;;;;-1:-1:-1;57447:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;57558:19:0;;;57531:7;57558:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;57447:147;52383:111;;;;;;;;;;-1:-1:-1;52383:111:0;;;;;:::i;:::-;;:::i;54873:285::-;;;;;;;;;;-1:-1:-1;54873:285:0;;;;;:::i;:::-;;:::i;54727:127::-;;;;;;;;;;-1:-1:-1;54727:127:0;;;;;:::i;:::-;;:::i;30459:31::-;;;;;;;;;;;;30488:2;30459:31;;9592:236;;;;;;;;;;-1:-1:-1;9592:236:0;;;;;:::i;:::-;;:::i;48835:27::-;;;;;;;;;;;;;;;;52551:126;;;;;;;;;;-1:-1:-1;52551:126:0;;;;;:::i;:::-;;:::i;49949:165::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;;;;;;;;;50029:26:::1;50050:4;50029:20;:26::i;:::-;50028:27;50020:36;;;::::0;::::1;;50067:29;:19;50091:4:::0;50067:23:::1;:29::i;:::-;;49949:165:::0;:::o;55328:110::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;55404:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;55404:26:0;;::::1;::::0;;;::::1;::::0;;55328:110::o;57602:161::-;57679:4;57696:37;57705:10;57717:7;57726:6;57696:8;:37::i;:::-;-1:-1:-1;57751:4:0;57602:161;;;;;:::o;52683:127::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52765:37:::1;:21;52794:7:::0;52765:28:::1;:37::i;50170:155::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50247:26:::1;50268:4;50247:20;:26::i;:::-;50239:35;;;::::0;::::1;;50285:32;:19;50312:4:::0;50285:26:::1;:32::i;53760:209::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;53834:14:::1;::::0;::::1;::::0;::::1;;;53833:15;53825:24;;;::::0;::::1;;53910:14;:19:::0;;-1:-1:-1;;53940:21:0;;;;;53760:209::o;55195:121::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;55276:11:::1;:32:::0;;-1:-1:-1;;55276:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55195:121::o;50824:103::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50894:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;50894:25:0;;::::1;::::0;;;::::1;::::0;;50824:103::o;49155:147::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49243:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;49243:21:0::1;::::0;::::1;;;::::0;;49275:19:::1;:9;49243:13:::0;49275::::1;:19::i;:::-;;49155:147:::0;;:::o;49023:120::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49114:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;49114:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49023:120::o;28690:66::-;28743:13;28682:1;28743:2;:13;:::i;:::-;28729:27;;:11;:27;:::i;:::-;28690:66;:::o;58076:392::-;58176:4;58193:36;58203:6;58211:9;58222:6;58193:9;:36::i;:::-;-1:-1:-1;;;;;58269:19:0;;58242:24;58269:19;;;:11;:19;;;;;;;;58289:10;58269:31;;;;;;;;58319:26;;;;58311:59;;;;-1:-1:-1;;;58311:59:0;;11328:2:1;58311:59:0;;;11310:21:1;11367:2;11347:18;;;11340:30;-1:-1:-1;;;11386:18:1;;;11379:50;11446:18;;58311:59:0;11126:344:1;58311:59:0;58383:55;58392:6;58400:10;58412:25;58431:6;58412:16;:25;:::i;:::-;58383:8;:55::i;:::-;-1:-1:-1;58456:4:0;;58076:392;-1:-1:-1;;;;58076:392:0:o;55579:115::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55658:20:0::1;55681:5;55658:20:::0;;;:10:::1;:20;::::0;;;;:28;;-1:-1:-1;;55658:28:0::1;::::0;;55579:115::o;58503:205::-;58611:10;58585:4;58632:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;58632:32:0;;;;;;;;;;58585:4;;58602:76;;58623:7;;58632:45;;58667:10;;58632:45;:::i;55450:117::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55529:23:0::1;;::::0;;;:10:::1;:23;::::0;;;;:30;;-1:-1:-1;;55529:30:0::1;55555:4;55529:30;::::0;;55450:117::o;49320:210::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;49423:9:::1;49443:80;49454:4;:11;49452:1;:13;49443:80;;;49506:5;49487:7;:16;49495:4;49500:1;49495:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;49487:16:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;49487:16:0;:24;;-1:-1:-1;;49487:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49467:3;::::1;::::0;::::1;:::i;:::-;;;;49443:80;;52090:120:::0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52170:32:::1;52189:12;:4:::0;52196:5:::1;52189:12;:::i;:::-;52170:18;:32::i;:::-;52090:120:::0;:::o;48192:107::-;48279:12;;48263:28;;:15;:28;:::i;:::-;48251:10;48241:21;;;;:9;:21;;;;;:50;48192:107::o;54217:145::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54310:22:::1;:44:::0;;-1:-1:-1;;;;;54310:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;54310:44:0;;::::1;::::0;;;::::1;::::0;;54217:145::o;51294:546::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;51441:14:::1;51456:29;51471:14:::0;51456;:29:::1;:::i;:::-;51441:44;;51504:8;:13;;51514:3;51504:13;51496:59;;;::::0;-1:-1:-1;;;51496:59:0;;13438:2:1;51496:59:0::1;::::0;::::1;13420:21:1::0;13477:2;13457:18;;;13450:30;13516:34;13496:18;;;13489:62;-1:-1:-1;;;13567:18:1;;;13560:31;13608:19;;51496:59:0::1;13236:397:1::0;51496:59:0::1;30488:2;51574:14;::::0;::::1;;::::0;::::1;::::0;:31:::1;;-1:-1:-1::0;30488:2:0::1;51590:15;::::0;::::1;;;51574:31;:52;;;;-1:-1:-1::0;30488:2:0::1;51607:19;::::0;::::1;;;51574:52;51566:89;;;::::0;-1:-1:-1;;;51566:89:0;;14892:2:1;51566:89:0::1;::::0;::::1;14874:21:1::0;14931:2;14911:18;;;14904:30;14970:27;14950:18;;;14943:55;15015:18;;51566:89:0::1;14690:349:1::0;51566:89:0::1;-1:-1:-1::0;51668:13:0::1;:28:::0;;::::1;51808:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;51781:16:0;;::::1;51668:28;51781:16;-1:-1:-1::0;;51707:28:0;;::::1;-1:-1:-1::0;;;51707:28:0::1;-1:-1:-1::0;;51668:28:0;;::::1;::::0;::::1;51707::::0;;;;-1:-1:-1;;51707:28:0;;;;;;;;;;::::1;51781:16:::0;;;;51756:14;;;::::1;51781:16:::0;;;;;;;::::1;51808:24:::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;51294:546:0:o;52267:110::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52347:22:::1;:9;52361:7:::0;52347:13:::1;:22::i;48323:139::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48392:16:0::1;48411:5;48392:16:::0;;;:10:::1;:16;::::0;;;;;;;:24;;-1:-1:-1;;48392:24:0;;::::1;::::0;;;48427:14:::1;:20:::0;;;;;;:27;;;;::::1;48392:24:::0;48427:27:::1;::::0;;48323:139::o;47072:149::-;47113:15;;47174:13;28682:1;47174:2;:13;:::i;:::-;47161:12;;:26;;;;:::i;:::-;47199:13;28682:1;47199:2;:13;:::i;:::-;47189:9;;:23;;;;:::i;:::-;47154:59;;;;47072:149;;:::o;9297:140::-;8879:10;8868:7;8694;8721:6;-1:-1:-1;;;;;8721:6:0;;8656:79;8868:7;-1:-1:-1;;;;;8868:21:0;;8860:66;;;;-1:-1:-1;;;8860:66:0;;13077:2:1;8860:66:0;;;13059:21:1;;;13096:18;;;13089:30;13155:34;13135:18;;;13128:62;13207:18;;8860:66:0;12875:356:1;8860:66:0;9396:1:::1;9380:6:::0;;9359:40:::1;::::0;-1:-1:-1;;;;;9380:6:0;;::::1;::::0;9359:40:::1;::::0;9396:1;;9359:40:::1;9427:1;9410:19:::0;;-1:-1:-1;;;;;;9410:19:0::1;::::0;;9297:140::o;51915:107::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;51991:14:::1;:23:::0;;-1:-1:-1;;51991:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;51915:107::o;54011:138::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54075:14:::1;::::0;::::1;::::0;::::1;;;:32:::0;::::1;;;-1:-1:-1::0;54091:16:0::1;::::0;;;::::1;;;54075:32;54067:41;;;::::0;::::1;;54119:16;:22:::0;;-1:-1:-1;;54119:22:0::1;::::0;;54011:138::o;50333:233::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50410:16:::1;::::0;;50395:14:::1;50437:18:::0;;;;50480:36:::1;::::0;50410:16;;50395:14;29549:42:::1;::::0;50410:16;;50395:14;50480:36;50395:14;50480:36;50410:16;29549:42;50480:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50466:50;;;50535:4;50527:31;;;::::0;-1:-1:-1;;;50527:31:0;;15934:2:1;50527:31:0::1;::::0;::::1;15916:21:1::0;15973:2;15953:18;;;15946:30;-1:-1:-1;;;15992:18:1;;;15985:45;16047:18;;50527:31:0::1;15732:339:1::0;47665:275:0;-1:-1:-1;;;;;47786:25:0;;47751:7;47786:25;;;:9;:25;;;;;;47834:15;47824:25;;47821:71;;-1:-1:-1;47880:1:0;;47665:275;-1:-1:-1;;47665:275:0:o;47821:71::-;47908:24;47917:15;47908:8;:24;:::i;:::-;47901:31;47665:275;-1:-1:-1;;;47665:275:0:o;50653:109::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50731:16:::1;:23:::0;;-1:-1:-1;;50731:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50653:109::o;48908:97::-;48950:16;48986:11;48979:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48979:18:0;;;;;;;;;;;;;;;;;;;;;;;48908:97;:::o;30338:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30338:28:0;;-1:-1:-1;30338:28:0;:::o;49542:244::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;49642:9:::1;49662:117;49673:4;:11;49671:1;:13;49662:117;;;49725:5;49706:7;:16;49714:4;49719:1;49714:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;49706:16:0::1;-1:-1:-1::0;;;;;49706:16:0::1;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;49745:22;49759:4;49764:1;49759:7;;;;;;;;:::i;:::-;;;;;;;49745:9;:13;;:22;;;;:::i;:::-;-1:-1:-1::0;49686:3:0;::::1;::::0;::::1;:::i;:::-;;;;49662:117;;42818:130:::0;42883:4;42906:34;:19;42935:4;42906:28;:34::i;52919:318::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;53085:13:::1;28682:1;53085:2;:13;:::i;:::-;53069:29;::::0;:15;:29:::1;:::i;:::-;53053:45:::0;-1:-1:-1;53135:13:0::1;28682:1;53135:2;:13;:::i;:::-;53122:26;::::0;:12;:26:::1;:::i;:::-;53159:12;:30:::0;;;;-1:-1:-1;53200:9:0::1;:24:::0;52919:318::o;58716:342::-;58859:10;58803:4;58847:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;58847:32:0;;;;;;;;;;58898:35;;;;58890:60;;;;-1:-1:-1;;;58890:60:0;;16630:2:1;58890:60:0;;;16612:21:1;16669:2;16649:18;;;16642:30;-1:-1:-1;;;16688:18:1;;;16681:42;16740:18;;58890:60:0;16428:336:1;58890:60:0;58963:65;58972:10;58984:7;58993:34;59012:15;58993:16;:34;:::i;58963:65::-;-1:-1:-1;59046:4:0;;58716:342;-1:-1:-1;;;58716:342:0:o;49798:100::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;49867:12:::1;:23:::0;;-1:-1:-1;;49867:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49798:100::o;57272:167::-;57352:4;57369:40;57379:10;57391:9;57402:6;57369:9;:40::i;54399:113::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54476:28:::1;:10;54491:12:::0;54476:14:::1;:28::i;56038:151::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;56106:51:::1;::::0;56093:9:::1;::::0;56106:10:::1;::::0;56130:21:::1;::::0;56093:9;56106:51;56093:9;56106:51;56130:21;56106:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56092:65;;;56176:4;56168:13;;;::::0;::::1;50998:201:::0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;29477:9:::1;51089:32:::0;::::1;;51081:67;;;::::0;-1:-1:-1;;;51081:67:0;;16278:2:1;51081:67:0::1;::::0;::::1;16260:21:1::0;16317:2;16297:18;;;16290:30;16356:25;16336:18;;;16329:53;16399:18;;51081:67:0::1;16076:347:1::0;51081:67:0::1;51163:12;:28:::0;50998:201::o;47458:140::-;47532:4;47555:35;:10;47575:14;47555:19;:35::i;54518:203::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54615:6:::1;54611:103;54627:14;:21;54625:1;:23;54611:103;;;54669:33;54684:14;54699:1;54684:17;;;;;;;;:::i;:::-;;;;;;;54669:10;:14;;:33;;;;:::i;:::-;-1:-1:-1::0;54650:3:0;::::1;::::0;::::1;:::i;:::-;;;;54611:103;;52383:111:::0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52461:25:::1;:9;52478:7:::0;52461:16:::1;:25::i;54873:285::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;55011:30:::1;::::0;-1:-1:-1;;;55011:30:0;;55035:4:::1;55011:30;::::0;::::1;7125:51:1::0;54968:10:0;;54946:12:::1;::::0;-1:-1:-1;;;;;55011:15:0;::::1;::::0;::::1;::::0;7098:18:1;;55011:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54990:51;;55071:1;55060:10;:12;55052:49;;;::::0;-1:-1:-1;;;55052:49:0;;14539:2:1;55052:49:0::1;::::0;::::1;14521:21:1::0;14578:2;14558:18;;;14551:30;14617:26;14597:18;;;14590:54;14661:18;;55052:49:0::1;14337:348:1::0;55052:49:0::1;55112:38;::::0;-1:-1:-1;;;55112:38:0;;55127:10:::1;55112:38;::::0;::::1;7361:51:1::0;7428:18;;;7421:34;;;-1:-1:-1;;;;;55112:14:0;::::1;::::0;::::1;::::0;7334:18:1;;55112:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54935:223;;54873:285:::0;:::o;54727:127::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54812:34:::1;:10;54830:15:::0;54812:17:::1;:34::i;9592:236::-:0;8879:10;8868:7;8694;8721:6;-1:-1:-1;;;;;8721:6:0;;8656:79;8868:7;-1:-1:-1;;;;;8868:21:0;;8860:66;;;;-1:-1:-1;;;8860:66:0;;13077:2:1;8860:66:0;;;13059:21:1;;;13096:18;;;13089:30;13155:34;13135:18;;;13128:62;13207:18;;8860:66:0;12875:356:1;8860:66:0;-1:-1:-1;;;;;9673:22:0;::::1;9665:73;;;::::0;-1:-1:-1;;;9665:73:0;;10230:2:1;9665:73:0::1;::::0;::::1;10212:21:1::0;10269:2;10249:18;;;10242:30;10308:34;10288:18;;;10281:62;-1:-1:-1;;;10359:18:1;;;10352:36;10405:19;;9665:73:0::1;10028:402:1::0;9665:73:0::1;9775:6;::::0;;9754:38:::1;::::0;-1:-1:-1;;;;;9754:38:0;;::::1;::::0;9775:6;::::1;::::0;9754:38:::1;::::0;::::1;9803:6;:17:::0;;-1:-1:-1;;;;;;9803:17:0::1;-1:-1:-1::0;;;;;9803:17:0;;;::::1;::::0;;;::::1;::::0;;9592:236::o;52551:126::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52635:34:::1;:21;52661:7:::0;24343:152;24413:4;24437:50;24442:3;-1:-1:-1;;;;;24462:23:0;;24437:4;:50::i;31294:139::-;31347:4;8721:6;;-1:-1:-1;;;;;31370:13:0;;;8721:6;;31370:13;;:31;;-1:-1:-1;;;;;;31385:16:0;;29549:42;31385:16;31370:31;:55;;;-1:-1:-1;;;;;;31403:22:0;;29639:42;31403:22;31363:62;31294:139;-1:-1:-1;;31294:139:0:o;57769:299::-;-1:-1:-1;;;;;57862:19:0;;57854:49;;;;-1:-1:-1;;;57854:49:0;;10637:2:1;57854:49:0;;;10619:21:1;10676:2;10656:18;;;10649:30;-1:-1:-1;;;10695:18:1;;;10688:47;10752:18;;57854:49:0;10435:341:1;57854:49:0;-1:-1:-1;;;;;57922:21:0;;57914:49;;;;-1:-1:-1;;;57914:49:0;;12733:2:1;57914:49:0;;;12715:21:1;12772:2;12752:18;;;12745:30;-1:-1:-1;;;12791:18:1;;;12784:45;12846:18;;57914:49:0;12531:339:1;57914:49:0;-1:-1:-1;;;;;57976:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;58028:32;;8690:25:1;;;58028:32:0;;8663:18:1;58028:32:0;;;;;;;57769:299;;;:::o;24671:158::-;24744:4;24768:53;24776:3;-1:-1:-1;;;;;24796:23:0;;24768:7;:53::i;34448:2179::-;-1:-1:-1;;;;;34544:20:0;;34536:51;;;;-1:-1:-1;;;34536:51:0;;9530:2:1;34536:51:0;;;9512:21:1;9569:2;9549:18;;;9542:30;-1:-1:-1;;;9588:18:1;;;9581:48;9646:18;;34536:51:0;9328:342:1;34536:51:0;-1:-1:-1;;;;;34606:23:0;;34598:52;;;;-1:-1:-1;;;34598:52:0;;10983:2:1;34598:52:0;;;10965:21:1;11022:2;11002:18;;;10995:30;-1:-1:-1;;;11041:18:1;;;11034:46;11097:18;;34598:52:0;10781:340:1;34598:52:0;34753:15;34772:26;:9;34791:6;34772:18;:26::i;:::-;:59;;;-1:-1:-1;34802:29:0;:9;34821;34802:18;:29::i;:::-;34753:79;-1:-1:-1;34931:23:0;-1:-1:-1;;;;;34956:21:0;;34972:4;34956:21;;:49;;-1:-1:-1;;;;;;34981:24:0;;35000:4;34981:24;34956:49;35138:14;;35203:19;;34931:75;;-1:-1:-1;;;;;;35138:14:0;;;;35108:21;;35193:29;;;-1:-1:-1;;;35203:19:0;;;;35193:29;:59;;;;;35239:13;-1:-1:-1;;;;;35226:26:0;:9;-1:-1:-1;;;;;35226:26:0;;35193:59;35192:136;;;-1:-1:-1;35281:19:0;;-1:-1:-1;;;;;35268:32:0;;;-1:-1:-1;;;35281:19:0;;;;35268:32;:59;;;;;35314:13;-1:-1:-1;;;;;35304:23:0;:6;-1:-1:-1;;;;;35304:23:0;;35268:59;35450:19;;35164:165;;-1:-1:-1;35431:10:0;;-1:-1:-1;;;;;35442:27:0;;;-1:-1:-1;;;35450:19:0;;;;35442:27;;:53;;;35482:13;-1:-1:-1;;;;;35472:23:0;:6;-1:-1:-1;;;;;35472:23:0;;35442:53;35529:19;;35431:64;;-1:-1:-1;35506:11:0;;-1:-1:-1;;;;;35518:30:0;;;-1:-1:-1;;;35529:19:0;;;;35518:30;;:59;;;35564:13;-1:-1:-1;;;;;35551:26:0;:9;-1:-1:-1;;;;;35551:26:0;;35518:59;35506:71;;35618:18;:41;;;;35640:19;35618:41;:55;;;;35663:10;35618:55;35615:1005;;;35689:43;35706:6;35714:9;35725:6;35689:16;:43::i;:::-;35615:1005;;;35848:14;;;;;;;35843:518;;8694:7;8721:6;-1:-1:-1;;;;;35887:17:0;;;8721:6;;35887:17;;;;:41;;-1:-1:-1;8694:7:0;8721:6;-1:-1:-1;;;;;35908:20:0;;;8721:6;;35908:20;;35887:41;35883:463;;;-1:-1:-1;;;;;35958:15:0;;;;;;:7;:15;;;;;;;;35957:16;:39;;;;-1:-1:-1;;;;;;35978:18:0;;;;;;:7;:18;;;;;;;;35977:19;35957:39;35953:374;;;36029:7;;;;;;;36025:279;;;36089:9;-1:-1:-1;;;;;36073:28:0;36082:6;-1:-1:-1;;;;;36073:28:0;;36099:1;36073:28;;;;8690:25:1;;8678:2;8663:18;;8536:185;36073:28:0;;;;;;;;36131:7;;;;;;34448:2179;;;:::o;36025:279::-;36235:14;;;;;;;36227:49;;;;-1:-1:-1;;;36227:49:0;;13840:2:1;36227:49:0;;;13822:21:1;13879:2;13859:18;;;13852:30;13918:25;13898:18;;;13891:53;13961:18;;36227:49:0;13638:347:1;36227:49:0;36378:16;;;;;;;36375:234;;;36414:56;36433:6;36440:9;36450:6;36457:5;36463:6;36414:18;:56::i;36375:234::-;36523:52;36538:6;36545:9;36555:6;36562:5;36568:6;36523:14;:52::i;:::-;34525:2102;;;;;;34448:2179;;;:::o;44044:1771::-;43792:27;:34;;-1:-1:-1;;43792:34:0;43822:4;43792:34;;;;;;44162:4:::1;43792:27:::0;44144:24;;;::::1;::::0;;;;;;;;44209:13:::1;::::0;44144:24;;43792:27;44195::::1;::::0;-1:-1:-1;;;44209:13:0;::::1;43792:34:::0;44209:13;;::::1;::::0;44195;;::::1;;:27;:::i;:::-;44179:43;;;;44233:19;44253:9;;44233:29;;44290:8;44276:11;:22;44273:127;;;44318:12;::::0;::::1;;44315:74;;;-1:-1:-1::0;44365:8:0;44315:74:::1;44526:11;44510:15;:27;:40;;;-1:-1:-1::0;44539:11:0::1;::::0;::::1;::::0;44510:40:::1;44507:77;;;44566:7;;;;;44507:77;44704:13;::::0;44665:25:::1;::::0;44691:36:::1;::::0;::::1;::::0;44692:25:::1;::::0;44704:13;;::::1;;;44692:11:::0;:25:::1;:::i;:::-;44691:36;;;;:::i;:::-;44665:62:::0;-1:-1:-1;44738:25:0::1;44765:29;44665:62:::0;44765:11;:29:::1;:::i;:::-;44738:56:::0;-1:-1:-1;44855:16:0::1;44872:19;44890:1;44872:17:::0;:19:::1;:::i;:::-;44855:36:::0;-1:-1:-1;44902:19:0::1;44922:26;44855:36:::0;44922:17;:26:::1;:::i;:::-;44902:46:::0;-1:-1:-1;45031:17:0::1;45049:29;45061:17:::0;44902:46;45049:29:::1;:::i;:::-;45031:47:::0;-1:-1:-1;45193:21:0::1;45225:27;45031:47:::0;45225:16:::1;:27::i;:::-;45263:14;45279:41;45303:17:::0;45279:21:::1;:41;:::i;:::-;45263:58:::0;-1:-1:-1;45421:14:0::1;45459:9:::0;45439:18:::1;45446:11:::0;45263:58;45439:18:::1;:::i;:::-;45438:30;;;;:::i;:::-;45421:47;;45479:31;45493:8;45503:6;45479:13;:31::i;:::-;45633:20;45655:41;45679:17:::0;45655:21:::1;:41;:::i;:::-;45633:64;;45775:32;45794:12;45775:18;:32::i;:::-;44109:1706;;;;;;;;;;;;43837:1;-1:-1:-1::0;43849:27:0;:35;;-1:-1:-1;;43849:35:0;;;44044:1771::o;24915:167::-;-1:-1:-1;;;;;25049:23:0;;24995:4;21724:19;;;:12;;;:19;;;;;;:24;;25019:55;21627:129;19398:414;19461:4;21724:19;;;:12;;;:19;;;;;;19478:327;;-1:-1:-1;19521:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;19704:18;;19682:19;;;:12;;;:19;;;;;;:40;;;;19737:11;;19478:327;-1:-1:-1;19788:5:0;19781:12;;19988:1553;20054:4;20193:19;;;:12;;;:19;;;;;;20229:15;;20225:1309;;20591:21;20615:14;20628:1;20615:10;:14;:::i;:::-;20664:18;;20591:38;;-1:-1:-1;20644:17:0;;20664:22;;20685:1;;20664:22;:::i;:::-;20644:42;;20931:17;20951:3;:11;;20963:9;20951:22;;;;;;;;:::i;:::-;;;;;;;;;20931:42;;21097:9;21068:3;:11;;21080:13;21068:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;21174:23;;;:12;;;:23;;;;;;:36;;;21335:17;;21174:3;;21335:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21430:3;:12;;:19;21443:5;21430:19;;;;;;;;;;;21423:26;;;21473:4;21466:11;;;;;;;;20225:1309;21517:5;21510:12;;;;;40893:440;-1:-1:-1;;;;;41012:17:0;;40988:21;41012:17;;;:9;:17;;;;;;41048:23;;;;41040:60;;;;-1:-1:-1;;;41040:60:0;;9877:2:1;41040:60:0;;;9859:21:1;9916:2;9896:18;;;9889:30;-1:-1:-1;;;9935:18:1;;;9928:54;9999:18;;41040:60:0;9675:348:1;41040:60:0;41156:27;41169:6;41176;41156:12;:27::i;:::-;41236:28;41246:9;41257:6;41236:9;:28::i;:::-;41306:9;-1:-1:-1;;;;;41290:33:0;41299:6;-1:-1:-1;;;;;41290:33:0;;41316:6;41290:33;;;;8690:25:1;;8678:2;8663:18;;8536:185;41290:33:0;;;;;;;;40977:356;40893:440;;;:::o;36701:826::-;36895:6;36891:564;;37084:30;:10;37104:9;37084:19;:30::i;:::-;37076:68;;;;-1:-1:-1;;;37076:68:0;;12378:2:1;37076:68:0;;;12360:21:1;12417:2;12397:18;;;12390:30;12456:28;12436:18;;;12429:56;12502:18;;37076:68:0;12176:350:1;37076:68:0;29240:2;28743:13;28682:1;28743:2;:13;:::i;:::-;28729:27;;:11;:27;:::i;:::-;37364:42;;;;:::i;:::-;-1:-1:-1;;;;;37335:20:0;;;;;;:9;:20;;;;;;:27;;37356:6;;37335:27;:::i;:::-;:71;;37326:113;;;;-1:-1:-1;;;37326:113:0;;11677:2:1;37326:113:0;;;11659:21:1;11716:2;11696:18;;;11689:30;11755;11735:18;;;11728:58;11803:18;;37326:113:0;11475:352:1;37326:113:0;37465:52;37480:6;37487:9;37497:6;37504:5;37510:6;37465:14;:52::i;:::-;36701:826;;;;;:::o;37630:3203::-;-1:-1:-1;;;;;37773:20:0;;;37746:24;37773:20;;;:9;:20;;;;;;;37828:17;;;;;;;;37864:23;;;;37856:60;;;;-1:-1:-1;;;37856:60:0;;9877:2:1;37856:60:0;;;9859:21:1;9916:2;9896:18;;;9889:30;-1:-1:-1;;;9935:18:1;;;9928:54;9999:18;;37856:60:0;9675:348:1;37856:60:0;37953:1;37943:9;;:11;;;;:::i;:::-;37931:9;:23;37975:9;37995:1721;;;;38023:11;;;;38020:79;;;-1:-1:-1;;;;;38064:18:0;;;;;;:10;:18;;;;;;;;38063:19;38055:28;;;;;;38117:38;:21;38148:6;38117:30;:38::i;:::-;38113:414;;-1:-1:-1;;;;;38300:17:0;;;;;;:9;:17;;;;;;38319:15;-1:-1:-1;38300:34:0;;:52;;-1:-1:-1;38336:16:0;;;;;;;38300:52;38292:82;;;;-1:-1:-1;;;38292:82:0;;16971:2:1;38292:82:0;;;16953:21:1;17010:2;16990:18;;;16983:30;-1:-1:-1;;;17029:18:1;;;17022:48;17087:18;;38292:82:0;16769:342:1;38292:82:0;38499:12;;38483:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;38465:17:0;;;;;;:9;:17;;;;;:46;38113:414;38662:9;;38655:6;:16;38652:80;;;38692:11;:24;;;;;;;-1:-1:-1;38692:24:0;;;;;;;;-1:-1:-1;;;;;;38692:24:0;-1:-1:-1;;;;;38692:24:0;;;;;38652:80;38762:9;;38754:6;:17;;38746:44;;;;-1:-1:-1;;;38746:44:0;;12034:2:1;38746:44:0;;;12016:21:1;12073:2;12053:18;;;12046:30;-1:-1:-1;;;12092:18:1;;;12085:45;12147:18;;38746:44:0;11832:339:1;38746:44:0;-1:-1:-1;38809:8:0;;;;;;;37995:1721;;;38840:5;38837:879;;;38985:12;;38960:23;38977:6;38960:16;:23;:::i;:::-;:37;;38952:65;;;;-1:-1:-1;;;38952:65:0;;;;;;;:::i;:::-;39048:8;;39040:6;:16;;39032:45;;;;-1:-1:-1;;;39032:45:0;;;;;;;:::i;:::-;-1:-1:-1;39096:7:0;;;;38837:879;;;39272:12;;39247:23;39264:6;39247:16;:23;:::i;:::-;:37;;39239:65;;;;-1:-1:-1;;;39239:65:0;;;;;;;:::i;:::-;39536:38;:21;39567:6;39536:30;:38::i;:::-;39532:139;;-1:-1:-1;;;;;39601:17:0;;;;;;:9;:17;;;;;;39620:15;-1:-1:-1;39601:34:0;;:52;;-1:-1:-1;39637:16:0;;;;;;;39601:52;39593:78;;;;-1:-1:-1;;;39593:78:0;;15591:2:1;39593:78:0;;;15573:21:1;15630:2;15610:18;;;15603:30;-1:-1:-1;;;15649:18:1;;;15642:44;15703:18;;39593:78:0;15389:338:1;39593:78:0;-1:-1:-1;39690:12:0;;;;;;;38837:879;40051:19;;-1:-1:-1;;;;;40043:27:0;;;-1:-1:-1;;;40051:19:0;;;;40043:27;;;;40042:50;;-1:-1:-1;40075:16:0;;;;40074:17;40042:50;:82;;;;-1:-1:-1;40096:27:0;;;;40095:28;40042:82;40039:126;;;40139:26;40158:6;40139:18;:26::i;:::-;40336:13;;40273:21;;40295:55;;40309:6;;40317:3;;40322:27;;40336:13;;;;;;;-1:-1:-1;;;40322:13:0;;;:27;:::i;:::-;40295:13;:55::i;:::-;40273:77;-1:-1:-1;40414:19:0;40434:22;40273:77;40434:6;:22;:::i;:::-;40414:42;;40514:27;40527:6;40534;40514:12;:27::i;:::-;40636:4;40618:24;;;;:9;:24;;;;;:41;;40646:13;;40618:24;:41;;40646:13;;40618:41;:::i;:::-;;;;-1:-1:-1;40714:33:0;;-1:-1:-1;40724:9:0;40735:11;40714:9;:33::i;:::-;40789:9;-1:-1:-1;;;;;40773:38:0;40782:6;-1:-1:-1;;;;;40773:38:0;;40799:11;40773:38;;;;8690:25:1;;8678:2;8663:18;;8536:185;40773:38:0;;;;;;;;37735:3098;;;;;37630:3203;;;;;:::o;45865:455::-;45958:14;;45926:56;;45943:4;;-1:-1:-1;;;;;45958:14:0;45975:6;45926:8;:56::i;:::-;46017:16;;;46031:1;46017:16;;;;;;;;45993:21;;46017:16;;;;;;;;;;-1:-1:-1;46017:16:0;45993:40;;46062:4;46044;46049:1;46044:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46044:23:0;;;:7;;;;;;;;;;:23;;;;46088:14;;:21;;;-1:-1:-1;;;46088:21:0;;;;:14;;;;;:19;;:21;;;;;46044:7;;46088:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46078:4;46083:1;46078:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46078:31:0;;;:7;;;;;;;;;:31;46122:14;;:190;;-1:-1:-1;;;46122:190:0;;:14;;;:65;;:190;;46202:6;;46122:14;;46239:4;;46266;;46286:15;;46122:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45915:405;45865:455;:::o;46332:397::-;46426:9;46414:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;46478:14:0;;46446:61;;46463:4;;-1:-1:-1;;;;;46478:14:0;46495:11;46446:8;:61::i;:::-;46518:14;;:203;;-1:-1:-1;;;46518:203:0;;46589:4;46518:203;;;7807:34:1;;;7857:18;;;7850:34;;;46518:14:0;7900:18:1;;;7893:34;;;7943:18;;;7936:34;7986:19;;;7979:44;46695:15:0;8039:19:1;;;8032:35;-1:-1:-1;;;;;46518:14:0;;;;:30;;46556:9;;7741:19:1;;46518:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43018:213::-;43155:14;;43117:22;;43173:3;;43143:26;;43155:14;;43143:9;:26;:::i;:::-;43142:34;;;;:::i;:::-;43117:59;;43207:14;43189:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;43018:213:0:o;41844:202::-;-1:-1:-1;;;;;41979:15:0;;41961:17;41979:15;;;:9;:15;;;;;;:22;;41995:6;;41979:22;:::i;:::-;-1:-1:-1;;;;;42013:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;41844:202:0:o;41552:200::-;-1:-1:-1;;;;;41684:15:0;;41666:17;41684:15;;;:9;:15;;;;;;:22;;41700:6;;41684:22;:::i;41388:156::-;41478:7;41531:5;41517:10;41506:21;;41513:3;41506:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;41505:31;;;;:::i;:::-;41498:38;41388:156;-1:-1:-1;;;;41388:156:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:919::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;363:18;400:2;396;393:10;390:36;;;406:18;;:::i;:::-;452:2;449:1;445:10;484:2;478:9;547:2;543:7;538:2;534;530:11;526:25;518:6;514:38;602:6;590:10;587:22;582:2;570:10;567:18;564:46;561:72;;;613:18;;:::i;:::-;649:2;642:22;699:18;;;733:15;;;;-1:-1:-1;768:15:1;;;802;;;798:24;;795:33;-1:-1:-1;792:53:1;;;841:1;838;831:12;792:53;863:1;854:10;;873:169;887:2;884:1;881:9;873:169;;;944:23;963:3;944:23;:::i;:::-;932:36;;988:12;;;;905:1;898:9;;;;;1020:12;;873:169;;;-1:-1:-1;1060:6:1;153:919;-1:-1:-1;;;;;;;153:919:1:o;1077:156::-;1143:20;;1203:4;1192:16;;1182:27;;1172:55;;1223:1;1220;1213:12;1238:247;1297:6;1350:2;1338:9;1329:7;1325:23;1321:32;1318:52;;;1366:1;1363;1356:12;1318:52;1405:9;1392:23;1424:31;1449:5;1424:31;:::i;1490:251::-;1560:6;1613:2;1601:9;1592:7;1588:23;1584:32;1581:52;;;1629:1;1626;1619:12;1581:52;1661:9;1655:16;1680:31;1705:5;1680:31;:::i;1746:388::-;1814:6;1822;1875:2;1863:9;1854:7;1850:23;1846:32;1843:52;;;1891:1;1888;1881:12;1843:52;1930:9;1917:23;1949:31;1974:5;1949:31;:::i;:::-;1999:5;-1:-1:-1;2056:2:1;2041:18;;2028:32;2069:33;2028:32;2069:33;:::i;:::-;2121:7;2111:17;;;1746:388;;;;;:::o;2139:456::-;2216:6;2224;2232;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2340:9;2327:23;2359:31;2384:5;2359:31;:::i;:::-;2409:5;-1:-1:-1;2466:2:1;2451:18;;2438:32;2479:33;2438:32;2479:33;:::i;:::-;2139:456;;2531:7;;-1:-1:-1;;;2585:2:1;2570:18;;;;2557:32;;2139:456::o;2600:382::-;2665:6;2673;2726:2;2714:9;2705:7;2701:23;2697:32;2694:52;;;2742:1;2739;2732:12;2694:52;2781:9;2768:23;2800:31;2825:5;2800:31;:::i;:::-;2850:5;-1:-1:-1;2907:2:1;2892:18;;2879:32;2920:30;2879:32;2920:30;:::i;2987:315::-;3055:6;3063;3116:2;3104:9;3095:7;3091:23;3087:32;3084:52;;;3132:1;3129;3122:12;3084:52;3171:9;3158:23;3190:31;3215:5;3190:31;:::i;:::-;3240:5;3292:2;3277:18;;;;3264:32;;-1:-1:-1;;;2987:315:1:o;3307:348::-;3391:6;3444:2;3432:9;3423:7;3419:23;3415:32;3412:52;;;3460:1;3457;3450:12;3412:52;3500:9;3487:23;3533:18;3525:6;3522:30;3519:50;;;3565:1;3562;3555:12;3519:50;3588:61;3641:7;3632:6;3621:9;3617:22;3588:61;:::i;3660:477::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3867:9;3854:23;3900:18;3892:6;3889:30;3886:50;;;3932:1;3929;3922:12;3886:50;3955:61;4008:7;3999:6;3988:9;3984:22;3955:61;:::i;:::-;3945:71;;;4066:2;4055:9;4051:18;4038:32;4079:28;4101:5;4079:28;:::i;4142:241::-;4198:6;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:28;4347:5;4325:28;:::i;4388:245::-;4455:6;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4556:9;4550:16;4575:28;4597:5;4575:28;:::i;4638:180::-;4697:6;4750:2;4738:9;4729:7;4725:23;4721:32;4718:52;;;4766:1;4763;4756:12;4718:52;-1:-1:-1;4789:23:1;;4638:180;-1:-1:-1;4638:180:1:o;4823:184::-;4893:6;4946:2;4934:9;4925:7;4921:23;4917:32;4914:52;;;4962:1;4959;4952:12;4914:52;-1:-1:-1;4985:16:1;;4823:184;-1:-1:-1;4823:184:1:o;5012:248::-;5080:6;5088;5141:2;5129:9;5120:7;5116:23;5112:32;5109:52;;;5157:1;5154;5147:12;5109:52;-1:-1:-1;;5180:23:1;;;5250:2;5235:18;;;5222:32;;-1:-1:-1;5012:248:1:o;5265:306::-;5353:6;5361;5369;5422:2;5410:9;5401:7;5397:23;5393:32;5390:52;;;5438:1;5435;5428:12;5390:52;5467:9;5461:16;5451:26;;5517:2;5506:9;5502:18;5496:25;5486:35;;5561:2;5550:9;5546:18;5540:25;5530:35;;5265:306;;;;;:::o;5576:182::-;5633:6;5686:2;5674:9;5665:7;5661:23;5657:32;5654:52;;;5702:1;5699;5692:12;5654:52;5725:27;5742:9;5725:27;:::i;5763:535::-;5855:6;5863;5871;5879;5887;5895;5948:3;5936:9;5927:7;5923:23;5919:33;5916:53;;;5965:1;5962;5955:12;5916:53;5988:27;6005:9;5988:27;:::i;:::-;5978:37;;6034:36;6066:2;6055:9;6051:18;6034:36;:::i;:::-;6024:46;;6089:36;6121:2;6110:9;6106:18;6089:36;:::i;:::-;6079:46;;6144:36;6176:2;6165:9;6161:18;6144:36;:::i;:::-;6134:46;;6199:37;6231:3;6220:9;6216:19;6199:37;:::i;:::-;6189:47;;6255:37;6287:3;6276:9;6272:19;6255:37;:::i;:::-;6245:47;;5763:535;;;;;;;;:::o;6303:461::-;6356:3;6394:5;6388:12;6421:6;6416:3;6409:19;6447:4;6476:2;6471:3;6467:12;6460:19;;6513:2;6506:5;6502:14;6534:1;6544:195;6558:6;6555:1;6552:13;6544:195;;;6623:13;;-1:-1:-1;;;;;6619:39:1;6607:52;;6679:12;;;;6714:15;;;;6655:1;6573:9;6544:195;;;-1:-1:-1;6755:3:1;;6303:461;-1:-1:-1;;;;;6303:461:1:o;8078:261::-;8257:2;8246:9;8239:21;8220:4;8277:56;8329:2;8318:9;8314:18;8306:6;8277:56;:::i;8726:597::-;8838:4;8867:2;8896;8885:9;8878:21;8928:6;8922:13;8971:6;8966:2;8955:9;8951:18;8944:34;8996:1;9006:140;9020:6;9017:1;9014:13;9006:140;;;9115:14;;;9111:23;;9105:30;9081:17;;;9100:2;9077:26;9070:66;9035:10;;9006:140;;;9164:6;9161:1;9158:13;9155:91;;;9234:1;9229:2;9220:6;9209:9;9205:22;9201:31;9194:42;9155:91;-1:-1:-1;9307:2:1;9286:15;-1:-1:-1;;9282:29:1;9267:45;;;;9314:2;9263:54;;8726:597;-1:-1:-1;;;8726:597:1:o;13990:342::-;14192:2;14174:21;;;14231:2;14211:18;;;14204:30;-1:-1:-1;;;14265:2:1;14250:18;;14243:48;14323:2;14308:18;;13990:342::o;15044:340::-;15246:2;15228:21;;;15285:2;15265:18;;;15258:30;-1:-1:-1;;;15319:2:1;15304:18;;15297:46;15375:2;15360:18;;15044:340::o;17491:582::-;17790:6;17779:9;17772:25;17833:6;17828:2;17817:9;17813:18;17806:34;17876:3;17871:2;17860:9;17856:18;17849:31;17753:4;17897:57;17949:3;17938:9;17934:19;17926:6;17897:57;:::i;:::-;-1:-1:-1;;;;;17990:32:1;;;;17985:2;17970:18;;17963:60;-1:-1:-1;18054:3:1;18039:19;18032:35;17889:65;17491:582;-1:-1:-1;;;17491:582:1:o;18988:128::-;19028:3;19059:1;19055:6;19052:1;19049:13;19046:39;;;19065:18;;:::i;:::-;-1:-1:-1;19101:9:1;;18988:128::o;19121:204::-;19159:3;19195:4;19192:1;19188:12;19227:4;19224:1;19220:12;19262:3;19256:4;19252:14;19247:3;19244:23;19241:49;;;19270:18;;:::i;:::-;19306:13;;19121:204;-1:-1:-1;;;19121:204:1:o;19330:217::-;19370:1;19396;19386:132;;19440:10;19435:3;19431:20;19428:1;19421:31;19475:4;19472:1;19465:15;19503:4;19500:1;19493:15;19386:132;-1:-1:-1;19532:9:1;;19330:217::o;19552:422::-;19641:1;19684:5;19641:1;19698:270;19719:7;19709:8;19706:21;19698:270;;;19778:4;19774:1;19770:6;19766:17;19760:4;19757:27;19754:53;;;19787:18;;:::i;:::-;19837:7;19827:8;19823:22;19820:55;;;19857:16;;;;19820:55;19936:22;;;;19896:15;;;;19698:270;;;19702:3;19552:422;;;;;:::o;19979:140::-;20037:5;20066:47;20107:4;20097:8;20093:19;20087:4;20173:5;20203:8;20193:80;;-1:-1:-1;20244:1:1;20258:5;;20193:80;20292:4;20282:76;;-1:-1:-1;20329:1:1;20343:5;;20282:76;20374:4;20392:1;20387:59;;;;20460:1;20455:130;;;;20367:218;;20387:59;20417:1;20408:10;;20431:5;;;20455:130;20492:3;20482:8;20479:17;20476:43;;;20499:18;;:::i;:::-;-1:-1:-1;;20555:1:1;20541:16;;20570:5;;20367:218;;20669:2;20659:8;20656:16;20650:3;20644:4;20641:13;20637:36;20631:2;20621:8;20618:16;20613:2;20607:4;20604:12;20600:35;20597:77;20594:159;;;-1:-1:-1;20706:19:1;;;20738:5;;20594:159;20785:34;20810:8;20804:4;20785:34;:::i;:::-;20855:6;20851:1;20847:6;20843:19;20834:7;20831:32;20828:58;;;20866:18;;:::i;:::-;20904:20;;20124:806;-1:-1:-1;;;20124:806:1:o;20935:168::-;20975:7;21041:1;21037;21033:6;21029:14;21026:1;21023:21;21018:1;21011:9;21004:17;21000:45;20997:71;;;21048:18;;:::i;:::-;-1:-1:-1;21088:9:1;;20935:168::o;21108:125::-;21148:4;21176:1;21173;21170:8;21167:34;;;21181:18;;:::i;:::-;-1:-1:-1;21218:9:1;;21108:125::o;21238:135::-;21277:3;-1:-1:-1;;21298:17:1;;21295:43;;;21318:18;;:::i;:::-;-1:-1:-1;21365:1:1;21354:13;;21238:135::o;21378:127::-;21439:10;21434:3;21430:20;21427:1;21420:31;21470:4;21467:1;21460:15;21494:4;21491:1;21484:15;21510:127;21571:10;21566:3;21562:20;21559:1;21552:31;21602:4;21599:1;21592:15;21626:4;21623:1;21616:15;21642:127;21703:10;21698:3;21694:20;21691:1;21684:31;21734:4;21731:1;21724:15;21758:4;21755:1;21748:15;21774:127;21835:10;21830:3;21826:20;21823:1;21816:31;21866:4;21863:1;21856:15;21890:4;21887:1;21880:15;21906:131;-1:-1:-1;;;;;21981:31:1;;21971:42;;21961:70;;22027:1;22024;22017:12;22042:118;22128:5;22121:13;22114:21;22107:5;22104:32;22094:60;;22150:1;22147;22140:12

Swarm Source

ipfs://c2d054da6d66500f10455105d437f05cf440994d0ce79f0836673836ad80a426

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.