ETH Price: $2,603.79 (-0.87%)

Token

ADRENALINE_EXCLUSIVE (ADRENALINE_EXCLUSIVE)
 

Overview

Max Total Supply

500 ADRENALINE_EXCLUSIVE

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
mrtwo.eth
Balance
1 ADRENALINE_EXCLUSIVE

Value
$0.00
0x16be140c76b73082a21dc30c50fa0c3161a46834
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AdrenalineExclusive

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-04-21
*/

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "ADRENALINE_EXCLUSIVE";
    string private _symbol = "ADRENALINE_EXCLUSIVE";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 500 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public ethPriceToSwap = 2000000000000000000; //2 ETH
    uint public ethSellAmount = 100000000000000000;  //.1 ETH
    uint256 public _maxBuyAmount = 20 * 10** _decimals;
    uint256 public _maxWalletAmount = 20 * 10** _decimals;
    address public buyBackAddress = 0xf57d3Edd863e237490c991C12Dd1bb80E6DDCBbA;
    address public investmentAddress = 0x67C0feB667018884C090F4418D315dF0425F6912;
    address public devAddress = 0xcd9Bc9e17164B430663a97BD74b278bDBaB5b1bC;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedExclusiveDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);

    struct Distribution {
        uint256 devTeam;
        uint256 investment;
        uint256 dividend;
        uint256 buyBack;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 largeSellFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    ExclusiveDividendTracker private dividendTracker;

    constructor () {
        _balances[_msgSender()] = _tTotal*50/100;
        _balances[0xf57d3Edd863e237490c991C12Dd1bb80E6DDCBbA] = _tTotal*50/100;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[buyBackAddress] = true;
        _isExcludedFromFee[investmentAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[investmentAddress] = true;
        _isExcludedFromRewards[_msgSender()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[buyBackAddress] = true;
        _isExcludedFromRewards[devAddress] = true;
        _isExcludedFromRewards[deadWallet] = true;
        taxFees = TaxFees(5,5,45);
        distribution = Distribution(0, 80, 0, 20);
        emit Transfer(address(0), _msgSender(), _tTotal*50/100);
        emit Transfer(address(0), 0xf57d3Edd863e237490c991C12Dd1bb80E6DDCBbA, _tTotal*50/100);

    }

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

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

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

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

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


    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10**9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner {
        _addRemoveExchange(addresses, isAddExchange);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns(bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthSwapSellSettings(uint ethSellAmount_, uint256 ethPriceToSwap_) external onlyOwner {
        ethSellAmount = ethSellAmount_;
        ethPriceToSwap = ethPriceToSwap_;
    }

    function createV2Pair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
    }
    function _addRemoveExchange(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            isExchangeWallet[addr] = flag;
        }
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() {
        _maxBuyAmount = maxBuyAmount * 10**9;
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.largeSellFee = largeSellFee;
    }

    function setDistribution(uint256 dividend, uint256 devTeam, uint256 investment, uint256 buyBack) external onlyOwner {
        distribution.dividend = dividend;
        distribution.devTeam = devTeam;
        distribution.investment = investment;
        distribution.buyBack = buyBack;
    }

    function setWalletAddresses(address devAddr, address buyBack, address investmentAddr) external onlyOwner {
        devAddress = devAddr;
        buyBackAddress = buyBack;
        investmentAddress = investmentAddr;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

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

    receive() external payable {}

    function getEthPrice(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        return uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner {
        isTaxFreeTransfer = enableDisable;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair || isExchangeWallet[from]) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
            // dividendTracker.calculateDividendDistribution();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) {
            if(takeFees) {
                takeFees = isTaxFreeTransfer ? false : true;
            }
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            uint ethPrice = getEthPrice(contractTokenBalance);
            if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets investment and dev
                distributeShares(contractTokenBalance);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 distributionEth = address(this).balance;
        uint256 investmentShare = distributionEth.mul(distribution.investment).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
        uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100);
        payable(investmentAddress).transfer(investmentShare);
        sendEthDividends(dividendShare);
        payable(devAddress).transfer(devTeamShare);
        payable(buyBackAddress).transfer(buyBackShare);

    }

    function setExclusiveDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = ExclusiveDividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if(takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).div(100);
            if(taxFees.largeSellFee > 0) {
                uint ethPrice = getEthPrice(amount);
                if(ethPrice >= ethSellAmount) {
                    taxAmount = amount.mul(taxFees.largeSellFee).div(100);
                }
            }
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);

        if(doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedExclusiveDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns(bool) {
        return (getIndexOfKey(key) != -1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract ExclusiveDividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "ADRENALINE EXCLUSIVE SHOTS";
    string private _symbol = "ADRENALINE EXCLUSIVE SHOTS";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 1 * 10 **  _decimals;
    AdrenalineExclusive private adrenalineexclusive;
    bool public doCalculation = false;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() {
        emit Transfer(address(0), _msgSender(), 0);
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setTokenBalance(address account) external {
        uint256 balance = adrenalineexclusive.balanceOf(account);
        if(!adrenalineexclusive.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if(balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        adrenalineexclusive = AdrenalineExclusive(payable(contractAddr));
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}("");
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }
    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for(uint index = 0; index < newholders.length; index++){
            address account = newholders[index];
            uint256 amount = amounts[index] * 10**9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }
        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedExclusiveDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"investmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethSellAmount_","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthSwapSellSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setExclusiveDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devAddr","type":"address"},{"internalType":"address","name":"buyBack","type":"address"},{"internalType":"address","name":"investmentAddr","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601481526020017f414452454e414c494e455f4558434c555349564500000000000000000000000081525060099081620000e1919062000e73565b506040518060400160405280601481526020017f414452454e414c494e455f4558434c5553495645000000000000000000000000815250600a908162000128919062000e73565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a620001639190620010ea565b6101f46200017291906200113b565b600c556001600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff021916908315150217905550671bc16d674ec80000600e5567016345785d8a0000600f55600b60009054906101000a900460ff16600a620001e19190620010ea565b6014620001ef91906200113b565b601055600b60009054906101000a900460ff16600a620002109190620010ea565b60146200021e91906200113b565b60115573f57d3edd863e237490c991c12dd1bb80e6ddcbba601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507367c0feb667018884c090f4418d315df0425f6912601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cd9bc9e17164b430663a97bd74b278bdbab5b1bc601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506016553480156200037657600080fd5b5060006200038962000bc860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060646032600c546200043a91906200113b565b620004469190620011b5565b600360006200045a62000bc860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646032600c54620004ab91906200113b565b620004b79190620011b5565b6003600073f57d3edd863e237490c991c12dd1bb80e6ddcbba73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600660006200052462000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660006200058b62000bc860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620007da62000bc860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200084162000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180606001604052806005815260200160058152602001602d815250601860008201518160000155602082015181600101556040820151816002015590505060405180608001604052806000815260200160508152602001600081526020016014815250601b6000820151816000015560208201518160010155604082015181600201556060820151816003015590505062000aa362000bc860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646032600c5462000b0591906200113b565b62000b119190620011b5565b60405162000b209190620011fe565b60405180910390a373f57d3edd863e237490c991c12dd1bb80e6ddcbba73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646032600c5462000b9f91906200113b565b62000bab9190620011b5565b60405162000bba9190620011fe565b60405180910390a36200121b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c7b57607f821691505b60208210810362000c915762000c9062000c33565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cbc565b62000d07868362000cbc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5462000d4e62000d488462000d1f565b62000d29565b62000d1f565b9050919050565b6000819050919050565b62000d708362000d33565b62000d8862000d7f8262000d5b565b84845462000cc9565b825550505050565b600090565b62000d9f62000d90565b62000dac81848462000d65565b505050565b5b8181101562000dd45762000dc860008262000d95565b60018101905062000db2565b5050565b601f82111562000e235762000ded8162000c97565b62000df88462000cac565b8101602085101562000e08578190505b62000e2062000e178562000cac565b83018262000db1565b50505b505050565b600082821c905092915050565b600062000e486000198460080262000e28565b1980831691505092915050565b600062000e63838362000e35565b9150826002028217905092915050565b62000e7e8262000bf9565b67ffffffffffffffff81111562000e9a5762000e9962000c04565b5b62000ea6825462000c62565b62000eb382828562000dd8565b600060209050601f83116001811462000eeb576000841562000ed6578287015190505b62000ee2858262000e55565b86555062000f52565b601f19841662000efb8662000c97565b60005b8281101562000f255784890151825560018201915060208501945060208101905062000efe565b8683101562000f45578489015162000f41601f89168262000e35565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fe85780860481111562000fc05762000fbf62000f5a565b5b600185161562000fd05780820291505b808102905062000fe08562000f89565b945062000fa0565b94509492505050565b600082620010035760019050620010d6565b81620010135760009050620010d6565b81600181146200102c576002811462001037576200106d565b6001915050620010d6565b60ff8411156200104c576200104b62000f5a565b5b8360020a91508482111562001066576200106562000f5a565b5b50620010d6565b5060208310610133831016604e8410600b8410161715620010a75782820a905083811115620010a157620010a062000f5a565b5b620010d6565b620010b6848484600162000f96565b92509050818404811115620010d057620010cf62000f5a565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010f78262000d1f565b91506200110483620010dd565b9250620011337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ff1565b905092915050565b6000620011488262000d1f565b9150620011558362000d1f565b9250828202620011658162000d1f565b915082820484148315176200117f576200117e62000f5a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011c28262000d1f565b9150620011cf8362000d1f565b925082620011e257620011e162001186565b5b828204905092915050565b620011f88162000d1f565b82525050565b6000602082019050620012156000830184620011ed565b92915050565b615bde806200122b6000396000f3fe6080604052600436106102b25760003560e01c806371cd56af116101755780639758f61d116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f914610ac2578063f2fde38b14610aff578063f34eb0b814610b28578063fb6287d214610b51576102b9565b8063c49b9a8014610a33578063dcda6af314610a5c578063dd62ed3e14610a85576102b9565b80639758f61d146109255780639b0e2e861461094e5780639c1b8af514610977578063a457c2d7146109a2578063a9059cbb146109df578063b6a9987214610a1c576102b9565b8063870d365d1161012e578063870d365d14610815578063871c128d146108525780638da5cb5b1461087b57806391142cb3146108a657806395d89b41146108d157806396848136146108fc576102b9565b806371cd56af1461071b5780637791ca1d14610744578063783478ad1461076d5780637bde92bc1461079857806385141a77146107c157806385d4787b146107ec576102b9565b80633ad10ef6116102195780635342acb4116101d25780635342acb41461060657806354a5df1f146106435780635ee58efc1461066e5780636c0a24eb1461069c57806370a08231146106c7578063715018a614610704576102b9565b80633ad10ef614610508578063441d801f1461053357806349bd5a5e1461055c5780634a74bb02146105875780634e781233146105b257806353030d91146105db576102b9565b80631694505e1161026b5780631694505e146103e457806318160ddd1461040f57806323b872dd1461043a57806327a14fc214610477578063313ce567146104a057806339509351146104cb576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e8322731461037e5780630fc709e5146103bb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7a565b6040516102e09190614375565b60405180910390f35b3480156102f557600080fd5b506102fe610b80565b60405161030b9190614420565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906144e0565b610c12565b604051610348919061453b565b60405180910390f35b34801561035d57600080fd5b50610366610c30565b60405161037593929190614556565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061458d565b610c48565b6040516103b2919061453b565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906145ba565b610c9e565b005b3480156103f057600080fd5b506103f9610d61565b6040516104069190614680565b60405180910390f35b34801561041b57600080fd5b50610424610d87565b6040516104319190614375565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061469b565b610d91565b60405161046e919061453b565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906146ee565b610e6a565b005b3480156104ac57600080fd5b506104b5610f18565b6040516104c29190614737565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906144e0565b610f2f565b6040516104ff919061453b565b60405180910390f35b34801561051457600080fd5b5061051d610fe2565b60405161052a9190614761565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061480d565b611008565b005b34801561056857600080fd5b506105716110ad565b60405161057e9190614761565b60405180910390f35b34801561059357600080fd5b5061059c6110d3565b6040516105a9919061453b565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061486d565b6110e6565b005b3480156105e757600080fd5b506105f0611198565b6040516105fd9190614761565b60405180910390f35b34801561061257600080fd5b5061062d6004803603810190610628919061458d565b6111be565b60405161063a919061453b565b60405180910390f35b34801561064f57600080fd5b50610658611214565b6040516106659190614375565b60405180910390f35b34801561067a57600080fd5b5061068361121a565b604051610693949392919061489a565b60405180910390f35b3480156106a857600080fd5b506106b1611238565b6040516106be9190614375565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061458d565b61123e565b6040516106fb9190614375565b60405180910390f35b34801561071057600080fd5b50610719611287565b005b34801561072757600080fd5b50610742600480360381019061073d919061480d565b6113da565b005b34801561075057600080fd5b5061076b6004803603810190610766919061458d565b61147f565b005b34801561077957600080fd5b50610782611558565b60405161078f9190614761565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba91906148df565b61157e565b005b3480156107cd57600080fd5b506107d6611625565b6040516107e39190614761565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190614a5d565b61164b565b005b34801561082157600080fd5b5061083c600480360381019061083791906146ee565b6116ee565b6040516108499190614375565b60405180910390f35b34801561085e57600080fd5b50610879600480360381019061087491906146ee565b611931565b005b34801561088757600080fd5b50610890611a14565b60405161089d9190614761565b60405180910390f35b3480156108b257600080fd5b506108bb611a3d565b6040516108c89190614375565b60405180910390f35b3480156108dd57600080fd5b506108e6611a43565b6040516108f39190614420565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e919061480d565b611ad5565b005b34801561093157600080fd5b5061094c60048036038101906109479190614aa6565b611b7a565b005b34801561095a57600080fd5b5061097560048036038101906109709190614a5d565b611c32565b005b34801561098357600080fd5b5061098c611cd5565b6040516109999190614375565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906144e0565b611cdb565b6040516109d6919061453b565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906144e0565b611da8565b604051610a13919061453b565b60405180910390f35b348015610a2857600080fd5b50610a31611dc6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a55919061486d565b612146565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190614b4f565b61222f565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190614bd0565b612399565b604051610ab99190614375565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae4919061458d565b612420565b604051610af6919061453b565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b21919061458d565b612476565b005b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906146ee565b612637565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614c10565b6126e5565b005b60105481565b606060098054610b8f90614c92565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90614c92565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c26610c1f612842565b848461284a565b6001905092915050565b60188060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ca6612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614d0f565b60405180910390fd5b83601b6002018190555082601b6000018190555081601b6001018190555080601b6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d9e848484612a13565b610e5f84610daa612842565b610e5a85604051806060016040528060288152602001615b5c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e10612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b600190509392505050565b610e72612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614d0f565b60405180910390fd5b633b9aca0081610f0f9190614d5e565b60118190555050565b6000600b60009054906101000a900460ff16905090565b6000610fd8610f3c612842565b84610fd38560046000610f4d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b61284a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611010612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614d0f565b60405180910390fd5b6110a8838383613403565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b6110ee612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290614d0f565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b601b8060000154908060010154908060020154908060030154905084565b60115481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614d0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113e2612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614d0f565b60405180910390fd5b61147a8383836134ae565b505050565b611487612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614d0f565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611586612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90614d0f565b60405180910390fd5b81600f8190555080600e819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611653612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790614d0f565b60405180910390fd5b6116eb816001613559565b50565b600080600267ffffffffffffffff81111561170c5761170b61491f565b5b60405190808252806020026020018201604052801561173a5781602001602082028036833780820191505090505b509050308160008151811061175257611751614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181d9190614de4565b8160018151811061183157611830614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016118c8929190614ecf565b600060405180830381865afa1580156118e5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061190e9190614fd7565b60018151811061192157611920614da0565b5b6020026020010151915050919050565b611939612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90614d0f565b60405180910390fd5b6016548103611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190615092565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600a8054611a5290614c92565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7e90614c92565b8015611acb5780601f10611aa057610100808354040283529160200191611acb565b820191906000526020600020905b815481529060010190602001808311611aae57829003601f168201915b5050505050905090565b611add612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190614d0f565b60405180910390fd5b611b75838383613650565b505050565b611b82612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690614d0f565b60405180910390fd5b826018600001819055508160186001018190555080601860020181905550505050565b611c3a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614d0f565b60405180910390fd5b611cd2816000613559565b50565b60165481565b6000611d9e611ce8612842565b84611d9985604051806060016040528060258152602001615b846025913960046000611d12612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b6001905092915050565b6000611dbc611db5612842565b8484612a13565b6001905092915050565b611dce612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614d0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390615124565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d9190614de4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614de4565b6040518363ffffffff1660e01b8152600401612047929190615144565b6020604051808303816000875af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190614de4565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b61214e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290614d0f565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612224919061453b565b60405180910390a150565b60006006600061223d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906151df565b60405180910390fd5b82829050858590501461230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390615271565b60405180910390fd5b5b848490508110156123925761237e612323612842565b86868481811061233657612335614da0565b5b905060200201602081019061234b919061458d565b633b9aca0086868681811061236357612362614da0565b5b905060200201356123749190614d5e565b60008060006136fb565b60018161238b9190615291565b905061230d565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61247e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614d0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190615337565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61263f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614d0f565b60405180910390fd5b633b9aca00816126dc9190614d5e565b60108190555050565b6126ed612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614d0f565b60405180910390fd5b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b0906153c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f9061545b565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a069190614375565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a79906154ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae89061557f565b60405180910390fd5b60008111612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc9061567d565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cab5750612c7b611a14565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750612cba611a14565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d0984612cfb8761123e565b6133a590919063ffffffff16565b9050612d13611a14565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d51611a14565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ddb5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ec457600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e845750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061570f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612f695750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff957601054841115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906157a1565b60405180910390fd5b601154811115612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fef90615833565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130a45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061314e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314d5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613160576001925061315f613c1e565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561320c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132625750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b85750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332a5781156132e457600d60029054906101000a900460ff166132de5760016132e1565b60005b91505b601154811115613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332090615833565b60405180910390fd5b5b613339868686858760016136fb565b505050505050565b6000838311158290613389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133809190614420565b60405180910390fd5b50600083856133989190615853565b9050809150509392505050565b60008082846133b49190615291565b9050838110156133f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f0906158d3565b60405180910390fd5b8091505092915050565b60005b838390508110156134a857600084848381811061342657613425614da0565b5b905060200201602081019061343b919061458d565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134a0906158f3565b915050613406565b50505050565b60005b838390508110156135535760008484838181106134d1576134d0614da0565b5b90506020020160208101906134e6919061458d565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061354b906158f3565b9150506134b1565b50505050565b60005b825181101561364b57600083828151811061357a57613579614da0565b5b6020026020010151905082156135e7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613637565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613643906158f3565b91505061355c565b505050565b60005b838390508110156136f557600084848381811061367357613672614da0565b5b9050602002016020810190613688919061458d565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136ed906158f3565b915050613653565b50505050565b600083613709576000613735565b613734606461372660186000015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b5b90508380156137415750825b156137c857613771606461376360186001015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050600060186002015411156137c757600061378c866116ee565b9050600f5481106137c5576137c260646137b460186002015489613c8c90919063ffffffff16565b613d0690919063ffffffff16565b91505b505b5b60006137dd8287613d5090919063ffffffff16565b905061383186600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c681600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395b82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139fb9190614375565b60405180910390a38215613c1457601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613a649190614761565b600060405180830381600087803b158015613a7e57600080fd5b505af1925050508015613a8f575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613aeb9190614761565b600060405180830381600087803b158015613b0557600080fd5b505af1925050508015613b16575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b8152600401613b749190614375565b6060604051808303816000875af1925050508015613bb057506040513d601f19601f82011682018060405250810190613bad919061593b565b60015b15613c13573273ffffffffffffffffffffffffffffffffffffffff16600115157f6877916204e9314c4b571655dd7e6678cd98a015f6086bb7ffd2acfd99c41469858585601654604051613c07949392919061489a565b60405180910390a35050505b5b5050505050505050565b6000613c293061123e565b90506000811115613c89576000613c3f826116ee565b9050600e548110158015613c605750600d60009054906101000a900460ff16155b8015613c785750600d60019054906101000a900460ff165b15613c8757613c8682613d9a565b5b505b50565b6000808303613c9e5760009050613d00565b60008284613cac9190614d5e565b9050828482613cbb91906159bd565b14613cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf290615a60565b60405180910390fd5b809150505b92915050565b6000613d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fe6565b905092915050565b6000613d9283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613341565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613dbe81614049565b60004790506000613df06064613de2601b6001015485613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e1f6064613e11601b6002015486613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e4e6064613e40601b6000015487613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e7d6064613e6f601b6003015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613ee7573d6000803e3d6000fd5b50613ef18361428c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613f59573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fc2573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b6000808311829061402d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140249190614420565b60405180910390fd5b506000838561403c91906159bd565b9050809150509392505050565b6000600267ffffffffffffffff8111156140665761406561491f565b5b6040519080825280602002602001820160405280156140945781602001602082028036833780820191505090505b50905030816000815181106140ac576140ab614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141779190614de4565b8160018151811061418b5761418a614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141f230600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614256959493929190615abb565b600060405180830381600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050505050565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142d490615b46565b60006040518083038185875af1925050503d8060008114614311576040519150601f19603f3d011682016040523d82523d6000602084013e614316565b606091505b505090508015614358577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161434f9190614375565b60405180910390a15b5050565b6000819050919050565b61436f8161435c565b82525050565b600060208201905061438a6000830184614366565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143ca5780820151818401526020810190506143af565b60008484015250505050565b6000601f19601f8301169050919050565b60006143f282614390565b6143fc818561439b565b935061440c8185602086016143ac565b614415816143d6565b840191505092915050565b6000602082019050818103600083015261443a81846143e7565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448182614456565b9050919050565b61449181614476565b811461449c57600080fd5b50565b6000813590506144ae81614488565b92915050565b6144bd8161435c565b81146144c857600080fd5b50565b6000813590506144da816144b4565b92915050565b600080604083850312156144f7576144f661444c565b5b60006145058582860161449f565b9250506020614516858286016144cb565b9150509250929050565b60008115159050919050565b61453581614520565b82525050565b6000602082019050614550600083018461452c565b92915050565b600060608201905061456b6000830186614366565b6145786020830185614366565b6145856040830184614366565b949350505050565b6000602082840312156145a3576145a261444c565b5b60006145b18482850161449f565b91505092915050565b600080600080608085870312156145d4576145d361444c565b5b60006145e2878288016144cb565b94505060206145f3878288016144cb565b9350506040614604878288016144cb565b9250506060614615878288016144cb565b91505092959194509250565b6000819050919050565b600061464661464161463c84614456565b614621565b614456565b9050919050565b60006146588261462b565b9050919050565b600061466a8261464d565b9050919050565b61467a8161465f565b82525050565b60006020820190506146956000830184614671565b92915050565b6000806000606084860312156146b4576146b361444c565b5b60006146c28682870161449f565b93505060206146d38682870161449f565b92505060406146e4868287016144cb565b9150509250925092565b6000602082840312156147045761470361444c565b5b6000614712848285016144cb565b91505092915050565b600060ff82169050919050565b6147318161471b565b82525050565b600060208201905061474c6000830184614728565b92915050565b61475b81614476565b82525050565b60006020820190506147766000830184614752565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a1576147a061477c565b5b8235905067ffffffffffffffff8111156147be576147bd614781565b5b6020830191508360208202830111156147da576147d9614786565b5b9250929050565b6147ea81614520565b81146147f557600080fd5b50565b600081359050614807816147e1565b92915050565b6000806000604084860312156148265761482561444c565b5b600084013567ffffffffffffffff81111561484457614843614451565b5b6148508682870161478b565b93509350506020614863868287016147f8565b9150509250925092565b6000602082840312156148835761488261444c565b5b6000614891848285016147f8565b91505092915050565b60006080820190506148af6000830187614366565b6148bc6020830186614366565b6148c96040830185614366565b6148d66060830184614366565b95945050505050565b600080604083850312156148f6576148f561444c565b5b6000614904858286016144cb565b9250506020614915858286016144cb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614957826143d6565b810181811067ffffffffffffffff821117156149765761497561491f565b5b80604052505050565b6000614989614442565b9050614995828261494e565b919050565b600067ffffffffffffffff8211156149b5576149b461491f565b5b602082029050602081019050919050565b60006149d96149d48461499a565b61497f565b905080838252602082019050602084028301858111156149fc576149fb614786565b5b835b81811015614a255780614a11888261449f565b8452602084019350506020810190506149fe565b5050509392505050565b600082601f830112614a4457614a4361477c565b5b8135614a548482602086016149c6565b91505092915050565b600060208284031215614a7357614a7261444c565b5b600082013567ffffffffffffffff811115614a9157614a90614451565b5b614a9d84828501614a2f565b91505092915050565b600080600060608486031215614abf57614abe61444c565b5b6000614acd868287016144cb565b9350506020614ade868287016144cb565b9250506040614aef868287016144cb565b9150509250925092565b60008083601f840112614b0f57614b0e61477c565b5b8235905067ffffffffffffffff811115614b2c57614b2b614781565b5b602083019150836020820283011115614b4857614b47614786565b5b9250929050565b60008060008060408587031215614b6957614b6861444c565b5b600085013567ffffffffffffffff811115614b8757614b86614451565b5b614b938782880161478b565b9450945050602085013567ffffffffffffffff811115614bb657614bb5614451565b5b614bc287828801614af9565b925092505092959194509250565b60008060408385031215614be757614be661444c565b5b6000614bf58582860161449f565b9250506020614c068582860161449f565b9150509250929050565b600080600060608486031215614c2957614c2861444c565b5b6000614c378682870161449f565b9350506020614c488682870161449f565b9250506040614c598682870161449f565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614caa57607f821691505b602082108103614cbd57614cbc614c63565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cf960208361439b565b9150614d0482614cc3565b602082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d698261435c565b9150614d748361435c565b9250828202614d828161435c565b91508282048414831517614d9957614d98614d2f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614dde81614488565b92915050565b600060208284031215614dfa57614df961444c565b5b6000614e0884828501614dcf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e4681614476565b82525050565b6000614e588383614e3d565b60208301905092915050565b6000602082019050919050565b6000614e7c82614e11565b614e868185614e1c565b9350614e9183614e2d565b8060005b83811015614ec2578151614ea98882614e4c565b9750614eb483614e64565b925050600181019050614e95565b5085935050505092915050565b6000604082019050614ee46000830185614366565b8181036020830152614ef68184614e71565b90509392505050565b600067ffffffffffffffff821115614f1a57614f1961491f565b5b602082029050602081019050919050565b600081519050614f3a816144b4565b92915050565b6000614f53614f4e84614eff565b61497f565b90508083825260208201905060208402830185811115614f7657614f75614786565b5b835b81811015614f9f5780614f8b8882614f2b565b845260208401935050602081019050614f78565b5050509392505050565b600082601f830112614fbe57614fbd61477c565b5b8151614fce848260208601614f40565b91505092915050565b600060208284031215614fed57614fec61444c565b5b600082015167ffffffffffffffff81111561500b5761500a614451565b5b61501784828501614fa9565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061507c602c8361439b565b915061508782615020565b604082019050919050565b600060208201905081810360008301526150ab8161506f565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061510e60228361439b565b9150615119826150b2565b604082019050919050565b6000602082019050818103600083015261513d81615101565b9050919050565b60006040820190506151596000830185614752565b6151666020830184614752565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006151c9602d8361439b565b91506151d48261516d565b604082019050919050565b600060208201905081810360008301526151f8816151bc565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b600061525b602a8361439b565b9150615266826151ff565b604082019050919050565b6000602082019050818103600083015261528a8161524e565b9050919050565b600061529c8261435c565b91506152a78361435c565b92508282019050808211156152bf576152be614d2f565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061532160268361439b565b915061532c826152c5565b604082019050919050565b6000602082019050818103600083015261535081615314565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153b360248361439b565b91506153be82615357565b604082019050919050565b600060208201905081810360008301526153e2816153a6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061544560228361439b565b9150615450826153e9565b604082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006154d760258361439b565b91506154e28261547b565b604082019050919050565b60006020820190508181036000830152615506816154ca565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061556960238361439b565b91506155748261550d565b604082019050919050565b600060208201905081810360008301526155988161555c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006155fb60298361439b565b91506156068261559f565b604082019050919050565b6000602082019050818103600083015261562a816155ee565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615667601e8361439b565b915061567282615631565b602082019050919050565b600060208201905081810360008301526156968161565a565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006156f9602f8361439b565b91506157048261569d565b604082019050919050565b60006020820190508181036000830152615728816156ec565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061578b60288361439b565b91506157968261572f565b604082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b600061581d60258361439b565b9150615828826157c1565b604082019050919050565b6000602082019050818103600083015261584c81615810565b9050919050565b600061585e8261435c565b91506158698361435c565b925082820390508181111561588157615880614d2f565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158bd601b8361439b565b91506158c882615887565b602082019050919050565b600060208201905081810360008301526158ec816158b0565b9050919050565b60006158fe8261435c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159305761592f614d2f565b5b600182019050919050565b6000806000606084860312156159545761595361444c565b5b600061596286828701614f2b565b935050602061597386828701614f2b565b925050604061598486828701614f2b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159c88261435c565b91506159d38361435c565b9250826159e3576159e261598e565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a4a60218361439b565b9150615a55826159ee565b604082019050919050565b60006020820190508181036000830152615a7981615a3d565b9050919050565b6000819050919050565b6000615aa5615aa0615a9b84615a80565b614621565b61435c565b9050919050565b615ab581615a8a565b82525050565b600060a082019050615ad06000830188614366565b615add6020830187615aac565b8181036040830152615aef8186614e71565b9050615afe6060830185614752565b615b0b6080830184614366565b9695505050505050565b600081905092915050565b50565b6000615b30600083615b15565b9150615b3b82615b20565b600082019050919050565b6000615b5182615b23565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c939c7a1dcefcb00b7993d6aaf6d3fa3a0655a6dda4851be704d4507c53cc7a764736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806371cd56af116101755780639758f61d116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f914610ac2578063f2fde38b14610aff578063f34eb0b814610b28578063fb6287d214610b51576102b9565b8063c49b9a8014610a33578063dcda6af314610a5c578063dd62ed3e14610a85576102b9565b80639758f61d146109255780639b0e2e861461094e5780639c1b8af514610977578063a457c2d7146109a2578063a9059cbb146109df578063b6a9987214610a1c576102b9565b8063870d365d1161012e578063870d365d14610815578063871c128d146108525780638da5cb5b1461087b57806391142cb3146108a657806395d89b41146108d157806396848136146108fc576102b9565b806371cd56af1461071b5780637791ca1d14610744578063783478ad1461076d5780637bde92bc1461079857806385141a77146107c157806385d4787b146107ec576102b9565b80633ad10ef6116102195780635342acb4116101d25780635342acb41461060657806354a5df1f146106435780635ee58efc1461066e5780636c0a24eb1461069c57806370a08231146106c7578063715018a614610704576102b9565b80633ad10ef614610508578063441d801f1461053357806349bd5a5e1461055c5780634a74bb02146105875780634e781233146105b257806353030d91146105db576102b9565b80631694505e1161026b5780631694505e146103e457806318160ddd1461040f57806323b872dd1461043a57806327a14fc214610477578063313ce567146104a057806339509351146104cb576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e8322731461037e5780630fc709e5146103bb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7a565b6040516102e09190614375565b60405180910390f35b3480156102f557600080fd5b506102fe610b80565b60405161030b9190614420565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906144e0565b610c12565b604051610348919061453b565b60405180910390f35b34801561035d57600080fd5b50610366610c30565b60405161037593929190614556565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061458d565b610c48565b6040516103b2919061453b565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906145ba565b610c9e565b005b3480156103f057600080fd5b506103f9610d61565b6040516104069190614680565b60405180910390f35b34801561041b57600080fd5b50610424610d87565b6040516104319190614375565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061469b565b610d91565b60405161046e919061453b565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906146ee565b610e6a565b005b3480156104ac57600080fd5b506104b5610f18565b6040516104c29190614737565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906144e0565b610f2f565b6040516104ff919061453b565b60405180910390f35b34801561051457600080fd5b5061051d610fe2565b60405161052a9190614761565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061480d565b611008565b005b34801561056857600080fd5b506105716110ad565b60405161057e9190614761565b60405180910390f35b34801561059357600080fd5b5061059c6110d3565b6040516105a9919061453b565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061486d565b6110e6565b005b3480156105e757600080fd5b506105f0611198565b6040516105fd9190614761565b60405180910390f35b34801561061257600080fd5b5061062d6004803603810190610628919061458d565b6111be565b60405161063a919061453b565b60405180910390f35b34801561064f57600080fd5b50610658611214565b6040516106659190614375565b60405180910390f35b34801561067a57600080fd5b5061068361121a565b604051610693949392919061489a565b60405180910390f35b3480156106a857600080fd5b506106b1611238565b6040516106be9190614375565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061458d565b61123e565b6040516106fb9190614375565b60405180910390f35b34801561071057600080fd5b50610719611287565b005b34801561072757600080fd5b50610742600480360381019061073d919061480d565b6113da565b005b34801561075057600080fd5b5061076b6004803603810190610766919061458d565b61147f565b005b34801561077957600080fd5b50610782611558565b60405161078f9190614761565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba91906148df565b61157e565b005b3480156107cd57600080fd5b506107d6611625565b6040516107e39190614761565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190614a5d565b61164b565b005b34801561082157600080fd5b5061083c600480360381019061083791906146ee565b6116ee565b6040516108499190614375565b60405180910390f35b34801561085e57600080fd5b50610879600480360381019061087491906146ee565b611931565b005b34801561088757600080fd5b50610890611a14565b60405161089d9190614761565b60405180910390f35b3480156108b257600080fd5b506108bb611a3d565b6040516108c89190614375565b60405180910390f35b3480156108dd57600080fd5b506108e6611a43565b6040516108f39190614420565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e919061480d565b611ad5565b005b34801561093157600080fd5b5061094c60048036038101906109479190614aa6565b611b7a565b005b34801561095a57600080fd5b5061097560048036038101906109709190614a5d565b611c32565b005b34801561098357600080fd5b5061098c611cd5565b6040516109999190614375565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906144e0565b611cdb565b6040516109d6919061453b565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906144e0565b611da8565b604051610a13919061453b565b60405180910390f35b348015610a2857600080fd5b50610a31611dc6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a55919061486d565b612146565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190614b4f565b61222f565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190614bd0565b612399565b604051610ab99190614375565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae4919061458d565b612420565b604051610af6919061453b565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b21919061458d565b612476565b005b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906146ee565b612637565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614c10565b6126e5565b005b60105481565b606060098054610b8f90614c92565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90614c92565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c26610c1f612842565b848461284a565b6001905092915050565b60188060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ca6612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614d0f565b60405180910390fd5b83601b6002018190555082601b6000018190555081601b6001018190555080601b6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d9e848484612a13565b610e5f84610daa612842565b610e5a85604051806060016040528060288152602001615b5c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e10612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b600190509392505050565b610e72612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614d0f565b60405180910390fd5b633b9aca0081610f0f9190614d5e565b60118190555050565b6000600b60009054906101000a900460ff16905090565b6000610fd8610f3c612842565b84610fd38560046000610f4d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b61284a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611010612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614d0f565b60405180910390fd5b6110a8838383613403565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b6110ee612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290614d0f565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b601b8060000154908060010154908060020154908060030154905084565b60115481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614d0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113e2612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614d0f565b60405180910390fd5b61147a8383836134ae565b505050565b611487612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614d0f565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611586612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90614d0f565b60405180910390fd5b81600f8190555080600e819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611653612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d790614d0f565b60405180910390fd5b6116eb816001613559565b50565b600080600267ffffffffffffffff81111561170c5761170b61491f565b5b60405190808252806020026020018201604052801561173a5781602001602082028036833780820191505090505b509050308160008151811061175257611751614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181d9190614de4565b8160018151811061183157611830614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016118c8929190614ecf565b600060405180830381865afa1580156118e5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061190e9190614fd7565b60018151811061192157611920614da0565b5b6020026020010151915050919050565b611939612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90614d0f565b60405180910390fd5b6016548103611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190615092565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600a8054611a5290614c92565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7e90614c92565b8015611acb5780601f10611aa057610100808354040283529160200191611acb565b820191906000526020600020905b815481529060010190602001808311611aae57829003601f168201915b5050505050905090565b611add612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190614d0f565b60405180910390fd5b611b75838383613650565b505050565b611b82612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690614d0f565b60405180910390fd5b826018600001819055508160186001018190555080601860020181905550505050565b611c3a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614d0f565b60405180910390fd5b611cd2816000613559565b50565b60165481565b6000611d9e611ce8612842565b84611d9985604051806060016040528060258152602001615b846025913960046000611d12612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133419092919063ffffffff16565b61284a565b6001905092915050565b6000611dbc611db5612842565b8484612a13565b6001905092915050565b611dce612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614d0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390615124565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d9190614de4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614de4565b6040518363ffffffff1660e01b8152600401612047929190615144565b6020604051808303816000875af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190614de4565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b61214e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290614d0f565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612224919061453b565b60405180910390a150565b60006006600061223d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906151df565b60405180910390fd5b82829050858590501461230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390615271565b60405180910390fd5b5b848490508110156123925761237e612323612842565b86868481811061233657612335614da0565b5b905060200201602081019061234b919061458d565b633b9aca0086868681811061236357612362614da0565b5b905060200201356123749190614d5e565b60008060006136fb565b60018161238b9190615291565b905061230d565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61247e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614d0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190615337565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61263f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614d0f565b60405180910390fd5b633b9aca00816126dc9190614d5e565b60108190555050565b6126ed612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614d0f565b60405180910390fd5b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b0906153c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f9061545b565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a069190614375565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a79906154ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae89061557f565b60405180910390fd5b60008111612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc9061567d565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cab5750612c7b611a14565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750612cba611a14565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d0984612cfb8761123e565b6133a590919063ffffffff16565b9050612d13611a14565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d51611a14565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ddb5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ec457600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e845750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061570f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612f695750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff957601054841115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906157a1565b60405180910390fd5b601154811115612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fef90615833565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130a45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061314e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314d5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613160576001925061315f613c1e565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561320c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132625750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b85750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332a5781156132e457600d60029054906101000a900460ff166132de5760016132e1565b60005b91505b601154811115613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332090615833565b60405180910390fd5b5b613339868686858760016136fb565b505050505050565b6000838311158290613389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133809190614420565b60405180910390fd5b50600083856133989190615853565b9050809150509392505050565b60008082846133b49190615291565b9050838110156133f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f0906158d3565b60405180910390fd5b8091505092915050565b60005b838390508110156134a857600084848381811061342657613425614da0565b5b905060200201602081019061343b919061458d565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134a0906158f3565b915050613406565b50505050565b60005b838390508110156135535760008484838181106134d1576134d0614da0565b5b90506020020160208101906134e6919061458d565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061354b906158f3565b9150506134b1565b50505050565b60005b825181101561364b57600083828151811061357a57613579614da0565b5b6020026020010151905082156135e7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613637565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613643906158f3565b91505061355c565b505050565b60005b838390508110156136f557600084848381811061367357613672614da0565b5b9050602002016020810190613688919061458d565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136ed906158f3565b915050613653565b50505050565b600083613709576000613735565b613734606461372660186000015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b5b90508380156137415750825b156137c857613771606461376360186001015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050600060186002015411156137c757600061378c866116ee565b9050600f5481106137c5576137c260646137b460186002015489613c8c90919063ffffffff16565b613d0690919063ffffffff16565b91505b505b5b60006137dd8287613d5090919063ffffffff16565b905061383186600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c681600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395b82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139fb9190614375565b60405180910390a38215613c1457601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613a649190614761565b600060405180830381600087803b158015613a7e57600080fd5b505af1925050508015613a8f575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613aeb9190614761565b600060405180830381600087803b158015613b0557600080fd5b505af1925050508015613b16575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b8152600401613b749190614375565b6060604051808303816000875af1925050508015613bb057506040513d601f19601f82011682018060405250810190613bad919061593b565b60015b15613c13573273ffffffffffffffffffffffffffffffffffffffff16600115157f6877916204e9314c4b571655dd7e6678cd98a015f6086bb7ffd2acfd99c41469858585601654604051613c07949392919061489a565b60405180910390a35050505b5b5050505050505050565b6000613c293061123e565b90506000811115613c89576000613c3f826116ee565b9050600e548110158015613c605750600d60009054906101000a900460ff16155b8015613c785750600d60019054906101000a900460ff165b15613c8757613c8682613d9a565b5b505b50565b6000808303613c9e5760009050613d00565b60008284613cac9190614d5e565b9050828482613cbb91906159bd565b14613cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf290615a60565b60405180910390fd5b809150505b92915050565b6000613d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fe6565b905092915050565b6000613d9283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613341565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613dbe81614049565b60004790506000613df06064613de2601b6001015485613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e1f6064613e11601b6002015486613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e4e6064613e40601b6000015487613c8c90919063ffffffff16565b613d0690919063ffffffff16565b90506000613e7d6064613e6f601b6003015488613c8c90919063ffffffff16565b613d0690919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613ee7573d6000803e3d6000fd5b50613ef18361428c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613f59573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fc2573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b6000808311829061402d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140249190614420565b60405180910390fd5b506000838561403c91906159bd565b9050809150509392505050565b6000600267ffffffffffffffff8111156140665761406561491f565b5b6040519080825280602002602001820160405280156140945781602001602082028036833780820191505090505b50905030816000815181106140ac576140ab614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141779190614de4565b8160018151811061418b5761418a614da0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141f230600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614256959493929190615abb565b600060405180830381600087803b15801561427057600080fd5b505af1158015614284573d6000803e3d6000fd5b505050505050565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142d490615b46565b60006040518083038185875af1925050503d8060008114614311576040519150601f19603f3d011682016040523d82523d6000602084013e614316565b606091505b505090508015614358577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161434f9190614375565b60405180910390a15b5050565b6000819050919050565b61436f8161435c565b82525050565b600060208201905061438a6000830184614366565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143ca5780820151818401526020810190506143af565b60008484015250505050565b6000601f19601f8301169050919050565b60006143f282614390565b6143fc818561439b565b935061440c8185602086016143ac565b614415816143d6565b840191505092915050565b6000602082019050818103600083015261443a81846143e7565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448182614456565b9050919050565b61449181614476565b811461449c57600080fd5b50565b6000813590506144ae81614488565b92915050565b6144bd8161435c565b81146144c857600080fd5b50565b6000813590506144da816144b4565b92915050565b600080604083850312156144f7576144f661444c565b5b60006145058582860161449f565b9250506020614516858286016144cb565b9150509250929050565b60008115159050919050565b61453581614520565b82525050565b6000602082019050614550600083018461452c565b92915050565b600060608201905061456b6000830186614366565b6145786020830185614366565b6145856040830184614366565b949350505050565b6000602082840312156145a3576145a261444c565b5b60006145b18482850161449f565b91505092915050565b600080600080608085870312156145d4576145d361444c565b5b60006145e2878288016144cb565b94505060206145f3878288016144cb565b9350506040614604878288016144cb565b9250506060614615878288016144cb565b91505092959194509250565b6000819050919050565b600061464661464161463c84614456565b614621565b614456565b9050919050565b60006146588261462b565b9050919050565b600061466a8261464d565b9050919050565b61467a8161465f565b82525050565b60006020820190506146956000830184614671565b92915050565b6000806000606084860312156146b4576146b361444c565b5b60006146c28682870161449f565b93505060206146d38682870161449f565b92505060406146e4868287016144cb565b9150509250925092565b6000602082840312156147045761470361444c565b5b6000614712848285016144cb565b91505092915050565b600060ff82169050919050565b6147318161471b565b82525050565b600060208201905061474c6000830184614728565b92915050565b61475b81614476565b82525050565b60006020820190506147766000830184614752565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a1576147a061477c565b5b8235905067ffffffffffffffff8111156147be576147bd614781565b5b6020830191508360208202830111156147da576147d9614786565b5b9250929050565b6147ea81614520565b81146147f557600080fd5b50565b600081359050614807816147e1565b92915050565b6000806000604084860312156148265761482561444c565b5b600084013567ffffffffffffffff81111561484457614843614451565b5b6148508682870161478b565b93509350506020614863868287016147f8565b9150509250925092565b6000602082840312156148835761488261444c565b5b6000614891848285016147f8565b91505092915050565b60006080820190506148af6000830187614366565b6148bc6020830186614366565b6148c96040830185614366565b6148d66060830184614366565b95945050505050565b600080604083850312156148f6576148f561444c565b5b6000614904858286016144cb565b9250506020614915858286016144cb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614957826143d6565b810181811067ffffffffffffffff821117156149765761497561491f565b5b80604052505050565b6000614989614442565b9050614995828261494e565b919050565b600067ffffffffffffffff8211156149b5576149b461491f565b5b602082029050602081019050919050565b60006149d96149d48461499a565b61497f565b905080838252602082019050602084028301858111156149fc576149fb614786565b5b835b81811015614a255780614a11888261449f565b8452602084019350506020810190506149fe565b5050509392505050565b600082601f830112614a4457614a4361477c565b5b8135614a548482602086016149c6565b91505092915050565b600060208284031215614a7357614a7261444c565b5b600082013567ffffffffffffffff811115614a9157614a90614451565b5b614a9d84828501614a2f565b91505092915050565b600080600060608486031215614abf57614abe61444c565b5b6000614acd868287016144cb565b9350506020614ade868287016144cb565b9250506040614aef868287016144cb565b9150509250925092565b60008083601f840112614b0f57614b0e61477c565b5b8235905067ffffffffffffffff811115614b2c57614b2b614781565b5b602083019150836020820283011115614b4857614b47614786565b5b9250929050565b60008060008060408587031215614b6957614b6861444c565b5b600085013567ffffffffffffffff811115614b8757614b86614451565b5b614b938782880161478b565b9450945050602085013567ffffffffffffffff811115614bb657614bb5614451565b5b614bc287828801614af9565b925092505092959194509250565b60008060408385031215614be757614be661444c565b5b6000614bf58582860161449f565b9250506020614c068582860161449f565b9150509250929050565b600080600060608486031215614c2957614c2861444c565b5b6000614c378682870161449f565b9350506020614c488682870161449f565b9250506040614c598682870161449f565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614caa57607f821691505b602082108103614cbd57614cbc614c63565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cf960208361439b565b9150614d0482614cc3565b602082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d698261435c565b9150614d748361435c565b9250828202614d828161435c565b91508282048414831517614d9957614d98614d2f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614dde81614488565b92915050565b600060208284031215614dfa57614df961444c565b5b6000614e0884828501614dcf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e4681614476565b82525050565b6000614e588383614e3d565b60208301905092915050565b6000602082019050919050565b6000614e7c82614e11565b614e868185614e1c565b9350614e9183614e2d565b8060005b83811015614ec2578151614ea98882614e4c565b9750614eb483614e64565b925050600181019050614e95565b5085935050505092915050565b6000604082019050614ee46000830185614366565b8181036020830152614ef68184614e71565b90509392505050565b600067ffffffffffffffff821115614f1a57614f1961491f565b5b602082029050602081019050919050565b600081519050614f3a816144b4565b92915050565b6000614f53614f4e84614eff565b61497f565b90508083825260208201905060208402830185811115614f7657614f75614786565b5b835b81811015614f9f5780614f8b8882614f2b565b845260208401935050602081019050614f78565b5050509392505050565b600082601f830112614fbe57614fbd61477c565b5b8151614fce848260208601614f40565b91505092915050565b600060208284031215614fed57614fec61444c565b5b600082015167ffffffffffffffff81111561500b5761500a614451565b5b61501784828501614fa9565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061507c602c8361439b565b915061508782615020565b604082019050919050565b600060208201905081810360008301526150ab8161506f565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061510e60228361439b565b9150615119826150b2565b604082019050919050565b6000602082019050818103600083015261513d81615101565b9050919050565b60006040820190506151596000830185614752565b6151666020830184614752565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006151c9602d8361439b565b91506151d48261516d565b604082019050919050565b600060208201905081810360008301526151f8816151bc565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b600061525b602a8361439b565b9150615266826151ff565b604082019050919050565b6000602082019050818103600083015261528a8161524e565b9050919050565b600061529c8261435c565b91506152a78361435c565b92508282019050808211156152bf576152be614d2f565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061532160268361439b565b915061532c826152c5565b604082019050919050565b6000602082019050818103600083015261535081615314565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153b360248361439b565b91506153be82615357565b604082019050919050565b600060208201905081810360008301526153e2816153a6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061544560228361439b565b9150615450826153e9565b604082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006154d760258361439b565b91506154e28261547b565b604082019050919050565b60006020820190508181036000830152615506816154ca565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061556960238361439b565b91506155748261550d565b604082019050919050565b600060208201905081810360008301526155988161555c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006155fb60298361439b565b91506156068261559f565b604082019050919050565b6000602082019050818103600083015261562a816155ee565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615667601e8361439b565b915061567282615631565b602082019050919050565b600060208201905081810360008301526156968161565a565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006156f9602f8361439b565b91506157048261569d565b604082019050919050565b60006020820190508181036000830152615728816156ec565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061578b60288361439b565b91506157968261572f565b604082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b600061581d60258361439b565b9150615828826157c1565b604082019050919050565b6000602082019050818103600083015261584c81615810565b9050919050565b600061585e8261435c565b91506158698361435c565b925082820390508181111561588157615880614d2f565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158bd601b8361439b565b91506158c882615887565b602082019050919050565b600060208201905081810360008301526158ec816158b0565b9050919050565b60006158fe8261435c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159305761592f614d2f565b5b600182019050919050565b6000806000606084860312156159545761595361444c565b5b600061596286828701614f2b565b935050602061597386828701614f2b565b925050604061598486828701614f2b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159c88261435c565b91506159d38361435c565b9250826159e3576159e261598e565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a4a60218361439b565b9150615a55826159ee565b604082019050919050565b60006020820190508181036000830152615a7981615a3d565b9050919050565b6000819050919050565b6000615aa5615aa0615a9b84615a80565b614621565b61435c565b9050919050565b615ab581615a8a565b82525050565b600060a082019050615ad06000830188614366565b615add6020830187615aac565b8181036040830152615aef8186614e71565b9050615afe6060830185614752565b615b0b6080830184614366565b9695505050505050565b600081905092915050565b50565b6000615b30600083615b15565b9150615b3b82615b20565b600082019050919050565b6000615b5182615b23565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c939c7a1dcefcb00b7993d6aaf6d3fa3a0655a6dda4851be704d4507c53cc7a764736f6c63430008120033

Deployed Bytecode Sourcemap

18972:16417:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20363:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22493:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21381:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25496:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27244:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19409:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22770:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24854:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22679:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23816:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20645:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24997:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19522:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20150:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29153:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20561:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29022:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20234:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21410:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20420:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22873:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17814:148;;;;;;;;;;;;;:::i;:::-;;25331:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32917:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20480:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25881:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20722:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27897:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28742:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31940:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17178:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20300:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22584:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25166:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27018:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28033:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20799:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24042:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23000:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26078:311;;;;;;;;;;;;;:::i;:::-;;28526:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24321:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23175:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27780:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18117:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26887:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27548:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20363:50;;;;:::o;22493:83::-;22530:13;22563:5;22556:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22493:83;:::o;23326:161::-;23401:4;23418:39;23427:12;:10;:12::i;:::-;23441:7;23450:6;23418:8;:39::i;:::-;23475:4;23468:11;;23326:161;;;;:::o;21381:22::-;;;;;;;;;;;;;;;;;;;:::o;25496:125::-;25561:4;25585:22;:28;25608:4;25585:28;;;;;;;;;;;;;;;;;;;;;;;;;25578:35;;25496:125;;;:::o;27244:296::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27395:8:::1;27371:12;:21;;:32;;;;27437:7;27414:12;:20;;:30;;;;27481:10;27455:12;:23;;:36;;;;27525:7;27502:12;:20;;:30;;;;27244:296:::0;;;;:::o;19409:106::-;;;;;;;;;;;;;:::o;22770:95::-;22823:7;22850;;22843:14;;22770:95;:::o;23495:313::-;23593:4;23610:36;23620:6;23628:9;23639:6;23610:9;:36::i;:::-;23657:121;23666:6;23674:12;:10;:12::i;:::-;23688:89;23726:6;23688:89;;;;;;;;;;;;;;;;;:11;:19;23700:6;23688:19;;;;;;;;;;;;;;;:33;23708:12;:10;:12::i;:::-;23688:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23657:8;:121::i;:::-;23796:4;23789:11;;23495:313;;;;;:::o;24854:135::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24976:5:::1;24958:15;:23;;;;:::i;:::-;24939:16;:42;;;;24854:135:::0;:::o;22679:83::-;22720:5;22745:9;;;;;;;;;;;22738:16;;22679:83;:::o;23816:218::-;23904:4;23921:83;23930:12;:10;:12::i;:::-;23944:7;23953:50;23992:10;23953:11;:25;23965:12;:10;:12::i;:::-;23953:25;;;;;;;;;;;;;;;:34;23979:7;23953:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23921:8;:83::i;:::-;24022:4;24015:11;;23816:218;;;;:::o;20645:70::-;;;;;;;;;;;;;:::o;24997:161::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25109:41:::1;25122:9;;25133:16;25109:12;:41::i;:::-;24997:161:::0;;;:::o;19522:41::-;;;;;;;;;;;;;:::o;20150:40::-;;;;;;;;;;;;;:::o;29153:130::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29262:13:::1;29242:17;;:33;;;;;;;;;;;;;;;;;;29153:130:::0;:::o;20561:77::-;;;;;;;;;;;;;:::o;29022:123::-;29086:4;29110:18;:27;29129:7;29110:27;;;;;;;;;;;;;;;;;;;;;;;;;29103:34;;29022:123;;;:::o;20234:51::-;;;;:::o;21410:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20420:53::-;;;;:::o;22873:119::-;22939:7;22966:9;:18;22976:7;22966:18;;;;;;;;;;;;;;;;22959:25;;22873:119;;;:::o;17814:148::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17921:1:::1;17884:40;;17905:6;::::0;::::1;;;;;;;;17884:40;;;;;;;;;;;;17952:1;17935:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17814:148::o:0;25331:157::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25441:39:::1;25458:9;;25469:10;25441:16;:39::i;:::-;25331:157:::0;;;:::o;32917:184::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33068:23:::1;33017:15;;:76;;;;;;;;;;;;;;;;;;32917:184:::0;:::o;20480:74::-;;;;;;;;;;;;;:::o;25881:189::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26005:14:::1;25989:13;:30;;;;26047:15;26030:14;:32;;;;25881:189:::0;;:::o;20722:70::-;;;;;;;;;;;;;:::o;27897:128::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27981:36:::1;28001:9;28012:4;27981:19;:36::i;:::-;27897:128:::0;:::o;28742:272::-;28802:4;28820:21;28858:1;28844:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28820:40;;28889:4;28871;28876:1;28871:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28915:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28905:4;28910:1;28905:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28955:15;;;;;;;;;;;:29;;;28985:11;28998:4;28955:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29004:1;28955:51;;;;;;;;:::i;:::-;;;;;;;;28948:58;;;28742:272;;;:::o;31940:209::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32038:16:::1;;32026:8;:28:::0;32018:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32133:8;32114:16;:27;;;;31940:209:::0;:::o;17178:79::-;17216:7;17243:6;;;;;;;;;;;17236:13;;17178:79;:::o;20300:46::-;;;;:::o;22584:87::-;22623:13;22656:7;22649:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22584:87;:::o;25166:157::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25271:44:::1;25290:9;;25301:13;25271:18;:44::i;:::-;25166:157:::0;;;:::o;27018:218::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27140:6:::1;27123:7;:14;;:23;;;;27175:7;27157;:15;;:25;;;;27216:12;27193:7;:20;;:35;;;;27018:218:::0;;;:::o;28033:131::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28119:37:::1;28139:9;28150:5;28119:19;:37::i;:::-;28033:131:::0;:::o;20799:39::-;;;;:::o;24042:269::-;24135:4;24152:129;24161:12;:10;:12::i;:::-;24175:7;24184:96;24223:15;24184:96;;;;;;;;;;;;;;;;;:11;:25;24196:12;:10;:12::i;:::-;24184:25;;;;;;;;;;;;;;;:34;24210:7;24184:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24152:8;:129::i;:::-;24299:4;24292:11;;24042:269;;;;:::o;23000:167::-;23078:4;23095:42;23105:12;:10;:12::i;:::-;23119:9;23130:6;23095:9;:42::i;:::-;23155:4;23148:11;;23000:167;;;;:::o;26078:311::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26165:1:::1;26140:27;;:13;;;;;;;;;;;:27;;;26132:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26250:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26232:55;;;26296:4;26303:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26232:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26216:13;;:110;;;;;;;;;;;;;;;;;;26377:4;26337:22;:37;26360:13;;;;;;;;;;;26337:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;26078:311::o:0;28526:171::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28627:8:::1;28603:21;;:32;;;;;;;;;;;;;;;;;;28651:38;28680:8;28651:38;;;;;;:::i;:::-;;;;;;;;28526:171:::0;:::o;24321:525::-;24418:16;24457:18;:32;24476:12;:10;:12::i;:::-;24457:32;;;;;;;;;;;;;;;;;;;;;;;;;24449:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24579:7;;:14;;24558:10;;:17;;:35;24550:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24651:188;24668:10;;:17;;24657:8;:28;24651:188;;;24701:98;24716:12;:10;:12::i;:::-;24730:10;;24741:8;24730:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24772:5;24752:7;;24760:8;24752:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;24779:5;24786;24793;24701:14;:98::i;:::-;24826:1;24814:13;;;;;:::i;:::-;;;24651:188;;;24407:439;24321:525;;;;:::o;23175:143::-;23256:7;23283:11;:18;23295:5;23283:18;;;;;;;;;;;;;;;:27;23302:7;23283:27;;;;;;;;;;;;;;;;23276:34;;23175:143;;;;:::o;27780:109::-;27841:4;27865:10;:16;27876:4;27865:16;;;;;;;;;;;;;;;;;;;;;;;;;27858:23;;27780:109;;;:::o;18117:244::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18226:1:::1;18206:22;;:8;:22;;::::0;18198:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18316:8;18287:38;;18308:6;::::0;::::1;;;;;;;;18287:38;;;;;;;;;;;;18345:8;18336:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18117:244:::0;:::o;26887:123::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26997:5:::1;26982:12;:20;;;;:::i;:::-;26966:13;:36;;;;26887:123:::0;:::o;27548:224::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27677:7:::1;27664:10;;:20;;;;;;;;;;;;;;;;;;27712:7;27695:14;;:24;;;;;;;;;;;;;;;;;;27750:14;27730:17;;:34;;;;;;;;;;;;;;;;;;27548:224:::0;;;:::o;9670:98::-;9723:7;9750:10;9743:17;;9670:98;:::o;29291:337::-;29401:1;29384:19;;:5;:19;;;29376:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29482:1;29463:21;;:7;:21;;;29455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29566:6;29536:11;:18;29548:5;29536:18;;;;;;;;;;;;;;;:27;29555:7;29536:27;;;;;;;;;;;;;;;:36;;;;29604:7;29588:32;;29597:5;29588:32;;;29613:6;29588:32;;;;;;:::i;:::-;;;;;;;;29291:337;;;:::o;29636:1843::-;29740:1;29724:18;;:4;:18;;;29716:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29817:1;29803:16;;:2;:16;;;29795:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29887:1;29878:6;:10;29870:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29978:1;29953:27;;:13;;;;;;;;;;;:27;;;29945:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30025:11;30055:13;30072:18;:24;30091:4;30072:24;;;;;;;;;;;;;;;;;;;;;;;;;30071:25;:52;;;;;30101:18;:22;30120:2;30101:22;;;;;;;;;;;;;;;;;;;;;;;;;30100:23;30071:52;:71;;;;;30135:7;:5;:7::i;:::-;30127:15;;:4;:15;;;;30071:71;:88;;;;;30152:7;:5;:7::i;:::-;30146:13;;:2;:13;;;;30071:88;30055:104;;30170:21;30194:25;30212:6;30194:13;30204:2;30194:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;30170:49;;30330:7;:5;:7::i;:::-;30322:15;;:4;:15;;;;:32;;;;;30347:7;:5;:7::i;:::-;30341:13;;:2;:13;;;;30322:32;:52;;;;;30364:10;;;;;;;;;;;30358:16;;:2;:16;;;;30322:52;30319:180;;;30400:10;:16;30411:4;30400:16;;;;;;;;;;;;;;;;;;;;;;;;;30399:17;:36;;;;;30421:10;:14;30432:2;30421:14;;;;;;;;;;;;;;;;;;;;;;;;;30420:15;30399:36;30391:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;30319:180;30520:13;;;;;;;;;;;30512:21;;:4;:21;;;:47;;;;30537:16;:22;30554:4;30537:22;;;;;;;;;;;;;;;;;;;;;;;;;30512:47;30509:253;;;30594:13;;30584:6;:23;;30576:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30692:16;;30675:13;:33;;30667:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30509:253;30783:13;;;;;;;;;;;30775:21;;:4;:21;;;;:44;;;;;30806:13;;;;;;;;;;;30800:19;;:2;:19;;;30775:44;:97;;;;30825:16;:22;30842:4;30825:22;;;;;;;;;;;;;;;;;;;;;;;;;30824:23;:47;;;;;30851:16;:20;30868:2;30851:20;;;;;;;;;;;;;;;;;;;;;;;;;30824:47;30775:97;30772:307;;;30968:4;30959:13;;30987:15;:13;:15::i;:::-;30772:307;31100:13;;;;;;;;;;;31092:21;;:4;:21;;;;:44;;;;;31123:13;;;;;;;;;;;31117:19;;:2;:19;;;;31092:44;:71;;;;;31141:16;:22;31158:4;31141:22;;;;;;;;;;;;;;;;;;;;;;;;;31140:23;31092:71;:96;;;;;31168:16;:20;31185:2;31168:20;;;;;;;;;;;;;;;;;;;;;;;;;31167:21;31092:96;31089:316;;;31208:8;31205:91;;;31248:17;;;;;;;;;;;:32;;31276:4;31248:32;;;31268:5;31248:32;31237:43;;31205:91;31335:16;;31318:13;:33;;31310:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;31089:316;31415:56;31430:4;31436:2;31440:6;31448:8;31458:6;31466:4;31415:14;:56::i;:::-;29705:1774;;;29636:1843;;;:::o;6001:192::-;6087:7;6120:1;6115;:6;;6123:12;6107:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6147:9;6163:1;6159;:5;;;;:::i;:::-;6147:17;;6184:1;6177:8;;;6001:192;;;;;:::o;5098:181::-;5156:7;5176:9;5192:1;5188;:5;;;;:::i;:::-;5176:17;;5217:1;5212;:6;;5204:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5270:1;5263:8;;;5098:181;;;;:::o;26643:236::-;26730:9;26725:147;26749:9;;:16;;26745:1;:20;26725:147;;;26787:12;26802:9;;26812:1;26802:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26787:27;;26856:4;26829:18;:24;26848:4;26829:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26772:100;26767:3;;;;;:::i;:::-;;;;26725:147;;;;26643:236;;;:::o;25629:244::-;25720:9;25715:151;25739:9;;:16;;25735:1;:20;25715:151;;;25777:12;25792:9;;25802:1;25792:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25777:27;;25850:4;25819:22;:28;25842:4;25819:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25762:104;25757:3;;;;;:::i;:::-;;;;25715:151;;;;25629:244;;;:::o;28172:346::-;28267:9;28262:249;28286:9;:16;28282:1;:20;28262:249;;;28324:12;28339:9;28349:1;28339:12;;;;;;;;:::i;:::-;;;;;;;;28324:27;;28369:7;28366:134;;;28416:4;28397:10;:16;28408:4;28397:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28366:134;;;28468:10;:16;28479:4;28468:16;;;;;;;;;;;;;;;;28461:23;;;;;;;;;;;28366:134;28309:202;28304:3;;;;;:::i;:::-;;;;28262:249;;;;28172:346;;:::o;26395:240::-;26488:9;26483:145;26507:9;;:16;;26503:1;:20;26483:145;;;26545:12;26560:9;;26570:1;26560:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26545:27;;26612:4;26587:16;:22;26604:4;26587:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26530:98;26525:3;;;;;:::i;:::-;;;;26483:145;;;;26395:240;;;:::o;34004:1382::-;34150:17;34170:8;:50;;34219:1;34170:50;;;34181:35;34212:3;34181:26;34192:7;:14;;;34181:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;34170:50;34150:70;;34234:8;:18;;;;;34246:6;34234:18;34231:355;;;34281:36;34313:3;34281:27;34292:7;:15;;;34281:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;34269:48;;34358:1;34335:7;:20;;;:24;34332:243;;;34380:13;34396:19;34408:6;34396:11;:19::i;:::-;34380:35;;34449:13;;34437:8;:25;34434:126;;34499:41;34536:3;34499:32;34510:7;:20;;;34499:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;34487:53;;34434:126;34361:214;34332:243;34231:355;34596:22;34621:21;34632:9;34621:6;:10;;:21;;;;:::i;:::-;34596:46;;34673:29;34695:6;34673:9;:17;34683:6;34673:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34653:9;:17;34663:6;34653:17;;;;;;;;;;;;;;;:49;;;;34736:40;34761:14;34736:9;:20;34746:9;34736:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;34713:9;:20;34723:9;34713:20;;;;;;;;;;;;;;;:63;;;;34814:39;34843:9;34814;:24;34832:4;34814:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;34787:9;:24;34805:4;34787:24;;;;;;;;;;;;;;;:66;;;;34886:9;34869:35;;34878:6;34869:35;;;34897:6;34869:35;;;;;;:::i;:::-;;;;;;;;34920:17;34917:462;;;34958:15;;;;;;;;;;;:31;;;34990:6;34958:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34954:54;35026:15;;;;;;;;;;;:31;;;35058:9;35026:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35022:57;35097:15;;;;;;;;;;;:23;;;35121:16;;35097:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35093:275;;;35334:9;35236:108;;35310:4;35236:108;;;35270:10;35282:6;35290:18;35316:16;;35236:108;;;;;;;;;:::i;:::-;;;;;;;;35139:221;;;35093:275;34917:462;34139:1247;;34004:1382;;;;;;:::o;31487:445::-;31531:28;31562:24;31580:4;31562:9;:24::i;:::-;31531:55;;31623:1;31600:20;:24;31597:328;;;31641:13;31657:33;31669:20;31657:11;:33::i;:::-;31641:49;;31721:14;;31709:8;:26;;:47;;;;;31740:16;;;;;;;;;;;31739:17;31709:47;:72;;;;;31760:21;;;;;;;;;;;31709:72;31705:209;;;31860:38;31877:20;31860:16;:38::i;:::-;31705:209;31626:299;31597:328;31520:412;31487:445::o;6452:471::-;6510:7;6760:1;6755;:6;6751:47;;6785:1;6778:8;;;;6751:47;6810:9;6826:1;6822;:5;;;;:::i;:::-;6810:17;;6855:1;6850;6846;:5;;;;:::i;:::-;:10;6838:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6914:1;6907:8;;;6452:471;;;;;:::o;7399:132::-;7457:7;7484:39;7488:1;7491;7484:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7477:46;;7399:132;;;;:::o;5562:136::-;5620:7;5647:43;5651:1;5654;5647:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5640:50;;5562:136;;;;:::o;32157:752::-;19344:4;19325:16;;:23;;;;;;;;;;;;;;;;;;32244:38:::1;32261:20;32244:16;:38::i;:::-;32293:23;32319:21;32293:47;;32351:23;32377:53;32426:3;32377:44;32397:12;:23;;;32377:15;:19;;:44;;;;:::i;:::-;:48;;:53;;;;:::i;:::-;32351:79;;32441:21;32465:51;32512:3;32465:42;32485:12;:21;;;32465:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;32441:75;;32527:20;32550:50;32596:3;32550:41;32570:12;:20;;;32550:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32527:73;;32611:20;32634:50;32680:3;32634:41;32654:12;:20;;;32634:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32611:73;;32703:17;;;;;;;;;;;32695:35;;:52;32731:15;32695:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32758:31;32775:13;32758:16;:31::i;:::-;32808:10;;;;;;;;;;;32800:28;;:42;32829:12;32800:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32861:14;;;;;;;;;;;32853:32;;:46;32886:12;32853:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32233:676;;;;;19390:5:::0;19371:16;;:24;;;;;;;;;;;;;;;;;;32157:752;:::o;8027:278::-;8113:7;8145:1;8141;:5;8148:12;8133:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8172:9;8188:1;8184;:5;;;;:::i;:::-;8172:17;;8296:1;8289:8;;;8027:278;;;;;:::o;33338:585::-;33464:21;33502:1;33488:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33464:40;;33533:4;33515;33520:1;33515:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33559:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33549:4;33554:1;33549:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33592:62;33609:4;33624:15;;;;;;;;;;;33642:11;33592:8;:62::i;:::-;33691:15;;;;;;;;;;;:66;;;33772:11;33798:1;33842:4;33869;33889:15;33691:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33393:530;33338:585;:::o;33109:221::-;33174:12;33199:15;;;;;;;;;;;33191:29;;33229:9;33191:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33173:70;;;33258:7;33254:69;;;33287:24;33301:9;33287:24;;;;;;:::i;:::-;;;;;;;;33254:69;33162:168;33109:221;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:442::-;3947:4;3985:2;3974:9;3970:18;3962:26;;3998:71;4066:1;4055:9;4051:17;4042:6;3998:71;:::i;:::-;4079:72;4147:2;4136:9;4132:18;4123:6;4079:72;:::i;:::-;4161;4229:2;4218:9;4214:18;4205:6;4161:72;:::i;:::-;3798:442;;;;;;:::o;4246:329::-;4305:6;4354:2;4342:9;4333:7;4329:23;4325:32;4322:119;;;4360:79;;:::i;:::-;4322:119;4480:1;4505:53;4550:7;4541:6;4530:9;4526:22;4505:53;:::i;:::-;4495:63;;4451:117;4246:329;;;;:::o;4581:765::-;4667:6;4675;4683;4691;4740:3;4728:9;4719:7;4715:23;4711:33;4708:120;;;4747:79;;:::i;:::-;4708:120;4867:1;4892:53;4937:7;4928:6;4917:9;4913:22;4892:53;:::i;:::-;4882:63;;4838:117;4994:2;5020:53;5065:7;5056:6;5045:9;5041:22;5020:53;:::i;:::-;5010:63;;4965:118;5122:2;5148:53;5193:7;5184:6;5173:9;5169:22;5148:53;:::i;:::-;5138:63;;5093:118;5250:2;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5221:118;4581:765;;;;;;;:::o;5352:60::-;5380:3;5401:5;5394:12;;5352:60;;;:::o;5418:142::-;5468:9;5501:53;5519:34;5528:24;5546:5;5528:24;:::i;:::-;5519:34;:::i;:::-;5501:53;:::i;:::-;5488:66;;5418:142;;;:::o;5566:126::-;5616:9;5649:37;5680:5;5649:37;:::i;:::-;5636:50;;5566:126;;;:::o;5698:152::-;5774:9;5807:37;5838:5;5807:37;:::i;:::-;5794:50;;5698:152;;;:::o;5856:183::-;5969:63;6026:5;5969:63;:::i;:::-;5964:3;5957:76;5856:183;;:::o;6045:274::-;6164:4;6202:2;6191:9;6187:18;6179:26;;6215:97;6309:1;6298:9;6294:17;6285:6;6215:97;:::i;:::-;6045:274;;;;:::o;6325:619::-;6402:6;6410;6418;6467:2;6455:9;6446:7;6442:23;6438:32;6435:119;;;6473:79;;:::i;:::-;6435:119;6593:1;6618:53;6663:7;6654:6;6643:9;6639:22;6618:53;:::i;:::-;6608:63;;6564:117;6720:2;6746:53;6791:7;6782:6;6771:9;6767:22;6746:53;:::i;:::-;6736:63;;6691:118;6848:2;6874:53;6919:7;6910:6;6899:9;6895:22;6874:53;:::i;:::-;6864:63;;6819:118;6325:619;;;;;:::o;6950:329::-;7009:6;7058:2;7046:9;7037:7;7033:23;7029:32;7026:119;;;7064:79;;:::i;:::-;7026:119;7184:1;7209:53;7254:7;7245:6;7234:9;7230:22;7209:53;:::i;:::-;7199:63;;7155:117;6950:329;;;;:::o;7285:86::-;7320:7;7360:4;7353:5;7349:16;7338:27;;7285:86;;;:::o;7377:112::-;7460:22;7476:5;7460:22;:::i;:::-;7455:3;7448:35;7377:112;;:::o;7495:214::-;7584:4;7622:2;7611:9;7607:18;7599:26;;7635:67;7699:1;7688:9;7684:17;7675:6;7635:67;:::i;:::-;7495:214;;;;:::o;7715:118::-;7802:24;7820:5;7802:24;:::i;:::-;7797:3;7790:37;7715:118;;:::o;7839:222::-;7932:4;7970:2;7959:9;7955:18;7947:26;;7983:71;8051:1;8040:9;8036:17;8027:6;7983:71;:::i;:::-;7839:222;;;;:::o;8067:117::-;8176:1;8173;8166:12;8190:117;8299:1;8296;8289:12;8313:117;8422:1;8419;8412:12;8453:568;8526:8;8536:6;8586:3;8579:4;8571:6;8567:17;8563:27;8553:122;;8594:79;;:::i;:::-;8553:122;8707:6;8694:20;8684:30;;8737:18;8729:6;8726:30;8723:117;;;8759:79;;:::i;:::-;8723:117;8873:4;8865:6;8861:17;8849:29;;8927:3;8919:4;8911:6;8907:17;8897:8;8893:32;8890:41;8887:128;;;8934:79;;:::i;:::-;8887:128;8453:568;;;;;:::o;9027:116::-;9097:21;9112:5;9097:21;:::i;:::-;9090:5;9087:32;9077:60;;9133:1;9130;9123:12;9077:60;9027:116;:::o;9149:133::-;9192:5;9230:6;9217:20;9208:29;;9246:30;9270:5;9246:30;:::i;:::-;9149:133;;;;:::o;9288:698::-;9380:6;9388;9396;9445:2;9433:9;9424:7;9420:23;9416:32;9413:119;;;9451:79;;:::i;:::-;9413:119;9599:1;9588:9;9584:17;9571:31;9629:18;9621:6;9618:30;9615:117;;;9651:79;;:::i;:::-;9615:117;9764:80;9836:7;9827:6;9816:9;9812:22;9764:80;:::i;:::-;9746:98;;;;9542:312;9893:2;9919:50;9961:7;9952:6;9941:9;9937:22;9919:50;:::i;:::-;9909:60;;9864:115;9288:698;;;;;:::o;9992:323::-;10048:6;10097:2;10085:9;10076:7;10072:23;10068:32;10065:119;;;10103:79;;:::i;:::-;10065:119;10223:1;10248:50;10290:7;10281:6;10270:9;10266:22;10248:50;:::i;:::-;10238:60;;10194:114;9992:323;;;;:::o;10321:553::-;10498:4;10536:3;10525:9;10521:19;10513:27;;10550:71;10618:1;10607:9;10603:17;10594:6;10550:71;:::i;:::-;10631:72;10699:2;10688:9;10684:18;10675:6;10631:72;:::i;:::-;10713;10781:2;10770:9;10766:18;10757:6;10713:72;:::i;:::-;10795;10863:2;10852:9;10848:18;10839:6;10795:72;:::i;:::-;10321:553;;;;;;;:::o;10880:474::-;10948:6;10956;11005:2;10993:9;10984:7;10980:23;10976:32;10973:119;;;11011:79;;:::i;:::-;10973:119;11131:1;11156:53;11201:7;11192:6;11181:9;11177:22;11156:53;:::i;:::-;11146:63;;11102:117;11258:2;11284:53;11329:7;11320:6;11309:9;11305:22;11284:53;:::i;:::-;11274:63;;11229:118;10880:474;;;;;:::o;11360:180::-;11408:77;11405:1;11398:88;11505:4;11502:1;11495:15;11529:4;11526:1;11519:15;11546:281;11629:27;11651:4;11629:27;:::i;:::-;11621:6;11617:40;11759:6;11747:10;11744:22;11723:18;11711:10;11708:34;11705:62;11702:88;;;11770:18;;:::i;:::-;11702:88;11810:10;11806:2;11799:22;11589:238;11546:281;;:::o;11833:129::-;11867:6;11894:20;;:::i;:::-;11884:30;;11923:33;11951:4;11943:6;11923:33;:::i;:::-;11833:129;;;:::o;11968:311::-;12045:4;12135:18;12127:6;12124:30;12121:56;;;12157:18;;:::i;:::-;12121:56;12207:4;12199:6;12195:17;12187:25;;12267:4;12261;12257:15;12249:23;;11968:311;;;:::o;12302:710::-;12398:5;12423:81;12439:64;12496:6;12439:64;:::i;:::-;12423:81;:::i;:::-;12414:90;;12524:5;12553:6;12546:5;12539:21;12587:4;12580:5;12576:16;12569:23;;12640:4;12632:6;12628:17;12620:6;12616:30;12669:3;12661:6;12658:15;12655:122;;;12688:79;;:::i;:::-;12655:122;12803:6;12786:220;12820:6;12815:3;12812:15;12786:220;;;12895:3;12924:37;12957:3;12945:10;12924:37;:::i;:::-;12919:3;12912:50;12991:4;12986:3;12982:14;12975:21;;12862:144;12846:4;12841:3;12837:14;12830:21;;12786:220;;;12790:21;12404:608;;12302:710;;;;;:::o;13035:370::-;13106:5;13155:3;13148:4;13140:6;13136:17;13132:27;13122:122;;13163:79;;:::i;:::-;13122:122;13280:6;13267:20;13305:94;13395:3;13387:6;13380:4;13372:6;13368:17;13305:94;:::i;:::-;13296:103;;13112:293;13035:370;;;;:::o;13411:539::-;13495:6;13544:2;13532:9;13523:7;13519:23;13515:32;13512:119;;;13550:79;;:::i;:::-;13512:119;13698:1;13687:9;13683:17;13670:31;13728:18;13720:6;13717:30;13714:117;;;13750:79;;:::i;:::-;13714:117;13855:78;13925:7;13916:6;13905:9;13901:22;13855:78;:::i;:::-;13845:88;;13641:302;13411:539;;;;:::o;13956:619::-;14033:6;14041;14049;14098:2;14086:9;14077:7;14073:23;14069:32;14066:119;;;14104:79;;:::i;:::-;14066:119;14224:1;14249:53;14294:7;14285:6;14274:9;14270:22;14249:53;:::i;:::-;14239:63;;14195:117;14351:2;14377:53;14422:7;14413:6;14402:9;14398:22;14377:53;:::i;:::-;14367:63;;14322:118;14479:2;14505:53;14550:7;14541:6;14530:9;14526:22;14505:53;:::i;:::-;14495:63;;14450:118;13956:619;;;;;:::o;14598:568::-;14671:8;14681:6;14731:3;14724:4;14716:6;14712:17;14708:27;14698:122;;14739:79;;:::i;:::-;14698:122;14852:6;14839:20;14829:30;;14882:18;14874:6;14871:30;14868:117;;;14904:79;;:::i;:::-;14868:117;15018:4;15010:6;15006:17;14994:29;;15072:3;15064:4;15056:6;15052:17;15042:8;15038:32;15035:41;15032:128;;;15079:79;;:::i;:::-;15032:128;14598:568;;;;;:::o;15172:934::-;15294:6;15302;15310;15318;15367:2;15355:9;15346:7;15342:23;15338:32;15335:119;;;15373:79;;:::i;:::-;15335:119;15521:1;15510:9;15506:17;15493:31;15551:18;15543:6;15540:30;15537:117;;;15573:79;;:::i;:::-;15537:117;15686:80;15758:7;15749:6;15738:9;15734:22;15686:80;:::i;:::-;15668:98;;;;15464:312;15843:2;15832:9;15828:18;15815:32;15874:18;15866:6;15863:30;15860:117;;;15896:79;;:::i;:::-;15860:117;16009:80;16081:7;16072:6;16061:9;16057:22;16009:80;:::i;:::-;15991:98;;;;15786:313;15172:934;;;;;;;:::o;16112:474::-;16180:6;16188;16237:2;16225:9;16216:7;16212:23;16208:32;16205:119;;;16243:79;;:::i;:::-;16205:119;16363:1;16388:53;16433:7;16424:6;16413:9;16409:22;16388:53;:::i;:::-;16378:63;;16334:117;16490:2;16516:53;16561:7;16552:6;16541:9;16537:22;16516:53;:::i;:::-;16506:63;;16461:118;16112:474;;;;;:::o;16592:619::-;16669:6;16677;16685;16734:2;16722:9;16713:7;16709:23;16705:32;16702:119;;;16740:79;;:::i;:::-;16702:119;16860:1;16885:53;16930:7;16921:6;16910:9;16906:22;16885:53;:::i;:::-;16875:63;;16831:117;16987:2;17013:53;17058:7;17049:6;17038:9;17034:22;17013:53;:::i;:::-;17003:63;;16958:118;17115:2;17141:53;17186:7;17177:6;17166:9;17162:22;17141:53;:::i;:::-;17131:63;;17086:118;16592:619;;;;;:::o;17217:180::-;17265:77;17262:1;17255:88;17362:4;17359:1;17352:15;17386:4;17383:1;17376:15;17403:320;17447:6;17484:1;17478:4;17474:12;17464:22;;17531:1;17525:4;17521:12;17552:18;17542:81;;17608:4;17600:6;17596:17;17586:27;;17542:81;17670:2;17662:6;17659:14;17639:18;17636:38;17633:84;;17689:18;;:::i;:::-;17633:84;17454:269;17403:320;;;:::o;17729:182::-;17869:34;17865:1;17857:6;17853:14;17846:58;17729:182;:::o;17917:366::-;18059:3;18080:67;18144:2;18139:3;18080:67;:::i;:::-;18073:74;;18156:93;18245:3;18156:93;:::i;:::-;18274:2;18269:3;18265:12;18258:19;;17917:366;;;:::o;18289:419::-;18455:4;18493:2;18482:9;18478:18;18470:26;;18542:9;18536:4;18532:20;18528:1;18517:9;18513:17;18506:47;18570:131;18696:4;18570:131;:::i;:::-;18562:139;;18289:419;;;:::o;18714:180::-;18762:77;18759:1;18752:88;18859:4;18856:1;18849:15;18883:4;18880:1;18873:15;18900:410;18940:7;18963:20;18981:1;18963:20;:::i;:::-;18958:25;;18997:20;19015:1;18997:20;:::i;:::-;18992:25;;19052:1;19049;19045:9;19074:30;19092:11;19074:30;:::i;:::-;19063:41;;19253:1;19244:7;19240:15;19237:1;19234:22;19214:1;19207:9;19187:83;19164:139;;19283:18;;:::i;:::-;19164:139;18948:362;18900:410;;;;:::o;19316:180::-;19364:77;19361:1;19354:88;19461:4;19458:1;19451:15;19485:4;19482:1;19475:15;19502:143;19559:5;19590:6;19584:13;19575:22;;19606:33;19633:5;19606:33;:::i;:::-;19502:143;;;;:::o;19651:351::-;19721:6;19770:2;19758:9;19749:7;19745:23;19741:32;19738:119;;;19776:79;;:::i;:::-;19738:119;19896:1;19921:64;19977:7;19968:6;19957:9;19953:22;19921:64;:::i;:::-;19911:74;;19867:128;19651:351;;;;:::o;20008:114::-;20075:6;20109:5;20103:12;20093:22;;20008:114;;;:::o;20128:184::-;20227:11;20261:6;20256:3;20249:19;20301:4;20296:3;20292:14;20277:29;;20128:184;;;;:::o;20318:132::-;20385:4;20408:3;20400:11;;20438:4;20433:3;20429:14;20421:22;;20318:132;;;:::o;20456:108::-;20533:24;20551:5;20533:24;:::i;:::-;20528:3;20521:37;20456:108;;:::o;20570:179::-;20639:10;20660:46;20702:3;20694:6;20660:46;:::i;:::-;20738:4;20733:3;20729:14;20715:28;;20570:179;;;;:::o;20755:113::-;20825:4;20857;20852:3;20848:14;20840:22;;20755:113;;;:::o;20904:732::-;21023:3;21052:54;21100:5;21052:54;:::i;:::-;21122:86;21201:6;21196:3;21122:86;:::i;:::-;21115:93;;21232:56;21282:5;21232:56;:::i;:::-;21311:7;21342:1;21327:284;21352:6;21349:1;21346:13;21327:284;;;21428:6;21422:13;21455:63;21514:3;21499:13;21455:63;:::i;:::-;21448:70;;21541:60;21594:6;21541:60;:::i;:::-;21531:70;;21387:224;21374:1;21371;21367:9;21362:14;;21327:284;;;21331:14;21627:3;21620:10;;21028:608;;;20904:732;;;;:::o;21642:483::-;21813:4;21851:2;21840:9;21836:18;21828:26;;21864:71;21932:1;21921:9;21917:17;21908:6;21864:71;:::i;:::-;21982:9;21976:4;21972:20;21967:2;21956:9;21952:18;21945:48;22010:108;22113:4;22104:6;22010:108;:::i;:::-;22002:116;;21642:483;;;;;:::o;22131:311::-;22208:4;22298:18;22290:6;22287:30;22284:56;;;22320:18;;:::i;:::-;22284:56;22370:4;22362:6;22358:17;22350:25;;22430:4;22424;22420:15;22412:23;;22131:311;;;:::o;22448:143::-;22505:5;22536:6;22530:13;22521:22;;22552:33;22579:5;22552:33;:::i;:::-;22448:143;;;;:::o;22614:732::-;22721:5;22746:81;22762:64;22819:6;22762:64;:::i;:::-;22746:81;:::i;:::-;22737:90;;22847:5;22876:6;22869:5;22862:21;22910:4;22903:5;22899:16;22892:23;;22963:4;22955:6;22951:17;22943:6;22939:30;22992:3;22984:6;22981:15;22978:122;;;23011:79;;:::i;:::-;22978:122;23126:6;23109:231;23143:6;23138:3;23135:15;23109:231;;;23218:3;23247:48;23291:3;23279:10;23247:48;:::i;:::-;23242:3;23235:61;23325:4;23320:3;23316:14;23309:21;;23185:155;23169:4;23164:3;23160:14;23153:21;;23109:231;;;23113:21;22727:619;;22614:732;;;;;:::o;23369:385::-;23451:5;23500:3;23493:4;23485:6;23481:17;23477:27;23467:122;;23508:79;;:::i;:::-;23467:122;23618:6;23612:13;23643:105;23744:3;23736:6;23729:4;23721:6;23717:17;23643:105;:::i;:::-;23634:114;;23457:297;23369:385;;;;:::o;23760:554::-;23855:6;23904:2;23892:9;23883:7;23879:23;23875:32;23872:119;;;23910:79;;:::i;:::-;23872:119;24051:1;24040:9;24036:17;24030:24;24081:18;24073:6;24070:30;24067:117;;;24103:79;;:::i;:::-;24067:117;24208:89;24289:7;24280:6;24269:9;24265:22;24208:89;:::i;:::-;24198:99;;24001:306;23760:554;;;;:::o;24320:231::-;24460:34;24456:1;24448:6;24444:14;24437:58;24529:14;24524:2;24516:6;24512:15;24505:39;24320:231;:::o;24557:366::-;24699:3;24720:67;24784:2;24779:3;24720:67;:::i;:::-;24713:74;;24796:93;24885:3;24796:93;:::i;:::-;24914:2;24909:3;24905:12;24898:19;;24557:366;;;:::o;24929:419::-;25095:4;25133:2;25122:9;25118:18;25110:26;;25182:9;25176:4;25172:20;25168:1;25157:9;25153:17;25146:47;25210:131;25336:4;25210:131;:::i;:::-;25202:139;;24929:419;;;:::o;25354:221::-;25494:34;25490:1;25482:6;25478:14;25471:58;25563:4;25558:2;25550:6;25546:15;25539:29;25354:221;:::o;25581:366::-;25723:3;25744:67;25808:2;25803:3;25744:67;:::i;:::-;25737:74;;25820:93;25909:3;25820:93;:::i;:::-;25938:2;25933:3;25929:12;25922:19;;25581:366;;;:::o;25953:419::-;26119:4;26157:2;26146:9;26142:18;26134:26;;26206:9;26200:4;26196:20;26192:1;26181:9;26177:17;26170:47;26234:131;26360:4;26234:131;:::i;:::-;26226:139;;25953:419;;;:::o;26378:332::-;26499:4;26537:2;26526:9;26522:18;26514:26;;26550:71;26618:1;26607:9;26603:17;26594:6;26550:71;:::i;:::-;26631:72;26699:2;26688:9;26684:18;26675:6;26631:72;:::i;:::-;26378:332;;;;;:::o;26716:232::-;26856:34;26852:1;26844:6;26840:14;26833:58;26925:15;26920:2;26912:6;26908:15;26901:40;26716:232;:::o;26954:366::-;27096:3;27117:67;27181:2;27176:3;27117:67;:::i;:::-;27110:74;;27193:93;27282:3;27193:93;:::i;:::-;27311:2;27306:3;27302:12;27295:19;;26954:366;;;:::o;27326:419::-;27492:4;27530:2;27519:9;27515:18;27507:26;;27579:9;27573:4;27569:20;27565:1;27554:9;27550:17;27543:47;27607:131;27733:4;27607:131;:::i;:::-;27599:139;;27326:419;;;:::o;27751:229::-;27891:34;27887:1;27879:6;27875:14;27868:58;27960:12;27955:2;27947:6;27943:15;27936:37;27751:229;:::o;27986:366::-;28128:3;28149:67;28213:2;28208:3;28149:67;:::i;:::-;28142:74;;28225:93;28314:3;28225:93;:::i;:::-;28343:2;28338:3;28334:12;28327:19;;27986:366;;;:::o;28358:419::-;28524:4;28562:2;28551:9;28547:18;28539:26;;28611:9;28605:4;28601:20;28597:1;28586:9;28582:17;28575:47;28639:131;28765:4;28639:131;:::i;:::-;28631:139;;28358:419;;;:::o;28783:191::-;28823:3;28842:20;28860:1;28842:20;:::i;:::-;28837:25;;28876:20;28894:1;28876:20;:::i;:::-;28871:25;;28919:1;28916;28912:9;28905:16;;28940:3;28937:1;28934:10;28931:36;;;28947:18;;:::i;:::-;28931:36;28783:191;;;;:::o;28980:225::-;29120:34;29116:1;29108:6;29104:14;29097:58;29189:8;29184:2;29176:6;29172:15;29165:33;28980:225;:::o;29211:366::-;29353:3;29374:67;29438:2;29433:3;29374:67;:::i;:::-;29367:74;;29450:93;29539:3;29450:93;:::i;:::-;29568:2;29563:3;29559:12;29552:19;;29211:366;;;:::o;29583:419::-;29749:4;29787:2;29776:9;29772:18;29764:26;;29836:9;29830:4;29826:20;29822:1;29811:9;29807:17;29800:47;29864:131;29990:4;29864:131;:::i;:::-;29856:139;;29583:419;;;:::o;30008:223::-;30148:34;30144:1;30136:6;30132:14;30125:58;30217:6;30212:2;30204:6;30200:15;30193:31;30008:223;:::o;30237:366::-;30379:3;30400:67;30464:2;30459:3;30400:67;:::i;:::-;30393:74;;30476:93;30565:3;30476:93;:::i;:::-;30594:2;30589:3;30585:12;30578:19;;30237:366;;;:::o;30609:419::-;30775:4;30813:2;30802:9;30798:18;30790:26;;30862:9;30856:4;30852:20;30848:1;30837:9;30833:17;30826:47;30890:131;31016:4;30890:131;:::i;:::-;30882:139;;30609:419;;;:::o;31034:221::-;31174:34;31170:1;31162:6;31158:14;31151:58;31243:4;31238:2;31230:6;31226:15;31219:29;31034:221;:::o;31261:366::-;31403:3;31424:67;31488:2;31483:3;31424:67;:::i;:::-;31417:74;;31500:93;31589:3;31500:93;:::i;:::-;31618:2;31613:3;31609:12;31602:19;;31261:366;;;:::o;31633:419::-;31799:4;31837:2;31826:9;31822:18;31814:26;;31886:9;31880:4;31876:20;31872:1;31861:9;31857:17;31850:47;31914:131;32040:4;31914:131;:::i;:::-;31906:139;;31633:419;;;:::o;32058:224::-;32198:34;32194:1;32186:6;32182:14;32175:58;32267:7;32262:2;32254:6;32250:15;32243:32;32058:224;:::o;32288:366::-;32430:3;32451:67;32515:2;32510:3;32451:67;:::i;:::-;32444:74;;32527:93;32616:3;32527:93;:::i;:::-;32645:2;32640:3;32636:12;32629:19;;32288:366;;;:::o;32660:419::-;32826:4;32864:2;32853:9;32849:18;32841:26;;32913:9;32907:4;32903:20;32899:1;32888:9;32884:17;32877:47;32941:131;33067:4;32941:131;:::i;:::-;32933:139;;32660:419;;;:::o;33085:222::-;33225:34;33221:1;33213:6;33209:14;33202:58;33294:5;33289:2;33281:6;33277:15;33270:30;33085:222;:::o;33313:366::-;33455:3;33476:67;33540:2;33535:3;33476:67;:::i;:::-;33469:74;;33552:93;33641:3;33552:93;:::i;:::-;33670:2;33665:3;33661:12;33654:19;;33313:366;;;:::o;33685:419::-;33851:4;33889:2;33878:9;33874:18;33866:26;;33938:9;33932:4;33928:20;33924:1;33913:9;33909:17;33902:47;33966:131;34092:4;33966:131;:::i;:::-;33958:139;;33685:419;;;:::o;34110:228::-;34250:34;34246:1;34238:6;34234:14;34227:58;34319:11;34314:2;34306:6;34302:15;34295:36;34110:228;:::o;34344:366::-;34486:3;34507:67;34571:2;34566:3;34507:67;:::i;:::-;34500:74;;34583:93;34672:3;34583:93;:::i;:::-;34701:2;34696:3;34692:12;34685:19;;34344:366;;;:::o;34716:419::-;34882:4;34920:2;34909:9;34905:18;34897:26;;34969:9;34963:4;34959:20;34955:1;34944:9;34940:17;34933:47;34997:131;35123:4;34997:131;:::i;:::-;34989:139;;34716:419;;;:::o;35141:180::-;35281:32;35277:1;35269:6;35265:14;35258:56;35141:180;:::o;35327:366::-;35469:3;35490:67;35554:2;35549:3;35490:67;:::i;:::-;35483:74;;35566:93;35655:3;35566:93;:::i;:::-;35684:2;35679:3;35675:12;35668:19;;35327:366;;;:::o;35699:419::-;35865:4;35903:2;35892:9;35888:18;35880:26;;35952:9;35946:4;35942:20;35938:1;35927:9;35923:17;35916:47;35980:131;36106:4;35980:131;:::i;:::-;35972:139;;35699:419;;;:::o;36124:234::-;36264:34;36260:1;36252:6;36248:14;36241:58;36333:17;36328:2;36320:6;36316:15;36309:42;36124:234;:::o;36364:366::-;36506:3;36527:67;36591:2;36586:3;36527:67;:::i;:::-;36520:74;;36603:93;36692:3;36603:93;:::i;:::-;36721:2;36716:3;36712:12;36705:19;;36364:366;;;:::o;36736:419::-;36902:4;36940:2;36929:9;36925:18;36917:26;;36989:9;36983:4;36979:20;36975:1;36964:9;36960:17;36953:47;37017:131;37143:4;37017:131;:::i;:::-;37009:139;;36736:419;;;:::o;37161:227::-;37301:34;37297:1;37289:6;37285:14;37278:58;37370:10;37365:2;37357:6;37353:15;37346:35;37161:227;:::o;37394:366::-;37536:3;37557:67;37621:2;37616:3;37557:67;:::i;:::-;37550:74;;37633:93;37722:3;37633:93;:::i;:::-;37751:2;37746:3;37742:12;37735:19;;37394:366;;;:::o;37766:419::-;37932:4;37970:2;37959:9;37955:18;37947:26;;38019:9;38013:4;38009:20;38005:1;37994:9;37990:17;37983:47;38047:131;38173:4;38047:131;:::i;:::-;38039:139;;37766:419;;;:::o;38191:224::-;38331:34;38327:1;38319:6;38315:14;38308:58;38400:7;38395:2;38387:6;38383:15;38376:32;38191:224;:::o;38421:366::-;38563:3;38584:67;38648:2;38643:3;38584:67;:::i;:::-;38577:74;;38660:93;38749:3;38660:93;:::i;:::-;38778:2;38773:3;38769:12;38762:19;;38421:366;;;:::o;38793:419::-;38959:4;38997:2;38986:9;38982:18;38974:26;;39046:9;39040:4;39036:20;39032:1;39021:9;39017:17;39010:47;39074:131;39200:4;39074:131;:::i;:::-;39066:139;;38793:419;;;:::o;39218:194::-;39258:4;39278:20;39296:1;39278:20;:::i;:::-;39273:25;;39312:20;39330:1;39312:20;:::i;:::-;39307:25;;39356:1;39353;39349:9;39341:17;;39380:1;39374:4;39371:11;39368:37;;;39385:18;;:::i;:::-;39368:37;39218:194;;;;:::o;39418:177::-;39558:29;39554:1;39546:6;39542:14;39535:53;39418:177;:::o;39601:366::-;39743:3;39764:67;39828:2;39823:3;39764:67;:::i;:::-;39757:74;;39840:93;39929:3;39840:93;:::i;:::-;39958:2;39953:3;39949:12;39942:19;;39601:366;;;:::o;39973:419::-;40139:4;40177:2;40166:9;40162:18;40154:26;;40226:9;40220:4;40216:20;40212:1;40201:9;40197:17;40190:47;40254:131;40380:4;40254:131;:::i;:::-;40246:139;;39973:419;;;:::o;40398:233::-;40437:3;40460:24;40478:5;40460:24;:::i;:::-;40451:33;;40506:66;40499:5;40496:77;40493:103;;40576:18;;:::i;:::-;40493:103;40623:1;40616:5;40612:13;40605:20;;40398:233;;;:::o;40637:663::-;40725:6;40733;40741;40790:2;40778:9;40769:7;40765:23;40761:32;40758:119;;;40796:79;;:::i;:::-;40758:119;40916:1;40941:64;40997:7;40988:6;40977:9;40973:22;40941:64;:::i;:::-;40931:74;;40887:128;41054:2;41080:64;41136:7;41127:6;41116:9;41112:22;41080:64;:::i;:::-;41070:74;;41025:129;41193:2;41219:64;41275:7;41266:6;41255:9;41251:22;41219:64;:::i;:::-;41209:74;;41164:129;40637:663;;;;;:::o;41306:180::-;41354:77;41351:1;41344:88;41451:4;41448:1;41441:15;41475:4;41472:1;41465:15;41492:185;41532:1;41549:20;41567:1;41549:20;:::i;:::-;41544:25;;41583:20;41601:1;41583:20;:::i;:::-;41578:25;;41622:1;41612:35;;41627:18;;:::i;:::-;41612:35;41669:1;41666;41662:9;41657:14;;41492:185;;;;:::o;41683:220::-;41823:34;41819:1;41811:6;41807:14;41800:58;41892:3;41887:2;41879:6;41875:15;41868:28;41683:220;:::o;41909:366::-;42051:3;42072:67;42136:2;42131:3;42072:67;:::i;:::-;42065:74;;42148:93;42237:3;42148:93;:::i;:::-;42266:2;42261:3;42257:12;42250:19;;41909:366;;;:::o;42281:419::-;42447:4;42485:2;42474:9;42470:18;42462:26;;42534:9;42528:4;42524:20;42520:1;42509:9;42505:17;42498:47;42562:131;42688:4;42562:131;:::i;:::-;42554:139;;42281:419;;;:::o;42706:85::-;42751:7;42780:5;42769:16;;42706:85;;;:::o;42797:158::-;42855:9;42888:61;42906:42;42915:32;42941:5;42915:32;:::i;:::-;42906:42;:::i;:::-;42888:61;:::i;:::-;42875:74;;42797:158;;;:::o;42961:147::-;43056:45;43095:5;43056:45;:::i;:::-;43051:3;43044:58;42961:147;;:::o;43114:831::-;43377:4;43415:3;43404:9;43400:19;43392:27;;43429:71;43497:1;43486:9;43482:17;43473:6;43429:71;:::i;:::-;43510:80;43586:2;43575:9;43571:18;43562:6;43510:80;:::i;:::-;43637:9;43631:4;43627:20;43622:2;43611:9;43607:18;43600:48;43665:108;43768:4;43759:6;43665:108;:::i;:::-;43657:116;;43783:72;43851:2;43840:9;43836:18;43827:6;43783:72;:::i;:::-;43865:73;43933:3;43922:9;43918:19;43909:6;43865:73;:::i;:::-;43114:831;;;;;;;;:::o;43951:147::-;44052:11;44089:3;44074:18;;43951:147;;;;:::o;44104:114::-;;:::o;44224:398::-;44383:3;44404:83;44485:1;44480:3;44404:83;:::i;:::-;44397:90;;44496:93;44585:3;44496:93;:::i;:::-;44614:1;44609:3;44605:11;44598:18;;44224:398;;;:::o;44628:379::-;44812:3;44834:147;44977:3;44834:147;:::i;:::-;44827:154;;44998:3;44991:10;;44628:379;;;:::o

Swarm Source

ipfs://c939c7a1dcefcb00b7993d6aaf6d3fa3a0655a6dda4851be704d4507c53cc7a7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.