ETH Price: $2,414.00 (+3.20%)

Token

SHINJIRO TRACKER (SHOXT)
 

Overview

Max Total Supply

49,960,326,079,162,906.502463138 SHOXT

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 SHOXT

Value
$0.00
0xc0ba15b258d6f2583ae4ec29c64c4f76d754748b
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-05-13
*/

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

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 Shinjiro 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 _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "SHINJIRO";
    string private _symbol = "SHOX";
    uint8 private _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000000 * 10** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public _maxBuyAmount = 1000000000000000000 * 10** _decimals;
    uint256 public ethPriceToSwap = 200000000000000000; //.2 ETH
    uint public ethSellAmount = 1000000000000000000;  //1 ETH
    address public marketingAddress = 0x376fF9F2fee139F5e0cb44b53aD97e07ED3c12E3;
    address public charityAddress = 0xB647dd7Bd8C2a18FF4a9c7497C185C8bb7b9c6F4;
    address public devAddress = 0x811D5D85EEcda2B9B5Ca6856B7a6C641Eb2542F4;
    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 marketing;
        uint256 dividend;
        uint256 charity;
    }

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

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

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[charityAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[deadWallet] = true;
        taxFees = TaxFees(1,8,1,8,8);
        distribution = Distribution(30, 30, 30, 10);
        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 tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

    function 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 excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

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

    function 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 setEthLargeSellAmount(uint ethSellAmount_) external onlyOwner {
        ethSellAmount = ethSellAmount_;
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        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 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 reflectionBuyFee, uint256 buyFee, uint256 sellReflectionFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner {
        taxFees.reflectionBuyFee = reflectionBuyFee;
        taxFees.buyFee = buyFee;
        taxFees.sellReflectionFee = sellReflectionFee;
        taxFees.sellFee = sellFee;
        taxFees.largeSellFee = largeSellFee;
    }

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

    function setWalletAddresses(address devAddr, address charity, address marketingAddr) external onlyOwner {
        devAddress = devAddr;
        charityAddress = charity;
        marketingAddress = marketingAddr;
    }

    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 _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        uint256 reflectionFee = 0;
        if(doTakeFees) {
            reflectionFee = taxFees.reflectionBuyFee;
            if(isSellTxn) {
                reflectionFee = taxFees.sellReflectionFee;
            }
        }
        return _amount.mul(reflectionFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 totalLiquidityFee = 0;
        if(doTakeFees) {
            totalLiquidityFee = taxFees.buyFee;
            if(isSellTxn) {
                totalLiquidityFee = taxFees.sellFee;
                uint ethPrice = getEthPrice(_amount);
                if(ethPrice >= ethSellAmount) {
                    totalLiquidityFee = taxFees.largeSellFee;
                }
            }
        }
        return _amount.mul(totalLiquidityFee).div(10**2);
    }

    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();
        //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) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            swapTokensAndDistribute();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair) {
            takeFees = isTaxFreeTransfer ? false : true;
        }
        
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function swapTokensAndDistribute() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            uint ethPrice = getEthPrice(contractTokenBalance);
            if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets marketing 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 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
        uint256 charityShare = distributionEth.mul(distribution.charity).div(100);
        if(marketingShare > 0){
            payable(marketingAddress).transfer(marketingShare);
        }
        if(dividendShare > 0){
            sendEthDividends(dividendShare);
        }
        if(devTeamShare > 0){
            payable(devAddress).transfer(devTeamShare);
        }
        if(charityShare > 0){
            payable(charityAddress).transfer(charityShare);
        }
    }

    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 tAmount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        doTakeFees = takeFees;
        isSellTxn = isSell;
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);

        if(doUpdateDividends && distribution.dividend > 0) {
            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 = "SHINJIRO TRACKER";
    string private _symbol = "SHOXT";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 250000000000000 * 10 **  _decimals;
    Shinjiro private shinjiro;
    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 = shinjiro.balanceOf(account);
        if(!shinjiro.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 {
        shinjiro = Shinjiro(payable(contractAddr));
    }

    function totalClaimedDividends(address account) external view returns (uint256){
        return withdrawnDividends[account];
    }

    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":"totalClaimedDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60806040526040518060400160405280601081526020017f5348494e4a49524f20545241434b4552000000000000000000000000000000008152506008908051906020019062000051929190620002c1565b506040518060400160405280600581526020017f53484f5854000000000000000000000000000000000000000000000000000000815250600990805190602001906200009f929190620002c1565b506009600a60006101000a81548160ff021916908360ff160217905550604051620000ca9062000352565b604051809103906000f080158015620000e7573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900460ff16600a62000146919062000519565b65e35fa931a0006200015991906200056a565b600d556000600e60146101000a81548160ff021916908315150217905550610e106011553480156200018a57600080fd5b5060006200019d620002b960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200024b620002b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051620002ab919062000618565b60405180910390a362000699565b600033905090565b828054620002cf9062000664565b90600052602060002090601f016020900481019282620002f357600085556200033f565b82601f106200030e57805160ff19168380011785556200033f565b828001600101855582156200033f579182015b828111156200033e57825182559160200191906001019062000321565b5b5090506200034e919062000360565b5090565b610b088062004c9c83390190565b5b808211156200037b57600081600090555060010162000361565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200040d57808604811115620003e557620003e46200037f565b5b6001851615620003f55780820291505b80810290506200040585620003ae565b9450620003c5565b94509492505050565b600082620004285760019050620004fb565b81620004385760009050620004fb565b81600181146200045157600281146200045c5762000492565b6001915050620004fb565b60ff8411156200047157620004706200037f565b5b8360020a9150848211156200048b576200048a6200037f565b5b50620004fb565b5060208310610133831016604e8410600b8410161715620004cc5782820a905083811115620004c657620004c56200037f565b5b620004fb565b620004db8484846001620003bb565b92509050818404811115620004f557620004f46200037f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620005268262000502565b915062000533836200050c565b9250620005627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000416565b905092915050565b6000620005778262000502565b9150620005848362000502565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620005c057620005bf6200037f565b5b828202905092915050565b6000819050919050565b6000819050919050565b600062000600620005fa620005f484620005cb565b620005d5565b62000502565b9050919050565b6200061281620005df565b82525050565b60006020820190506200062f600083018462000607565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067d57607f821691505b60208210810362000693576200069262000635565b5b50919050565b6145f380620006a96000396000f3fe60806040526004361061024a5760003560e01c8063715018a611610139578063a9059cbb116100b6578063e0fb0f351161007a578063e0fb0f35146108e6578063e7841ec0146108fd578063e98030c714610928578063f2fde38b14610951578063fbcbc0f11461097a578063ffb2c479146109be57610259565b8063a9059cbb146107db578063aafd847a14610818578063be10b61414610855578063cac8d53814610880578063dd62ed3e146108a957610259565b80638da5cb5b116100fd5780638da5cb5b146106ce57806391b89fba146106f957806395d89b4114610736578063a457c2d714610761578063a8b9d2401461079e57610259565b8063715018a6146105e9578063730270b514610600578063804974ea1461063d57806385a6b3ae1461067a57806389774282146106a557610259565b8063313ce567116101c75780635ebf4db91161018b5780635ebf4db91461051657806365e2ccb21461053f5780636a4740021461056a5780636f2789ec1461058157806370a08231146105ac57610259565b8063313ce5671461043157806331e79db01461045c57806339509351146104855780633974d3b1146104c25780633f83d72c146104eb57610259565b806321df2b091161020e57806321df2b0914610326578063226cfa3d1461034f57806323b872dd1461038c57806327ce0147146103c95780633009a6091461040657610259565b806303c833021461025e57806306fdde0314610268578063095ea7b31461029357806309bbedde146102d057806318160ddd146102fb57610259565b36610259576102576109fd565b005b600080fd5b6102666109fd565b005b34801561027457600080fd5b5061027d610ad6565b60405161028a91906133c2565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613482565b610b68565b6040516102c791906134dd565b60405180910390f35b3480156102dc57600080fd5b506102e5610b86565b6040516102f29190613507565b60405180910390f35b34801561030757600080fd5b50610310610c1e565b60405161031d9190613507565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135dd565b610c28565b005b34801561035b57600080fd5b506103766004803603810190610371919061365e565b610de3565b6040516103839190613507565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae919061368b565b610dfb565b6040516103c091906134dd565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb919061365e565b610e48565b6040516103fd9190613507565b60405180910390f35b34801561041257600080fd5b5061041b610eeb565b6040516104289190613507565b60405180910390f35b34801561043d57600080fd5b50610446610ef1565b60405161045391906136fa565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e919061365e565b610f08565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613482565b61107b565b6040516104b991906134dd565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061365e565b61112e565b005b3480156104f757600080fd5b5061050061146e565b60405161050d91906134dd565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613715565b611481565b005b34801561054b57600080fd5b50610554611546565b6040516105619190613507565b60405180910390f35b34801561057657600080fd5b5061057f611550565b005b34801561058d57600080fd5b5061059661155c565b6040516105a39190613507565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce919061365e565b611562565b6040516105e09190613507565b60405180910390f35b3480156105f557600080fd5b506105fe6115ab565b005b34801561060c57600080fd5b506106276004803603810190610622919061365e565b6116fe565b6040516106349190613507565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f919061365e565b611747565b6040516106719190613507565b60405180910390f35b34801561068657600080fd5b5061068f611790565b60405161069c9190613507565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906137ac565b611796565b005b3480156106da57600080fd5b506106e361183a565b6040516106f091906137fb565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b919061365e565b611863565b60405161072d9190613507565b60405180910390f35b34801561074257600080fd5b5061074b611875565b60405161075891906133c2565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613482565b611907565b60405161079591906134dd565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c0919061365e565b6119d4565b6040516107d29190613507565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613482565b611a37565b60405161080f91906134dd565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061365e565b611a83565b60405161084c9190613507565b60405180910390f35b34801561086157600080fd5b5061086a611acc565b6040516108779190613507565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a2919061365e565b611ad2565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190613816565b611bab565b6040516108dd9190613507565b60405180910390f35b3480156108f257600080fd5b506108fb611c32565b005b34801561090957600080fd5b50610912611d1d565b60405161091f9190613507565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190613715565b611d27565b005b34801561095d57600080fd5b506109786004803603810190610973919061365e565b611e8e565b005b34801561098657600080fd5b506109a1600480360381019061099c919061365e565b61204f565b6040516109b598979695949392919061386f565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190613715565b61235d565b6040516109f4939291906138ed565b60405180910390f35b6000610a07610c1e565b11610a1157600080fd5b6000341115610ad457610a64610a25610c1e565b610a497001000000000000000000000000000000003461265890919063ffffffff16565b610a539190613982565b6001546126d290919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610ab09190613507565b60405180910390a2610acd34600b546126d290919063ffffffff16565b600b819055505b565b606060088054610ae5906139e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b11906139e2565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b5050505050905090565b6000610b7c610b75612730565b8484612738565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190613a28565b905090565b6000600754905090565b610c30612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490613aa1565b60405180910390fd5b60005b84849050811015610ddc576000858583818110610ce057610cdf613ac1565b5b9050602002016020810190610cf5919061365e565b90506000633b9aca00858585818110610d1157610d10613ac1565b5b90506020020135610d229190613af0565b9050600d548110610dc757610d378282612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610d94929190613b4a565b600060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b505050505b50508080610dd490613b73565b915050610cc0565b5050505050565b60106020528060005260406000206000915090505481565b600080610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613c2d565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610eda610ed5600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ec7610ec2610eb188611562565b60015461265890919063ffffffff16565b61296e565b61298b90919063ffffffff16565b6129d6565b610ee49190613982565b9050919050565b600f5481565b6000600a60009054906101000a900460ff16905090565b610f10612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613aa1565b60405180910390fd5b610fa8816000612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161100391906137fb565b600060405180830381600087803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b6000611124611088612730565b8461111f8560066000611099612730565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126d290919063ffffffff16565b612738565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161118b91906137fb565b602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190613a28565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b815260040161122991906137fb565b602060405180830381865afa158015611246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126a9190613c62565b6113b357600d548110611315576112818282612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b81526004016112de929190613b4a565b600060405180830381600087803b1580156112f857600080fd5b505af115801561130c573d6000803e3d6000fd5b505050506113ae565b611320826000612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161137b91906137fb565b600060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050505b61145e565b60006113be83611562565b111561145d576113cf826000612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161142a91906137fb565b600060405180830381600087803b15801561144457600080fd5b505af1158015611458573d6000803e3d6000fd5b505050505b5b6114698260016129ed565b505050565b600e60149054906101000a900460ff1681565b611489612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613aa1565b60405180910390fd5b600a60009054906101000a900460ff16600a6115329190613dc2565b8161153d9190613af0565b600d8190555050565b6000600d54905090565b61155933612b4a565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b3612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163790613aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b61179e612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613aa1565b60405180910390fd5b61183582826129ed565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061186e826119d4565b9050919050565b606060098054611884906139e2565b80601f01602080910402602001604051908101604052809291908181526020018280546118b0906139e2565b80156118fd5780601f106118d2576101008083540402835291602001916118fd565b820191906000526020600020905b8154815290600101906020018083116118e057829003601f168201915b5050505050905090565b60006119ca611914612730565b846119c585604051806060016040528060258152602001614599602591396006600061193e612730565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b612738565b6001905092915050565b6000611a30600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2284610e48565b612dd390919063ffffffff16565b9050919050565b600080611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7090613c2d565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611ada612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613aa1565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c3a612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613aa1565b60405180910390fd5b6000479050611cd461183a565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d19573d6000803e3d6000fd5b5050565b6000600f54905090565b611d2f612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390613aa1565b60405180910390fd5b610e108110158015611dd15750620151808111155b611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790613e7f565b60405180910390fd5b6011548103611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90613f11565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611e96612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990613fa3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016120b991906137fb565b602060405180830381865afa1580156120d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fa9190613fef565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126122af57600f5487111561214d57612146600f5488612e1d90919063ffffffff16565b95506122ae565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e39190613a28565b116121ef576000612295565b612294600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122869190613a28565b612dd390919063ffffffff16565b5b90506122aa818961298b90919063ffffffff16565b9650505b5b6122b8886119d4565b94506122c388610e48565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161231657600061232c565b61232b601154846126d290919063ffffffff16565b5b915042821161233c576000612350565b61234f4283612dd390919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f49190613a28565b90506000810361241057600080600f5493509350935050612651565b6000600f5490506000805a90506000805b898410801561242f57508582105b1561263857848061243f90613b73565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190613a28565b85106124de57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b815260040161253b9190613507565b602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190614031565b90506125c6601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e68565b156125eb576125d68160016129ed565b156125ea5781806125e690613b73565b9250505b5b82806125f690613b73565b93505060005a90508085111561262e5761262b61261c8287612dd390919063ffffffff16565b876126d290919063ffffffff16565b95505b8094505050612421565b84600f819055508181600f549850985098505050505050505b9193909250565b600080830361266a57600090506126cc565b600082846126789190613af0565b90508284826126879190613982565b146126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be906140d0565b60405180910390fd5b809150505b92915050565b60008082846126e191906140f0565b905083811015612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614192565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614224565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280d906142b6565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f49190613507565b60405180910390a3505050565b600061290c83611562565b90508082111561293d57600061292b8284612dd390919063ffffffff16565b90506129378482612e9b565b50612969565b8082101561296857600061295a8383612dd390919063ffffffff16565b905061296684826130d5565b505b5b505050565b600080829050600081121561298257600080fd5b80915050919050565b600080828461299a91906142d6565b9050600083121580156129ad5750838112155b806129c357506000831280156129c257508381125b5b6129cc57600080fd5b8091505092915050565b6000808212156129e557600080fd5b819050919050565b6000806129f984612b4a565b90506000811115612b3e576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612a5b81836126d290919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612b2b9190613507565b60405180910390a3600192505050612b44565b60009150505b92915050565b600080612b56836119d4565b90506000811115612d6457612bb381600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126d290919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612c3c9190613507565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612c6e9061439b565b600060405180830381858888f193505050503d8060008114612cac576040519150601f19603f3d011682016040523d82523d6000602084013e612cb1565b606091505b5050905080612d5a57612d0c82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd390919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612d6a565b8192505050612d6a565b60009150505b919050565b6000838311158290612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae91906133c2565b60405180910390fd5b5060008385612dc691906143b0565b9050809150509392505050565b6000612e1583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6f565b905092915050565b6000808284612e2c91906143e4565b905060008312158015612e3f5750838113155b80612e555750600083128015612e5457508381135b5b612e5e57600080fd5b8091505092915050565b600042821115612e7b5760009050612e96565b601154612e918342612dd390919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f01906144c4565b60405180910390fd5b612f1f816007546126d290919063ffffffff16565b600781905550612f7781600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126d290919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130189190613507565b60405180910390a361308e61304061303b8360015461265890919063ffffffff16565b61296e565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313b90614556565b60405180910390fd5b6131b08160405180606001604052806022815260200161457760229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061320881600754612dd390919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161326c9190613507565b60405180910390a36132e261329461328f8360015461265890919063ffffffff16565b61296e565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613363578082015181840152602081019050613348565b83811115613372576000848401525b50505050565b6000601f19601f8301169050919050565b600061339482613329565b61339e8185613334565b93506133ae818560208601613345565b6133b781613378565b840191505092915050565b600060208201905081810360008301526133dc8184613389565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613419826133ee565b9050919050565b6134298161340e565b811461343457600080fd5b50565b60008135905061344681613420565b92915050565b6000819050919050565b61345f8161344c565b811461346a57600080fd5b50565b60008135905061347c81613456565b92915050565b60008060408385031215613499576134986133e4565b5b60006134a785828601613437565b92505060206134b88582860161346d565b9150509250929050565b60008115159050919050565b6134d7816134c2565b82525050565b60006020820190506134f260008301846134ce565b92915050565b6135018161344c565b82525050565b600060208201905061351c60008301846134f8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261354757613546613522565b5b8235905067ffffffffffffffff81111561356457613563613527565b5b6020830191508360208202830111156135805761357f61352c565b5b9250929050565b60008083601f84011261359d5761359c613522565b5b8235905067ffffffffffffffff8111156135ba576135b9613527565b5b6020830191508360208202830111156135d6576135d561352c565b5b9250929050565b600080600080604085870312156135f7576135f66133e4565b5b600085013567ffffffffffffffff811115613615576136146133e9565b5b61362187828801613531565b9450945050602085013567ffffffffffffffff811115613644576136436133e9565b5b61365087828801613587565b925092505092959194509250565b600060208284031215613674576136736133e4565b5b600061368284828501613437565b91505092915050565b6000806000606084860312156136a4576136a36133e4565b5b60006136b286828701613437565b93505060206136c386828701613437565b92505060406136d48682870161346d565b9150509250925092565b600060ff82169050919050565b6136f4816136de565b82525050565b600060208201905061370f60008301846136eb565b92915050565b60006020828403121561372b5761372a6133e4565b5b60006137398482850161346d565b91505092915050565b600061374d826133ee565b9050919050565b61375d81613742565b811461376857600080fd5b50565b60008135905061377a81613754565b92915050565b613789816134c2565b811461379457600080fd5b50565b6000813590506137a681613780565b92915050565b600080604083850312156137c3576137c26133e4565b5b60006137d18582860161376b565b92505060206137e285828601613797565b9150509250929050565b6137f58161340e565b82525050565b600060208201905061381060008301846137ec565b92915050565b6000806040838503121561382d5761382c6133e4565b5b600061383b85828601613437565b925050602061384c85828601613437565b9150509250929050565b6000819050919050565b61386981613856565b82525050565b600061010082019050613885600083018b6137ec565b613892602083018a613860565b61389f6040830189613860565b6138ac60608301886134f8565b6138b960808301876134f8565b6138c660a08301866134f8565b6138d360c08301856134f8565b6138e060e08301846134f8565b9998505050505050505050565b600060608201905061390260008301866134f8565b61390f60208301856134f8565b61391c60408301846134f8565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061398d8261344c565b91506139988361344c565b9250826139a8576139a7613924565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139fa57607f821691505b602082108103613a0d57613a0c6139b3565b5b50919050565b600081519050613a2281613456565b92915050565b600060208284031215613a3e57613a3d6133e4565b5b6000613a4c84828501613a13565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a8b602083613334565b9150613a9682613a55565b602082019050919050565b60006020820190508181036000830152613aba81613a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613afb8261344c565b9150613b068361344c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b3f57613b3e613953565b5b828202905092915050565b6000604082019050613b5f60008301856137ec565b613b6c60208301846134f8565b9392505050565b6000613b7e8261344c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb057613baf613953565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613c17602883613334565b9150613c2282613bbb565b604082019050919050565b60006020820190508181036000830152613c4681613c0a565b9050919050565b600081519050613c5c81613780565b92915050565b600060208284031215613c7857613c776133e4565b5b6000613c8684828501613c4d565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613ce657808604811115613cc257613cc1613953565b5b6001851615613cd15780820291505b8081029050613cdf85613c8f565b9450613ca6565b94509492505050565b600082613cff5760019050613dbb565b81613d0d5760009050613dbb565b8160018114613d235760028114613d2d57613d5c565b6001915050613dbb565b60ff841115613d3f57613d3e613953565b5b8360020a915084821115613d5657613d55613953565b5b50613dbb565b5060208310610133831016604e8410600b8410161715613d915782820a905083811115613d8c57613d8b613953565b5b613dbb565b613d9e8484846001613c9c565b92509050818404811115613db557613db4613953565b5b81810290505b9392505050565b6000613dcd8261344c565b9150613dd8836136de565b9250613e057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613cef565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613e69603383613334565b9150613e7482613e0d565b604082019050919050565b60006020820190508181036000830152613e9881613e5c565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613efb602583613334565b9150613f0682613e9f565b604082019050919050565b60006020820190508181036000830152613f2a81613eee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f8d602683613334565b9150613f9882613f31565b604082019050919050565b60006020820190508181036000830152613fbc81613f80565b9050919050565b613fcc81613856565b8114613fd757600080fd5b50565b600081519050613fe981613fc3565b92915050565b600060208284031215614005576140046133e4565b5b600061401384828501613fda565b91505092915050565b60008151905061402b81613420565b92915050565b600060208284031215614047576140466133e4565b5b60006140558482850161401c565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ba602183613334565b91506140c58261405e565b604082019050919050565b600060208201905081810360008301526140e9816140ad565b9050919050565b60006140fb8261344c565b91506141068361344c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561413b5761413a613953565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061417c601b83613334565b915061418782614146565b602082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061420e602483613334565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142a0602283613334565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b60006142e182613856565b91506142ec83613856565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561432757614326613953565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561435f5761435e613953565b5b828201905092915050565b600081905092915050565b50565b600061438560008361436a565b915061439082614375565b600082019050919050565b60006143a682614378565b9150819050919050565b60006143bb8261344c565b91506143c68361344c565b9250828210156143d9576143d8613953565b5b828203905092915050565b60006143ef82613856565b91506143fa83613856565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561443557614434613953565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561446d5761446c613953565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006144ae601f83613334565b91506144b982614478565b602082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614540602183613334565b915061454b826144e4565b604082019050919050565b6000602082019050818103600083015261456f81614533565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f26eca3e36f916a0449088b116441366c4760adaf089c39535c6c69c74b42b664736f6c634300080d0033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b925082821015610a4957610a486109f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212200e6254fd0a50274d3b99fb1a5a2665de37fee8d58ebb07c232f3aba19521c5e364736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063715018a611610139578063a9059cbb116100b6578063e0fb0f351161007a578063e0fb0f35146108e6578063e7841ec0146108fd578063e98030c714610928578063f2fde38b14610951578063fbcbc0f11461097a578063ffb2c479146109be57610259565b8063a9059cbb146107db578063aafd847a14610818578063be10b61414610855578063cac8d53814610880578063dd62ed3e146108a957610259565b80638da5cb5b116100fd5780638da5cb5b146106ce57806391b89fba146106f957806395d89b4114610736578063a457c2d714610761578063a8b9d2401461079e57610259565b8063715018a6146105e9578063730270b514610600578063804974ea1461063d57806385a6b3ae1461067a57806389774282146106a557610259565b8063313ce567116101c75780635ebf4db91161018b5780635ebf4db91461051657806365e2ccb21461053f5780636a4740021461056a5780636f2789ec1461058157806370a08231146105ac57610259565b8063313ce5671461043157806331e79db01461045c57806339509351146104855780633974d3b1146104c25780633f83d72c146104eb57610259565b806321df2b091161020e57806321df2b0914610326578063226cfa3d1461034f57806323b872dd1461038c57806327ce0147146103c95780633009a6091461040657610259565b806303c833021461025e57806306fdde0314610268578063095ea7b31461029357806309bbedde146102d057806318160ddd146102fb57610259565b36610259576102576109fd565b005b600080fd5b6102666109fd565b005b34801561027457600080fd5b5061027d610ad6565b60405161028a91906133c2565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613482565b610b68565b6040516102c791906134dd565b60405180910390f35b3480156102dc57600080fd5b506102e5610b86565b6040516102f29190613507565b60405180910390f35b34801561030757600080fd5b50610310610c1e565b60405161031d9190613507565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135dd565b610c28565b005b34801561035b57600080fd5b506103766004803603810190610371919061365e565b610de3565b6040516103839190613507565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae919061368b565b610dfb565b6040516103c091906134dd565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb919061365e565b610e48565b6040516103fd9190613507565b60405180910390f35b34801561041257600080fd5b5061041b610eeb565b6040516104289190613507565b60405180910390f35b34801561043d57600080fd5b50610446610ef1565b60405161045391906136fa565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e919061365e565b610f08565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613482565b61107b565b6040516104b991906134dd565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061365e565b61112e565b005b3480156104f757600080fd5b5061050061146e565b60405161050d91906134dd565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613715565b611481565b005b34801561054b57600080fd5b50610554611546565b6040516105619190613507565b60405180910390f35b34801561057657600080fd5b5061057f611550565b005b34801561058d57600080fd5b5061059661155c565b6040516105a39190613507565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce919061365e565b611562565b6040516105e09190613507565b60405180910390f35b3480156105f557600080fd5b506105fe6115ab565b005b34801561060c57600080fd5b506106276004803603810190610622919061365e565b6116fe565b6040516106349190613507565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f919061365e565b611747565b6040516106719190613507565b60405180910390f35b34801561068657600080fd5b5061068f611790565b60405161069c9190613507565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906137ac565b611796565b005b3480156106da57600080fd5b506106e361183a565b6040516106f091906137fb565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b919061365e565b611863565b60405161072d9190613507565b60405180910390f35b34801561074257600080fd5b5061074b611875565b60405161075891906133c2565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613482565b611907565b60405161079591906134dd565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c0919061365e565b6119d4565b6040516107d29190613507565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190613482565b611a37565b60405161080f91906134dd565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061365e565b611a83565b60405161084c9190613507565b60405180910390f35b34801561086157600080fd5b5061086a611acc565b6040516108779190613507565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a2919061365e565b611ad2565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190613816565b611bab565b6040516108dd9190613507565b60405180910390f35b3480156108f257600080fd5b506108fb611c32565b005b34801561090957600080fd5b50610912611d1d565b60405161091f9190613507565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190613715565b611d27565b005b34801561095d57600080fd5b506109786004803603810190610973919061365e565b611e8e565b005b34801561098657600080fd5b506109a1600480360381019061099c919061365e565b61204f565b6040516109b598979695949392919061386f565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190613715565b61235d565b6040516109f4939291906138ed565b60405180910390f35b6000610a07610c1e565b11610a1157600080fd5b6000341115610ad457610a64610a25610c1e565b610a497001000000000000000000000000000000003461265890919063ffffffff16565b610a539190613982565b6001546126d290919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610ab09190613507565b60405180910390a2610acd34600b546126d290919063ffffffff16565b600b819055505b565b606060088054610ae5906139e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b11906139e2565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b5050505050905090565b6000610b7c610b75612730565b8484612738565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190613a28565b905090565b6000600754905090565b610c30612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490613aa1565b60405180910390fd5b60005b84849050811015610ddc576000858583818110610ce057610cdf613ac1565b5b9050602002016020810190610cf5919061365e565b90506000633b9aca00858585818110610d1157610d10613ac1565b5b90506020020135610d229190613af0565b9050600d548110610dc757610d378282612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610d94929190613b4a565b600060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b505050505b50508080610dd490613b73565b915050610cc0565b5050505050565b60106020528060005260406000206000915090505481565b600080610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613c2d565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610eda610ed5600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ec7610ec2610eb188611562565b60015461265890919063ffffffff16565b61296e565b61298b90919063ffffffff16565b6129d6565b610ee49190613982565b9050919050565b600f5481565b6000600a60009054906101000a900460ff16905090565b610f10612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613aa1565b60405180910390fd5b610fa8816000612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161100391906137fb565b600060405180830381600087803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b6000611124611088612730565b8461111f8560066000611099612730565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126d290919063ffffffff16565b612738565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161118b91906137fb565b602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190613a28565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b815260040161122991906137fb565b602060405180830381865afa158015611246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126a9190613c62565b6113b357600d548110611315576112818282612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b81526004016112de929190613b4a565b600060405180830381600087803b1580156112f857600080fd5b505af115801561130c573d6000803e3d6000fd5b505050506113ae565b611320826000612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161137b91906137fb565b600060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050505b61145e565b60006113be83611562565b111561145d576113cf826000612901565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161142a91906137fb565b600060405180830381600087803b15801561144457600080fd5b505af1158015611458573d6000803e3d6000fd5b505050505b5b6114698260016129ed565b505050565b600e60149054906101000a900460ff1681565b611489612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613aa1565b60405180910390fd5b600a60009054906101000a900460ff16600a6115329190613dc2565b8161153d9190613af0565b600d8190555050565b6000600d54905090565b61155933612b4a565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b3612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163790613aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b61179e612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613aa1565b60405180910390fd5b61183582826129ed565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061186e826119d4565b9050919050565b606060098054611884906139e2565b80601f01602080910402602001604051908101604052809291908181526020018280546118b0906139e2565b80156118fd5780601f106118d2576101008083540402835291602001916118fd565b820191906000526020600020905b8154815290600101906020018083116118e057829003601f168201915b5050505050905090565b60006119ca611914612730565b846119c585604051806060016040528060258152602001614599602591396006600061193e612730565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b612738565b6001905092915050565b6000611a30600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2284610e48565b612dd390919063ffffffff16565b9050919050565b600080611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7090613c2d565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611ada612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613aa1565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c3a612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613aa1565b60405180910390fd5b6000479050611cd461183a565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d19573d6000803e3d6000fd5b5050565b6000600f54905090565b611d2f612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390613aa1565b60405180910390fd5b610e108110158015611dd15750620151808111155b611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790613e7f565b60405180910390fd5b6011548103611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90613f11565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611e96612730565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990613fa3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016120b991906137fb565b602060405180830381865afa1580156120d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fa9190613fef565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126122af57600f5487111561214d57612146600f5488612e1d90919063ffffffff16565b95506122ae565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e39190613a28565b116121ef576000612295565b612294600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122869190613a28565b612dd390919063ffffffff16565b5b90506122aa818961298b90919063ffffffff16565b9650505b5b6122b8886119d4565b94506122c388610e48565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161231657600061232c565b61232b601154846126d290919063ffffffff16565b5b915042821161233c576000612350565b61234f4283612dd390919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f49190613a28565b90506000810361241057600080600f5493509350935050612651565b6000600f5490506000805a90506000805b898410801561242f57508582105b1561263857848061243f90613b73565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190613a28565b85106124de57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b815260040161253b9190613507565b602060405180830381865afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190614031565b90506125c6601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e68565b156125eb576125d68160016129ed565b156125ea5781806125e690613b73565b9250505b5b82806125f690613b73565b93505060005a90508085111561262e5761262b61261c8287612dd390919063ffffffff16565b876126d290919063ffffffff16565b95505b8094505050612421565b84600f819055508181600f549850985098505050505050505b9193909250565b600080830361266a57600090506126cc565b600082846126789190613af0565b90508284826126879190613982565b146126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be906140d0565b60405180910390fd5b809150505b92915050565b60008082846126e191906140f0565b905083811015612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614192565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614224565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280d906142b6565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f49190613507565b60405180910390a3505050565b600061290c83611562565b90508082111561293d57600061292b8284612dd390919063ffffffff16565b90506129378482612e9b565b50612969565b8082101561296857600061295a8383612dd390919063ffffffff16565b905061296684826130d5565b505b5b505050565b600080829050600081121561298257600080fd5b80915050919050565b600080828461299a91906142d6565b9050600083121580156129ad5750838112155b806129c357506000831280156129c257508381125b5b6129cc57600080fd5b8091505092915050565b6000808212156129e557600080fd5b819050919050565b6000806129f984612b4a565b90506000811115612b3e576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612a5b81836126d290919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612b2b9190613507565b60405180910390a3600192505050612b44565b60009150505b92915050565b600080612b56836119d4565b90506000811115612d6457612bb381600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126d290919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612c3c9190613507565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612c6e9061439b565b600060405180830381858888f193505050503d8060008114612cac576040519150601f19603f3d011682016040523d82523d6000602084013e612cb1565b606091505b5050905080612d5a57612d0c82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd390919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612d6a565b8192505050612d6a565b60009150505b919050565b6000838311158290612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae91906133c2565b60405180910390fd5b5060008385612dc691906143b0565b9050809150509392505050565b6000612e1583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6f565b905092915050565b6000808284612e2c91906143e4565b905060008312158015612e3f5750838113155b80612e555750600083128015612e5457508381135b5b612e5e57600080fd5b8091505092915050565b600042821115612e7b5760009050612e96565b601154612e918342612dd390919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f01906144c4565b60405180910390fd5b612f1f816007546126d290919063ffffffff16565b600781905550612f7781600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126d290919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130189190613507565b60405180910390a361308e61304061303b8360015461265890919063ffffffff16565b61296e565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313b90614556565b60405180910390fd5b6131b08160405180606001604052806022815260200161457760229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061320881600754612dd390919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161326c9190613507565b60405180910390a36132e261329461328f8360015461265890919063ffffffff16565b61296e565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613363578082015181840152602081019050613348565b83811115613372576000848401525b50505050565b6000601f19601f8301169050919050565b600061339482613329565b61339e8185613334565b93506133ae818560208601613345565b6133b781613378565b840191505092915050565b600060208201905081810360008301526133dc8184613389565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613419826133ee565b9050919050565b6134298161340e565b811461343457600080fd5b50565b60008135905061344681613420565b92915050565b6000819050919050565b61345f8161344c565b811461346a57600080fd5b50565b60008135905061347c81613456565b92915050565b60008060408385031215613499576134986133e4565b5b60006134a785828601613437565b92505060206134b88582860161346d565b9150509250929050565b60008115159050919050565b6134d7816134c2565b82525050565b60006020820190506134f260008301846134ce565b92915050565b6135018161344c565b82525050565b600060208201905061351c60008301846134f8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261354757613546613522565b5b8235905067ffffffffffffffff81111561356457613563613527565b5b6020830191508360208202830111156135805761357f61352c565b5b9250929050565b60008083601f84011261359d5761359c613522565b5b8235905067ffffffffffffffff8111156135ba576135b9613527565b5b6020830191508360208202830111156135d6576135d561352c565b5b9250929050565b600080600080604085870312156135f7576135f66133e4565b5b600085013567ffffffffffffffff811115613615576136146133e9565b5b61362187828801613531565b9450945050602085013567ffffffffffffffff811115613644576136436133e9565b5b61365087828801613587565b925092505092959194509250565b600060208284031215613674576136736133e4565b5b600061368284828501613437565b91505092915050565b6000806000606084860312156136a4576136a36133e4565b5b60006136b286828701613437565b93505060206136c386828701613437565b92505060406136d48682870161346d565b9150509250925092565b600060ff82169050919050565b6136f4816136de565b82525050565b600060208201905061370f60008301846136eb565b92915050565b60006020828403121561372b5761372a6133e4565b5b60006137398482850161346d565b91505092915050565b600061374d826133ee565b9050919050565b61375d81613742565b811461376857600080fd5b50565b60008135905061377a81613754565b92915050565b613789816134c2565b811461379457600080fd5b50565b6000813590506137a681613780565b92915050565b600080604083850312156137c3576137c26133e4565b5b60006137d18582860161376b565b92505060206137e285828601613797565b9150509250929050565b6137f58161340e565b82525050565b600060208201905061381060008301846137ec565b92915050565b6000806040838503121561382d5761382c6133e4565b5b600061383b85828601613437565b925050602061384c85828601613437565b9150509250929050565b6000819050919050565b61386981613856565b82525050565b600061010082019050613885600083018b6137ec565b613892602083018a613860565b61389f6040830189613860565b6138ac60608301886134f8565b6138b960808301876134f8565b6138c660a08301866134f8565b6138d360c08301856134f8565b6138e060e08301846134f8565b9998505050505050505050565b600060608201905061390260008301866134f8565b61390f60208301856134f8565b61391c60408301846134f8565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061398d8261344c565b91506139988361344c565b9250826139a8576139a7613924565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139fa57607f821691505b602082108103613a0d57613a0c6139b3565b5b50919050565b600081519050613a2281613456565b92915050565b600060208284031215613a3e57613a3d6133e4565b5b6000613a4c84828501613a13565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a8b602083613334565b9150613a9682613a55565b602082019050919050565b60006020820190508181036000830152613aba81613a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613afb8261344c565b9150613b068361344c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b3f57613b3e613953565b5b828202905092915050565b6000604082019050613b5f60008301856137ec565b613b6c60208301846134f8565b9392505050565b6000613b7e8261344c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb057613baf613953565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613c17602883613334565b9150613c2282613bbb565b604082019050919050565b60006020820190508181036000830152613c4681613c0a565b9050919050565b600081519050613c5c81613780565b92915050565b600060208284031215613c7857613c776133e4565b5b6000613c8684828501613c4d565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613ce657808604811115613cc257613cc1613953565b5b6001851615613cd15780820291505b8081029050613cdf85613c8f565b9450613ca6565b94509492505050565b600082613cff5760019050613dbb565b81613d0d5760009050613dbb565b8160018114613d235760028114613d2d57613d5c565b6001915050613dbb565b60ff841115613d3f57613d3e613953565b5b8360020a915084821115613d5657613d55613953565b5b50613dbb565b5060208310610133831016604e8410600b8410161715613d915782820a905083811115613d8c57613d8b613953565b5b613dbb565b613d9e8484846001613c9c565b92509050818404811115613db557613db4613953565b5b81810290505b9392505050565b6000613dcd8261344c565b9150613dd8836136de565b9250613e057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613cef565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613e69603383613334565b9150613e7482613e0d565b604082019050919050565b60006020820190508181036000830152613e9881613e5c565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613efb602583613334565b9150613f0682613e9f565b604082019050919050565b60006020820190508181036000830152613f2a81613eee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f8d602683613334565b9150613f9882613f31565b604082019050919050565b60006020820190508181036000830152613fbc81613f80565b9050919050565b613fcc81613856565b8114613fd757600080fd5b50565b600081519050613fe981613fc3565b92915050565b600060208284031215614005576140046133e4565b5b600061401384828501613fda565b91505092915050565b60008151905061402b81613420565b92915050565b600060208284031215614047576140466133e4565b5b60006140558482850161401c565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ba602183613334565b91506140c58261405e565b604082019050919050565b600060208201905081810360008301526140e9816140ad565b9050919050565b60006140fb8261344c565b91506141068361344c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561413b5761413a613953565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061417c601b83613334565b915061418782614146565b602082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061420e602483613334565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142a0602283613334565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b60006142e182613856565b91506142ec83613856565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561432757614326613953565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561435f5761435e613953565b5b828201905092915050565b600081905092915050565b50565b600061438560008361436a565b915061439082614375565b600082019050919050565b60006143a682614378565b9150819050919050565b60006143bb8261344c565b91506143c68361344c565b9250828210156143d9576143d8613953565b5b828203905092915050565b60006143ef82613856565b91506143fa83613856565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561443557614434613953565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561446d5761446c613953565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006144ae601f83613334565b91506144b982614478565b602082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614540602183613334565b915061454b826144e4565b604082019050919050565b6000602082019050818103600083015261456f81614533565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f26eca3e36f916a0449088b116441366c4760adaf089c39535c6c69c74b42b664736f6c634300080d0033

Deployed Bytecode Sourcemap

39051:13642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44527:21;:19;:21::i;:::-;39051:13642;;;;;45043:428;;;:::i;:::-;;40714:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41745:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47814:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40991:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51982:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40311:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41402:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46732:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40271:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40900:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44840:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41922:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42770:707;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40032:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46987:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47690:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45479:106;;;;;;;;;;;;;:::i;:::-;;40367:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41097:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17814:148;;;;;;;;;;;;;:::i;:::-;;44700:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51358:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39793:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51203:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17178:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46293:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40805:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42148:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46423:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41232:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46597:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39910:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44564:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41594:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52537:151;;;;;;;;;;;;;:::i;:::-;;47573:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47193:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18117:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47937:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;49912:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;45043:428;45124:1;45108:13;:11;:13::i;:::-;:17;45100:26;;;;;;45155:1;45143:9;:13;45139:325;;;45201:105;45278:13;:11;:13::i;:::-;45249:26;39254:8;45250:9;45249:15;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;45201:25;;:29;;:105;;;;:::i;:::-;45173:25;:133;;;;45347:10;45326:43;;;45359:9;45326:43;;;;;;:::i;:::-;;;;;;;;45412:40;45442:9;45412:25;;:29;;:40;;;;:::i;:::-;45384:25;:68;;;;45139:325;45043:428::o;40714:83::-;40751:13;40784:5;40777:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40714:83;:::o;41745:169::-;41828:4;41845:39;41854:12;:10;:12::i;:::-;41868:7;41877:6;41845:8;:39::i;:::-;41902:4;41895:11;;41745:169;;;;:::o;47814:115::-;47872:7;47899:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47892:29;;47814:115;:::o;40991:100::-;41044:7;41071:12;;41064:19;;40991:100;:::o;51982:471::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52098:10:::1;52094:352;52122:10;;:17;;52114:5;:25;52094:352;;;52164:15;52182:10;;52193:5;52182:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52164:35;;52214:14;52248:5;52231:7;;52239:5;52231:14;;;;;;;:::i;:::-;;;;;;;;:22;;;;:::i;:::-;52214:39;;52282:31;;52272:6;:41;52268:165;;52334:28;52346:7;52355:6;52334:11;:28::i;:::-;52381:15;;;;;;;;;;;:19;;;52401:7;52410:6;52381:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52268:165;52149:297;;52141:7;;;;;:::i;:::-;;;;52094:352;;;;51982:471:::0;;;;:::o;40311:49::-;;;;;;;;;;;;;;;;;:::o;41402:184::-;41481:4;41506:5;41498:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41574:4;41567:11;;41402:184;;;;;:::o;46732:247::-;46801:7;39254:8;46828:131;:115;46906:28;:36;46935:6;46906:36;;;;;;;;;;;;;;;;46828:63;:48;46858:17;46868:6;46858:9;:17::i;:::-;46828:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;46821:150;;46732:247;;;:::o;40271:33::-;;;;:::o;40900:83::-;40941:5;40966:9;;;;;;;;;;;40959:16;;40900:83;:::o;44840:195::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44917:23:::1;44929:7;44938:1;44917:11;:23::i;:::-;44951:15;;;;;;;;;;;:22;;;44974:7;44951:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45019:7;44998:29;;;;;;;;;;;;44840:195:::0;:::o;41922:218::-;42010:4;42027:83;42036:12;:10;:12::i;:::-;42050:7;42059:50;42098:10;42059:11;:25;42071:12;:10;:12::i;:::-;42059:25;;;;;;;;;;;;;;;:34;42085:7;42059:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;42027:8;:83::i;:::-;42128:4;42121:11;;41922:218;;;;:::o;42770:707::-;42832:15;42850:8;;;;;;;;;;;:18;;;42869:7;42850:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42832:45;;42892:8;;;;;;;;;;;:30;;;42923:7;42892:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42888:533;;42963:31;;42952:7;:42;42948:295;;43015:29;43027:7;43036;43015:11;:29::i;:::-;43063:15;;;;;;;;;;;:19;;;43083:7;43092;43063:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42948:295;;;43154:23;43166:7;43175:1;43154:11;:23::i;:::-;43196:15;;;;;;;;;;;:22;;;43219:7;43196:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42948:295;42888:533;;;43299:1;43278:18;43288:7;43278:9;:18::i;:::-;:22;43275:135;;;43321:23;43333:7;43342:1;43321:11;:23::i;:::-;43363:15;;;;;;;;;;;:22;;;43386:7;43363:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43275:135;42888:533;43431:38;43454:7;43464:4;43431:14;:38::i;:::-;;42821:656;42770:707;:::o;40032:33::-;;;;;;;;;;;;;:::o;46987:198::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47167:9:::1;;;;;;;;;;;47161:2;:15;;;;:::i;:::-;47131:26;:46;;;;:::i;:::-;47097:31;:80;;;;46987:198:::0;:::o;47690:116::-;47740:7;47767:31;;47760:38;;47690:116;:::o;45479:106::-;45533:44;45565:10;45533:23;:44::i;:::-;;45479:106::o;40367:31::-;;;;:::o;41097:127::-;41171:7;41198:9;:18;41208:7;41198:18;;;;;;;;;;;;;;;;41191:25;;41097:127;;;:::o;17814:148::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17921:1:::1;17884:40;;17905:6;::::0;::::1;;;;;;;;17884:40;;;;;;;;;;;;17952:1;17935:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17814:148::o:0;44700:132::-;44771:7;44797:18;:27;44816:7;44797:27;;;;;;;;;;;;;;;;44790:34;;44700:132;;;:::o;51358:128::-;51426:7;51453:16;:25;51470:7;51453:25;;;;;;;;;;;;;;;;51446:32;;51358:128;;;:::o;39793:40::-;;;;:::o;51203:147::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51308:34:::1;51323:7;51332:9;51308:14;:34::i;:::-;;51203:147:::0;;:::o;17178:79::-;17216:7;17243:6;;;;;;;;;;;17236:13;;17178:79;:::o;46293:122::-;46350:7;46377:30;46400:6;46377:22;:30::i;:::-;46370:37;;46293:122;;;:::o;40805:87::-;40844:13;40877:7;40870:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40805:87;:::o;42148:269::-;42241:4;42258:129;42267:12;:10;:12::i;:::-;42281:7;42290:96;42329:15;42290:96;;;;;;;;;;;;;;;;;:11;:25;42302:12;:10;:12::i;:::-;42290:25;;;;;;;;;;;;;;;:34;42316:7;42290:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;42258:8;:129::i;:::-;42405:4;42398:11;;42148:269;;;;:::o;46423:166::-;46492:7;46519:62;46554:18;:26;46573:6;46554:26;;;;;;;;;;;;;;;;46519:30;46542:6;46519:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;46512:69;;46423:166;;;:::o;41232:162::-;41289:4;41314:5;41306:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41382:4;41375:11;;41232:162;;;;:::o;46597:127::-;46663:7;46690:18;:26;46709:6;46690:26;;;;;;;;;;;;;;;;46683:33;;46597:127;;;:::o;39910:83::-;;;;:::o;44564:128::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44670:12:::1;44642:8;;:42;;;;;;;;;;;;;;;;;;44564:128:::0;:::o;41594:143::-;41675:7;41702:11;:18;41714:5;41702:18;;;;;;;;;;;;;;;:27;41721:7;41702:27;;;;;;;;;;;;;;;;41695:34;;41594:143;;;;:::o;52537:151::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52590:18:::1;52611:21;52590:42;;52651:7;:5;:7::i;:::-;52643:25;;:37;52669:10;52643:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52579:109;52537:151::o:0;47573:109::-;47629:7;47656:18;;47649:25;;47573:109;:::o;47193:372::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47294:4:::1;47278:12;:20;;:45;;;;;47318:5;47302:12;:21;;47278:45;47270:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;47414:9;;47398:12;:25:::0;47390:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47512:9;;47498:12;47481:41;;;;;;;;;;47545:12;47533:9;:24;;;;47193:372:::0;:::o;18117:244::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18226:1:::1;18206:22;;:8;:22;;::::0;18198:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18316:8;18287:38;;18308:6;::::0;::::1;;;;;;;;18287:38;;;;;;;;;;;;18345:8;18336:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18117:244:::0;:::o;47937:1270::-;47996:15;48013:12;48027:31;48069:29;48100:22;48124:21;48156;48179:38;48240:8;48230:18;;48267:15;;;;;;;;;;;:29;;;48297:7;48267:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48259:46;;48343:3;48316:30;;48370:1;48361:5;:10;48357:473;;48409:18;;48400:5;48392:35;48388:431;;;48475:37;48492:18;;48475:5;:9;;:37;;;;:::i;:::-;48448:64;;48388:431;;;48566:32;48626:18;;48601:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;48713:1;48601:113;;;48664:46;48691:18;;48664:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;48601:113;48566:148;;48760:43;48777:24;48760:5;:9;;:43;;;;:::i;:::-;48733:70;;48547:272;48388:431;48357:473;48864:31;48887:7;48864:22;:31::i;:::-;48840:55;;48923:31;48946:7;48923:22;:31::i;:::-;48906:48;;48981:14;:23;48996:7;48981:23;;;;;;;;;;;;;;;;48965:39;;49047:1;49031:13;:17;:52;;49082:1;49031:52;;;49051:28;49069:9;;49051:13;:17;;:28;;;;:::i;:::-;49031:52;49015:68;;49143:15;49127:13;:31;:72;;49198:1;49127:72;;;49161:34;49179:15;49161:13;:17;;:34;;;;:::i;:::-;49127:72;49094:105;;47937:1270;;;;;;;;;:::o;49912:1283::-;49958:7;49967;49976;49996:28;50027:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49996:53;;50090:1;50066:20;:25;50062:91;;50116:1;50119;50122:18;;50108:33;;;;;;;;;50062:91;50163:27;50193:18;;50163:48;;50222:15;50252;50270:9;50252:27;;50290:18;50323:14;50352:727;50369:3;50359:7;:13;:50;;;;;50389:20;50376:10;:33;50359:50;50352:727;;;50426:21;;;;;:::i;:::-;;;;50489:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50466:19;:45;50462:109;;50554:1;50532:23;;50462:109;50585:15;50603;;;;;;;;;;;:29;;;50633:19;50603:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50585:68;;50672:37;50685:14;:23;50700:7;50685:23;;;;;;;;;;;;;;;;50672:12;:37::i;:::-;50668:172;;;50734:38;50757:7;50767:4;50734:14;:38::i;:::-;50730:95;;;50797:8;;;;;:::i;:::-;;;;50730:95;50668:172;50854:12;;;;;:::i;:::-;;;;50881:18;50902:9;50881:30;;50940:10;50930:7;:20;50926:107;;;50981:36;50993:23;51005:10;50993:7;:11;;:23;;;;:::i;:::-;50981:7;:11;;:36;;;;:::i;:::-;50971:46;;50926:107;51057:10;51047:20;;50411:668;;50352:727;;;51110:19;51089:18;:40;;;;51148:10;51160:6;51168:18;;51140:47;;;;;;;;;;;;49912:1283;;;;;;:::o;6452:471::-;6510:7;6760:1;6755;:6;6751:47;;6785:1;6778:8;;;;6751:47;6810:9;6826:1;6822;:5;;;;:::i;:::-;6810:17;;6855:1;6850;6846;:5;;;;:::i;:::-;:10;6838:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6914:1;6907:8;;;6452:471;;;;;:::o;5098:181::-;5156:7;5176:9;5192:1;5188;:5;;;;:::i;:::-;5176:17;;5217:1;5212;:6;;5204:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5270:1;5263:8;;;5098:181;;;;:::o;9670:98::-;9723:7;9750:10;9743:17;;9670:98;:::o;42425:337::-;42535:1;42518:19;;:5;:19;;;42510:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42616:1;42597:21;;:7;:21;;;42589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42700:6;42670:11;:18;42682:5;42670:18;;;;;;;;;;;;;;;:27;42689:7;42670:27;;;;;;;;;;;;;;;:36;;;;42738:7;42722:32;;42731:5;42722:32;;;42747:6;42722:32;;;;;;:::i;:::-;;;;;;;;42425:337;;;:::o;49455:449::-;49533:22;49558:18;49568:7;49558:9;:18::i;:::-;49533:43;;49604:14;49591:10;:27;49587:310;;;49635:18;49656:30;49671:14;49656:10;:14;;:30;;;;:::i;:::-;49635:51;;49701:26;49707:7;49716:10;49701:5;:26::i;:::-;49620:119;49587:310;;;49762:14;49749:10;:27;49745:152;;;49793:18;49814:30;49833:10;49814:14;:18;;:30;;;;:::i;:::-;49793:51;;49859:26;49865:7;49874:10;49859:5;:26::i;:::-;49778:119;49745:152;49587:310;49522:382;49455:449;;:::o;4103:148::-;4159:6;4178:8;4196:1;4178:20;;4222:1;4217;:6;;4209:15;;;;;;4242:1;4235:8;;;4103:148;;;:::o;3619:176::-;3675:6;3694:8;3709:1;3705;:5;;;;:::i;:::-;3694:16;;3735:1;3730;:6;;:16;;;;;3745:1;3740;:6;;3730:16;3729:38;;;;3756:1;3752;:5;:14;;;;;3765:1;3761;:5;3752:14;3729:38;3721:47;;;;;;3786:1;3779:8;;;3619:176;;;;:::o;3941:127::-;3997:7;4030:1;4025;:6;;4017:15;;;;;;4058:1;4043:17;;3941:127;;;:::o;51492:482::-;51574:4;51591:14;51608:32;51632:7;51608:23;:32::i;:::-;51591:49;;51664:1;51655:6;:10;51651:293;;;51682:20;51705:16;:25;51722:7;51705:25;;;;;;;;;;;;;;;;51682:48;;51773:24;51784:12;51773:6;:10;;:24;;;;:::i;:::-;51745:16;:25;51762:7;51745:25;;;;;;;;;;;;;;;:52;;;;51838:15;51812:14;:23;51827:7;51812:23;;;;;;;;;;;;;;;:41;;;;51896:9;51873:33;;51879:7;51873:33;;;51888:6;51873:33;;;;;;:::i;:::-;;;;;;;;51928:4;51921:11;;;;;;51651:293;51961:5;51954:12;;;51492:482;;;;;:::o;45593:692::-;45666:7;45686:29;45718:28;45741:4;45718:22;:28::i;:::-;45686:60;;45785:1;45761:21;:25;45757:502;;;45830:51;45859:21;45830:18;:24;45849:4;45830:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;45803:18;:24;45822:4;45803:24;;;;;;;;;;;;;;;:78;;;;45919:4;45901:46;;;45925:21;45901:46;;;;;;:::i;:::-;;;;;;;;45963:12;45980:4;:9;;45998:21;46027:4;45980:56;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45962:74;;;46056:7;46051:154;;46111:51;46140:21;46111:18;:24;46130:4;46111:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;46084:18;:24;46103:4;46084:24;;;;;;;;;;;;;;;:78;;;;46188:1;46181:8;;;;;;46051:154;46226:21;46219:28;;;;;;45757:502;46276:1;46269:8;;;45593:692;;;;:::o;6001:192::-;6087:7;6120:1;6115;:6;;6123:12;6107:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6147:9;6163:1;6159;:5;;;;:::i;:::-;6147:17;;6184:1;6177:8;;;6001:192;;;;;:::o;5562:136::-;5620:7;5647:43;5651:1;5654;5647:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5640:50;;5562:136;;;;:::o;3435:176::-;3491:6;3510:8;3525:1;3521;:5;;;;:::i;:::-;3510:16;;3551:1;3546;:6;;:16;;;;;3561:1;3556;:6;;3546:16;3545:38;;;;3572:1;3568;:5;:14;;;;;3581:1;3577;:5;3568:14;3545:38;3537:47;;;;;;3602:1;3595:8;;;3435:176;;;;:::o;49215:232::-;49282:4;49319:15;49303:13;:31;49299:76;;;49358:5;49351:12;;;;49299:76;49430:9;;49392:34;49412:13;49392:15;:19;;:34;;;;:::i;:::-;:47;;49385:54;;49215:232;;;;:::o;43485:472::-;43588:1;43569:21;;:7;:21;;;43561:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43652:24;43669:6;43652:12;;:16;;:24;;;;:::i;:::-;43637:12;:39;;;;43708:30;43731:6;43708:9;:18;43718:7;43708:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;43687:9;:18;43697:7;43687:18;;;;;;;;;;;;;;;:51;;;;43775:7;43754:37;;43771:1;43754:37;;;43784:6;43754:37;;;;;;:::i;:::-;;;;;;;;43842:107;43894:54;43895:37;43925:6;43895:25;;:29;;:37;;;;:::i;:::-;43894:52;:54::i;:::-;43842:28;:37;43871:7;43842:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;43802:28;:37;43831:7;43802:37;;;;;;;;;;;;;;;:147;;;;43485:472;;:::o;43965:516::-;44068:1;44049:21;;:7;:21;;;44041:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44142:68;44165:6;44142:68;;;;;;;;;;;;;;;;;:9;:18;44152:7;44142:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;44121:9;:18;44131:7;44121:18;;;;;;;;;;;;;;;:89;;;;44236:24;44253:6;44236:12;;:16;;:24;;;;:::i;:::-;44221:12;:39;;;;44302:1;44276:37;;44285:7;44276:37;;;44306:6;44276:37;;;;;;:::i;:::-;;;;;;;;44366:107;44418:54;44419:37;44449:6;44419:25;;:29;;:37;;;;:::i;:::-;44418:52;:54::i;:::-;44366:28;:37;44395:7;44366:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;44326:28;:37;44355:7;44326:37;;;;;;;;;;;;;;;:147;;;;43965: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://0e6254fd0a50274d3b99fb1a5a2665de37fee8d58ebb07c232f3aba19521c5e3
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.