ETH Price: $3,248.63 (-0.31%)
Gas: 1 Gwei

Token

ADRENALINE SHOTS (ADRS)
 

Overview

Max Total Supply

366,210,099.019686239 ADRS

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 ADRS

Value
$0.00
0xd2c4e99e293439db0a9a27d2168753eabd939ace
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:
DividendTracker

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *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 Adrenaline 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";
    string private _symbol = "ADRT";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1000000000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH
    uint public ethSellAmount = 1000000000000000000;  //1 ETH
    uint256 public _maxBuyAmount = 5000000 * 10** _decimals;
    uint256 public _maxWalletAmount = 5000000 * 10** _decimals;
    address public buyBackAddress = 0xd2c4e99e293439Db0A9a27d2168753eaBD939acE;
    address public investmentAddress = 0x088b2777282DCdEE86e2832E7b4DF49B77C0519F;
    address public devAddress = 0xcd9Bc9e17164B430663a97BD74b278bDBaB5b1bC;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(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;
    DividendTracker private dividendTracker;

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _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(12,12,25);
        distribution = Distribution(34, 17, 33, 16);
        emit Transfer(address(0), _msgSender(), _tTotal);

    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        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 setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(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 ProcessedDividendTracker(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 DividendTracker 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 SHOTS";
    string private _symbol = "ADRS";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 1000000 * 10 **  _decimals;
    Adrenaline private adrenaline;
    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 = adrenaline.balanceOf(account);
        if(!adrenaline.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 {
        adrenaline = Adrenaline(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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBalance","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doCalculation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","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":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccountByDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEthBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setERC20Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokenBalForDividends","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalDividendClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280601081526020017f414452454e414c494e452053484f5453000000000000000000000000000000008152506008908051906020019062000051929190620002be565b506040518060400160405280600481526020017f4144525300000000000000000000000000000000000000000000000000000000815250600990805190602001906200009f929190620002be565b506009600a60006101000a81548160ff021916908360ff160217905550604051620000ca906200034f565b604051809103906000f080158015620000e7573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900460ff16600a62000146919062000516565b620f424062000156919062000567565b600d556000600e60146101000a81548160ff021916908315150217905550610e106011553480156200018757600080fd5b5060006200019a620002b660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000248620002b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051620002a8919062000615565b60405180910390a362000696565b600033905090565b828054620002cc9062000661565b90600052602060002090601f016020900481019282620002f057600085556200033c565b82601f106200030b57805160ff19168380011785556200033c565b828001600101855582156200033c579182015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b91906200035d565b5090565b610b088062004c0883390190565b5b80821115620003785760008160009055506001016200035e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200040a57808604811115620003e257620003e16200037c565b5b6001851615620003f25780820291505b80810290506200040285620003ab565b9450620003c2565b94509492505050565b600082620004255760019050620004f8565b81620004355760009050620004f8565b81600181146200044e576002811462000459576200048f565b6001915050620004f8565b60ff8411156200046e576200046d6200037c565b5b8360020a9150848211156200048857620004876200037c565b5b50620004f8565b5060208310610133831016604e8410600b8410161715620004c95782820a905083811115620004c357620004c26200037c565b5b620004f8565b620004d88484846001620003b8565b92509050818404811115620004f257620004f16200037c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200052382620004ff565b9150620005308362000509565b92506200055f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000413565b905092915050565b60006200057482620004ff565b91506200058183620004ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620005bd57620005bc6200037c565b5b828202905092915050565b6000819050919050565b6000819050919050565b6000620005fd620005f7620005f184620005c8565b620005d2565b620004ff565b9050919050565b6200060f81620005dc565b82525050565b60006020820190506200062c600083018462000604565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067a57607f821691505b60208210810362000690576200068f62000632565b5b50919050565b61456280620006a66000396000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063aafd847a116100ab578063e7841ec01161006f578063e7841ec0146108b5578063e98030c7146108e0578063f2fde38b14610909578063fbcbc0f114610932578063ffb2c479146109765761024e565b8063aafd847a146107d0578063be10b6141461080d578063cac8d53814610838578063dd62ed3e14610861578063e0fb0f351461089e5761024e565b806391b89fba116100f257806391b89fba146106b157806395d89b41146106ee578063a457c2d714610719578063a8b9d24014610756578063a9059cbb146107935761024e565b8063715018a6146105de578063804974ea146105f557806385a6b3ae14610632578063897742821461065d5780638da5cb5b146106865761024e565b8063313ce567116101bc5780635ebf4db9116101805780635ebf4db91461050b57806365e2ccb2146105345780636a4740021461055f5780636f2789ec1461057657806370a08231146105a15761024e565b8063313ce5671461042657806331e79db014610451578063395093511461047a5780633974d3b1146104b75780633f83d72c146104e05761024e565b806321df2b091161020357806321df2b091461031b578063226cfa3d1461034457806323b872dd1461038157806327ce0147146103be5780633009a609146103fb5761024e565b806303c833021461025357806306fdde031461025d578063095ea7b31461028857806309bbedde146102c557806318160ddd146102f05761024e565b3661024e5761024c6109b5565b005b600080fd5b61025b6109b5565b005b34801561026957600080fd5b50610272610a8e565b60405161027f9190613331565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906133f1565b610b20565b6040516102bc919061344c565b60405180910390f35b3480156102d157600080fd5b506102da610b3e565b6040516102e79190613476565b60405180910390f35b3480156102fc57600080fd5b50610305610bd6565b6040516103129190613476565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061354c565b610be0565b005b34801561035057600080fd5b5061036b600480360381019061036691906135cd565b610d9b565b6040516103789190613476565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906135fa565b610db3565b6040516103b5919061344c565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906135cd565b610e00565b6040516103f29190613476565b60405180910390f35b34801561040757600080fd5b50610410610ea3565b60405161041d9190613476565b60405180910390f35b34801561043257600080fd5b5061043b610ea9565b6040516104489190613669565b60405180910390f35b34801561045d57600080fd5b50610478600480360381019061047391906135cd565b610ec0565b005b34801561048657600080fd5b506104a1600480360381019061049c91906133f1565b611033565b6040516104ae919061344c565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906135cd565b6110e6565b005b3480156104ec57600080fd5b506104f5611426565b604051610502919061344c565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613684565b611439565b005b34801561054057600080fd5b506105496114fe565b6040516105569190613476565b60405180910390f35b34801561056b57600080fd5b50610574611508565b005b34801561058257600080fd5b5061058b611514565b6040516105989190613476565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906135cd565b61151a565b6040516105d59190613476565b60405180910390f35b3480156105ea57600080fd5b506105f3611563565b005b34801561060157600080fd5b5061061c600480360381019061061791906135cd565b6116b6565b6040516106299190613476565b60405180910390f35b34801561063e57600080fd5b506106476116ff565b6040516106549190613476565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f919061371b565b611705565b005b34801561069257600080fd5b5061069b6117a9565b6040516106a8919061376a565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d391906135cd565b6117d2565b6040516106e59190613476565b60405180910390f35b3480156106fa57600080fd5b506107036117e4565b6040516107109190613331565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906133f1565b611876565b60405161074d919061344c565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906135cd565b611943565b60405161078a9190613476565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b591906133f1565b6119a6565b6040516107c7919061344c565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906135cd565b6119f2565b6040516108049190613476565b60405180910390f35b34801561081957600080fd5b50610822611a3b565b60405161082f9190613476565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a91906135cd565b611a41565b005b34801561086d57600080fd5b5061088860048036038101906108839190613785565b611b1a565b6040516108959190613476565b60405180910390f35b3480156108aa57600080fd5b506108b3611ba1565b005b3480156108c157600080fd5b506108ca611c8c565b6040516108d79190613476565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613684565b611c96565b005b34801561091557600080fd5b50610930600480360381019061092b91906135cd565b611dfd565b005b34801561093e57600080fd5b50610959600480360381019061095491906135cd565b611fbe565b60405161096d9897969594939291906137de565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613684565b6122cc565b6040516109ac9392919061385c565b60405180910390f35b60006109bf610bd6565b116109c957600080fd5b6000341115610a8c57610a1c6109dd610bd6565b610a01700100000000000000000000000000000000346125c790919063ffffffff16565b610a0b91906138f1565b60015461264190919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610a689190613476565b60405180910390a2610a8534600b5461264190919063ffffffff16565b600b819055505b565b606060088054610a9d90613951565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990613951565b8015610b165780601f10610aeb57610100808354040283529160200191610b16565b820191906000526020600020905b815481529060010190602001808311610af957829003601f168201915b5050505050905090565b6000610b34610b2d61269f565b84846126a7565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd19190613997565b905090565b6000600754905090565b610be861269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90613a10565b60405180910390fd5b60005b84849050811015610d94576000858583818110610c9857610c97613a30565b5b9050602002016020810190610cad91906135cd565b90506000633b9aca00858585818110610cc957610cc8613a30565b5b90506020020135610cda9190613a5f565b9050600d548110610d7f57610cef8282612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610d4c929190613ab9565b600060405180830381600087803b158015610d6657600080fd5b505af1158015610d7a573d6000803e3d6000fd5b505050505b50508080610d8c90613ae2565b915050610c78565b5050505050565b60106020528060005260406000206000915090505481565b600080610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613b9c565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610e92610e8d600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7f610e7a610e698861151a565b6001546125c790919063ffffffff16565b6128dd565b6128fa90919063ffffffff16565b612945565b610e9c91906138f1565b9050919050565b600f5481565b6000600a60009054906101000a900460ff16905090565b610ec861269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613a10565b60405180910390fd5b610f60816000612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610fbb919061376a565b600060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006110dc61104061269f565b846110d7856006600061105161269f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264190919063ffffffff16565b6126a7565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611143919061376a565b602060405180830381865afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190613997565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016111e1919061376a565b602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190613bd1565b61136b57600d5481106112cd576112398282612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401611296929190613ab9565b600060405180830381600087803b1580156112b057600080fd5b505af11580156112c4573d6000803e3d6000fd5b50505050611366565b6112d8826000612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b8152600401611333919061376a565b600060405180830381600087803b15801561134d57600080fd5b505af1158015611361573d6000803e3d6000fd5b505050505b611416565b60006113768361151a565b111561141557611387826000612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113e2919061376a565b600060405180830381600087803b1580156113fc57600080fd5b505af1158015611410573d6000803e3d6000fd5b505050505b5b61142182600161295c565b505050565b600e60149054906101000a900460ff1681565b61144161269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613a10565b60405180910390fd5b600a60009054906101000a900460ff16600a6114ea9190613d31565b816114f59190613a5f565b600d8190555050565b6000600d54905090565b61151133612ab9565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61156b61269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613a10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b61170d61269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613a10565b60405180910390fd5b6117a4828261295c565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117dd82611943565b9050919050565b6060600980546117f390613951565b80601f016020809104026020016040519081016040528092919081815260200182805461181f90613951565b801561186c5780601f106118415761010080835404028352916020019161186c565b820191906000526020600020905b81548152906001019060200180831161184f57829003601f168201915b5050505050905090565b600061193961188361269f565b846119348560405180606001604052806025815260200161450860259139600660006118ad61269f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cde9092919063ffffffff16565b6126a7565b6001905092915050565b600061199f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199184610e00565b612d4290919063ffffffff16565b9050919050565b6000806119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90613b9c565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611a4961269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613a10565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ba961269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90613a10565b60405180910390fd5b6000479050611c436117a9565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c88573d6000803e3d6000fd5b5050565b6000600f54905090565b611c9e61269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613a10565b60405180910390fd5b610e108110158015611d405750620151808111155b611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7690613dee565b60405180910390fd5b6011548103611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613e80565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611e0561269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613a10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890613f12565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b8152600401612028919061376a565b602060405180830381865afa158015612045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120699190613f5e565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95506000871261221e57600f548711156120bc576120b5600f5488612d8c90919063ffffffff16565b955061221d565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190613997565b1161215e576000612204565b612203600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f59190613997565b612d4290919063ffffffff16565b5b905061221981896128fa90919063ffffffff16565b9650505b5b61222788611943565b945061223288610e00565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161228557600061229b565b61229a6011548461264190919063ffffffff16565b5b91504282116122ab5760006122bf565b6122be4283612d4290919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561233f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123639190613997565b90506000810361237f57600080600f54935093509350506125c0565b6000600f5490506000805a90506000805b898410801561239e57508582105b156125a75784806123ae90613ae2565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124429190613997565b851061244d57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b81526004016124aa9190613476565b602060405180830381865afa1580156124c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124eb9190613fa0565b9050612535601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd7565b1561255a5761254581600161295c565b1561255957818061255590613ae2565b9250505b5b828061256590613ae2565b93505060005a90508085111561259d5761259a61258b8287612d4290919063ffffffff16565b8761264190919063ffffffff16565b95505b8094505050612390565b84600f819055508181600f549850985098505050505050505b9193909250565b60008083036125d9576000905061263b565b600082846125e79190613a5f565b90508284826125f691906138f1565b14612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d9061403f565b60405180910390fd5b809150505b92915050565b6000808284612650919061405f565b905083811015612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614101565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270d90614193565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277c90614225565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128639190613476565b60405180910390a3505050565b600061287b8361151a565b9050808211156128ac57600061289a8284612d4290919063ffffffff16565b90506128a68482612e0a565b506128d8565b808210156128d75760006128c98383612d4290919063ffffffff16565b90506128d58482613044565b505b5b505050565b60008082905060008112156128f157600080fd5b80915050919050565b60008082846129099190614245565b90506000831215801561291c5750838112155b80612932575060008312801561293157508381125b5b61293b57600080fd5b8091505092915050565b60008082121561295457600080fd5b819050919050565b60008061296884612ab9565b90506000811115612aad576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506129ca818361264190919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612a9a9190613476565b60405180910390a3600192505050612ab3565b60009150505b92915050565b600080612ac583611943565b90506000811115612cd357612b2281600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264190919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612bab9190613476565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612bdd9061430a565b600060405180830381858888f193505050503d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b5050905080612cc957612c7b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d4290919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612cd9565b8192505050612cd9565b60009150505b919050565b6000838311158290612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d9190613331565b60405180910390fd5b5060008385612d35919061431f565b9050809150509392505050565b6000612d8483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cde565b905092915050565b6000808284612d9b9190614353565b905060008312158015612dae5750838113155b80612dc45750600083128015612dc357508381135b5b612dcd57600080fd5b8091505092915050565b600042821115612dea5760009050612e05565b601154612e008342612d4290919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7090614433565b60405180910390fd5b612e8e8160075461264190919063ffffffff16565b600781905550612ee681600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264190919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f879190613476565b60405180910390a3612ffd612faf612faa836001546125c790919063ffffffff16565b6128dd565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8c90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa906144c5565b60405180910390fd5b61311f816040518060600160405280602281526020016144e660229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cde9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061317781600754612d4290919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131db9190613476565b60405180910390a36132516132036131fe836001546125c790919063ffffffff16565b6128dd565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132d25780820151818401526020810190506132b7565b838111156132e1576000848401525b50505050565b6000601f19601f8301169050919050565b600061330382613298565b61330d81856132a3565b935061331d8185602086016132b4565b613326816132e7565b840191505092915050565b6000602082019050818103600083015261334b81846132f8565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133888261335d565b9050919050565b6133988161337d565b81146133a357600080fd5b50565b6000813590506133b58161338f565b92915050565b6000819050919050565b6133ce816133bb565b81146133d957600080fd5b50565b6000813590506133eb816133c5565b92915050565b6000806040838503121561340857613407613353565b5b6000613416858286016133a6565b9250506020613427858286016133dc565b9150509250929050565b60008115159050919050565b61344681613431565b82525050565b6000602082019050613461600083018461343d565b92915050565b613470816133bb565b82525050565b600060208201905061348b6000830184613467565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134b6576134b5613491565b5b8235905067ffffffffffffffff8111156134d3576134d2613496565b5b6020830191508360208202830111156134ef576134ee61349b565b5b9250929050565b60008083601f84011261350c5761350b613491565b5b8235905067ffffffffffffffff81111561352957613528613496565b5b6020830191508360208202830111156135455761354461349b565b5b9250929050565b6000806000806040858703121561356657613565613353565b5b600085013567ffffffffffffffff81111561358457613583613358565b5b613590878288016134a0565b9450945050602085013567ffffffffffffffff8111156135b3576135b2613358565b5b6135bf878288016134f6565b925092505092959194509250565b6000602082840312156135e3576135e2613353565b5b60006135f1848285016133a6565b91505092915050565b60008060006060848603121561361357613612613353565b5b6000613621868287016133a6565b9350506020613632868287016133a6565b9250506040613643868287016133dc565b9150509250925092565b600060ff82169050919050565b6136638161364d565b82525050565b600060208201905061367e600083018461365a565b92915050565b60006020828403121561369a57613699613353565b5b60006136a8848285016133dc565b91505092915050565b60006136bc8261335d565b9050919050565b6136cc816136b1565b81146136d757600080fd5b50565b6000813590506136e9816136c3565b92915050565b6136f881613431565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b6000806040838503121561373257613731613353565b5b6000613740858286016136da565b925050602061375185828601613706565b9150509250929050565b6137648161337d565b82525050565b600060208201905061377f600083018461375b565b92915050565b6000806040838503121561379c5761379b613353565b5b60006137aa858286016133a6565b92505060206137bb858286016133a6565b9150509250929050565b6000819050919050565b6137d8816137c5565b82525050565b6000610100820190506137f4600083018b61375b565b613801602083018a6137cf565b61380e60408301896137cf565b61381b6060830188613467565b6138286080830187613467565b61383560a0830186613467565b61384260c0830185613467565b61384f60e0830184613467565b9998505050505050505050565b60006060820190506138716000830186613467565b61387e6020830185613467565b61388b6040830184613467565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138fc826133bb565b9150613907836133bb565b92508261391757613916613893565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061396957607f821691505b60208210810361397c5761397b613922565b5b50919050565b600081519050613991816133c5565b92915050565b6000602082840312156139ad576139ac613353565b5b60006139bb84828501613982565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139fa6020836132a3565b9150613a05826139c4565b602082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a6a826133bb565b9150613a75836133bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613aae57613aad6138c2565b5b828202905092915050565b6000604082019050613ace600083018561375b565b613adb6020830184613467565b9392505050565b6000613aed826133bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b1f57613b1e6138c2565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613b866028836132a3565b9150613b9182613b2a565b604082019050919050565b60006020820190508181036000830152613bb581613b79565b9050919050565b600081519050613bcb816136ef565b92915050565b600060208284031215613be757613be6613353565b5b6000613bf584828501613bbc565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613c5557808604811115613c3157613c306138c2565b5b6001851615613c405780820291505b8081029050613c4e85613bfe565b9450613c15565b94509492505050565b600082613c6e5760019050613d2a565b81613c7c5760009050613d2a565b8160018114613c925760028114613c9c57613ccb565b6001915050613d2a565b60ff841115613cae57613cad6138c2565b5b8360020a915084821115613cc557613cc46138c2565b5b50613d2a565b5060208310610133831016604e8410600b8410161715613d005782820a905083811115613cfb57613cfa6138c2565b5b613d2a565b613d0d8484846001613c0b565b92509050818404811115613d2457613d236138c2565b5b81810290505b9392505050565b6000613d3c826133bb565b9150613d478361364d565b9250613d747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c5e565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613dd86033836132a3565b9150613de382613d7c565b604082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a6025836132a3565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613efc6026836132a3565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b613f3b816137c5565b8114613f4657600080fd5b50565b600081519050613f5881613f32565b92915050565b600060208284031215613f7457613f73613353565b5b6000613f8284828501613f49565b91505092915050565b600081519050613f9a8161338f565b92915050565b600060208284031215613fb657613fb5613353565b5b6000613fc484828501613f8b565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006140296021836132a3565b915061403482613fcd565b604082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b600061406a826133bb565b9150614075836133bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140aa576140a96138c2565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006140eb601b836132a3565b91506140f6826140b5565b602082019050919050565b6000602082019050818103600083015261411a816140de565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061417d6024836132a3565b915061418882614121565b604082019050919050565b600060208201905081810360008301526141ac81614170565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061420f6022836132a3565b915061421a826141b3565b604082019050919050565b6000602082019050818103600083015261423e81614202565b9050919050565b6000614250826137c5565b915061425b836137c5565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615614296576142956138c2565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156142ce576142cd6138c2565b5b828201905092915050565b600081905092915050565b50565b60006142f46000836142d9565b91506142ff826142e4565b600082019050919050565b6000614315826142e7565b9150819050919050565b600061432a826133bb565b9150614335836133bb565b925082821015614348576143476138c2565b5b828203905092915050565b600061435e826137c5565b9150614369836137c5565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156143a4576143a36138c2565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156143dc576143db6138c2565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061441d601f836132a3565b9150614428826143e7565b602082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006144af6021836132a3565b91506144ba82614453565b604082019050919050565b600060208201905081810360008301526144de816144a2565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122081b6a765438162a71cd26c38df5148837744cde9f36bbe8e6fdc9cb593f66b4064736f6c634300080d0033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b925082821015610a4957610a486109f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203090a2432ef81d99f86e9c6bc8b45e392a0a9f4ba1ac8421d8a3c6a6f29dfcef64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c8063715018a61161012e578063aafd847a116100ab578063e7841ec01161006f578063e7841ec0146108b5578063e98030c7146108e0578063f2fde38b14610909578063fbcbc0f114610932578063ffb2c479146109765761024e565b8063aafd847a146107d0578063be10b6141461080d578063cac8d53814610838578063dd62ed3e14610861578063e0fb0f351461089e5761024e565b806391b89fba116100f257806391b89fba146106b157806395d89b41146106ee578063a457c2d714610719578063a8b9d24014610756578063a9059cbb146107935761024e565b8063715018a6146105de578063804974ea146105f557806385a6b3ae14610632578063897742821461065d5780638da5cb5b146106865761024e565b8063313ce567116101bc5780635ebf4db9116101805780635ebf4db91461050b57806365e2ccb2146105345780636a4740021461055f5780636f2789ec1461057657806370a08231146105a15761024e565b8063313ce5671461042657806331e79db014610451578063395093511461047a5780633974d3b1146104b75780633f83d72c146104e05761024e565b806321df2b091161020357806321df2b091461031b578063226cfa3d1461034457806323b872dd1461038157806327ce0147146103be5780633009a609146103fb5761024e565b806303c833021461025357806306fdde031461025d578063095ea7b31461028857806309bbedde146102c557806318160ddd146102f05761024e565b3661024e5761024c6109b5565b005b600080fd5b61025b6109b5565b005b34801561026957600080fd5b50610272610a8e565b60405161027f9190613331565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906133f1565b610b20565b6040516102bc919061344c565b60405180910390f35b3480156102d157600080fd5b506102da610b3e565b6040516102e79190613476565b60405180910390f35b3480156102fc57600080fd5b50610305610bd6565b6040516103129190613476565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061354c565b610be0565b005b34801561035057600080fd5b5061036b600480360381019061036691906135cd565b610d9b565b6040516103789190613476565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906135fa565b610db3565b6040516103b5919061344c565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906135cd565b610e00565b6040516103f29190613476565b60405180910390f35b34801561040757600080fd5b50610410610ea3565b60405161041d9190613476565b60405180910390f35b34801561043257600080fd5b5061043b610ea9565b6040516104489190613669565b60405180910390f35b34801561045d57600080fd5b50610478600480360381019061047391906135cd565b610ec0565b005b34801561048657600080fd5b506104a1600480360381019061049c91906133f1565b611033565b6040516104ae919061344c565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906135cd565b6110e6565b005b3480156104ec57600080fd5b506104f5611426565b604051610502919061344c565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613684565b611439565b005b34801561054057600080fd5b506105496114fe565b6040516105569190613476565b60405180910390f35b34801561056b57600080fd5b50610574611508565b005b34801561058257600080fd5b5061058b611514565b6040516105989190613476565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906135cd565b61151a565b6040516105d59190613476565b60405180910390f35b3480156105ea57600080fd5b506105f3611563565b005b34801561060157600080fd5b5061061c600480360381019061061791906135cd565b6116b6565b6040516106299190613476565b60405180910390f35b34801561063e57600080fd5b506106476116ff565b6040516106549190613476565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f919061371b565b611705565b005b34801561069257600080fd5b5061069b6117a9565b6040516106a8919061376a565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d391906135cd565b6117d2565b6040516106e59190613476565b60405180910390f35b3480156106fa57600080fd5b506107036117e4565b6040516107109190613331565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906133f1565b611876565b60405161074d919061344c565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906135cd565b611943565b60405161078a9190613476565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b591906133f1565b6119a6565b6040516107c7919061344c565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906135cd565b6119f2565b6040516108049190613476565b60405180910390f35b34801561081957600080fd5b50610822611a3b565b60405161082f9190613476565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a91906135cd565b611a41565b005b34801561086d57600080fd5b5061088860048036038101906108839190613785565b611b1a565b6040516108959190613476565b60405180910390f35b3480156108aa57600080fd5b506108b3611ba1565b005b3480156108c157600080fd5b506108ca611c8c565b6040516108d79190613476565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613684565b611c96565b005b34801561091557600080fd5b50610930600480360381019061092b91906135cd565b611dfd565b005b34801561093e57600080fd5b50610959600480360381019061095491906135cd565b611fbe565b60405161096d9897969594939291906137de565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613684565b6122cc565b6040516109ac9392919061385c565b60405180910390f35b60006109bf610bd6565b116109c957600080fd5b6000341115610a8c57610a1c6109dd610bd6565b610a01700100000000000000000000000000000000346125c790919063ffffffff16565b610a0b91906138f1565b60015461264190919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610a689190613476565b60405180910390a2610a8534600b5461264190919063ffffffff16565b600b819055505b565b606060088054610a9d90613951565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990613951565b8015610b165780601f10610aeb57610100808354040283529160200191610b16565b820191906000526020600020905b815481529060010190602001808311610af957829003601f168201915b5050505050905090565b6000610b34610b2d61269f565b84846126a7565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd19190613997565b905090565b6000600754905090565b610be861269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90613a10565b60405180910390fd5b60005b84849050811015610d94576000858583818110610c9857610c97613a30565b5b9050602002016020810190610cad91906135cd565b90506000633b9aca00858585818110610cc957610cc8613a30565b5b90506020020135610cda9190613a5f565b9050600d548110610d7f57610cef8282612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610d4c929190613ab9565b600060405180830381600087803b158015610d6657600080fd5b505af1158015610d7a573d6000803e3d6000fd5b505050505b50508080610d8c90613ae2565b915050610c78565b5050505050565b60106020528060005260406000206000915090505481565b600080610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613b9c565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610e92610e8d600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7f610e7a610e698861151a565b6001546125c790919063ffffffff16565b6128dd565b6128fa90919063ffffffff16565b612945565b610e9c91906138f1565b9050919050565b600f5481565b6000600a60009054906101000a900460ff16905090565b610ec861269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613a10565b60405180910390fd5b610f60816000612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610fbb919061376a565b600060405180830381600087803b158015610fd557600080fd5b505af1158015610fe9573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006110dc61104061269f565b846110d7856006600061105161269f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264190919063ffffffff16565b6126a7565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611143919061376a565b602060405180830381865afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190613997565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016111e1919061376a565b602060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112229190613bd1565b61136b57600d5481106112cd576112398282612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401611296929190613ab9565b600060405180830381600087803b1580156112b057600080fd5b505af11580156112c4573d6000803e3d6000fd5b50505050611366565b6112d8826000612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b8152600401611333919061376a565b600060405180830381600087803b15801561134d57600080fd5b505af1158015611361573d6000803e3d6000fd5b505050505b611416565b60006113768361151a565b111561141557611387826000612870565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113e2919061376a565b600060405180830381600087803b1580156113fc57600080fd5b505af1158015611410573d6000803e3d6000fd5b505050505b5b61142182600161295c565b505050565b600e60149054906101000a900460ff1681565b61144161269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613a10565b60405180910390fd5b600a60009054906101000a900460ff16600a6114ea9190613d31565b816114f59190613a5f565b600d8190555050565b6000600d54905090565b61151133612ab9565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61156b61269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613a10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b61170d61269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613a10565b60405180910390fd5b6117a4828261295c565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117dd82611943565b9050919050565b6060600980546117f390613951565b80601f016020809104026020016040519081016040528092919081815260200182805461181f90613951565b801561186c5780601f106118415761010080835404028352916020019161186c565b820191906000526020600020905b81548152906001019060200180831161184f57829003601f168201915b5050505050905090565b600061193961188361269f565b846119348560405180606001604052806025815260200161450860259139600660006118ad61269f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cde9092919063ffffffff16565b6126a7565b6001905092915050565b600061199f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199184610e00565b612d4290919063ffffffff16565b9050919050565b6000806119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90613b9c565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611a4961269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90613a10565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ba961269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90613a10565b60405180910390fd5b6000479050611c436117a9565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c88573d6000803e3d6000fd5b5050565b6000600f54905090565b611c9e61269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613a10565b60405180910390fd5b610e108110158015611d405750620151808111155b611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7690613dee565b60405180910390fd5b6011548103611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613e80565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611e0561269f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613a10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890613f12565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b8152600401612028919061376a565b602060405180830381865afa158015612045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120699190613f5e565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95506000871261221e57600f548711156120bc576120b5600f5488612d8c90919063ffffffff16565b955061221d565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190613997565b1161215e576000612204565b612203600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f59190613997565b612d4290919063ffffffff16565b5b905061221981896128fa90919063ffffffff16565b9650505b5b61222788611943565b945061223288610e00565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161228557600061229b565b61229a6011548461264190919063ffffffff16565b5b91504282116122ab5760006122bf565b6122be4283612d4290919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561233f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123639190613997565b90506000810361237f57600080600f54935093509350506125c0565b6000600f5490506000805a90506000805b898410801561239e57508582105b156125a75784806123ae90613ae2565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124429190613997565b851061244d57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b81526004016124aa9190613476565b602060405180830381865afa1580156124c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124eb9190613fa0565b9050612535601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd7565b1561255a5761254581600161295c565b1561255957818061255590613ae2565b9250505b5b828061256590613ae2565b93505060005a90508085111561259d5761259a61258b8287612d4290919063ffffffff16565b8761264190919063ffffffff16565b95505b8094505050612390565b84600f819055508181600f549850985098505050505050505b9193909250565b60008083036125d9576000905061263b565b600082846125e79190613a5f565b90508284826125f691906138f1565b14612636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262d9061403f565b60405180910390fd5b809150505b92915050565b6000808284612650919061405f565b905083811015612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614101565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270d90614193565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277c90614225565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128639190613476565b60405180910390a3505050565b600061287b8361151a565b9050808211156128ac57600061289a8284612d4290919063ffffffff16565b90506128a68482612e0a565b506128d8565b808210156128d75760006128c98383612d4290919063ffffffff16565b90506128d58482613044565b505b5b505050565b60008082905060008112156128f157600080fd5b80915050919050565b60008082846129099190614245565b90506000831215801561291c5750838112155b80612932575060008312801561293157508381125b5b61293b57600080fd5b8091505092915050565b60008082121561295457600080fd5b819050919050565b60008061296884612ab9565b90506000811115612aad576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506129ca818361264190919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612a9a9190613476565b60405180910390a3600192505050612ab3565b60009150505b92915050565b600080612ac583611943565b90506000811115612cd357612b2281600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264190919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612bab9190613476565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612bdd9061430a565b600060405180830381858888f193505050503d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b5050905080612cc957612c7b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d4290919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612cd9565b8192505050612cd9565b60009150505b919050565b6000838311158290612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d9190613331565b60405180910390fd5b5060008385612d35919061431f565b9050809150509392505050565b6000612d8483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cde565b905092915050565b6000808284612d9b9190614353565b905060008312158015612dae5750838113155b80612dc45750600083128015612dc357508381135b5b612dcd57600080fd5b8091505092915050565b600042821115612dea5760009050612e05565b601154612e008342612d4290919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7090614433565b60405180910390fd5b612e8e8160075461264190919063ffffffff16565b600781905550612ee681600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461264190919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f879190613476565b60405180910390a3612ffd612faf612faa836001546125c790919063ffffffff16565b6128dd565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8c90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa906144c5565b60405180910390fd5b61311f816040518060600160405280602281526020016144e660229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cde9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061317781600754612d4290919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131db9190613476565b60405180910390a36132516132036131fe836001546125c790919063ffffffff16565b6128dd565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132d25780820151818401526020810190506132b7565b838111156132e1576000848401525b50505050565b6000601f19601f8301169050919050565b600061330382613298565b61330d81856132a3565b935061331d8185602086016132b4565b613326816132e7565b840191505092915050565b6000602082019050818103600083015261334b81846132f8565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133888261335d565b9050919050565b6133988161337d565b81146133a357600080fd5b50565b6000813590506133b58161338f565b92915050565b6000819050919050565b6133ce816133bb565b81146133d957600080fd5b50565b6000813590506133eb816133c5565b92915050565b6000806040838503121561340857613407613353565b5b6000613416858286016133a6565b9250506020613427858286016133dc565b9150509250929050565b60008115159050919050565b61344681613431565b82525050565b6000602082019050613461600083018461343d565b92915050565b613470816133bb565b82525050565b600060208201905061348b6000830184613467565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134b6576134b5613491565b5b8235905067ffffffffffffffff8111156134d3576134d2613496565b5b6020830191508360208202830111156134ef576134ee61349b565b5b9250929050565b60008083601f84011261350c5761350b613491565b5b8235905067ffffffffffffffff81111561352957613528613496565b5b6020830191508360208202830111156135455761354461349b565b5b9250929050565b6000806000806040858703121561356657613565613353565b5b600085013567ffffffffffffffff81111561358457613583613358565b5b613590878288016134a0565b9450945050602085013567ffffffffffffffff8111156135b3576135b2613358565b5b6135bf878288016134f6565b925092505092959194509250565b6000602082840312156135e3576135e2613353565b5b60006135f1848285016133a6565b91505092915050565b60008060006060848603121561361357613612613353565b5b6000613621868287016133a6565b9350506020613632868287016133a6565b9250506040613643868287016133dc565b9150509250925092565b600060ff82169050919050565b6136638161364d565b82525050565b600060208201905061367e600083018461365a565b92915050565b60006020828403121561369a57613699613353565b5b60006136a8848285016133dc565b91505092915050565b60006136bc8261335d565b9050919050565b6136cc816136b1565b81146136d757600080fd5b50565b6000813590506136e9816136c3565b92915050565b6136f881613431565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b6000806040838503121561373257613731613353565b5b6000613740858286016136da565b925050602061375185828601613706565b9150509250929050565b6137648161337d565b82525050565b600060208201905061377f600083018461375b565b92915050565b6000806040838503121561379c5761379b613353565b5b60006137aa858286016133a6565b92505060206137bb858286016133a6565b9150509250929050565b6000819050919050565b6137d8816137c5565b82525050565b6000610100820190506137f4600083018b61375b565b613801602083018a6137cf565b61380e60408301896137cf565b61381b6060830188613467565b6138286080830187613467565b61383560a0830186613467565b61384260c0830185613467565b61384f60e0830184613467565b9998505050505050505050565b60006060820190506138716000830186613467565b61387e6020830185613467565b61388b6040830184613467565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138fc826133bb565b9150613907836133bb565b92508261391757613916613893565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061396957607f821691505b60208210810361397c5761397b613922565b5b50919050565b600081519050613991816133c5565b92915050565b6000602082840312156139ad576139ac613353565b5b60006139bb84828501613982565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139fa6020836132a3565b9150613a05826139c4565b602082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a6a826133bb565b9150613a75836133bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613aae57613aad6138c2565b5b828202905092915050565b6000604082019050613ace600083018561375b565b613adb6020830184613467565b9392505050565b6000613aed826133bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b1f57613b1e6138c2565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613b866028836132a3565b9150613b9182613b2a565b604082019050919050565b60006020820190508181036000830152613bb581613b79565b9050919050565b600081519050613bcb816136ef565b92915050565b600060208284031215613be757613be6613353565b5b6000613bf584828501613bbc565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613c5557808604811115613c3157613c306138c2565b5b6001851615613c405780820291505b8081029050613c4e85613bfe565b9450613c15565b94509492505050565b600082613c6e5760019050613d2a565b81613c7c5760009050613d2a565b8160018114613c925760028114613c9c57613ccb565b6001915050613d2a565b60ff841115613cae57613cad6138c2565b5b8360020a915084821115613cc557613cc46138c2565b5b50613d2a565b5060208310610133831016604e8410600b8410161715613d005782820a905083811115613cfb57613cfa6138c2565b5b613d2a565b613d0d8484846001613c0b565b92509050818404811115613d2457613d236138c2565b5b81810290505b9392505050565b6000613d3c826133bb565b9150613d478361364d565b9250613d747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c5e565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613dd86033836132a3565b9150613de382613d7c565b604082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a6025836132a3565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613efc6026836132a3565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b613f3b816137c5565b8114613f4657600080fd5b50565b600081519050613f5881613f32565b92915050565b600060208284031215613f7457613f73613353565b5b6000613f8284828501613f49565b91505092915050565b600081519050613f9a8161338f565b92915050565b600060208284031215613fb657613fb5613353565b5b6000613fc484828501613f8b565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006140296021836132a3565b915061403482613fcd565b604082019050919050565b600060208201905081810360008301526140588161401c565b9050919050565b600061406a826133bb565b9150614075836133bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140aa576140a96138c2565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006140eb601b836132a3565b91506140f6826140b5565b602082019050919050565b6000602082019050818103600083015261411a816140de565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061417d6024836132a3565b915061418882614121565b604082019050919050565b600060208201905081810360008301526141ac81614170565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061420f6022836132a3565b915061421a826141b3565b604082019050919050565b6000602082019050818103600083015261423e81614202565b9050919050565b6000614250826137c5565b915061425b836137c5565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615614296576142956138c2565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156142ce576142cd6138c2565b5b828201905092915050565b600081905092915050565b50565b60006142f46000836142d9565b91506142ff826142e4565b600082019050919050565b6000614315826142e7565b9150819050919050565b600061432a826133bb565b9150614335836133bb565b925082821015614348576143476138c2565b5b828203905092915050565b600061435e826137c5565b9150614369836137c5565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156143a4576143a36138c2565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156143dc576143db6138c2565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061441d601f836132a3565b9150614428826143e7565b602082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006144af6021836132a3565b91506144ba82614453565b604082019050919050565b600060208201905081810360008301526144de816144a2565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122081b6a765438162a71cd26c38df5148837744cde9f36bbe8e6fdc9cb593f66b4064736f6c634300080d0033

Deployed Bytecode Sourcemap

36740:13503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42215:21;:19;:21::i;:::-;36740:13503;;;;;42595:428;;;:::i;:::-;;38398:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39429:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45366:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38675:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49534:469;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37995:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39086:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44284:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37955:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38584:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42392:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39606:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40454:711;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37716:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44539:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45242:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43031:106;;;;;;;;;;;;;:::i;:::-;;38051:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38781:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;48910:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37481:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48755:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43845:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38489:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39832:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43975:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38916:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44149:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37598:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42252:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39278:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50087:151;;;;;;;;;;;;;:::i;:::-;;45125:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44745:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45489:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;47464:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42595:428;42676:1;42660:13;:11;:13::i;:::-;:17;42652:26;;;;;;42707:1;42695:9;:13;42691:325;;;42753:105;42830:13;:11;:13::i;:::-;42801:26;36943:8;42802:9;42801:15;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;42753:25;;:29;;:105;;;;:::i;:::-;42725:25;:133;;;;42899:10;42878:43;;;42911:9;42878:43;;;;;;:::i;:::-;;;;;;;;42964:40;42994:9;42964:25;;:29;;:40;;;;:::i;:::-;42936:25;:68;;;;42691:325;42595:428::o;38398:83::-;38435:13;38468:5;38461:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38398:83;:::o;39429:169::-;39512:4;39529:39;39538:12;:10;:12::i;:::-;39552:7;39561:6;39529:8;:39::i;:::-;39586:4;39579:11;;39429:169;;;;:::o;45366:115::-;45424:7;45451:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45444:29;;45366:115;:::o;38675:100::-;38728:7;38755:12;;38748:19;;38675:100;:::o;49534:469::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49650:10:::1;49646:350;49674:10;;:17;;49666:5;:25;49646:350;;;49716:15;49734:10;;49745:5;49734:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49716:35;;49766:14;49800:5;49783:7;;49791:5;49783:14;;;;;;;:::i;:::-;;;;;;;;:22;;;;:::i;:::-;49766:39;;49834:31;;49824:6;:41;49820:165;;49886:28;49898:7;49907:6;49886:11;:28::i;:::-;49933:15;;;;;;;;;;;:19;;;49953:7;49962:6;49933:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49820:165;49701:295;;49693:7;;;;;:::i;:::-;;;;49646:350;;;;49534:469:::0;;;;:::o;37995:49::-;;;;;;;;;;;;;;;;;:::o;39086:184::-;39165:4;39190:5;39182:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39258:4;39251:11;;39086:184;;;;;:::o;44284:247::-;44353:7;36943:8;44380:131;:115;44458:28;:36;44487:6;44458:36;;;;;;;;;;;;;;;;44380:63;:48;44410:17;44420:6;44410:9;:17::i;:::-;44380:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;44373:150;;44284:247;;;:::o;37955:33::-;;;;:::o;38584:83::-;38625:5;38650:9;;;;;;;;;;;38643:16;;38584:83;:::o;42392:195::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42469:23:::1;42481:7;42490:1;42469:11;:23::i;:::-;42503:15;;;;;;;;;;;:22;;;42526:7;42503:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42571:7;42550:29;;;;;;;;;;;;42392:195:::0;:::o;39606:218::-;39694:4;39711:83;39720:12;:10;:12::i;:::-;39734:7;39743:50;39782:10;39743:11;:25;39755:12;:10;:12::i;:::-;39743:25;;;;;;;;;;;;;;;:34;39769:7;39743:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;39711:8;:83::i;:::-;39812:4;39805:11;;39606:218;;;;:::o;40454:711::-;40516:15;40534:10;;;;;;;;;;;:20;;;40555:7;40534:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40516:47;;40578:10;;;;;;;;;;;:32;;;40611:7;40578:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40574:535;;40651:31;;40640:7;:42;40636:295;;40703:29;40715:7;40724;40703:11;:29::i;:::-;40751:15;;;;;;;;;;;:19;;;40771:7;40780;40751:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40636:295;;;40842:23;40854:7;40863:1;40842:11;:23::i;:::-;40884:15;;;;;;;;;;;:22;;;40907:7;40884:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40636:295;40574:535;;;40987:1;40966:18;40976:7;40966:9;:18::i;:::-;:22;40963:135;;;41009:23;41021:7;41030:1;41009:11;:23::i;:::-;41051:15;;;;;;;;;;;:22;;;41074:7;41051:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40963:135;40574:535;41119:38;41142:7;41152:4;41119:14;:38::i;:::-;;40505:660;40454:711;:::o;37716:33::-;;;;;;;;;;;;;:::o;44539:198::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44719:9:::1;;;;;;;;;;;44713:2;:15;;;;:::i;:::-;44683:26;:46;;;;:::i;:::-;44649:31;:80;;;;44539:198:::0;:::o;45242:116::-;45292:7;45319:31;;45312:38;;45242:116;:::o;43031:106::-;43085:44;43117:10;43085:23;:44::i;:::-;;43031:106::o;38051:31::-;;;;:::o;38781:127::-;38855:7;38882:9;:18;38892:7;38882:18;;;;;;;;;;;;;;;;38875:25;;38781:127;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;48910:128::-;48978:7;49005:16;:25;49022:7;49005:25;;;;;;;;;;;;;;;;48998:32;;48910:128;;;:::o;37481:40::-;;;;:::o;48755:147::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48860:34:::1;48875:7;48884:9;48860:14;:34::i;:::-;;48755:147:::0;;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;43845:122::-;43902:7;43929:30;43952:6;43929:22;:30::i;:::-;43922:37;;43845:122;;;:::o;38489:87::-;38528:13;38561:7;38554:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38489:87;:::o;39832:269::-;39925:4;39942:129;39951:12;:10;:12::i;:::-;39965:7;39974:96;40013:15;39974:96;;;;;;;;;;;;;;;;;:11;:25;39986:12;:10;:12::i;:::-;39974:25;;;;;;;;;;;;;;;:34;40000:7;39974:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;39942:8;:129::i;:::-;40089:4;40082:11;;39832:269;;;;:::o;43975:166::-;44044:7;44071:62;44106:18;:26;44125:6;44106:26;;;;;;;;;;;;;;;;44071:30;44094:6;44071:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;44064:69;;43975:166;;;:::o;38916:162::-;38973:4;38998:5;38990:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39066:4;39059:11;;38916:162;;;;:::o;44149:127::-;44215:7;44242:18;:26;44261:6;44242:26;;;;;;;;;;;;;;;;44235:33;;44149:127;;;:::o;37598:75::-;;;;:::o;42252:132::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42362:12:::1;42330:10;;:46;;;;;;;;;;;;;;;;;;42252:132:::0;:::o;39278:143::-;39359:7;39386:11;:18;39398:5;39386:18;;;;;;;;;;;;;;;:27;39405:7;39386:27;;;;;;;;;;;;;;;;39379:34;;39278:143;;;;:::o;50087:151::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50140:18:::1;50161:21;50140:42;;50201:7;:5;:7::i;:::-;50193:25;;:37;50219:10;50193:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50129:109;50087:151::o:0;45125:109::-;45181:7;45208:18;;45201:25;;45125:109;:::o;44745:372::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44846:4:::1;44830:12;:20;;:45;;;;;44870:5;44854:12;:21;;44830:45;44822:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44966:9;;44950:12;:25:::0;44942:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45064:9;;45050:12;45033:41;;;;;;;;;;45097:12;45085:9;:24;;;;44745:372:::0;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;45489:1270::-;45548:15;45565:12;45579:31;45621:29;45652:22;45676:21;45708;45731:38;45792:8;45782:18;;45819:15;;;;;;;;;;;:29;;;45849:7;45819:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45811:46;;45895:3;45868:30;;45922:1;45913:5;:10;45909:473;;45961:18;;45952:5;45944:35;45940:431;;;46027:37;46044:18;;46027:5;:9;;:37;;;;:::i;:::-;46000:64;;45940:431;;;46118:32;46178:18;;46153:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;46265:1;46153:113;;;46216:46;46243:18;;46216:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;46153:113;46118:148;;46312:43;46329:24;46312:5;:9;;:43;;;;:::i;:::-;46285:70;;46099:272;45940:431;45909:473;46416:31;46439:7;46416:22;:31::i;:::-;46392:55;;46475:31;46498:7;46475:22;:31::i;:::-;46458:48;;46533:14;:23;46548:7;46533:23;;;;;;;;;;;;;;;;46517:39;;46599:1;46583:13;:17;:52;;46634:1;46583:52;;;46603:28;46621:9;;46603:13;:17;;:28;;;;:::i;:::-;46583:52;46567:68;;46695:15;46679:13;:31;:72;;46750:1;46679:72;;;46713:34;46731:15;46713:13;:17;;:34;;;;:::i;:::-;46679:72;46646:105;;45489:1270;;;;;;;;;:::o;47464:1283::-;47510:7;47519;47528;47548:28;47579:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47548:53;;47642:1;47618:20;:25;47614:91;;47668:1;47671;47674:18;;47660:33;;;;;;;;;47614:91;47715:27;47745:18;;47715:48;;47774:15;47804;47822:9;47804:27;;47842:18;47875:14;47904:727;47921:3;47911:7;:13;:50;;;;;47941:20;47928:10;:33;47911:50;47904:727;;;47978:21;;;;;:::i;:::-;;;;48041:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48018:19;:45;48014:109;;48106:1;48084:23;;48014:109;48137:15;48155;;;;;;;;;;;:29;;;48185:19;48155:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48137:68;;48224:37;48237:14;:23;48252:7;48237:23;;;;;;;;;;;;;;;;48224:12;:37::i;:::-;48220:172;;;48286:38;48309:7;48319:4;48286:14;:38::i;:::-;48282:95;;;48349:8;;;;;:::i;:::-;;;;48282:95;48220:172;48406:12;;;;;:::i;:::-;;;;48433:18;48454:9;48433:30;;48492:10;48482:7;:20;48478:107;;;48533:36;48545:23;48557:10;48545:7;:11;;:23;;;;:::i;:::-;48533:7;:11;;:36;;;;:::i;:::-;48523:46;;48478:107;48609:10;48599:20;;47963:668;;47904:727;;;48662:19;48641:18;:40;;;;48700:10;48712:6;48720:18;;48692:47;;;;;;;;;;;;47464:1283;;;;;;:::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;40109:337::-;40219:1;40202:19;;:5;:19;;;40194:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:1;40281:21;;:7;:21;;;40273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40384:6;40354:11;:18;40366:5;40354:18;;;;;;;;;;;;;;;:27;40373:7;40354:27;;;;;;;;;;;;;;;:36;;;;40422:7;40406:32;;40415:5;40406:32;;;40431:6;40406:32;;;;;;:::i;:::-;;;;;;;;40109:337;;;:::o;47007:449::-;47085:22;47110:18;47120:7;47110:9;:18::i;:::-;47085:43;;47156:14;47143:10;:27;47139:310;;;47187:18;47208:30;47223:14;47208:10;:14;;:30;;;;:::i;:::-;47187:51;;47253:26;47259:7;47268:10;47253:5;:26::i;:::-;47172:119;47139:310;;;47314:14;47301:10;:27;47297:152;;;47345:18;47366:30;47385:10;47366:14;:18;;:30;;;;:::i;:::-;47345:51;;47411:26;47417:7;47426:10;47411:5;:26::i;:::-;47330:119;47297:152;47139:310;47074:382;47007:449;;:::o;4032:148::-;4088:6;4107:8;4125:1;4107:20;;4151:1;4146;:6;;4138:15;;;;;;4171:1;4164:8;;;4032:148;;;:::o;3548:176::-;3604:6;3623:8;3638:1;3634;:5;;;;:::i;:::-;3623:16;;3664:1;3659;:6;;:16;;;;;3674:1;3669;:6;;3659:16;3658:38;;;;3685:1;3681;:5;:14;;;;;3694:1;3690;:5;3681:14;3658:38;3650:47;;;;;;3715:1;3708:8;;;3548:176;;;;:::o;3870:127::-;3926:7;3959:1;3954;:6;;3946:15;;;;;;3987:1;3972:17;;3870:127;;;:::o;49044:482::-;49126:4;49143:14;49160:32;49184:7;49160:23;:32::i;:::-;49143:49;;49216:1;49207:6;:10;49203:293;;;49234:20;49257:16;:25;49274:7;49257:25;;;;;;;;;;;;;;;;49234:48;;49325:24;49336:12;49325:6;:10;;:24;;;;:::i;:::-;49297:16;:25;49314:7;49297:25;;;;;;;;;;;;;;;:52;;;;49390:15;49364:14;:23;49379:7;49364:23;;;;;;;;;;;;;;;:41;;;;49448:9;49425:33;;49431:7;49425:33;;;49440:6;49425:33;;;;;;:::i;:::-;;;;;;;;49480:4;49473:11;;;;;;49203:293;49513:5;49506:12;;;49044:482;;;;;:::o;43145:692::-;43218:7;43238:29;43270:28;43293:4;43270:22;:28::i;:::-;43238:60;;43337:1;43313:21;:25;43309:502;;;43382:51;43411:21;43382:18;:24;43401:4;43382:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;43355:18;:24;43374:4;43355:24;;;;;;;;;;;;;;;:78;;;;43471:4;43453:46;;;43477:21;43453:46;;;;;;:::i;:::-;;;;;;;;43515:12;43532:4;:9;;43550:21;43579:4;43532:56;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43514:74;;;43608:7;43603:154;;43663:51;43692:21;43663:18;:24;43682:4;43663:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;43636:18;:24;43655:4;43636:24;;;;;;;;;;;;;;;:78;;;;43740:1;43733:8;;;;;;43603:154;43778:21;43771:28;;;;;;43309:502;43828:1;43821:8;;;43145:692;;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;3364:176::-;3420:6;3439:8;3454:1;3450;:5;;;;:::i;:::-;3439:16;;3480:1;3475;:6;;:16;;;;;3490:1;3485;:6;;3475:16;3474:38;;;;3501:1;3497;:5;:14;;;;;3510:1;3506;:5;3497:14;3474:38;3466:47;;;;;;3531:1;3524:8;;;3364:176;;;;:::o;46767:232::-;46834:4;46871:15;46855:13;:31;46851:76;;;46910:5;46903:12;;;;46851:76;46982:9;;46944:34;46964:13;46944:15;:19;;:34;;;;:::i;:::-;:47;;46937:54;;46767:232;;;;:::o;41173:472::-;41276:1;41257:21;;:7;:21;;;41249:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41340:24;41357:6;41340:12;;:16;;:24;;;;:::i;:::-;41325:12;:39;;;;41396:30;41419:6;41396:9;:18;41406:7;41396:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;41375:9;:18;41385:7;41375:18;;;;;;;;;;;;;;;:51;;;;41463:7;41442:37;;41459:1;41442:37;;;41472:6;41442:37;;;;;;:::i;:::-;;;;;;;;41530:107;41582:54;41583:37;41613:6;41583:25;;:29;;:37;;;;:::i;:::-;41582:52;:54::i;:::-;41530:28;:37;41559:7;41530:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;41490:28;:37;41519:7;41490:37;;;;;;;;;;;;;;;:147;;;;41173:472;;:::o;41653:516::-;41756:1;41737:21;;:7;:21;;;41729:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41830:68;41853:6;41830:68;;;;;;;;;;;;;;;;;:9;:18;41840:7;41830:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;41809:9;:18;41819:7;41809:18;;;;;;;;;;;;;;;:89;;;;41924:24;41941:6;41924:12;;:16;;:24;;;;:::i;:::-;41909:12;:39;;;;41990:1;41964:37;;41973:7;41964:37;;;41994:6;41964:37;;;;;;:::i;:::-;;;;;;;;42054:107;42106:54;42107:37;42137:6;42107:25;;:29;;:37;;;;:::i;:::-;42106:52;:54::i;:::-;42054:28;:37;42083:7;42054:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;42014:28;:37;42043:7;42014:37;;;;;;;;;;;;;;;:147;;;;41653:516;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:117::-;3955:1;3952;3945:12;3969:117;4078:1;4075;4068:12;4092:117;4201:1;4198;4191:12;4232:568;4305:8;4315:6;4365:3;4358:4;4350:6;4346:17;4342:27;4332:122;;4373:79;;:::i;:::-;4332:122;4486:6;4473:20;4463:30;;4516:18;4508:6;4505:30;4502:117;;;4538:79;;:::i;:::-;4502:117;4652:4;4644:6;4640:17;4628:29;;4706:3;4698:4;4690:6;4686:17;4676:8;4672:32;4669:41;4666:128;;;4713:79;;:::i;:::-;4666:128;4232:568;;;;;:::o;4823:::-;4896:8;4906:6;4956:3;4949:4;4941:6;4937:17;4933:27;4923:122;;4964:79;;:::i;:::-;4923:122;5077:6;5064:20;5054:30;;5107:18;5099:6;5096:30;5093:117;;;5129:79;;:::i;:::-;5093:117;5243:4;5235:6;5231:17;5219:29;;5297:3;5289:4;5281:6;5277:17;5267:8;5263:32;5260:41;5257:128;;;5304:79;;:::i;:::-;5257:128;4823:568;;;;;:::o;5397:934::-;5519:6;5527;5535;5543;5592:2;5580:9;5571:7;5567:23;5563:32;5560:119;;;5598:79;;:::i;:::-;5560:119;5746:1;5735:9;5731:17;5718:31;5776:18;5768:6;5765:30;5762:117;;;5798:79;;:::i;:::-;5762:117;5911:80;5983:7;5974:6;5963:9;5959:22;5911:80;:::i;:::-;5893:98;;;;5689:312;6068:2;6057:9;6053:18;6040:32;6099:18;6091:6;6088:30;6085:117;;;6121:79;;:::i;:::-;6085:117;6234:80;6306:7;6297:6;6286:9;6282:22;6234:80;:::i;:::-;6216:98;;;;6011:313;5397:934;;;;;;;:::o;6337:329::-;6396:6;6445:2;6433:9;6424:7;6420:23;6416:32;6413:119;;;6451:79;;:::i;:::-;6413:119;6571:1;6596:53;6641:7;6632:6;6621:9;6617:22;6596:53;:::i;:::-;6586:63;;6542:117;6337:329;;;;:::o;6672:619::-;6749:6;6757;6765;6814:2;6802:9;6793:7;6789:23;6785:32;6782:119;;;6820:79;;:::i;:::-;6782:119;6940:1;6965:53;7010:7;7001:6;6990:9;6986:22;6965:53;:::i;:::-;6955:63;;6911:117;7067:2;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7038:118;7195:2;7221:53;7266:7;7257:6;7246:9;7242:22;7221:53;:::i;:::-;7211:63;;7166:118;6672:619;;;;;:::o;7297:86::-;7332:7;7372:4;7365:5;7361:16;7350:27;;7297:86;;;:::o;7389:112::-;7472:22;7488:5;7472:22;:::i;:::-;7467:3;7460:35;7389:112;;:::o;7507:214::-;7596:4;7634:2;7623:9;7619:18;7611:26;;7647:67;7711:1;7700:9;7696:17;7687:6;7647:67;:::i;:::-;7507:214;;;;:::o;7727:329::-;7786:6;7835:2;7823:9;7814:7;7810:23;7806:32;7803:119;;;7841:79;;:::i;:::-;7803:119;7961:1;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7932:117;7727:329;;;;:::o;8062:104::-;8107:7;8136:24;8154:5;8136:24;:::i;:::-;8125:35;;8062:104;;;:::o;8172:138::-;8253:32;8279:5;8253:32;:::i;:::-;8246:5;8243:43;8233:71;;8300:1;8297;8290:12;8233:71;8172:138;:::o;8316:155::-;8370:5;8408:6;8395:20;8386:29;;8424:41;8459:5;8424:41;:::i;:::-;8316:155;;;;:::o;8477:116::-;8547:21;8562:5;8547:21;:::i;:::-;8540:5;8537:32;8527:60;;8583:1;8580;8573:12;8527:60;8477:116;:::o;8599:133::-;8642:5;8680:6;8667:20;8658:29;;8696:30;8720:5;8696:30;:::i;:::-;8599:133;;;;:::o;8738:484::-;8811:6;8819;8868:2;8856:9;8847:7;8843:23;8839:32;8836:119;;;8874:79;;:::i;:::-;8836:119;8994:1;9019:61;9072:7;9063:6;9052:9;9048:22;9019:61;:::i;:::-;9009:71;;8965:125;9129:2;9155:50;9197:7;9188:6;9177:9;9173:22;9155:50;:::i;:::-;9145:60;;9100:115;8738:484;;;;;:::o;9228:118::-;9315:24;9333:5;9315:24;:::i;:::-;9310:3;9303:37;9228:118;;:::o;9352:222::-;9445:4;9483:2;9472:9;9468:18;9460:26;;9496:71;9564:1;9553:9;9549:17;9540:6;9496:71;:::i;:::-;9352:222;;;;:::o;9580:474::-;9648:6;9656;9705:2;9693:9;9684:7;9680:23;9676:32;9673:119;;;9711:79;;:::i;:::-;9673:119;9831:1;9856:53;9901:7;9892:6;9881:9;9877:22;9856:53;:::i;:::-;9846:63;;9802:117;9958:2;9984:53;10029:7;10020:6;10009:9;10005:22;9984:53;:::i;:::-;9974:63;;9929:118;9580:474;;;;;:::o;10060:76::-;10096:7;10125:5;10114:16;;10060:76;;;:::o;10142:115::-;10227:23;10244:5;10227:23;:::i;:::-;10222:3;10215:36;10142:115;;:::o;10263:989::-;10548:4;10586:3;10575:9;10571:19;10563:27;;10600:71;10668:1;10657:9;10653:17;10644:6;10600:71;:::i;:::-;10681:70;10747:2;10736:9;10732:18;10723:6;10681:70;:::i;:::-;10761;10827:2;10816:9;10812:18;10803:6;10761:70;:::i;:::-;10841:72;10909:2;10898:9;10894:18;10885:6;10841:72;:::i;:::-;10923:73;10991:3;10980:9;10976:19;10967:6;10923:73;:::i;:::-;11006;11074:3;11063:9;11059:19;11050:6;11006:73;:::i;:::-;11089;11157:3;11146:9;11142:19;11133:6;11089:73;:::i;:::-;11172;11240:3;11229:9;11225:19;11216:6;11172:73;:::i;:::-;10263:989;;;;;;;;;;;:::o;11258:442::-;11407:4;11445:2;11434:9;11430:18;11422:26;;11458:71;11526:1;11515:9;11511:17;11502:6;11458:71;:::i;:::-;11539:72;11607:2;11596:9;11592:18;11583:6;11539:72;:::i;:::-;11621;11689:2;11678:9;11674:18;11665:6;11621:72;:::i;:::-;11258:442;;;;;;:::o;11706:180::-;11754:77;11751:1;11744:88;11851:4;11848:1;11841:15;11875:4;11872:1;11865:15;11892:180;11940:77;11937:1;11930:88;12037:4;12034:1;12027:15;12061:4;12058:1;12051:15;12078:185;12118:1;12135:20;12153:1;12135:20;:::i;:::-;12130:25;;12169:20;12187:1;12169:20;:::i;:::-;12164:25;;12208:1;12198:35;;12213:18;;:::i;:::-;12198:35;12255:1;12252;12248:9;12243:14;;12078:185;;;;:::o;12269:180::-;12317:77;12314:1;12307:88;12414:4;12411:1;12404:15;12438:4;12435:1;12428:15;12455:320;12499:6;12536:1;12530:4;12526:12;12516:22;;12583:1;12577:4;12573:12;12604:18;12594:81;;12660:4;12652:6;12648:17;12638:27;;12594:81;12722:2;12714:6;12711:14;12691:18;12688:38;12685:84;;12741:18;;:::i;:::-;12685:84;12506:269;12455:320;;;:::o;12781:143::-;12838:5;12869:6;12863:13;12854:22;;12885:33;12912:5;12885:33;:::i;:::-;12781:143;;;;:::o;12930:351::-;13000:6;13049:2;13037:9;13028:7;13024:23;13020:32;13017:119;;;13055:79;;:::i;:::-;13017:119;13175:1;13200:64;13256:7;13247:6;13236:9;13232:22;13200:64;:::i;:::-;13190:74;;13146:128;12930:351;;;;:::o;13287:182::-;13427:34;13423:1;13415:6;13411:14;13404:58;13287:182;:::o;13475:366::-;13617:3;13638:67;13702:2;13697:3;13638:67;:::i;:::-;13631:74;;13714:93;13803:3;13714:93;:::i;:::-;13832:2;13827:3;13823:12;13816:19;;13475:366;;;:::o;13847:419::-;14013:4;14051:2;14040:9;14036:18;14028:26;;14100:9;14094:4;14090:20;14086:1;14075:9;14071:17;14064:47;14128:131;14254:4;14128:131;:::i;:::-;14120:139;;13847:419;;;:::o;14272:180::-;14320:77;14317:1;14310:88;14417:4;14414:1;14407:15;14441:4;14438:1;14431:15;14458:348;14498:7;14521:20;14539:1;14521:20;:::i;:::-;14516:25;;14555:20;14573:1;14555:20;:::i;:::-;14550:25;;14743:1;14675:66;14671:74;14668:1;14665:81;14660:1;14653:9;14646:17;14642:105;14639:131;;;14750:18;;:::i;:::-;14639:131;14798:1;14795;14791:9;14780:20;;14458:348;;;;:::o;14812:332::-;14933:4;14971:2;14960:9;14956:18;14948:26;;14984:71;15052:1;15041:9;15037:17;15028:6;14984:71;:::i;:::-;15065:72;15133:2;15122:9;15118:18;15109:6;15065:72;:::i;:::-;14812:332;;;;;:::o;15150:233::-;15189:3;15212:24;15230:5;15212:24;:::i;:::-;15203:33;;15258:66;15251:5;15248:77;15245:103;;15328:18;;:::i;:::-;15245:103;15375:1;15368:5;15364:13;15357:20;;15150:233;;;:::o;15389:227::-;15529:34;15525:1;15517:6;15513:14;15506:58;15598:10;15593:2;15585:6;15581:15;15574:35;15389:227;:::o;15622:366::-;15764:3;15785:67;15849:2;15844:3;15785:67;:::i;:::-;15778:74;;15861:93;15950:3;15861:93;:::i;:::-;15979:2;15974:3;15970:12;15963:19;;15622:366;;;:::o;15994:419::-;16160:4;16198:2;16187:9;16183:18;16175:26;;16247:9;16241:4;16237:20;16233:1;16222:9;16218:17;16211:47;16275:131;16401:4;16275:131;:::i;:::-;16267:139;;15994:419;;;:::o;16419:137::-;16473:5;16504:6;16498:13;16489:22;;16520:30;16544:5;16520:30;:::i;:::-;16419:137;;;;:::o;16562:345::-;16629:6;16678:2;16666:9;16657:7;16653:23;16649:32;16646:119;;;16684:79;;:::i;:::-;16646:119;16804:1;16829:61;16882:7;16873:6;16862:9;16858:22;16829:61;:::i;:::-;16819:71;;16775:125;16562:345;;;;:::o;16913:102::-;16955:8;17002:5;16999:1;16995:13;16974:34;;16913:102;;;:::o;17021:848::-;17082:5;17089:4;17113:6;17104:15;;17137:5;17128:14;;17151:712;17172:1;17162:8;17159:15;17151:712;;;17267:4;17262:3;17258:14;17252:4;17249:24;17246:50;;;17276:18;;:::i;:::-;17246:50;17326:1;17316:8;17312:16;17309:451;;;17741:4;17734:5;17730:16;17721:25;;17309:451;17791:4;17785;17781:15;17773:23;;17821:32;17844:8;17821:32;:::i;:::-;17809:44;;17151:712;;;17021:848;;;;;;;:::o;17875:1073::-;17929:5;18120:8;18110:40;;18141:1;18132:10;;18143:5;;18110:40;18169:4;18159:36;;18186:1;18177:10;;18188:5;;18159:36;18255:4;18303:1;18298:27;;;;18339:1;18334:191;;;;18248:277;;18298:27;18316:1;18307:10;;18318:5;;;18334:191;18379:3;18369:8;18366:17;18363:43;;;18386:18;;:::i;:::-;18363:43;18435:8;18432:1;18428:16;18419:25;;18470:3;18463:5;18460:14;18457:40;;;18477:18;;:::i;:::-;18457:40;18510:5;;;18248:277;;18634:2;18624:8;18621:16;18615:3;18609:4;18606:13;18602:36;18584:2;18574:8;18571:16;18566:2;18560:4;18557:12;18553:35;18537:111;18534:246;;;18690:8;18684:4;18680:19;18671:28;;18725:3;18718:5;18715:14;18712:40;;;18732:18;;:::i;:::-;18712:40;18765:5;;18534:246;18805:42;18843:3;18833:8;18827:4;18824:1;18805:42;:::i;:::-;18790:57;;;;18879:4;18874:3;18870:14;18863:5;18860:25;18857:51;;;18888:18;;:::i;:::-;18857:51;18937:4;18930:5;18926:16;18917:25;;17875:1073;;;;;;:::o;18954:281::-;19012:5;19036:23;19054:4;19036:23;:::i;:::-;19028:31;;19080:25;19096:8;19080:25;:::i;:::-;19068:37;;19124:104;19161:66;19151:8;19145:4;19124:104;:::i;:::-;19115:113;;18954:281;;;;:::o;19241:238::-;19381:34;19377:1;19369:6;19365:14;19358:58;19450:21;19445:2;19437:6;19433:15;19426:46;19241:238;:::o;19485:366::-;19627:3;19648:67;19712:2;19707:3;19648:67;:::i;:::-;19641:74;;19724:93;19813:3;19724:93;:::i;:::-;19842:2;19837:3;19833:12;19826:19;;19485:366;;;:::o;19857:419::-;20023:4;20061:2;20050:9;20046:18;20038:26;;20110:9;20104:4;20100:20;20096:1;20085:9;20081:17;20074:47;20138:131;20264:4;20138:131;:::i;:::-;20130:139;;19857:419;;;:::o;20282:224::-;20422:34;20418:1;20410:6;20406:14;20399:58;20491:7;20486:2;20478:6;20474:15;20467:32;20282:224;:::o;20512:366::-;20654:3;20675:67;20739:2;20734:3;20675:67;:::i;:::-;20668:74;;20751:93;20840:3;20751:93;:::i;:::-;20869:2;20864:3;20860:12;20853:19;;20512:366;;;:::o;20884:419::-;21050:4;21088:2;21077:9;21073:18;21065:26;;21137:9;21131:4;21127:20;21123:1;21112:9;21108:17;21101:47;21165:131;21291:4;21165:131;:::i;:::-;21157:139;;20884:419;;;:::o;21309:225::-;21449:34;21445:1;21437:6;21433:14;21426:58;21518:8;21513:2;21505:6;21501:15;21494:33;21309:225;:::o;21540:366::-;21682:3;21703:67;21767:2;21762:3;21703:67;:::i;:::-;21696:74;;21779:93;21868:3;21779:93;:::i;:::-;21897:2;21892:3;21888:12;21881:19;;21540:366;;;:::o;21912:419::-;22078:4;22116:2;22105:9;22101:18;22093:26;;22165:9;22159:4;22155:20;22151:1;22140:9;22136:17;22129:47;22193:131;22319:4;22193:131;:::i;:::-;22185:139;;21912:419;;;:::o;22337:120::-;22409:23;22426:5;22409:23;:::i;:::-;22402:5;22399:34;22389:62;;22447:1;22444;22437:12;22389:62;22337:120;:::o;22463:141::-;22519:5;22550:6;22544:13;22535:22;;22566:32;22592:5;22566:32;:::i;:::-;22463:141;;;;:::o;22610:349::-;22679:6;22728:2;22716:9;22707:7;22703:23;22699:32;22696:119;;;22734:79;;:::i;:::-;22696:119;22854:1;22879:63;22934:7;22925:6;22914:9;22910:22;22879:63;:::i;:::-;22869:73;;22825:127;22610:349;;;;:::o;22965:143::-;23022:5;23053:6;23047:13;23038:22;;23069:33;23096:5;23069:33;:::i;:::-;22965:143;;;;:::o;23114:351::-;23184:6;23233:2;23221:9;23212:7;23208:23;23204:32;23201:119;;;23239:79;;:::i;:::-;23201:119;23359:1;23384:64;23440:7;23431:6;23420:9;23416:22;23384:64;:::i;:::-;23374:74;;23330:128;23114:351;;;;:::o;23471:220::-;23611:34;23607:1;23599:6;23595:14;23588:58;23680:3;23675:2;23667:6;23663:15;23656:28;23471:220;:::o;23697:366::-;23839:3;23860:67;23924:2;23919:3;23860:67;:::i;:::-;23853:74;;23936:93;24025:3;23936:93;:::i;:::-;24054:2;24049:3;24045:12;24038:19;;23697:366;;;:::o;24069:419::-;24235:4;24273:2;24262:9;24258:18;24250:26;;24322:9;24316:4;24312:20;24308:1;24297:9;24293:17;24286:47;24350:131;24476:4;24350:131;:::i;:::-;24342:139;;24069:419;;;:::o;24494:305::-;24534:3;24553:20;24571:1;24553:20;:::i;:::-;24548:25;;24587:20;24605:1;24587:20;:::i;:::-;24582:25;;24741:1;24673:66;24669:74;24666:1;24663:81;24660:107;;;24747:18;;:::i;:::-;24660:107;24791:1;24788;24784:9;24777:16;;24494:305;;;;:::o;24805:177::-;24945:29;24941:1;24933:6;24929:14;24922:53;24805:177;:::o;24988:366::-;25130:3;25151:67;25215:2;25210:3;25151:67;:::i;:::-;25144:74;;25227:93;25316:3;25227:93;:::i;:::-;25345:2;25340:3;25336:12;25329:19;;24988:366;;;:::o;25360:419::-;25526:4;25564:2;25553:9;25549:18;25541:26;;25613:9;25607:4;25603:20;25599:1;25588:9;25584:17;25577:47;25641:131;25767:4;25641:131;:::i;:::-;25633:139;;25360:419;;;:::o;25785:223::-;25925:34;25921:1;25913:6;25909:14;25902:58;25994:6;25989:2;25981:6;25977:15;25970:31;25785:223;:::o;26014:366::-;26156:3;26177:67;26241:2;26236:3;26177:67;:::i;:::-;26170:74;;26253:93;26342:3;26253:93;:::i;:::-;26371:2;26366:3;26362:12;26355:19;;26014:366;;;:::o;26386:419::-;26552:4;26590:2;26579:9;26575:18;26567:26;;26639:9;26633:4;26629:20;26625:1;26614:9;26610:17;26603:47;26667:131;26793:4;26667:131;:::i;:::-;26659:139;;26386:419;;;:::o;26811:221::-;26951:34;26947:1;26939:6;26935:14;26928:58;27020:4;27015:2;27007:6;27003:15;26996:29;26811:221;:::o;27038:366::-;27180:3;27201:67;27265:2;27260:3;27201:67;:::i;:::-;27194:74;;27277:93;27366:3;27277:93;:::i;:::-;27395:2;27390:3;27386:12;27379:19;;27038:366;;;:::o;27410:419::-;27576:4;27614:2;27603:9;27599:18;27591:26;;27663:9;27657:4;27653:20;27649:1;27638:9;27634:17;27627:47;27691:131;27817:4;27691:131;:::i;:::-;27683:139;;27410:419;;;:::o;27835:525::-;27874:3;27893:19;27910:1;27893:19;:::i;:::-;27888:24;;27926:19;27943:1;27926:19;:::i;:::-;27921:24;;28114:1;28046:66;28042:74;28039:1;28035:82;28030:1;28027;28023:9;28016:17;28012:106;28009:132;;;28121:18;;:::i;:::-;28009:132;28301:1;28233:66;28229:74;28226:1;28222:82;28218:1;28215;28211:9;28207:98;28204:124;;;28308:18;;:::i;:::-;28204:124;28352:1;28349;28345:9;28338:16;;27835:525;;;;:::o;28366:147::-;28467:11;28504:3;28489:18;;28366:147;;;;:::o;28519:114::-;;:::o;28639:398::-;28798:3;28819:83;28900:1;28895:3;28819:83;:::i;:::-;28812:90;;28911:93;29000:3;28911:93;:::i;:::-;29029:1;29024:3;29020:11;29013:18;;28639:398;;;:::o;29043:379::-;29227:3;29249:147;29392:3;29249:147;:::i;:::-;29242:154;;29413:3;29406:10;;29043:379;;;:::o;29428:191::-;29468:4;29488:20;29506:1;29488:20;:::i;:::-;29483:25;;29522:20;29540:1;29522:20;:::i;:::-;29517:25;;29561:1;29558;29555:8;29552:34;;;29566:18;;:::i;:::-;29552:34;29611:1;29608;29604:9;29596:17;;29428:191;;;;:::o;29625:527::-;29664:4;29684:19;29701:1;29684:19;:::i;:::-;29679:24;;29717:19;29734:1;29717:19;:::i;:::-;29712:24;;29906:1;29838:66;29834:74;29831:1;29827:82;29822:1;29819;29815:9;29808:17;29804:106;29801:132;;;29913:18;;:::i;:::-;29801:132;30092:1;30024:66;30020:74;30017:1;30013:82;30009:1;30006;30002:9;29998:98;29995:124;;;30099:18;;:::i;:::-;29995:124;30144:1;30141;30137:9;30129:17;;29625:527;;;;:::o;30158:181::-;30298:33;30294:1;30286:6;30282:14;30275:57;30158:181;:::o;30345:366::-;30487:3;30508:67;30572:2;30567:3;30508:67;:::i;:::-;30501:74;;30584:93;30673:3;30584:93;:::i;:::-;30702:2;30697:3;30693:12;30686:19;;30345:366;;;:::o;30717:419::-;30883:4;30921:2;30910:9;30906:18;30898:26;;30970:9;30964:4;30960:20;30956:1;30945:9;30941:17;30934:47;30998:131;31124:4;30998:131;:::i;:::-;30990:139;;30717:419;;;:::o;31142:220::-;31282:34;31278:1;31270:6;31266:14;31259:58;31351:3;31346:2;31338:6;31334:15;31327:28;31142:220;:::o;31368:366::-;31510:3;31531:67;31595:2;31590:3;31531:67;:::i;:::-;31524:74;;31607:93;31696:3;31607:93;:::i;:::-;31725:2;31720:3;31716:12;31709:19;;31368:366;;;:::o;31740:419::-;31906:4;31944:2;31933:9;31929:18;31921:26;;31993:9;31987:4;31983:20;31979:1;31968:9;31964:17;31957:47;32021:131;32147:4;32021:131;:::i;:::-;32013:139;;31740:419;;;:::o

Swarm Source

ipfs://3090a2432ef81d99f86e9c6bc8b45e392a0a9f4ba1ac8421d8a3c6a6f29dfcef
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.