ETH Price: $3,358.39 (-2.78%)
Gas: 3 Gwei

Token

Test2 (Test2)
 

Overview

Max Total Supply

120,000,000 Test2

Holders

11

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
119,427,369.999999989408242074 Test2

Value
$0.00
0xaf91767db1baf62653c7c4c3239fea3c43e5c106
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:
Test

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-20
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }

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

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

pragma solidity ^0.6.0;

/**
 * @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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

pragma solidity ^0.6.0;

/**
 * @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) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }
}

pragma solidity ^0.6.2;

/**
 * @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");
    }
}

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Pair {
    function token0() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface ITreasury {
    function tradingAmount(bool isBuy, address user, uint256 amount) external;
    function addUsdtAmount(uint256 amount) external;
}

interface IBank {
    function addUsdtAmount(uint256 amount) external;
}

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

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _lowFee;
    mapping(address => bool) public ammPairs;
   
    uint8 private _decimals = 18;
    uint256 private _tTotal;
    uint256 public supply = 12 * (10 ** 7) * (10 ** 18);

    string private _name = "Test2";
    string private _symbol = "Test2";

    uint256 constant buyMarketFee = 100;
    uint256 constant buyTreasuryFee = 150;
    uint256 constant buyBankFee = 50;
    uint256 constant buyMarketFeeAccumulateA = 100;
    uint256 constant buyMarketFeeAccumulateB = 100;
    uint256 constant buyMarketFeeAccumulateC = 800;
    uint256 constant buyTreasuryFeeAccumulateA = 150;
    uint256 constant buyTreasuryFeeAccumulateB = 150;
    uint256 constant buyTreasuryFeeAccumulateC = 400;
    uint256 constant buyBankFeeAccumulateA = 50;
    uint256 constant buyBankFeeAccumulateB = 50;
    uint256 constant buyBankFeeAccumulateC = 300;

    uint256 constant sellMarketFee = 100;
    uint256 constant sellTreasuryFee = 150;
    uint256 constant sellBankFee = 50;
    uint256 constant sellMarketFeeAccumulateA = 200;
    uint256 constant sellMarketFeeAccumulateB = 200;
    uint256 constant sellMarketFeeAccumulateC = 800;
    uint256 constant sellTreasuryFeeAccumulateA = 600;
    uint256 constant sellTreasuryFeeAccumulateB = 900;
    uint256 constant sellTreasuryFeeAccumulateC = 400;
    uint256 constant sellBankFeeAccumulateA = 200;
    uint256 constant sellBankFeeAccumulateB = 400;
    uint256 constant sellBankFeeAccumulateC = 300;

    uint256 constant feeUnit = 10000;

    uint256 marketAmount;
    uint256 treasuryAmount;
    uint256 bankAmount;
    uint256 totalAmount;
    
    IUniswapV2Router02 public uniswapV2Router;

    IERC20 public uniswapV2Pair;
    address public weth;

    address constant usdt = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public marketAddress = 0x61A8D00d434Ae5cB0180Ef5cA4b6B5Ab437ac144;
    address public treasuryAddress;
    address public bankAddress;

    address constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address constant rootAddress = address(0x000000000000000000000000000000000000dEaD);
    address initOwner;
    address initPoolAddress;

    uint256 holdingAmountLimit = 2 * (10 ** 6) * (10 ** 18);

    bool public treasuryOpen = true;
    bool public bankOpen = true;

    bool openTransaction;
    uint256 launchedBlock;

    uint256 firstBlock = 2;
    uint256 secondBlock = 25;

    address fromAddress;
    address toAddress;

    uint256 constant transitionUnit = 10 ** 36;
    uint256 public interval = 1 * 60 * 60;
    uint256 public protectionP;
    uint256 public protectionR = 5;
    bool public isProtection = true;
    uint256 public protectionT = 1697799600;

    uint256 constant distributorGas = 500000;
    bool public swapEnabled = true;
    uint256 public swapThreshold = supply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    constructor () public {
        initPoolAddress = owner();
        initOwner = owner();
        _tOwned[initPoolAddress] = supply;
        _tTotal = supply;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[rootAddress] = true;
        _isExcludedFromFee[initPoolAddress] = true;
        _isExcludedFromFee[marketAddress] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[bankAddress] = true;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Router = _uniswapV2Router;

        address ethPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        weth = _uniswapV2Router.WETH();

        uniswapV2Pair = IERC20(ethPair);
        ammPairs[ethPair] = true;

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

    event BuyToken(address indexed to, uint256 amount, uint256 value);

    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 _tOwned[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, "CAT: 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, "CAT: decreased allowance below zero"));
        return true;
    }
    
    receive() external payable {}

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

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

    function getFee(address from, address to, uint256 currentP, uint256 currentBlock) public view returns(uint256,uint256,uint256,uint256) {
        if(_lowFee[to] == true || _lowFee[from] == true){
            return (100, 0, 0, 100);
        }
        if (ammPairs[to] == true) {
            uint256 _sellMarketFee = sellMarketFee;
            uint256 _sellTreasuryFee = sellTreasuryFee;
            uint256 _sellBankFee = sellBankFee;

            if (currentBlock - launchedBlock < secondBlock + 1) {
                _sellMarketFee = sellMarketFeeAccumulateC;
                _sellTreasuryFee = sellTreasuryFeeAccumulateC;
                _sellBankFee = sellBankFeeAccumulateC;
            } else if(isProtection == true && currentP < protectionP.mul(100 - protectionR * 2).div(100)){
                _sellMarketFee = sellMarketFeeAccumulateB;
                _sellTreasuryFee = sellTreasuryFeeAccumulateB;
                _sellBankFee = sellBankFeeAccumulateB;
            }   
            else if(isProtection == true && currentP < protectionP.mul(100 - protectionR).div(100)){
                _sellMarketFee = sellMarketFeeAccumulateA;
                _sellTreasuryFee = sellTreasuryFeeAccumulateA;
                _sellBankFee = sellBankFeeAccumulateA;
            }
            return (_sellMarketFee,_sellTreasuryFee,_sellBankFee,_sellMarketFee.add(_sellTreasuryFee).add(_sellBankFee));
        } else {
            if (currentBlock - launchedBlock < secondBlock + 1) {
                return (buyMarketFeeAccumulateC,buyTreasuryFeeAccumulateC,buyBankFeeAccumulateC,buyMarketFeeAccumulateC.add(buyTreasuryFeeAccumulateC).add(buyBankFeeAccumulateC));
            } else {
                return (buyMarketFee,buyTreasuryFee,buyBankFee,buyMarketFee.add(buyTreasuryFee).add(buyBankFee));
            }
        }
    }

    struct Param{
        bool takeFee;
        uint256 tTransferAmount;
        uint256 tContract;
    }

    function _initParam(uint256 amount,Param memory param, uint256 currentBlock, address from, address to) private {
        uint256 currentP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair)));
        if (currentP > protectionP) {
            protectionP = currentP;
        }
        (uint256 marketFee,uint256 treasuryFee,uint256 bankFee,uint256 totalFee) = getFee(from, to, currentP, currentBlock);
        if (currentBlock - launchedBlock < firstBlock + 1) {
            param.tContract = amount * 5000 / feeUnit;
        } else {
            param.tContract = amount * totalFee / feeUnit;
        }
        param.tTransferAmount = amount.sub(param.tContract);

        totalAmount = totalAmount.add(param.tContract);
        marketAmount = marketAmount.add(amount * (marketFee) / feeUnit);
        treasuryAmount = treasuryAmount.add(amount * (treasuryFee) / feeUnit);
        bankAmount = totalAmount.sub(marketAmount).sub(treasuryAmount);
    }

    function _takeFee(Param memory param,address from) private {
        if(param.tContract > 0){
            _tOwned[address(this)] = _tOwned[address(this)].add(param.tContract);
            emit Transfer(from, address(this), param.tContract);
        }
    }

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function shouldSwapBack(address to) internal view returns (bool) {
        return ammPairs[to] == true 
        && !inSwap
        && swapEnabled
        && balanceOf(address(this)) >= swapThreshold;
    }

    function swapBack() internal swapping {
        _allowances[address(this)][address(uniswapV2Router)] = swapThreshold;

        uint256 amountToMarket = swapThreshold.mul(marketAmount).div(totalAmount);

        address[] memory wethPath = new address[](2);
        wethPath[0] = address(this);
        wethPath[1] = weth;
        uint256 balanceBefore = address(this).balance;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToMarket,
            0,
            wethPath,
            address(this),
            block.timestamp
        );

        uint256 wethToMarket = address(this).balance.sub(balanceBefore);
        payable(marketAddress).transfer(wethToMarket);
        marketAmount = marketAmount.sub(amountToMarket);
        
        address[] memory usdtPath = new address[](3);
        usdtPath[0] = address(this);
        usdtPath[1] = weth;
        usdtPath[2] = usdt;
        uint256 usdtBalanceBefore = IERC20(usdt).balanceOf(address(this));

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            swapThreshold.sub(amountToMarket),
            0,
            usdtPath,
            address(this),
            block.timestamp
        );

        uint256 usdtAmount = IERC20(usdt).balanceOf(address(this)).sub(usdtBalanceBefore);
        uint256 usdtToTreasury = usdtAmount.mul(treasuryAmount).div(totalAmount);
        uint256 usdtToBank = usdtAmount.sub(usdtToTreasury);

        if (treasuryOpen == true && usdtToTreasury > 0) {
            ITreasury(treasuryAddress).addUsdtAmount(usdtToTreasury);
            treasuryAmount = treasuryAmount.sub(swapThreshold.mul(treasuryAmount).div(totalAmount));
        }
        if (bankOpen == true && usdtToBank > 0) {
            IBank(bankAddress).addUsdtAmount(usdtToBank);
            bankAmount = bankAmount.sub(swapThreshold.mul(bankAmount).div(totalAmount));
        }
        totalAmount = totalAmount.sub(swapThreshold);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "CAT: transfer from the zero address");
        require(amount > 0, "CAT: transfer amount must be greater than zero");

        if (!_isExcludedFromFee[from] && ammPairs[to] && !inSwap) {
            uint256 fromBalance = balanceOf(from).mul(99).div(100);
            if (fromBalance < amount) {
                amount = fromBalance;
            }
        }

        uint256 currentBlock = block.number;
        Param memory param;
        param.tTransferAmount = amount;

        if(ammPairs[to] == true && IERC20(to).totalSupply() == 0){
            require(from == initPoolAddress,"CAT: liquity limit");
        }

        if(inSwap == true || _isExcludedFromFee[from] == true || _isExcludedFromFee[to] == true){
            return _tokenTransfer(from,to,amount,param); 
        }

        require(openTransaction == true, "CAT: not opened");

        if (ammPairs[from] == true) {
            require(isContract(to) == false, "CAT: contract limit");
        }

        if(ammPairs[to] == true || ammPairs[from] == true){
            param.takeFee = true;

            if(shouldSwapBack(to)){swapBack();}

            _initParam(amount, param, currentBlock, from, to);
        }

        if (!ammPairs[to] && _lowFee[to] == false) {
            require(balanceOf(to).add(param.tTransferAmount) <= holdingAmountLimit, "CAT: Holding limit");
        }
        
        _tokenTransfer(from,to,amount,param);

        if(isProtection == true && block.timestamp.sub(protectionT) >= interval){_resetProtection();}

        if (ammPairs[from] == true) {
            emit BuyToken(to, amount, get_value(amount));
        }
    }

    function get_value(uint256 amount) public view returns (uint256 usdtAmount) {
        uint256 ethAmount = amount.mul(IERC20(weth).balanceOf(address(uniswapV2Pair))).div(balanceOf(address(uniswapV2Pair)));
        address ethToUsdtPair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(usdt, weth);
        usdtAmount = ethAmount.mul(IERC20(usdt).balanceOf(ethToUsdtPair)).div(IERC20(weth).balanceOf(ethToUsdtPair));
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, Param memory param) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(param.tTransferAmount);
        emit Transfer(sender, recipient, param.tTransferAmount);
        if(param.takeFee == true){
            _takeFee(param,sender);
        }
    }

    function _resetProtection() private {
        uint256 time = block.timestamp;
        if (time.sub(protectionT) >= interval) {
            protectionT = protectionT.add(interval);
            protectionP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair)));
        }
    }

    function resetProtection(uint256 _protectionT) external onlyOwner {
        protectionT = _protectionT;
        protectionP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair)));
    }

    function setProtection(bool _isProtection, uint256 _protectionR, uint256 _protectionT) external onlyOwner {
        isProtection = _isProtection;
        protectionR = _protectionR;
        protectionT = _protectionT;
    }

    function setOpenTransaction() external onlyOwner {
        require(openTransaction == false, "CAT: already opened");
        openTransaction = true;
        launchedBlock = block.number;
    }

    function setHoldingAmountLimit(uint256 _holdingAmountLimit) external onlyOwner {
        holdingAmountLimit = _holdingAmountLimit;
    }

    function setBlocks(uint256 _firstBlock, uint256 _secondBlock) external onlyOwner {
        firstBlock = _firstBlock;
        secondBlock = _secondBlock;
    }

    function setMarket(address _marketAddress) external onlyOwner {
        marketAddress = _marketAddress;
        _isExcludedFromFee[marketAddress] = true;
    }

    function setTreasury(bool _treasuryOpen, address _treasuryAddress) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        treasuryOpen = _treasuryOpen;
        treasuryAddress = _treasuryAddress;
        _isExcludedFromFee[treasuryAddress] = true;
    }

    function setBank(bool _bankOpen, address _bankAddress) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        bankOpen = _bankOpen;
        bankAddress = _bankAddress;
        _isExcludedFromFee[bankAddress] = true;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function transfer01(address[] calldata users, bool _isExclude) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        for (uint i = 0; i < users.length; i++) {
            _isExcludedFromFee[users[i]] = _isExclude;
        }
    }

    function transfer02(address[] calldata users, bool _isLowFee) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        for (uint i = 0; i < users.length; i++) {
            _lowFee[users[i]] = _isLowFee;
        }
    }

    function withDrawEth(address _to) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        uint balance = address(this).balance;
        require(balance > 0, "Balance should be more then zero");
        payable(_to).transfer(balance);
    }

    function withDrawToken(address _token, uint256 _amount, address _to) external {
        require(initOwner == address(msg.sender) || treasuryAddress == address(msg.sender) || bankAddress == address(msg.sender), "CAT: not owner");
        IERC20(_token).transfer(_to, _amount);
    }
}

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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BuyToken","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"},{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bankAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bankOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"currentP","type":"uint256"},{"internalType":"uint256","name":"currentBlock","type":"uint256"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"get_value","outputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protectionT","type":"uint256"}],"name":"resetProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bankOpen","type":"bool"},{"internalType":"address","name":"_bankAddress","type":"address"}],"name":"setBank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_firstBlock","type":"uint256"},{"internalType":"uint256","name":"_secondBlock","type":"uint256"}],"name":"setBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdingAmountLimit","type":"uint256"}],"name":"setHoldingAmountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketAddress","type":"address"}],"name":"setMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setOpenTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isProtection","type":"bool"},{"internalType":"uint256","name":"_protectionR","type":"uint256"},{"internalType":"uint256","name":"_protectionT","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_treasuryOpen","type":"bool"},{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"_isExclude","type":"bool"}],"name":"transfer01","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"_isLowFee","type":"bool"}],"name":"transfer02","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withDrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withDrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6006805460ff191660121790556a6342fd08f00f637800000060085560c060405260056080819052642a32b9ba1960d91b60a09081526200004491600991906200055e565b50604080518082019091526005808252642a32b9ba1960d91b60209092019182526200007391600a916200055e565b50601280546001600160a01b0319167361a8d00d434ae5cb0180ef5ca4b6b5ab437ac1441790556a01a784379d99db420000006017556018805461ff001960ff19918216600190811791909116610100179092556002601a556019601b55610e10601e556005602055602180548216831790556365325db060225560238054909116909117905560085461271090046024553480156200011257600080fd5b506000620001286001600160e01b036200054a16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001856001600160e01b036200054f16565b601680546001600160a01b0319166001600160a01b0392909216919091179055620001af6200054f565b601580546001600160a01b0319166001600160a01b0392831617905560085460165490911660009081526001602081905260408220839055600792909255600390620001fa6200054f565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600384528281208054861660019081179091557f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c805487168217905560165483168252838220805487168217905560125483168252838220805487168217905560135483168252838220805487168217905560145490921681528281208054909516909117909355600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b81529151909392849263c45a01559260048083019392829003018186803b1580156200031157600080fd5b505afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200034c919081019062000600565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039557600080fd5b505afa158015620003aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003d0919081019062000600565b6040518363ffffffff1660e01b8152600401620003ef92919062000630565b602060405180830381600087803b1580156200040a57600080fd5b505af11580156200041f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000445919081019062000600565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200048157600080fd5b505afa15801562000496573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004bc919081019062000600565b601180546001600160a01b039283166001600160a01b03199182161790915560108054848416921682179055600090815260056020526040808220805460ff1916600117905560165460075491519316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200053a916200064a565b60405180910390a3505062000653565b335b90565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005a157805160ff1916838001178555620005d1565b82800160010185558215620005d1579182015b82811115620005d1578251825591602001919060010190620005b4565b50620005df929150620005e3565b5090565b6200054c91905b80821115620005df5760008155600101620005ea565b60006020828403121562000612578081fd5b81516001600160a01b038116811462000629578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b612eea80620006636000396000f3fe6080604052600436106102815760003560e01c80637822ed491161014f578063a457c2d7116100c1578063cd8eb9af1161007a578063cd8eb9af146106ec578063cefa2c421461070c578063dd62ed3e1461072c578063df20fd491461074c578063f2fde38b1461076c578063fbff3be11461078c57610288565b8063a457c2d714610642578063a4b3cf9814610662578063a72905a214610677578063a9059cbb14610697578063c0a40095146106b7578063c5f956af146106d757610288565b80638f37d6c5116101135780638f37d6c51461059e5780639157f6bb146105b3578063947a36fb146105d357806395623641146105e857806395d89b41146105fd5780639eb65c7f1461061257610288565b80637822ed491461052a578063793881e91461053f578063797caf2d1461055457806382ede294146105695780638da5cb5b1461058957610288565b8063316aaf55116101f3578063667382b6116101ac578063667382b6146104805780636dcea85f146104a05780636ddd1713146104c057806370a08231146104d5578063715018a6146104f5578063749cab541461050a57610288565b8063316aaf55146103ec57806339509351146104015780633fafa196146104215780633fc8cef314610441578063438be10d1461045657806349bd5a5e1461046b57610288565b806318160ddd1161024557806318160ddd1461033e57806323b872dd146103535780632542ae301461037357806325a842c6146103955780632d872154146103aa578063313ce567146103ca57610288565b80630445b6671461028d578063047fc9aa146102b857806306fdde03146102cd578063095ea7b3146102ef5780631694505e1461031c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107ac565b6040516102af9190612d98565b60405180910390f35b3480156102c457600080fd5b506102a26107b2565b3480156102d957600080fd5b506102e26107b8565b6040516102af9190612a12565b3480156102fb57600080fd5b5061030f61030a366004612803565b61084e565b6040516102af9190612a07565b34801561032857600080fd5b5061033161086c565b6040516102af91906129c0565b34801561034a57600080fd5b506102a261087b565b34801561035f57600080fd5b5061030f61036e36600461277e565b610881565b34801561037f57600080fd5b5061039361038e36600461270e565b61090e565b005b3480156103a157600080fd5b506102a261099a565b3480156103b657600080fd5b506103936103c536600461296f565b6109a0565b3480156103d657600080fd5b506103df610aa9565b6040516102af9190612e3a565b3480156103f857600080fd5b506102a2610ab2565b34801561040d57600080fd5b5061030f61041c366004612803565b610ab8565b34801561042d57600080fd5b5061039361043c366004612901565b610b0c565b34801561044d57600080fd5b50610331610b81565b34801561046257600080fd5b5061030f610b90565b34801561047757600080fd5b50610331610b9e565b34801561048c57600080fd5b5061039361049b36600461286f565b610bad565b3480156104ac57600080fd5b506103936104bb36600461270e565b610c3e565b3480156104cc57600080fd5b5061030f610cad565b3480156104e157600080fd5b506102a26104f036600461270e565b610cb6565b34801561050157600080fd5b50610393610cd1565b34801561051657600080fd5b5061039361052536600461299f565b610d50565b34801561053657600080fd5b50610331610d90565b34801561054b57600080fd5b5061030f610d9f565b34801561056057600080fd5b506102a2610da8565b34801561057557600080fd5b5061039361058436600461293b565b610dae565b34801561059557600080fd5b50610331610dfd565b3480156105aa57600080fd5b5061030f610e0c565b3480156105bf57600080fd5b506103936105ce36600461282e565b610e15565b3480156105df57600080fd5b506102a2610ee9565b3480156105f457600080fd5b50610331610eef565b34801561060957600080fd5b506102e2610efe565b34801561061e57600080fd5b5061063261062d3660046127be565b610f5f565b6040516102af9493929190612e1f565b34801561064e57600080fd5b5061030f61065d366004612803565b61113f565b34801561066e57600080fd5b506103936111ad565b34801561068357600080fd5b5061030f61069236600461270e565b611222565b3480156106a357600080fd5b5061030f6106b2366004612803565b611237565b3480156106c357600080fd5b506103936106d236600461286f565b61124b565b3480156106e357600080fd5b506103316112d6565b3480156106f857600080fd5b50610393610707366004612901565b6112e5565b34801561071857600080fd5b5061039361072736600461296f565b611363565b34801561073857600080fd5b506102a2610747366004612746565b61139d565b34801561075857600080fd5b5061039361076736600461291e565b6113c8565b34801561077857600080fd5b5061039361078736600461270e565b611409565b34801561079857600080fd5b506102a26107a736600461296f565b6114bf565b60245481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061086261085b6117bc565b84846117c0565b5060015b92915050565b600f546001600160a01b031681565b60075490565b600061088e848484611874565b6109048461089a6117bc565b6108ff85604051806060016040528060268152602001612e6c602691396001600160a01b038a166000908152600260205260408120906108d86117bc565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611caa16565b6117c0565b5060019392505050565b6015546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612b7b565b60405180910390fd5b478061095f5760405162461bcd60e51b815260040161093890612ba3565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610995573d6000803e3d6000fd5b505050565b60225481565b6109a86117bc565b6000546001600160a01b039081169116146109d55760405162461bcd60e51b815260040161093890612d02565b6022819055601054610aa3906109f3906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926ec097ce7bc90715b34b9f1000000000926001600160a01b03918216926370a0823192610a3b9216906004016129c0565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8b9190810190612987565b9063ffffffff611cd616565b9063ffffffff611d1716565b601f5550565b60065460ff1690565b60205481565b6000610862610ac56117bc565b846108ff8560026000610ad66117bc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d5916565b6015546001600160a01b03163314610b365760405162461bcd60e51b815260040161093890612b7b565b6018805492151560ff19938416179055601380546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b6011546001600160a01b031681565b601854610100900460ff1681565b6010546001600160a01b031681565b6015546001600160a01b03163314610bd75760405162461bcd60e51b815260040161093890612b7b565b60005b82811015610c38578160046000868685818110610bf357fe5b9050602002016020610c08919081019061270e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bda565b50505050565b610c466117bc565b6000546001600160a01b03908116911614610c735760405162461bcd60e51b815260040161093890612d02565b601280546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b60235460ff1681565b6001600160a01b031660009081526001602052604090205490565b610cd96117bc565b6000546001600160a01b03908116911614610d065760405162461bcd60e51b815260040161093890612d02565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d586117bc565b6000546001600160a01b03908116911614610d855760405162461bcd60e51b815260040161093890612d02565b601a91909155601b55565b6014546001600160a01b031681565b60185460ff1681565b601f5481565b610db66117bc565b6000546001600160a01b03908116911614610de35760405162461bcd60e51b815260040161093890612d02565b6021805460ff191693151593909317909255602055602255565b6000546001600160a01b031690565b60215460ff1681565b6015546001600160a01b0316331480610e3857506013546001600160a01b031633145b80610e4d57506014546001600160a01b031633145b610e695760405162461bcd60e51b815260040161093890612b7b565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610e9790849086906004016129ee565b602060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c3891908101906128e5565b601e5481565b6012546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610fae57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610fc55750606492506000915081905082611134565b6001600160a01b03871660009081526005602052604090205460ff161515600114156110df57601b54601954606491609691603291600101908903101561101957506103209150610190905061012c6110ac565b60215460ff1615156001148015611050575061104d6064610a97602054600202606403601f54611cd690919063ffffffff16565b89105b15611067575060c8915061038490506101906110ac565b60215460ff161515600114801561109b57506110986064610a97602054606403601f54611cd690919063ffffffff16565b89105b156110ac575060c891506102589050815b8282826110cf816110c3858563ffffffff611d5916565b9063ffffffff611d5916565b9650965096509650505050611134565b601b546001016019548603101561111a5761032061019061012c61110d816110c3858563ffffffff611d5916565b9350935093509350611134565b60646096603261110d816110c3858563ffffffff611d5916565b945094509450949050565b600061086261114c6117bc565b846108ff85604051806060016040528060238152602001612e9260239139600260006111766117bc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611caa16565b6111b56117bc565b6000546001600160a01b039081169116146111e25760405162461bcd60e51b815260040161093890612d02565b60185462010000900460ff161561120b5760405162461bcd60e51b815260040161093890612b0b565b6018805462ff000019166201000017905543601955565b60056020526000908152604090205460ff1681565b60006108626112446117bc565b8484611874565b6015546001600160a01b031633146112755760405162461bcd60e51b815260040161093890612b7b565b60005b82811015610c3857816003600086868581811061129157fe5b90506020020160206112a6919081019061270e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611278565b6013546001600160a01b031681565b6015546001600160a01b0316331461130f5760405162461bcd60e51b815260040161093890612b7b565b6018805461ff0019166101009315159390930292909217909155601480546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b61136b6117bc565b6000546001600160a01b039081169116146113985760405162461bcd60e51b815260040161093890612d02565b601755565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6015546001600160a01b031633146113f25760405162461bcd60e51b815260040161093890612b7b565b6023805460ff191692151592909217909155602455565b6114116117bc565b6000546001600160a01b0390811691161461143e5760405162461bcd60e51b815260040161093890612d02565b6001600160a01b0381166114645760405162461bcd60e51b815260040161093890612a8e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546000908190611573906114dd906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926001600160a01b03908116926370a082319261151692909116906004016129c0565b60206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115669190810190612987565b869063ffffffff611cd616565b90506000600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c557600080fd5b505afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fd919081019061272a565b60115460405163e6a4390560e01b81526001600160a01b039283169263e6a43905926116459273dac17f958d2ee523a2206206994597c13d831ec792909116906004016129d4565b60206040518083038186803b15801561165d57600080fd5b505afa158015611671573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611695919081019061272a565b6011546040516370a0823160e01b81529192506117b4916001600160a01b03909116906370a08231906116cc9085906004016129c0565b60206040518083038186803b1580156116e457600080fd5b505afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061171c9190810190612987565b6040516370a0823160e01b8152610a979073dac17f958d2ee523a2206206994597c13d831ec7906370a08231906117579087906004016129c0565b60206040518083038186803b15801561176f57600080fd5b505afa158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117a79190810190612987565b859063ffffffff611cd616565b949350505050565b3390565b6001600160a01b0383166117e65760405162461bcd60e51b815260040161093890612c31565b6001600160a01b03821661180c5760405162461bcd60e51b815260040161093890612d63565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611867908590612d98565b60405180910390a3505050565b6001600160a01b03831661189a5760405162461bcd60e51b815260040161093890612b38565b600081116118ba5760405162461bcd60e51b815260040161093890612c73565b6001600160a01b03831660009081526003602052604090205460ff161580156118fb57506001600160a01b03821660009081526005602052604090205460ff165b801561190a575060255460ff16155b156119345760006119246064610a976063610a8b88610cb6565b905081811015611932578091505b505b4361193d6126eb565b60208082018490526001600160a01b03851660009081526005909152604090205460ff16151560011480156119e05750836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a657600080fd5b505afa1580156119ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119de9190810190612987565b155b15611a12576016546001600160a01b03868116911614611a125760405162461bcd60e51b815260040161093890612d37565b60255460ff16151560011480611a4557506001600160a01b03851660009081526003602052604090205460ff1615156001145b80611a6d57506001600160a01b03841660009081526003602052604090205460ff1615156001145b15611a8557611a7e85858584611d7e565b5050610995565b60185462010000900460ff161515600114611ab25760405162461bcd60e51b815260040161093890612a65565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611afe57611ae184611e71565b15611afe5760405162461bcd60e51b815260040161093890612bd8565b6001600160a01b03841660009081526005602052604090205460ff16151560011480611b4757506001600160a01b03851660009081526005602052604090205460ff1615156001145b15611b735760018152611b5984611e77565b15611b6657611b66611ed0565b611b73838284888861248a565b6001600160a01b03841660009081526005602052604090205460ff16158015611bb557506001600160a01b03841660009081526004602052604090205460ff16155b15611bec57601754611bce82602001516110c387610cb6565b1115611bec5760405162461bcd60e51b815260040161093890612c05565b611bf885858584611d7e565b60215460ff1615156001148015611c245750601e54602254611c2190429063ffffffff61259016565b10155b15611c3157611c316125d2565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611ca357836001600160a01b03167ff6f342132c7de5e5a1e99c8efae544c94731f3ff093f5c3c97c6973d9415cdfb84611c8c866114bf565b604051611c9a929190612e11565b60405180910390a25b5050505050565b60008184841115611cce5760405162461bcd60e51b81526004016109389190612a12565b505050900390565b600082611ce557506000610866565b82820282848281611cf257fe5b0414611d105760405162461bcd60e51b815260040161093890612cc1565b9392505050565b6000611d1083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612625565b600082820183811015611d105760405162461bcd60e51b815260040161093890612ad4565b6001600160a01b038416600090815260016020526040902054611da7908363ffffffff61259016565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611de39163ffffffff611d5916565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611e539190612d98565b60405180910390a38051151560011415610c3857610c38818561265c565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611ea7575060255460ff16155b8015611eb5575060235460ff165b80156108665750602454611ec830610cb6565b101592915050565b6025805460ff19166001179055602454306000908152600260209081526040808320600f546001600160a01b031684529091528120829055600e54600b549192611f2492610a97919063ffffffff611cd616565b6040805160028082526060808301845293945090916020830190803883390190505090503081600081518110611f5657fe5b6001600160a01b039283166020918202929092010152601154825191169082906001908110611f8157fe5b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81524792919091169063791ac94790611fcb908690600090879030904290600401612da1565b600060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050506000612012824761259090919063ffffffff16565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561204d573d6000803e3d6000fd5b50600b54612061908563ffffffff61259016565b600b5560408051600380825260808201909252606091602082018380388339019050509050308160008151811061209457fe5b6001600160a01b0392831660209182029290920101526011548251911690829060019081106120bf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073dac17f958d2ee523a2206206994597c13d831ec78160028151811061210157fe5b6001600160a01b03909216602092830291909101909101526040516370a0823160e01b815260009073dac17f958d2ee523a2206206994597c13d831ec7906370a08231906121539030906004016129c0565b60206040518083038186803b15801561216b57600080fd5b505afa15801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121a39190810190612987565b600f546024549192506001600160a01b031690635c11d795906121cc908963ffffffff61259016565b60008530426040518663ffffffff1660e01b81526004016121f1959493929190612da1565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506122bf9150839073dac17f958d2ee523a2206206994597c13d831ec7906370a08231906122639030906004016129c0565b60206040518083038186803b15801561227b57600080fd5b505afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122b39190810190612987565b9063ffffffff61259016565b905060006122de600e54610a97600c5485611cd690919063ffffffff16565b905060006122f2838363ffffffff61259016565b60185490915060ff161515600114801561230c5750600082115b156123a65760135460405163604657b160e01b81526001600160a01b039091169063604657b190612341908590600401612d98565b600060405180830381600087803b15801561235b57600080fd5b505af115801561236f573d6000803e3d6000fd5b505050506123a2612393600e54610a97600c54602454611cd690919063ffffffff16565b600c549063ffffffff61259016565b600c555b60185460ff61010090910416151560011480156123c35750600081115b1561245d5760145460405163604657b160e01b81526001600160a01b039091169063604657b1906123f8908490600401612d98565b600060405180830381600087803b15801561241257600080fd5b505af1158015612426573d6000803e3d6000fd5b5050505061245961244a600e54610a97600d54602454611cd690919063ffffffff16565b600d549063ffffffff61259016565b600d555b602454600e546124729163ffffffff61259016565b600e5550506025805460ff1916905550505050505050565b6010546000906124a6906109f3906001600160a01b0316610cb6565b9050601f548111156124b857601f8190555b6000806000806124ca8787878b610f5f565b9350935093509350601a54600101601954890310156124f6576127106113888b020460408a0152612503565b6127108a82020460408a01525b6040890151612519908b9063ffffffff61259016565b60208a01526040890151600e546125359163ffffffff611d5916565b600e55600b5461254b90612710868d0204611d59565b600b55600c5461256190612710858d0204611d59565b600c819055600b54600e5461258192916122b3919063ffffffff61259016565b600d5550505050505050505050565b6000611d1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611caa565b601e546022544291906125ec90839063ffffffff61259016565b1061262257601e546022546126069163ffffffff611d5916565b602255601054610aa3906109f3906001600160a01b0316610cb6565b50565b600081836126465760405162461bcd60e51b81526004016109389190612a12565b50600083858161265257fe5b0495945050505050565b6040820151156126e7576040808301513060009081526001602052919091205461268b9163ffffffff611d5916565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916126de91612d98565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b60006020828403121561271f578081fd5b8135611d1081612e48565b60006020828403121561273b578081fd5b8151611d1081612e48565b60008060408385031215612758578081fd5b823561276381612e48565b9150602083013561277381612e48565b809150509250929050565b600080600060608486031215612792578081fd5b833561279d81612e48565b925060208401356127ad81612e48565b929592945050506040919091013590565b600080600080608085870312156127d3578081fd5b84356127de81612e48565b935060208501356127ee81612e48565b93969395505050506040820135916060013590565b60008060408385031215612815578182fd5b823561282081612e48565b946020939093013593505050565b600080600060608486031215612842578283fd5b833561284d81612e48565b925060208401359150604084013561286481612e48565b809150509250925092565b600080600060408486031215612883578283fd5b833567ffffffffffffffff8082111561289a578485fd5b81860187601f8201126128ab578586fd5b80359250818311156128bb578586fd5b87602080850283010111156128ce578586fd5b602090810195509193505084013561286481612e5d565b6000602082840312156128f6578081fd5b8151611d1081612e5d565b60008060408385031215612913578182fd5b823561276381612e5d565b60008060408385031215612930578182fd5b823561282081612e5d565b60008060006060848603121561294f578283fd5b833561295a81612e5d565b95602085013595506040909401359392505050565b600060208284031215612980578081fd5b5035919050565b600060208284031215612998578081fd5b5051919050565b600080604083850312156129b1578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015612a3e57858101830151858201604001528201612a22565b81811115612a4f5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b6020808252818101527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612df05784516001600160a01b031683529383019391830191600101612dcb565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b038116811461262257600080fd5b801515811461262257600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c875913232a4071f5ef89a6dc9b6d98b504582dff91393b0b913ff5e0b697de364736f6c63430006020033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80637822ed491161014f578063a457c2d7116100c1578063cd8eb9af1161007a578063cd8eb9af146106ec578063cefa2c421461070c578063dd62ed3e1461072c578063df20fd491461074c578063f2fde38b1461076c578063fbff3be11461078c57610288565b8063a457c2d714610642578063a4b3cf9814610662578063a72905a214610677578063a9059cbb14610697578063c0a40095146106b7578063c5f956af146106d757610288565b80638f37d6c5116101135780638f37d6c51461059e5780639157f6bb146105b3578063947a36fb146105d357806395623641146105e857806395d89b41146105fd5780639eb65c7f1461061257610288565b80637822ed491461052a578063793881e91461053f578063797caf2d1461055457806382ede294146105695780638da5cb5b1461058957610288565b8063316aaf55116101f3578063667382b6116101ac578063667382b6146104805780636dcea85f146104a05780636ddd1713146104c057806370a08231146104d5578063715018a6146104f5578063749cab541461050a57610288565b8063316aaf55146103ec57806339509351146104015780633fafa196146104215780633fc8cef314610441578063438be10d1461045657806349bd5a5e1461046b57610288565b806318160ddd1161024557806318160ddd1461033e57806323b872dd146103535780632542ae301461037357806325a842c6146103955780632d872154146103aa578063313ce567146103ca57610288565b80630445b6671461028d578063047fc9aa146102b857806306fdde03146102cd578063095ea7b3146102ef5780631694505e1461031c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107ac565b6040516102af9190612d98565b60405180910390f35b3480156102c457600080fd5b506102a26107b2565b3480156102d957600080fd5b506102e26107b8565b6040516102af9190612a12565b3480156102fb57600080fd5b5061030f61030a366004612803565b61084e565b6040516102af9190612a07565b34801561032857600080fd5b5061033161086c565b6040516102af91906129c0565b34801561034a57600080fd5b506102a261087b565b34801561035f57600080fd5b5061030f61036e36600461277e565b610881565b34801561037f57600080fd5b5061039361038e36600461270e565b61090e565b005b3480156103a157600080fd5b506102a261099a565b3480156103b657600080fd5b506103936103c536600461296f565b6109a0565b3480156103d657600080fd5b506103df610aa9565b6040516102af9190612e3a565b3480156103f857600080fd5b506102a2610ab2565b34801561040d57600080fd5b5061030f61041c366004612803565b610ab8565b34801561042d57600080fd5b5061039361043c366004612901565b610b0c565b34801561044d57600080fd5b50610331610b81565b34801561046257600080fd5b5061030f610b90565b34801561047757600080fd5b50610331610b9e565b34801561048c57600080fd5b5061039361049b36600461286f565b610bad565b3480156104ac57600080fd5b506103936104bb36600461270e565b610c3e565b3480156104cc57600080fd5b5061030f610cad565b3480156104e157600080fd5b506102a26104f036600461270e565b610cb6565b34801561050157600080fd5b50610393610cd1565b34801561051657600080fd5b5061039361052536600461299f565b610d50565b34801561053657600080fd5b50610331610d90565b34801561054b57600080fd5b5061030f610d9f565b34801561056057600080fd5b506102a2610da8565b34801561057557600080fd5b5061039361058436600461293b565b610dae565b34801561059557600080fd5b50610331610dfd565b3480156105aa57600080fd5b5061030f610e0c565b3480156105bf57600080fd5b506103936105ce36600461282e565b610e15565b3480156105df57600080fd5b506102a2610ee9565b3480156105f457600080fd5b50610331610eef565b34801561060957600080fd5b506102e2610efe565b34801561061e57600080fd5b5061063261062d3660046127be565b610f5f565b6040516102af9493929190612e1f565b34801561064e57600080fd5b5061030f61065d366004612803565b61113f565b34801561066e57600080fd5b506103936111ad565b34801561068357600080fd5b5061030f61069236600461270e565b611222565b3480156106a357600080fd5b5061030f6106b2366004612803565b611237565b3480156106c357600080fd5b506103936106d236600461286f565b61124b565b3480156106e357600080fd5b506103316112d6565b3480156106f857600080fd5b50610393610707366004612901565b6112e5565b34801561071857600080fd5b5061039361072736600461296f565b611363565b34801561073857600080fd5b506102a2610747366004612746565b61139d565b34801561075857600080fd5b5061039361076736600461291e565b6113c8565b34801561077857600080fd5b5061039361078736600461270e565b611409565b34801561079857600080fd5b506102a26107a736600461296f565b6114bf565b60245481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061086261085b6117bc565b84846117c0565b5060015b92915050565b600f546001600160a01b031681565b60075490565b600061088e848484611874565b6109048461089a6117bc565b6108ff85604051806060016040528060268152602001612e6c602691396001600160a01b038a166000908152600260205260408120906108d86117bc565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611caa16565b6117c0565b5060019392505050565b6015546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612b7b565b60405180910390fd5b478061095f5760405162461bcd60e51b815260040161093890612ba3565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610995573d6000803e3d6000fd5b505050565b60225481565b6109a86117bc565b6000546001600160a01b039081169116146109d55760405162461bcd60e51b815260040161093890612d02565b6022819055601054610aa3906109f3906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926ec097ce7bc90715b34b9f1000000000926001600160a01b03918216926370a0823192610a3b9216906004016129c0565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8b9190810190612987565b9063ffffffff611cd616565b9063ffffffff611d1716565b601f5550565b60065460ff1690565b60205481565b6000610862610ac56117bc565b846108ff8560026000610ad66117bc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d5916565b6015546001600160a01b03163314610b365760405162461bcd60e51b815260040161093890612b7b565b6018805492151560ff19938416179055601380546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b6011546001600160a01b031681565b601854610100900460ff1681565b6010546001600160a01b031681565b6015546001600160a01b03163314610bd75760405162461bcd60e51b815260040161093890612b7b565b60005b82811015610c38578160046000868685818110610bf357fe5b9050602002016020610c08919081019061270e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bda565b50505050565b610c466117bc565b6000546001600160a01b03908116911614610c735760405162461bcd60e51b815260040161093890612d02565b601280546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b60235460ff1681565b6001600160a01b031660009081526001602052604090205490565b610cd96117bc565b6000546001600160a01b03908116911614610d065760405162461bcd60e51b815260040161093890612d02565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d586117bc565b6000546001600160a01b03908116911614610d855760405162461bcd60e51b815260040161093890612d02565b601a91909155601b55565b6014546001600160a01b031681565b60185460ff1681565b601f5481565b610db66117bc565b6000546001600160a01b03908116911614610de35760405162461bcd60e51b815260040161093890612d02565b6021805460ff191693151593909317909255602055602255565b6000546001600160a01b031690565b60215460ff1681565b6015546001600160a01b0316331480610e3857506013546001600160a01b031633145b80610e4d57506014546001600160a01b031633145b610e695760405162461bcd60e51b815260040161093890612b7b565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610e9790849086906004016129ee565b602060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c3891908101906128e5565b601e5481565b6012546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610fae57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610fc55750606492506000915081905082611134565b6001600160a01b03871660009081526005602052604090205460ff161515600114156110df57601b54601954606491609691603291600101908903101561101957506103209150610190905061012c6110ac565b60215460ff1615156001148015611050575061104d6064610a97602054600202606403601f54611cd690919063ffffffff16565b89105b15611067575060c8915061038490506101906110ac565b60215460ff161515600114801561109b57506110986064610a97602054606403601f54611cd690919063ffffffff16565b89105b156110ac575060c891506102589050815b8282826110cf816110c3858563ffffffff611d5916565b9063ffffffff611d5916565b9650965096509650505050611134565b601b546001016019548603101561111a5761032061019061012c61110d816110c3858563ffffffff611d5916565b9350935093509350611134565b60646096603261110d816110c3858563ffffffff611d5916565b945094509450949050565b600061086261114c6117bc565b846108ff85604051806060016040528060238152602001612e9260239139600260006111766117bc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611caa16565b6111b56117bc565b6000546001600160a01b039081169116146111e25760405162461bcd60e51b815260040161093890612d02565b60185462010000900460ff161561120b5760405162461bcd60e51b815260040161093890612b0b565b6018805462ff000019166201000017905543601955565b60056020526000908152604090205460ff1681565b60006108626112446117bc565b8484611874565b6015546001600160a01b031633146112755760405162461bcd60e51b815260040161093890612b7b565b60005b82811015610c3857816003600086868581811061129157fe5b90506020020160206112a6919081019061270e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611278565b6013546001600160a01b031681565b6015546001600160a01b0316331461130f5760405162461bcd60e51b815260040161093890612b7b565b6018805461ff0019166101009315159390930292909217909155601480546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b61136b6117bc565b6000546001600160a01b039081169116146113985760405162461bcd60e51b815260040161093890612d02565b601755565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6015546001600160a01b031633146113f25760405162461bcd60e51b815260040161093890612b7b565b6023805460ff191692151592909217909155602455565b6114116117bc565b6000546001600160a01b0390811691161461143e5760405162461bcd60e51b815260040161093890612d02565b6001600160a01b0381166114645760405162461bcd60e51b815260040161093890612a8e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546000908190611573906114dd906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926001600160a01b03908116926370a082319261151692909116906004016129c0565b60206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115669190810190612987565b869063ffffffff611cd616565b90506000600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c557600080fd5b505afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fd919081019061272a565b60115460405163e6a4390560e01b81526001600160a01b039283169263e6a43905926116459273dac17f958d2ee523a2206206994597c13d831ec792909116906004016129d4565b60206040518083038186803b15801561165d57600080fd5b505afa158015611671573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611695919081019061272a565b6011546040516370a0823160e01b81529192506117b4916001600160a01b03909116906370a08231906116cc9085906004016129c0565b60206040518083038186803b1580156116e457600080fd5b505afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061171c9190810190612987565b6040516370a0823160e01b8152610a979073dac17f958d2ee523a2206206994597c13d831ec7906370a08231906117579087906004016129c0565b60206040518083038186803b15801561176f57600080fd5b505afa158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117a79190810190612987565b859063ffffffff611cd616565b949350505050565b3390565b6001600160a01b0383166117e65760405162461bcd60e51b815260040161093890612c31565b6001600160a01b03821661180c5760405162461bcd60e51b815260040161093890612d63565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611867908590612d98565b60405180910390a3505050565b6001600160a01b03831661189a5760405162461bcd60e51b815260040161093890612b38565b600081116118ba5760405162461bcd60e51b815260040161093890612c73565b6001600160a01b03831660009081526003602052604090205460ff161580156118fb57506001600160a01b03821660009081526005602052604090205460ff165b801561190a575060255460ff16155b156119345760006119246064610a976063610a8b88610cb6565b905081811015611932578091505b505b4361193d6126eb565b60208082018490526001600160a01b03851660009081526005909152604090205460ff16151560011480156119e05750836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a657600080fd5b505afa1580156119ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119de9190810190612987565b155b15611a12576016546001600160a01b03868116911614611a125760405162461bcd60e51b815260040161093890612d37565b60255460ff16151560011480611a4557506001600160a01b03851660009081526003602052604090205460ff1615156001145b80611a6d57506001600160a01b03841660009081526003602052604090205460ff1615156001145b15611a8557611a7e85858584611d7e565b5050610995565b60185462010000900460ff161515600114611ab25760405162461bcd60e51b815260040161093890612a65565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611afe57611ae184611e71565b15611afe5760405162461bcd60e51b815260040161093890612bd8565b6001600160a01b03841660009081526005602052604090205460ff16151560011480611b4757506001600160a01b03851660009081526005602052604090205460ff1615156001145b15611b735760018152611b5984611e77565b15611b6657611b66611ed0565b611b73838284888861248a565b6001600160a01b03841660009081526005602052604090205460ff16158015611bb557506001600160a01b03841660009081526004602052604090205460ff16155b15611bec57601754611bce82602001516110c387610cb6565b1115611bec5760405162461bcd60e51b815260040161093890612c05565b611bf885858584611d7e565b60215460ff1615156001148015611c245750601e54602254611c2190429063ffffffff61259016565b10155b15611c3157611c316125d2565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611ca357836001600160a01b03167ff6f342132c7de5e5a1e99c8efae544c94731f3ff093f5c3c97c6973d9415cdfb84611c8c866114bf565b604051611c9a929190612e11565b60405180910390a25b5050505050565b60008184841115611cce5760405162461bcd60e51b81526004016109389190612a12565b505050900390565b600082611ce557506000610866565b82820282848281611cf257fe5b0414611d105760405162461bcd60e51b815260040161093890612cc1565b9392505050565b6000611d1083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612625565b600082820183811015611d105760405162461bcd60e51b815260040161093890612ad4565b6001600160a01b038416600090815260016020526040902054611da7908363ffffffff61259016565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611de39163ffffffff611d5916565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611e539190612d98565b60405180910390a38051151560011415610c3857610c38818561265c565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611ea7575060255460ff16155b8015611eb5575060235460ff165b80156108665750602454611ec830610cb6565b101592915050565b6025805460ff19166001179055602454306000908152600260209081526040808320600f546001600160a01b031684529091528120829055600e54600b549192611f2492610a97919063ffffffff611cd616565b6040805160028082526060808301845293945090916020830190803883390190505090503081600081518110611f5657fe5b6001600160a01b039283166020918202929092010152601154825191169082906001908110611f8157fe5b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81524792919091169063791ac94790611fcb908690600090879030904290600401612da1565b600060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050506000612012824761259090919063ffffffff16565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561204d573d6000803e3d6000fd5b50600b54612061908563ffffffff61259016565b600b5560408051600380825260808201909252606091602082018380388339019050509050308160008151811061209457fe5b6001600160a01b0392831660209182029290920101526011548251911690829060019081106120bf57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073dac17f958d2ee523a2206206994597c13d831ec78160028151811061210157fe5b6001600160a01b03909216602092830291909101909101526040516370a0823160e01b815260009073dac17f958d2ee523a2206206994597c13d831ec7906370a08231906121539030906004016129c0565b60206040518083038186803b15801561216b57600080fd5b505afa15801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121a39190810190612987565b600f546024549192506001600160a01b031690635c11d795906121cc908963ffffffff61259016565b60008530426040518663ffffffff1660e01b81526004016121f1959493929190612da1565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506122bf9150839073dac17f958d2ee523a2206206994597c13d831ec7906370a08231906122639030906004016129c0565b60206040518083038186803b15801561227b57600080fd5b505afa15801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122b39190810190612987565b9063ffffffff61259016565b905060006122de600e54610a97600c5485611cd690919063ffffffff16565b905060006122f2838363ffffffff61259016565b60185490915060ff161515600114801561230c5750600082115b156123a65760135460405163604657b160e01b81526001600160a01b039091169063604657b190612341908590600401612d98565b600060405180830381600087803b15801561235b57600080fd5b505af115801561236f573d6000803e3d6000fd5b505050506123a2612393600e54610a97600c54602454611cd690919063ffffffff16565b600c549063ffffffff61259016565b600c555b60185460ff61010090910416151560011480156123c35750600081115b1561245d5760145460405163604657b160e01b81526001600160a01b039091169063604657b1906123f8908490600401612d98565b600060405180830381600087803b15801561241257600080fd5b505af1158015612426573d6000803e3d6000fd5b5050505061245961244a600e54610a97600d54602454611cd690919063ffffffff16565b600d549063ffffffff61259016565b600d555b602454600e546124729163ffffffff61259016565b600e5550506025805460ff1916905550505050505050565b6010546000906124a6906109f3906001600160a01b0316610cb6565b9050601f548111156124b857601f8190555b6000806000806124ca8787878b610f5f565b9350935093509350601a54600101601954890310156124f6576127106113888b020460408a0152612503565b6127108a82020460408a01525b6040890151612519908b9063ffffffff61259016565b60208a01526040890151600e546125359163ffffffff611d5916565b600e55600b5461254b90612710868d0204611d59565b600b55600c5461256190612710858d0204611d59565b600c819055600b54600e5461258192916122b3919063ffffffff61259016565b600d5550505050505050505050565b6000611d1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611caa565b601e546022544291906125ec90839063ffffffff61259016565b1061262257601e546022546126069163ffffffff611d5916565b602255601054610aa3906109f3906001600160a01b0316610cb6565b50565b600081836126465760405162461bcd60e51b81526004016109389190612a12565b50600083858161265257fe5b0495945050505050565b6040820151156126e7576040808301513060009081526001602052919091205461268b9163ffffffff611d5916565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916126de91612d98565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b60006020828403121561271f578081fd5b8135611d1081612e48565b60006020828403121561273b578081fd5b8151611d1081612e48565b60008060408385031215612758578081fd5b823561276381612e48565b9150602083013561277381612e48565b809150509250929050565b600080600060608486031215612792578081fd5b833561279d81612e48565b925060208401356127ad81612e48565b929592945050506040919091013590565b600080600080608085870312156127d3578081fd5b84356127de81612e48565b935060208501356127ee81612e48565b93969395505050506040820135916060013590565b60008060408385031215612815578182fd5b823561282081612e48565b946020939093013593505050565b600080600060608486031215612842578283fd5b833561284d81612e48565b925060208401359150604084013561286481612e48565b809150509250925092565b600080600060408486031215612883578283fd5b833567ffffffffffffffff8082111561289a578485fd5b81860187601f8201126128ab578586fd5b80359250818311156128bb578586fd5b87602080850283010111156128ce578586fd5b602090810195509193505084013561286481612e5d565b6000602082840312156128f6578081fd5b8151611d1081612e5d565b60008060408385031215612913578182fd5b823561276381612e5d565b60008060408385031215612930578182fd5b823561282081612e5d565b60008060006060848603121561294f578283fd5b833561295a81612e5d565b95602085013595506040909401359392505050565b600060208284031215612980578081fd5b5035919050565b600060208284031215612998578081fd5b5051919050565b600080604083850312156129b1578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015612a3e57858101830151858201604001528201612a22565b81811115612a4f5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b6020808252818101527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612df05784516001600160a01b031683529383019391830191600101612dcb565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b038116811461262257600080fd5b801515811461262257600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c875913232a4071f5ef89a6dc9b6d98b504582dff91393b0b913ff5e0b697de364736f6c63430006020033

Deployed Bytecode Sourcemap

15413:18381:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18591:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18591:45:0;;;:::i;:::-;;;;;;;;;;;;;;;;15882:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15882:51:0;;;:::i;19787:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19787:83:0;;;:::i;:::-;;;;;;;;20618:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20618:161:0;;;;;;;;:::i;:::-;;;;;;;;17392:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17392:41:0;;;:::i;:::-;;;;;;;;20064:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20064:95:0;;;:::i;20787:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20787:311:0;;;;;;;;:::i;33223:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33223:276:0;;;;;;;;:::i;:::-;;18459:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18459:39:0;;;:::i;30720:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30720:243:0;;;;;;;;:::i;19973:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19973:83:0;;;:::i;:::-;;;;;;;;18384:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18384:30:0;;;:::i;21106:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21106:218:0;;;;;;;;:::i;31895:291::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31895:291:0;;;;;;;;:::i;17476:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17476:19:0;;;:::i;18051:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18051:27:0;;;:::i;17442:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17442:27:0;;;:::i;32960:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32960:255:0;;;;;;;;:::i;31725:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31725:162:0;;;;;;;;:::i;18554:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18554:30:0;;;:::i;20167:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20167:117:0;;;;;;;;:::i;5620:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5620:148:0;;;:::i;31556:161::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31556:161:0;;;;;;;;:::i;17694:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17694:26:0;;;:::i;18013:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18013:31:0;;;:::i;18351:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18351:26:0;;;:::i;30971:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30971:227:0;;;;;;;;:::i;4978:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4978:79:0;;;:::i;18421:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18421:31:0;;;:::i;33507:284::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33507:284:0;;;;;;;;:::i;18307:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18307:37:0;;;:::i;17577:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17577:73:0;;;:::i;19878:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19878:87:0;;;:::i;21989:1851::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21989:1851:0;;;;;;;;:::i;:::-;;;;;;;;;;;21332:267;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21332:267:0;;;;;;;;:::i;31206:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31206:196:0;;;:::i;15765:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15765:40:0;;;;;;;;:::i;20292:167::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20292:167:0;;;;;;;;:::i;32684:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32684:268:0;;;;;;;;:::i;17657:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17657:30:0;;;:::i;32194:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32194:259:0;;;;;;;;:::i;31410:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31410:138:0;;;;;;;;:::i;20467:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20467:143:0;;;;;;;;:::i;32461:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32461:215:0;;;;;;;;:::i;5923:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5923:244:0;;;;;;;;:::i;29534:430::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29534:430:0;;;;;;;;:::i;18591:45::-;;;;:::o;15882:51::-;;;;:::o;19787:83::-;19857:5;19850:12;;;;;;;;-1:-1:-1;;19850:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19824:13;;19850:12;;19857:5;;19850:12;;19857:5;19850:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19787:83;:::o;20618:161::-;20693:4;20710:39;20719:12;:10;:12::i;:::-;20733:7;20742:6;20710:8;:39::i;:::-;-1:-1:-1;20767:4:0;20618:161;;;;;:::o;17392:41::-;;;-1:-1:-1;;;;;17392:41:0;;:::o;20064:95::-;20144:7;;20064:95;:::o;20787:311::-;20885:4;20902:36;20912:6;20920:9;20931:6;20902:9;:36::i;:::-;20949:119;20958:6;20966:12;:10;:12::i;:::-;20980:87;21018:6;20980:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20980:19:0;;;;;;:11;:19;;;;;;21000:12;:10;:12::i;:::-;-1:-1:-1;;;;;20980:33:0;;;;;;;;;;;;-1:-1:-1;20980:33:0;;;:87;;:37;:87;:::i;:::-;20949:8;:119::i;:::-;-1:-1:-1;21086:4:0;20787:311;;;;;:::o;33223:276::-;33285:9;;-1:-1:-1;;;;;33285:9:0;33306:10;33285:32;33277:59;;;;-1:-1:-1;;;33277:59:0;;;;;;;;;;;;;;;;;33362:21;33402:11;33394:56;;;;-1:-1:-1;;;33394:56:0;;;;;;;;;33461:30;;-1:-1:-1;;;;;33461:21:0;;;:30;;;;;33483:7;;33461:30;;;;33483:7;33461:21;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33461:30:0;33223:276;;:::o;18459:39::-;;;;:::o;30720:243::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;30797:11:::1;:26:::0;;;30939:13:::1;::::0;30848:107:::1;::::0;30921:33:::1;::::0;-1:-1:-1;;;;;30939:13:0::1;30921:9;:33::i;:::-;30856:4;::::0;30880:13:::1;::::0;30849:46:::1;::::0;-1:-1:-1;;;30849:46:0;;30848:68:::1;::::0;18292:8:::1;::::0;-1:-1:-1;;;;;30856:4:0;;::::1;::::0;30849:22:::1;::::0;:46:::1;::::0;30880:13:::1;::::0;30849:46:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;30849:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30849:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30849:46:0;;;;;;;;;30848:52:::0;:68:::1;:52;:68;:::i;:::-;:72:::0;:107:::1;:72;:107;:::i;:::-;30834:11;:121:::0;-1:-1:-1;30720:243:0:o;19973:83::-;20039:9;;;;19973:83;:::o;18384:30::-;;;;:::o;21106:218::-;21194:4;21211:83;21220:12;:10;:12::i;:::-;21234:7;21243:50;21282:10;21243:11;:25;21255:12;:10;:12::i;:::-;-1:-1:-1;;;;;21243:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21243:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;31895:291::-;31990:9;;-1:-1:-1;;;;;31990:9:0;32011:10;31990:32;31982:59;;;;-1:-1:-1;;;31982:59:0;;;;;;;;;32052:12;:28;;;;;-1:-1:-1;;32052:28:0;;;;;;32091:15;:34;;-1:-1:-1;;;;;32091:34:0;;;-1:-1:-1;;;;;;32091:34:0;;;;;;;;32155:15;32052:12;32136:35;;;:18;:35;;;;;:42;;;;;32052:28;32136:42;;;31895:291::o;17476:19::-;;;-1:-1:-1;;;;;17476:19:0;;:::o;18051:27::-;;;;;;;;;:::o;17442:::-;;;-1:-1:-1;;;;;17442:27:0;;:::o;32960:255::-;33050:9;;-1:-1:-1;;;;;33050:9:0;33071:10;33050:32;33042:59;;;;-1:-1:-1;;;33042:59:0;;;;;;;;;33117:6;33112:96;33129:16;;;33112:96;;;33187:9;33167:7;:17;33175:5;;33181:1;33175:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33167:17:0;;;;;;;;;;;;-1:-1:-1;33167:17:0;:29;;-1:-1:-1;;33167:29:0;;;;;;;;;;-1:-1:-1;33147:3:0;33112:96;;;;32960:255;;;:::o;31725:162::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;31798:13:::1;:30:::0;;-1:-1:-1;;;;;;31798:30:0::1;-1:-1:-1::0;;;;;31798:30:0;;::::1;;::::0;;;;31858:13:::1;-1:-1:-1::0;31839:33:0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;31839:40:0::1;-1:-1:-1::0;31839:40:0::1;::::0;;31725:162::o;18554:30::-;;;;;;:::o;20167:117::-;-1:-1:-1;;;;;20260:16:0;20233:7;20260:16;;;:7;:16;;;;;;;20167:117::o;5620:148::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;5727:1:::1;5711:6:::0;;5690:40:::1;::::0;-1:-1:-1;;;;;5711:6:0;;::::1;::::0;5690:40:::1;::::0;5727:1;;5690:40:::1;5758:1;5741:19:::0;;-1:-1:-1;;;;;;5741:19:0::1;::::0;;5620:148::o;31556:161::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;31648:10:::1;:24:::0;;;;31683:11:::1;:26:::0;31556:161::o;17694:26::-;;;-1:-1:-1;;;;;17694:26:0;;:::o;18013:31::-;;;;;;:::o;18351:26::-;;;;:::o;30971:227::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;31088:12:::1;:28:::0;;-1:-1:-1;;31088:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;31127:11:::1;:26:::0;31164:11:::1;:26:::0;30971:227::o;4978:79::-;5016:7;5043:6;-1:-1:-1;;;;;5043:6:0;4978:79;:::o;18421:31::-;;;;;;:::o;33507:284::-;33604:9;;-1:-1:-1;;;;;33604:9:0;33625:10;33604:32;;:74;;-1:-1:-1;33640:15:0;;-1:-1:-1;;;;;33640:15:0;33667:10;33640:38;33604:74;:112;;;-1:-1:-1;33682:11:0;;-1:-1:-1;;;;;33682:11:0;33705:10;33682:34;33604:112;33596:139;;;;-1:-1:-1;;;33596:139:0;;;;;;;;;33746:37;;-1:-1:-1;;;33746:37:0;;-1:-1:-1;;;;;33746:23:0;;;;;:37;;33770:3;;33775:7;;33746:37;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33746:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33746:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33746:37:0;;;;;;;;18307;;;;:::o;17577:73::-;;;-1:-1:-1;;;;;17577:73:0;;:::o;19878:87::-;19950:7;19943:14;;;;;;;;-1:-1:-1;;19943:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19917:13;;19943:14;;19950:7;;19943:14;;19950:7;19943:14;;;;;;;;;;;;;;;;;;;;;;;;21989:1851;-1:-1:-1;;;;;22138:11:0;;22091:7;22138:11;;;:7;:11;;;;;;22091:7;;;;;;22138:11;;:19;;:11;:19;;:44;;-1:-1:-1;;;;;;22161:13:0;;;;;;:7;:13;;;;;;;;:21;;:13;:21;22138:44;22135:98;;;-1:-1:-1;22206:3:0;;-1:-1:-1;22211:1:0;;-1:-1:-1;22211:1:0;;-1:-1:-1;22206:3:0;22198:23;;22135:98;-1:-1:-1;;;;;22247:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;22243:1590;;;22480:11;;22464:13;;16655:3;;16700;;16741:2;;22494:1;22480:15;22449:28;;;:46;22445:836;;;-1:-1:-1;16902:3:0;;-1:-1:-1;17070:3:0;;-1:-1:-1;17226:3:0;22445:836;;;22702:12;;;;:20;;:12;:20;:82;;;;;22737:47;22780:3;22737:38;22759:11;;22773:1;22759:15;22753:3;:21;22737:11;;:15;;:38;;;;:::i;:47::-;22726:8;:58;22702:82;22699:582;;;-1:-1:-1;16848:3:0;;-1:-1:-1;17014:3:0;;-1:-1:-1;17174:3:0;22699:582;;;23006:12;;;;:20;;:12;:20;:78;;;;;23041:43;23080:3;23041:34;23063:11;;23057:3;:17;23041:11;;:15;;:34;;;;:::i;:43::-;23030:8;:54;23006:78;23003:278;;;-1:-1:-1;16794:3:0;;-1:-1:-1;16958:3:0;;-1:-1:-1;16794:3:0;23003:278;23303:14;23318:16;23335:12;23348:54;23335:12;23348:36;23303:14;23318:16;23348:36;:18;:36;:::i;:::-;:40;:54;:40;:54;:::i;:::-;23295:108;;;;;;;;;;;;;22243:1590;23471:11;;23485:1;23471:15;23455:13;;23440:12;:28;:46;23436:386;;;16294:3;16459;16610;23587:81;16610:3;23587:54;16294:3;16459;23587:54;:27;:54;:::i;:81::-;23507:162;;;;;;;;;;23436:386;16052:3;16096;16136:2;23757:48;16136:2;23757:32;16052:3;16096;23757:32;:16;:32;:::i;23436:386::-;21989:1851;;;;;;;;;:::o;21332:267::-;21425:4;21442:127;21451:12;:10;:12::i;:::-;21465:7;21474:94;21513:15;21474:94;;;;;;;;;;;;;;;;;:11;:25;21486:12;:10;:12::i;:::-;-1:-1:-1;;;;;21474:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21474:25:0;;;:34;;;;;;;;;;;:94;;:38;:94;:::i;31206:196::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;31274:15:::1;::::0;;;::::1;;;:24;31266:56;;;;-1:-1:-1::0;;;31266:56:0::1;;;;;;;;;31333:15;:22:::0;;-1:-1:-1;;31333:22:0::1;::::0;::::1;::::0;;31382:12:::1;31366:13;:28:::0;31206:196::o;15765:40::-;;;;;;;;;;;;;;;:::o;20292:167::-;20370:4;20387:42;20397:12;:10;:12::i;:::-;20411:9;20422:6;20387:9;:42::i;32684:268::-;32775:9;;-1:-1:-1;;;;;32775:9:0;32796:10;32775:32;32767:59;;;;-1:-1:-1;;;32767:59:0;;;;;;;;;32842:6;32837:108;32854:16;;;32837:108;;;32923:10;32892:18;:28;32911:5;;32917:1;32911:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32892:28:0;;;;;;;;;;;;-1:-1:-1;32892:28:0;:41;;-1:-1:-1;;32892:41:0;;;;;;;;;;-1:-1:-1;32872:3:0;32837:108;;17657:30;;;-1:-1:-1;;;;;17657:30:0;;:::o;32194:259::-;32277:9;;-1:-1:-1;;;;;32277:9:0;32298:10;32277:32;32269:59;;;;-1:-1:-1;;;32269:59:0;;;;;;;;;32339:8;:20;;-1:-1:-1;;32339:20:0;;;;;;;;;;;;;;;;32370:11;:26;;-1:-1:-1;;;;;;32370:26:0;-1:-1:-1;;;;;32370:26:0;;;;;;;;32426:11;-1:-1:-1;32407:31:0;;;:18;:31;;;;;:38;;-1:-1:-1;;32407:38:0;-1:-1:-1;32407:38:0;;;32194:259::o;31410:138::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;31500:18:::1;:40:::0;31410:138::o;20467:143::-;-1:-1:-1;;;;;20575:18:0;;;20548:7;20575:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20467:143::o;32461:215::-;32550:9;;-1:-1:-1;;;;;32550:9:0;32571:10;32550:32;32542:59;;;;-1:-1:-1;;;32542:59:0;;;;;;;;;32612:11;:22;;-1:-1:-1;;32612:22:0;;;;;;;;;;;32645:13;:23;32461:215::o;5923:244::-;5200:12;:10;:12::i;:::-;5190:6;;-1:-1:-1;;;;;5190:6:0;;;:22;;;5182:67;;;;-1:-1:-1;;;5182:67:0;;;;;;;;;-1:-1:-1;;;;;6012:22:0;::::1;6004:73;;;;-1:-1:-1::0;;;6004:73:0::1;;;;;;;;;6114:6;::::0;;6093:38:::1;::::0;-1:-1:-1;;;;;6093:38:0;;::::1;::::0;6114:6;::::1;::::0;6093:38:::1;::::0;::::1;6142:6;:17:::0;;-1:-1:-1;;;;;;6142:17:0::1;-1:-1:-1::0;;;;;6142:17:0;;;::::1;::::0;;;::::1;::::0;;5923:244::o;29534:430::-;29722:13;;29590:18;;;;29641:97;;29704:33;;-1:-1:-1;;;;;29722:13:0;29704:9;:33::i;:::-;29659:4;;29683:13;;29652:46;;-1:-1:-1;;;29652:46:0;;29641:58;;-1:-1:-1;;;;;29659:4:0;;;;29652:22;;:46;;29683:13;;;;29652:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29652:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29652:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29652:46:0;;;;;;;;;29641:6;;:58;:10;:58;:::i;:97::-;29621:117;;29749:21;29791:15;;;;;;;;;-1:-1:-1;;;;;29791:15:0;-1:-1:-1;;;;;29791:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29791:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29791:25:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29791:25:0;;;;;;;;;29832:4;;29773:64;;-1:-1:-1;;;29773:64:0;;-1:-1:-1;;;;;29773:52:0;;;;;;:64;;17528:42;;29832:4;;;;29773:64;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29773:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29773:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29773:64:0;;;;;;;;;29925:4;;29918:37;;-1:-1:-1;;;29918:37:0;;29749:88;;-1:-1:-1;29861:95:0;;-1:-1:-1;;;;;29925:4:0;;;;29918:22;;:37;;29749:88;;29918:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29918:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29918:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29918:37:0;;;;;;;;;29875;;-1:-1:-1;;;29875:37:0;;29861:52;;17528:42;;29875:22;;:37;;29898:13;;29875:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29875:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29875:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29875:37:0;;;;;;;;;29861:9;;:52;:13;:52;:::i;:95::-;29848:108;29534:430;-1:-1:-1;;;;29534:430:0:o;3589:106::-;3677:10;3589:106;:::o;21648:333::-;-1:-1:-1;;;;;21741:19:0;;21733:66;;;;-1:-1:-1;;;21733:66:0;;;;;;;;;-1:-1:-1;;;;;21818:21:0;;21810:66;;;;-1:-1:-1;;;21810:66:0;;;;;;;;;-1:-1:-1;;;;;21889:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;21941:32;;;;;21919:6;;21941:32;;;;;;;;;;21648:333;;;:::o;27714:1812::-;-1:-1:-1;;;;;27836:18:0;;27828:66;;;;-1:-1:-1;;;27828:66:0;;;;;;;;;27922:1;27913:6;:10;27905:69;;;;-1:-1:-1;;;27905:69:0;;;;;;;;;-1:-1:-1;;;;;27992:24:0;;;;;;:18;:24;;;;;;;;27991:25;:41;;;;-1:-1:-1;;;;;;28020:12:0;;;;;;:8;:12;;;;;;;;27991:41;:52;;;;-1:-1:-1;28037:6:0;;;;28036:7;27991:52;27987:234;;;28060:19;28082:32;28110:3;28082:23;28102:2;28082:15;28092:4;28082:9;:15::i;:32::-;28060:54;;28147:6;28133:11;:20;28129:81;;;28183:11;28174:20;;28129:81;27987:234;;28256:12;28279:18;;:::i;:::-;28308:21;;;;:30;;;-1:-1:-1;;;;;28354:12:0;;;;;;:8;:12;;;;;;;;;:20;;:12;:20;:53;;;;;28385:2;-1:-1:-1;;;;;28378:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28378:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28378:24:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28378:24:0;;;;;;;;;:29;28354:53;28351:137;;;28439:15;;-1:-1:-1;;;;;28431:23:0;;;28439:15;;28431:23;28423:53;;;;-1:-1:-1;;;28423:53:0;;;;;;;;;28503:6;;;;:14;;:6;:14;;:50;;-1:-1:-1;;;;;;28521:24:0;;;;;;:18;:24;;;;;;;;:32;;:24;:32;28503:50;:84;;;-1:-1:-1;;;;;;28557:22:0;;;;;;:18;:22;;;;;;;;:30;;:22;:30;28503:84;28500:159;;;28610:36;28625:4;28630:2;28633:6;28640:5;28610:14;:36::i;:::-;28603:43;;;;28500:159;28679:15;;;;;;;:23;;28698:4;28679:23;28671:51;;;;-1:-1:-1;;;28671:51:0;;;;;;;;;-1:-1:-1;;;;;28739:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;28735:110;;;28786:14;28797:2;28786:10;:14::i;:::-;:23;28778:55;;;;-1:-1:-1;;;28778:55:0;;;;;;;;;-1:-1:-1;;;;;28860:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;;:46;;-1:-1:-1;;;;;;28884:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;28860:46;28857:214;;;28938:4;28922:20;;28962:18;28977:2;28962:14;:18::i;:::-;28959:35;;;28982:10;:8;:10::i;:::-;29010:49;29021:6;29029:5;29036:12;29050:4;29056:2;29010:10;:49::i;:::-;-1:-1:-1;;;;;29088:12:0;;;;;;:8;:12;;;;;;;;29087:13;:37;;;;-1:-1:-1;;;;;;29104:11:0;;;;;;:7;:11;;;;;;;;:20;29087:37;29083:163;;;29193:18;;29149:40;29167:5;:21;;;29149:13;29159:2;29149:9;:13::i;:40::-;:62;;29141:93;;;;-1:-1:-1;;;29141:93:0;;;;;;;;;29266:36;29281:4;29286:2;29289:6;29296:5;29266:14;:36::i;:::-;29318:12;;;;:20;;:12;:20;:68;;;;-1:-1:-1;29378:8:0;;29362:11;;29342:32;;:15;;:32;:19;:32;:::i;:::-;:44;;29318:68;29315:93;;;29388:18;:16;:18::i;:::-;-1:-1:-1;;;;;29424:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29420:99;;;29477:2;-1:-1:-1;;;;;29468:39:0;;29481:6;29489:17;29499:6;29489:9;:17::i;:::-;29468:39;;;;;;;;;;;;;;;;29420:99;27714:1812;;;;;:::o;7920:192::-;8006:7;8042:12;8034:6;;;;8026:29;;;;-1:-1:-1;;;8026:29:0;;;;;;;;;;-1:-1:-1;;;8078:5:0;;;7920:192::o;8363:471::-;8421:7;8666:6;8662:47;;-1:-1:-1;8696:1:0;8689:8;;8662:47;8733:5;;;8737:1;8733;:5;:1;8757:5;;;;;:10;8749:56;;;;-1:-1:-1;;;8749:56:0;;;;;;;;;8825:1;8363:471;-1:-1:-1;;;8363:471:0:o;9302:132::-;9360:7;9387:39;9391:1;9394;9387:39;;;;;;;;;;;;;;;;;:3;:39::i;7033:181::-;7091:7;7123:5;;;7147:6;;;;7139:46;;;;-1:-1:-1;;;7139:46:0;;;;;;;;29972:396;-1:-1:-1;;;;;30105:15:0;;;;;;:7;:15;;;;;;:28;;30125:7;30105:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;30087:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30188:21;;;30165:18;;;;;;;;;;:45;;;:22;:45;:::i;:::-;30144:7;:18;30152:9;-1:-1:-1;;;;;30144:18:0;-1:-1:-1;;;;;30144:18:0;;;;;;;;;;;;:66;;;;30243:9;-1:-1:-1;;;;;30226:50:0;30235:6;-1:-1:-1;;;;;30226:50:0;;30254:5;:21;;;30226:50;;;;;;;;;;;;;;;30290:13;;:21;;30307:4;30290:21;30287:74;;;30327:22;30336:5;30342:6;30327:8;:22::i;25262:196::-;25394:20;25442:8;;;25262:196::o;25466:210::-;-1:-1:-1;;;;;25549:12:0;;25525:4;25549:12;;;:8;:12;;;;;;;;:20;;:12;:20;:41;;;;-1:-1:-1;25584:6:0;;;;25583:7;25549:41;:65;;;;-1:-1:-1;25603:11:0;;;;25549:65;:119;;;;;25655:13;;25627:24;25645:4;25627:9;:24::i;:::-;:41;;25542:126;25466:210;-1:-1:-1;;25466:210:0:o;25684:2022::-;18683:6;:13;;-1:-1:-1;;18683:13:0;18692:4;18683:13;;;25788::::1;::::0;25753:4:::1;18683:6:::0;25733:26;;;:11:::1;:26;::::0;;;;;;;25768:15:::1;::::0;-1:-1:-1;;;;;25768:15:0::1;25733:52:::0;;;;;;;:68;;;25875:11:::1;::::0;25857:12:::1;::::0;18683:6;;25839:48:::1;::::0;:31:::1;::::0;25788:13;25839:31:::1;:17;:31;:::i;:48::-;25928:16;::::0;;25942:1:::1;25928:16:::0;;;25900:25:::1;25928:16:::0;;::::1;::::0;;25814:73;;-1:-1:-1;25928:16:0;;::::1;::::0;::::1;::::0;;105:10:-1::1;25928:16:0::0;88:34:-1::1;136:17;::::0;-1:-1;25928:16:0::1;25900:44;;25977:4;25955:8;25964:1;25955:11;;;;;;;;-1:-1:-1::0;;;;;25955:27:0;;::::1;:11;::::0;;::::1;::::0;;;;;:27;26007:4:::1;::::0;25993:11;;26007:4;::::1;::::0;25993:8;;26007:4;;25993:11;::::1;;;;;-1:-1:-1::0;;;;;25993:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26080:15:::1;::::0;:203:::1;::::0;-1:-1:-1;;;26080:203:0;;26046:21:::1;::::0;26080:15;;;::::1;::::0;:66:::1;::::0;:203:::1;::::0;26161:14;;26022:21:::1;::::0;26206:8;;26237:4:::1;::::0;26257:15:::1;::::0;26080:203:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26080:203:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26080:203:0;;;;26296:20;26319:40;26345:13;26319:21;:25;;:40;;;;:::i;:::-;26378:13;::::0;26370:45:::1;::::0;26296:63;;-1:-1:-1;;;;;;26378:13:0::1;::::0;26370:45;::::1;;;::::0;26296:63;;26378:13:::1;26370:45:::0;26378:13;26370:45;26296:63;26378:13;26370:45;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;26441:12:0::1;::::0;:32:::1;::::0;26458:14;26441:32:::1;:16;:32;:::i;:::-;26426:12;:47:::0;26522:16:::1;::::0;;26536:1:::1;26522:16:::0;;;;;::::1;::::0;;;26494:25:::1;::::0;26522:16:::1;::::0;::::1;26494:25:::0;;105:10:-1::1;26522:16:0::0;88:34:-1::1;136:17;::::0;-1:-1;26522:16:0::1;26494:44;;26571:4;26549:8;26558:1;26549:11;;;;;;;;-1:-1:-1::0;;;;;26549:27:0;;::::1;:11;::::0;;::::1;::::0;;;;;:27;26601:4:::1;::::0;26587:11;;26601:4;::::1;::::0;26587:8;;26601:4;;26587:11;::::1;;;;;;;;;;:18;-1:-1:-1::0;;;;;26587:18:0::1;;;-1:-1:-1::0;;;;;26587:18:0::1;;;::::0;::::1;17528:42;26616:8;26625:1;26616:11;;;;;;;;-1:-1:-1::0;;;;;26616:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;;;:18;26673:37:::1;::::0;-1:-1:-1;;;26673:37:0;;26645:25:::1;::::0;17528:42:::1;::::0;26673:22:::1;::::0;:37:::1;::::0;26704:4:::1;::::0;26673:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26673:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26673:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26673:37:0;;;;;;;;;26723:15;::::0;26807:13:::1;::::0;26645:65;;-1:-1:-1;;;;;;26723:15:0::1;::::0;:69:::1;::::0;26807:33:::1;::::0;26825:14;26807:33:::1;:17;:33;:::i;:::-;26855:1;26871:8;26902:4;26922:15;26723:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26723:225:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;26982:37:0::1;::::0;-1:-1:-1;;;26982:37:0;;26961:18:::1;::::0;-1:-1:-1;26982:60:0::1;::::0;-1:-1:-1;27024:17:0;;17528:42:::1;::::0;26982:22:::1;::::0;:37:::1;::::0;27013:4:::1;::::0;26982:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26982:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26982:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26982:37:0;;;;;;;;;:41:::0;:60:::1;:41;:60;:::i;:::-;26961:81;;27053:22;27078:47;27113:11;;27078:30;27093:14;;27078:10;:14;;:30;;;;:::i;:47::-;27053:72:::0;-1:-1:-1;27136:18:0::1;27157:30;:10:::0;27053:72;27157:30:::1;:14;:30;:::i;:::-;27204:12;::::0;27136:51;;-1:-1:-1;27204:12:0::1;;:20;;:12:::0;:20:::1;:42:::0;::::1;;;;27245:1;27228:14;:18;27204:42;27200:233;;;27273:15;::::0;27263:56:::1;::::0;-1:-1:-1;;;27263:56:0;;-1:-1:-1;;;;;27273:15:0;;::::1;::::0;27263:40:::1;::::0;:56:::1;::::0;27304:14;;27263:56:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27263:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27263:56:0;;;;27351:70;27370:50;27408:11;;27370:33;27388:14;;27370:13;;:17;;:33;;;;:::i;:50::-;27351:14;::::0;;:70:::1;:18;:70;:::i;:::-;27334:14;:87:::0;27200:233:::1;27447:8;::::0;::::1;;::::0;;::::1;;:16;;:8;:16;:34:::0;::::1;;;;27480:1;27467:10;:14;27447:34;27443:201;;;27504:11;::::0;27498:44:::1;::::0;-1:-1:-1;;;27498:44:0;;-1:-1:-1;;;;;27504:11:0;;::::1;::::0;27498:32:::1;::::0;:44:::1;::::0;27531:10;;27498:44:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27498:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27498:44:0;;;;27570:62;27585:46;27619:11;;27585:29;27603:10;;27585:13;;:17;;:29;;;;:::i;:46::-;27570:10;::::0;;:62:::1;:14;:62;:::i;:::-;27557:10;:75:::0;27443:201:::1;27684:13;::::0;27668:11:::1;::::0;:30:::1;::::0;::::1;:15;:30;:::i;:::-;27654:11;:44:::0;-1:-1:-1;;18701:6:0;:14;;-1:-1:-1;;18701:14:0;;;-1:-1:-1;;;;;;;25684:2022:0:o;23961:1024::-;24193:13;;24083:16;;24102:107;;24175:33;;-1:-1:-1;;;;;24193:13:0;24175:9;:33::i;24102:107::-;24083:126;;24235:11;;24224:8;:22;24220:77;;;24263:11;:22;;;24220:77;24308:17;24326:19;24346:15;24362:16;24382:40;24389:4;24395:2;24399:8;24409:12;24382:6;:40::i;:::-;24307:115;;;;;;;;24468:10;;24481:1;24468:14;24452:13;;24437:12;:28;:45;24433:197;;;17265:5;24526:4;24517:13;;:23;24499:15;;;:41;24433:197;;;17265:5;24591:17;;;:27;24573:15;;;:45;24433:197;24675:15;;;;24664:27;;:6;;:27;:10;:27;:::i;:::-;24640:21;;;:51;24734:15;;;;24718:11;;:32;;;:15;:32;:::i;:::-;24704:11;:46;24776:12;;:48;;17265:5;24793:20;;;:30;24776:16;:48::i;:::-;24761:12;:63;24852:14;;:52;;17265:5;24871:22;;;:32;24852:18;:52::i;:::-;24835:14;:69;;;24944:12;;24928:11;;:49;;24835:69;24928:29;;:11;:29;:15;:29;:::i;:49::-;24915:10;:62;-1:-1:-1;;;;;;;;;;23961:1024:0:o;7489:136::-;7547:7;7574:43;7578:1;7581;7574:43;;;;;;;;;;;;;;;;;:3;:43::i;30376:336::-;30493:8;;30477:11;;30438:15;;30493:8;30468:21;;30438:15;;30468:21;:8;:21;:::i;:::-;:33;30464:241;;30548:8;;30532:11;;:25;;;:15;:25;:::i;:::-;30518:11;:39;30677:13;;30586:107;;30659:33;;-1:-1:-1;;;;;30677:13:0;30659:9;:33::i;30464:241::-;30376:336;:::o;9922:345::-;10008:7;10110:12;10103:5;10095:28;;;;-1:-1:-1;;;10095:28:0;;;;;;;;;;;10134:9;10150:1;10146;:5;;;;;;;9922:345;-1:-1:-1;;;;;9922:345:0:o;24993:261::-;25066:15;;;;:19;25063:184;;25153:15;;;;;25142:4;25126:22;;;;:7;:22;;;;;;;:43;;;:26;:43;:::i;:::-;25117:4;25101:22;;;;:7;:22;;;;;;;:68;;;;25219:15;;;;25189:46;;25117:4;;-1:-1:-1;;;;;25189:46:0;;;;;;;;;;;;;;;;;25063:184;24993:261;;:::o;15413:18381::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1205:241:-1:-;;1309:2;1297:9;1288:7;1284:23;1280:32;1277:2;;;-1:-1;;1315:12;1277:2;85:6;72:20;97:33;124:5;97:33;;1453:263;;1568:2;1556:9;1547:7;1543:23;1539:32;1536:2;;;-1:-1;;1574:12;1536:2;226:6;220:13;238:33;265:5;238:33;;1723:366;;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;-1:-1;;1850:12;1812:2;85:6;72:20;97:33;124:5;97:33;;;1902:63;-1:-1;2002:2;2041:22;;72:20;97:33;72:20;97:33;;;2010:63;;;;1806:283;;;;;;2096:491;;;;2234:2;2222:9;2213:7;2209:23;2205:32;2202:2;;;-1:-1;;2240:12;2202:2;85:6;72:20;97:33;124:5;97:33;;;2292:63;-1:-1;2392:2;2431:22;;72:20;97:33;72:20;97:33;;;2196:391;;2400:63;;-1:-1;;;2500:2;2539:22;;;;994:20;;2196:391;2594:617;;;;;2749:3;2737:9;2728:7;2724:23;2720:33;2717:2;;;-1:-1;;2756:12;2717:2;85:6;72:20;97:33;124:5;97:33;;;2808:63;-1:-1;2908:2;2947:22;;72:20;97:33;72:20;97:33;;;2711:500;;2916:63;;-1:-1;;;;3016:2;3055:22;;994:20;;3124:2;3163:22;994:20;;2711:500;3218:366;;;3339:2;3327:9;3318:7;3314:23;3310:32;3307:2;;;-1:-1;;3345:12;3307:2;85:6;72:20;97:33;124:5;97:33;;;3397:63;3497:2;3536:22;;;;994:20;;-1:-1;;;3301:283;3591:491;;;;3729:2;3717:9;3708:7;3704:23;3700:32;3697:2;;;-1:-1;;3735:12;3697:2;85:6;72:20;97:33;124:5;97:33;;;3787:63;-1:-1;3887:2;3926:22;;994:20;;-1:-1;3995:2;4034:22;;72:20;97:33;72:20;97:33;;;4003:63;;;;3691:391;;;;;;4089:516;;;;4242:2;4230:9;4221:7;4217:23;4213:32;4210:2;;;-1:-1;;4248:12;4210:2;4306:17;4293:31;4344:18;;4336:6;4333:30;4330:2;;;-1:-1;;4366:12;4330:2;4467:6;4456:9;4452:22;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;482:6;469:20;459:30;;4344:18;501:6;498:30;495:2;;;-1:-1;;531:12;495:2;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;-1:-1;;633:12;586:2;575:4;563:17;;;;-1:-1;4394:90;;-1:-1;;4557:22;;725:20;750:30;725:20;750:30;;4612:257;;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;-1:-1;;4730:12;4692:2;873:6;867:13;885:30;909:5;885:30;;4876:360;;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;-1:-1;;5000:12;4962:2;738:6;725:20;750:30;774:5;750:30;;5243:360;;;5361:2;5349:9;5340:7;5336:23;5332:32;5329:2;;;-1:-1;;5367:12;5329:2;738:6;725:20;750:30;774:5;750:30;;5610:485;;;;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;-1:-1;;5751:12;5713:2;738:6;725:20;750:30;774:5;750:30;;;5803:60;5900:2;5939:22;;994:20;;-1:-1;6008:2;6047:22;;;994:20;;5707:388;-1:-1;;;5707:388;6102:241;;6206:2;6194:9;6185:7;6181:23;6177:32;6174:2;;;-1:-1;;6212:12;6174:2;-1:-1;994:20;;6168:175;-1:-1;6168:175;6350:263;;6465:2;6453:9;6444:7;6440:23;6436:32;6433:2;;;-1:-1;;6471:12;6433:2;-1:-1;1142:13;;6427:186;-1:-1;6427:186;6620:366;;;6741:2;6729:9;6720:7;6716:23;6712:32;6709:2;;;-1:-1;;6747:12;6709:2;-1:-1;;994:20;;;6899:2;6938:22;;;994:20;;-1:-1;6703:283;14707:213;-1:-1;;;;;26389:54;;;;7385:37;;14825:2;14810:18;;14796:124;15163:324;-1:-1;;;;;26389:54;;;7385:37;;26389:54;;15473:2;15458:18;;7385:37;15309:2;15294:18;;15280:207;15494:324;-1:-1;;;;;26389:54;;;;7385:37;;15804:2;15789:18;;14544:37;15640:2;15625:18;;15611:207;15825:201;26301:13;;26294:21;8348:34;;15937:2;15922:18;;15908:118;16551:301;;16689:2;;16710:17;16703:47;9032:5;25493:12;25909:6;16689:2;16678:9;16674:18;25897:19;-1:-1;27800:101;27814:6;27811:1;27808:13;27800:101;;;27881:11;;;;;27875:18;27862:11;;;25937:14;27862:11;27855:39;27829:10;;27800:101;;;27916:6;27913:1;27910:13;27907:2;;;-1:-1;25937:14;27972:6;16678:9;27963:16;;27956:27;27907:2;-1:-1;28088:7;28072:14;-1:-1;;28068:28;9190:39;;;;25937:14;9190:39;;16660:192;-1:-1;;;16660:192;16859:407;17050:2;17064:47;;;9466:2;17035:18;;;25897:19;-1:-1;;;25937:14;;;9482:38;9539:12;;;17021:245;17273:407;17464:2;17478:47;;;9790:2;17449:18;;;25897:19;9826:34;25937:14;;;9806:55;-1:-1;;;9881:12;;;9874:30;9923:12;;;17435:245;17687:407;17878:2;17892:47;;;10174:2;17863:18;;;25897:19;10210:29;25937:14;;;10190:50;10259:12;;;17849:245;18101:407;18292:2;18306:47;;;10510:2;18277:18;;;25897:19;-1:-1;;;25937:14;;;10526:42;10587:12;;;18263:245;18515:407;18706:2;18720:47;;;10838:2;18691:18;;;25897:19;10874:34;25937:14;;;10854:55;-1:-1;;;10929:12;;;10922:27;10968:12;;;18677:245;18929:407;19120:2;19134:47;;;11219:2;19105:18;;;25897:19;-1:-1;;;25937:14;;;11235:37;11291:12;;;19091:245;19343:407;19534:2;19548:47;;;19519:18;;;25897:19;11578:34;25937:14;;;11558:55;11632:12;;;19505:245;19757:407;19948:2;19962:47;;;11883:2;19933:18;;;25897:19;-1:-1;;;25937:14;;;11899:42;11960:12;;;19919:245;20171:407;20362:2;20376:47;;;12211:2;20347:18;;;25897:19;-1:-1;;;25937:14;;;12227:41;12287:12;;;20333:245;20585:407;20776:2;20790:47;;;12538:2;20761:18;;;25897:19;12574:34;25937:14;;;12554:55;-1:-1;;;12629:12;;;12622:26;12667:12;;;20747:245;20999:407;21190:2;21204:47;;;12918:2;21175:18;;;25897:19;12954:34;25937:14;;;12934:55;-1:-1;;;13009:12;;;13002:38;13059:12;;;21161:245;21413:407;21604:2;21618:47;;;13310:2;21589:18;;;25897:19;13346:34;25937:14;;;13326:55;-1:-1;;;13401:12;;;13394:25;13438:12;;;21575:245;21827:407;22018:2;22032:47;;;22003:18;;;25897:19;13725:34;25937:14;;;13705:55;13779:12;;;21989:245;22241:407;22432:2;22446:47;;;14030:2;22417:18;;;25897:19;-1:-1;;;25937:14;;;14046:41;14106:12;;;22403:245;22655:407;22846:2;22860:47;;;22831:18;;;25897:19;14393:34;25937:14;;;14373:55;14447:12;;;22817:245;23069:213;14544:37;;;23187:2;23172:18;;23158:124;23289:839;;23585:3;23574:9;23570:19;14574:5;14551:3;14544:37;23758:2;27448:24;23758:2;23747:9;23743:18;8817:58;23585:3;23795:2;23784:9;23780:18;23773:48;23835:108;7778:5;25493:12;25909:6;25904:3;25897:19;25937:14;23574:9;25937:14;7790:93;;23758:2;7954:5;25347:14;7966:21;;-1:-1;7993:260;8018:6;8015:1;8012:13;7993:260;;;8079:13;;-1:-1;;;;;26389:54;7254:58;;25752:14;;;;7147;;;;4344:18;8033:9;7993:260;;;-1:-1;;;;;;;26389:54;;;;24030:2;24015:18;;7254:58;-1:-1;;;24113:3;24098:19;14544:37;23827:116;23556:572;-1:-1;;;23556:572;24135:324;14544:37;;;24445:2;24430:18;;14544:37;24281:2;24266:18;;24252:207;24466:547;14544:37;;;24833:2;24818:18;;14544:37;;;;24916:2;24901:18;;14544:37;24999:2;24984:18;;14544:37;24668:3;24653:19;;24639:374;25020:205;26605:4;26594:16;;;;14660:35;;25134:2;25119:18;;25105:120;28109:117;-1:-1;;;;;26389:54;;28168:35;;28158:2;;28217:1;;28207:12;28233:111;28314:5;26301:13;26294:21;28292:5;28289:32;28279:2;;28335:1;;28325:12

Swarm Source

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