ETH Price: $3,438.30 (-1.42%)
Gas: 9 Gwei

Token

Pokethmon (PETH)
 

Overview

Max Total Supply

100,000,000 PETH

Holders

109

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
805,991.101140427 PETH

Value
$0.00
0xf02df97ea80e4b00f4ad077cef7e349202686a8f
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:
Pokethmon

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
Pokéthmon
https://pokethmon.com
https://t.me/Pokethmon
https://twitter.com/pokethmon_erc

*/
// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.11;


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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IDexPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

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

interface IAntiSnipe {
  function setTokenOwner(address owner, address token, address pair) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract Pokethmon is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Pokethmon";
    string constant _symbol = "PETH";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 100_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 1) / 166;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 166;
    uint256 _maxWalletSize = (_totalSupply * 1) / 100;

    mapping (address => uint256) _balances;
    mapping (address => uint256) firstBuy;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) liquidityCreator;

    uint256 devFee = 400;
    uint256 marketingFee = 600;
    uint256 poolFee = 200;
    uint256 totalFees = marketingFee + devFee + poolFee;
    uint256 sellBias = 0;
    uint256 highFeePeriod = 24 hours;
    uint256 highFeeMult = 200;
    uint256 feeDenominator = 10000;

    address payable public marketingReceiver;
    address payable public devReceiver1;
    address payable public devReceiver2;
    address payable public devReceiver3;
    address payable public poolReceiver;

    IDEXRouter public router;
    //address routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //address routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) public liquidityPools;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    address public pair;
    uint256 public constant manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public constant deadBlocks = 1;

    bool public swapEnabled = false;
    uint256 public swapThreshold = _totalSupply / 200;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _dev1, address _dev2, address _dev3, address _marketing) {
        
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        poolReceiver = payable(msg.sender);
        marketingReceiver = payable(_marketing);
        devReceiver1 = payable(_dev1);
        devReceiver2 = payable(_dev2);
        devReceiver3 = payable(_dev3);

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[address(this)] = _totalSupply;

        emit Transfer(address(0), address(this), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
    function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
    function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function _approve(address _owner, address spender, uint256 amount) internal {
        require(_owner != address(0), "BEP20: approve from zero address");
        require(spender != address(0), "BEP20: approve to zero address");

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function rescueToken(address tokenAddress, uint256 tokens) external onlyOwner
        returns (bool success)
    {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }
    
    function claimMarketing() external onlyOwner {
        uint256 bal = address(this).balance;
        uint256 amountMarketing = (bal * marketingFee) / totalFees;
        uint256 amountPool = (bal * poolFee) / totalFees;
        uint256 amountDev = bal - (amountMarketing + amountPool);
        
        if (amountMarketing > 0)
            marketingReceiver.transfer(amountMarketing);
        if (amountPool > 0)
            poolReceiver.transfer(amountPool);
        if (amountDev > 0) {
            uint256 splitDev = (amountDev * 3) / 8;
            devReceiver1.transfer(splitDev);
            devReceiver2.transfer(splitDev);
            devReceiver3.transfer(amountDev - (splitDev * 2));
        }
    }
    
    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender, address(this), pair);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if(_balances[recipient] == 0) {
                firstBuy[recipient] = block.timestamp;
            }
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldTakeFee(sender) && shouldSwapBack(recipient)){ swapBack(amount); }

        _balances[recipient] = _balances[recipient] + amountReceived;
        
        if (launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedTime != 0;
    }

    function launchAndBurn() external onlyOwner {   
        _maxBuyTxAmount = _totalSupply;
        _maxSellTxAmount = _totalSupply;

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}(
            0,
            path,
            DEAD,
            block.timestamp
        );

        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;

        _maxBuyTxAmount = (_totalSupply * 1) / 166;
        _maxSellTxAmount = (_totalSupply * 1) / 166;
    }

    function addLP(address _protection) external payable onlyOwner() {
        require(!launched(), "Liquidity already added"); 
        require(msg.value > 0, "Insufficient funds");
        uint256 bal = msg.value;
        uint256 toLP = bal * 80 / 100;

        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(address(this),router.WETH());
        liquidityPools[pair] = true;

        antisnipe = IAntiSnipe(_protection);
        antisnipe.setTokenOwner(msg.sender, address(this), pair);

        liquidityCreator[address(this)] = true;
        isFeeExempt[address(this)] = true;

        router.addLiquidityETH{value: toLP}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
        
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(isTxLimitExempt[sender] || amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling, bool highPeriod) public view returns (uint256) {
        if(launchedAt + deadBlocks > block.number){ return feeDenominator - 1; }
        if (selling) return highPeriod ? (totalFees * highFeeMult) / 100 : totalFees + sellBias;
        return highPeriod ? (totalFees * highFeeMult) / 100 : totalFees - sellBias;
    }

    function takeFee(address from, address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling, !liquidityPools[from] && firstBuy[from] != block.timestamp && firstBuy[from] + highFeePeriod > block.timestamp)) / feeDenominator;

        if (feeAmount > 0) {
            _balances[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }
    
        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFees > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
        emit UpdatedSettings(isPool ? 'Liquidity Pool Enabled' : 'Liquidity Pool Disabled', [Log(toString(abi.encodePacked(lp)), 1), Log('', 0), Log('', 0)]);
    }
    
    function switchRouter(address newRouter, address newPair) external onlyOwner {
        router = IDEXRouter(newRouter);
        pair = newPair;
        liquidityPools[newPair] = true;
        isTxLimitExempt[newRouter] = true;
        emit UpdatedSettings('Exchange Router Updated', [Log(concatenate('New Router: ',toString(abi.encodePacked(newRouter))), 1),Log(concatenate('New Liquidity Pair: ',toString(abi.encodePacked(pair))), 1), Log('', 0)]);
    }
    
    function excludePresaleAddress(address presaleAddress) external onlyOwner {
        liquidityCreator[presaleAddress] = true;
        isTxLimitExempt[presaleAddress] = true;
        isFeeExempt[presaleAddress] = true;
        emit UpdatedSettings('Presale Setup', [Log(concatenate('Presale Address: ',toString(abi.encodePacked(presaleAddress))), 1), Log('', 0), Log('', 0)]);
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
        emit UpdatedSettings('Maximum Transaction Size', [Log('Max Buy Tokens', _maxBuyTxAmount / (10 ** _decimals)), Log('Max Sell Tokens', _maxSellTxAmount / (10 ** _decimals)), Log('', 0)]);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit UpdatedSettings('Maximum Wallet Size', [Log('Tokens', _maxWalletSize / (10 ** _decimals)), Log('', 0), Log('', 0)]);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Fees Removed' : 'Fees Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Transaction Limit Removed' : 'Transaction Limit Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setFees(uint256 _marketingFee, uint256 _devFee, uint256 _poolFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        marketingFee = _marketingFee;
        devFee = _devFee;
        poolFee = _poolFee;
        totalFees = _devFee + _marketingFee + _poolFee;
        sellBias = _sellBias;
        feeDenominator = _feeDenominator;
        require(totalFees < feeDenominator / 2);
        emit UpdatedSettings('Fees', [Log('Total Fee Percent', totalFees * 100 / feeDenominator), Log('Marketing Percent', _marketingFee * 100 / feeDenominator), Log('Dev Percent', _devFee * 100 / feeDenominator)]);
    }

    function setFeeReceivers(address _marketingReceiver, address _dev1, address _dev2, address _dev3, address _poolReceiver) external onlyOwner {
        marketingReceiver = payable(_marketingReceiver);
        devReceiver1 = payable(_dev1);
        devReceiver2 = payable(_dev2);
        devReceiver3 = payable(_dev3);
        poolReceiver = payable(_poolReceiver);
        emit UpdatedSettings('Fee Receivers', [Log(concatenate('Marketing Receiver: ',toString(abi.encodePacked(_marketingReceiver))), 1), Log(concatenate('Pool Receiver: ',toString(abi.encodePacked(_poolReceiver))), 1), Log('',0)]);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _swapMinimumDenom) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _totalSupply / _swapMinimumDenom;
        emit UpdatedSettings('Swap Settings', [Log('Enabled', _enabled ? 1 : 0),Log('Swap Maximum', swapThreshold), Log('Swap Minimum', swapMinimum)]);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function burnLP(uint256 percent) external onlyOwner {
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 5 && percent > 0, "Max of 5% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        uint256 pairBalance = balanceOf(pair);
        
        _basicTransfer(pair, DEAD, (pairBalance * percent) / 100);
        
        IDexPair(pair).sync();
    }
	
	function toString(bytes memory data) internal pure returns(string memory) {
        bytes memory alphabet = "0123456789abcdef";
    
        bytes memory str = new bytes(2 + data.length * 2);
        str[0] = "0";
        str[1] = "x";
        for (uint i = 0; i < data.length; i++) {
            str[2+i*2] = alphabet[uint(uint8(data[i] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(data[i] & 0x0f))];
        }
        return string(str);
    }
    
    function concatenate(string memory a, string memory b) internal pure returns (string memory) {
        return string(abi.encodePacked(a, b));
    }

	struct Log {
	    string name;
	    uint256 value;
	}

    event UpdatedSettings(string name, Log[3] values);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dev1","type":"address"},{"internalType":"address","name":"_dev2","type":"address"},{"internalType":"address","name":"_dev3","type":"address"},{"internalType":"address","name":"_marketing","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"indexed":false,"internalType":"struct Pokethmon.Log[3]","name":"values","type":"tuple[3]"}],"name":"UpdatedSettings","type":"event"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"}],"name":"addLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"burnLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devReceiver1","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devReceiver2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devReceiver3","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"excludePresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"highPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityPools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingReceiver","type":"address"},{"internalType":"address","name":"_dev1","type":"address"},{"internalType":"address","name":"_dev2","type":"address"},{"internalType":"address","name":"_dev3","type":"address"},{"internalType":"address","name":"_poolReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_poolFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimumDenom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"switchRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260a6620000146009600a6200055a565b62000024906305f5e10062000572565b6200003190600162000572565b6200003d919062000594565b60015560a6620000506009600a6200055a565b62000060906305f5e10062000572565b6200006d90600162000572565b62000079919062000594565b60025560646200008c6009600a6200055a565b6200009c906305f5e10062000572565b620000a990600162000572565b620000b5919062000594565b600355610190600a55610258600b5560c8600c55600c54600a54600b54620000de9190620005b7565b620000ea9190620005b7565b600d556000600e5562015180600f5560c860108190556127106011556019805461ffff60a01b1916600160a01b179055601e805460ff19169055620001326009600a6200055a565b62000142906305f5e10062000572565b6200014e919062000594565b601f55612710620001626009600a6200055a565b62000172906305f5e10062000572565b6200017e919062000594565b6020553480156200018e57600080fd5b506040516200461338038062004613833981016040819052620001b191620005ef565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600019600660006200020c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d808352908452828220949094553081526006835281812093815292909152812060001990556001906007906200027d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190600990620002c16000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805460ff1990811696151596909617905560168054336001600160a01b0319918216179091556012805482168885161790556013805482168b85161790556014805482168a85161790556015805490911688841617905530815260089093528183208054851660019081179091558354909116835290822080548416821790557f226e7c4e32ba0cd918c39b21526eb23f3f5958fcfd83d5cf69b9510bf01e2e17805484168217905561dead9091527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054909216179055620003c76009600a6200055a565b620003d7906305f5e10062000572565b30600081815260046020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200041a6009600a6200055a565b6200042a906305f5e10062000572565b60405190815260200160405180910390a3505050506200064c565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200049c57816000190482111562000480576200048062000445565b808516156200048e57918102915b93841c939080029062000460565b509250929050565b600082620004b55750600162000554565b81620004c45750600062000554565b8160018114620004dd5760028114620004e85762000508565b600191505062000554565b60ff841115620004fc57620004fc62000445565b50506001821b62000554565b5060208310610133831016604e8410600b84101617156200052d575081810a62000554565b6200053983836200045b565b806000190482111562000550576200055062000445565b0290505b92915050565b60006200056b60ff841683620004a4565b9392505050565b60008160001904831182151516156200058f576200058f62000445565b500290565b600082620005b257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620005cd57620005cd62000445565b500190565b80516001600160a01b0381168114620005ea57600080fd5b919050565b600080600080608085870312156200060657600080fd5b6200061185620005d2565b93506200062160208601620005d2565b92506200063160408601620005d2565b91506200064160608601620005d2565b905092959194509250565b613fb7806200065c6000396000f3fe6080604052600436106103905760003560e01c806370a08231116101dc578063bf56b37111610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a61578063f8821a6214610a81578063f887ea4014610a97578063fabb0b4f14610ab757600080fd5b8063dd62ed3e146109c8578063ddf731f314610a0e578063e709bedb14610a21578063f2fde38b14610a4157600080fd5b8063cbc87098116100dc578063cbc8709814610948578063ceafd6da14610968578063d088935814610988578063d5d035f5146109a857600080fd5b8063bf56b371146108f1578063c5363caa14610907578063c6ef20611461092857600080fd5b806395d89b411161017a578063a8aa1b3111610149578063a8aa1b311461087c578063a9059cbb1461089c578063abe57e70146108bc578063bafe446b146108dc57600080fd5b806395d89b41146107f95780639ec22c0e14610826578063a457c2d71461083c578063a5949bcf1461085c57600080fd5b8063882cfb3f116101b6578063882cfb3f1461079b578063893d20e8146107bb5780638da5cb5b146107bb57806392895e4e146107d957600080fd5b806370a082311461072f578063715018a6146107655780637516baec1461077a57600080fd5b806333f3d628116102c1578063507139351161025f5780636419b6f91161022e5780636419b6f9146106b5578063658d4b7f146106d557806367243482146106f55780636ddd17131461071557600080fd5b8063507139351461064a578063571ac8b01461066a5780635804f1e41461068a57806363a803e1146106a057600080fd5b80633c109ee61161029b5780633c109ee6146105d5578063421dd7c7146105f55780634592c0b81461060a578063492a937b1461062a57600080fd5b806333f3d62814610580578063374ddd36146105a057806339509351146105b557600080fd5b806318abb6351161032e5780632b112e49116103085780632b112e4914610502578063313ce567146105175780633183ea1b1461053357806333cec8681461056b57600080fd5b806318abb635146104ad578063234e9494146104cd57806323b872dd146104e257600080fd5b8063095ea7b31161036a578063095ea7b3146104225780630b0fd47e1461045257806318160ddd14610482578063184c16c51461049757600080fd5b80630445b6671461039c57806304a66b48146103c557806306fdde03146103e757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601f5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103e56103e0366004613621565b610acc565b005b3480156103f357600080fd5b506040805180820190915260098152682837b5b2ba3436b7b760b91b60208201525b6040516103bc91906136b4565b34801561042e57600080fd5b5061044261043d3660046136df565b610c78565b60405190151581526020016103bc565b34801561045e57600080fd5b5061044261046d36600461370b565b60186020526000908152604090205460ff1681565b34801561048e57600080fd5b506103b2610c8f565b3480156104a357600080fd5b506103b261070881565b3480156104b957600080fd5b506103e56104c8366004613728565b610cb0565b3480156104d957600080fd5b506103b2610e3a565b3480156104ee57600080fd5b506104426104fd366004613799565b610e55565b34801561050e57600080fd5b506103b2610eea565b34801561052357600080fd5b50604051600981526020016103bc565b34801561053f57600080fd5b50601554610553906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561057757600080fd5b506103e5610f6a565b34801561058c57600080fd5b5061044261059b3660046136df565b61119f565b3480156105ac57600080fd5b506103e561123b565b3480156105c157600080fd5b506104426105d03660046136df565b61142c565b3480156105e157600080fd5b50601454610553906001600160a01b031681565b34801561060157600080fd5b506103e5611468565b34801561061657600080fd5b506103e56106253660046137da565b6114a7565b34801561063657600080fd5b506103e5610645366004613821565b61163a565b34801561065657600080fd5b506103e561066536600461384f565b6117e3565b34801561067657600080fd5b5061044261068536600461370b565b61199a565b34801561069657600080fd5b506103b2601d5481565b3480156106ac57600080fd5b506103b26119a8565b3480156106c157600080fd5b506103b26106d036600461387b565b6119c3565b3480156106e157600080fd5b506103e56106f0366004613821565b611a63565b34801561070157600080fd5b506103e56107103660046138e5565b611b32565b34801561072157600080fd5b50601e546104429060ff1681565b34801561073b57600080fd5b506103b261074a36600461370b565b6001600160a01b031660009081526004602052604090205490565b34801561077157600080fd5b506103e5611c91565b34801561078657600080fd5b5060195461044290600160a01b900460ff1681565b3480156107a757600080fd5b50601954610553906001600160a01b031681565b3480156107c757600080fd5b506000546001600160a01b0316610553565b3480156107e557600080fd5b50601654610553906001600160a01b031681565b34801561080557600080fd5b506040805180820190915260048152630a08aa8960e31b6020820152610415565b34801561083257600080fd5b506103b2601b5481565b34801561084857600080fd5b506104426108573660046136df565b611d05565b34801561086857600080fd5b50601254610553906001600160a01b031681565b34801561088857600080fd5b50601a54610553906001600160a01b031681565b3480156108a857600080fd5b506104426108b73660046136df565b611d3c565b3480156108c857600080fd5b506103e56108d7366004613951565b611d49565b3480156108e857600080fd5b506103b2611e77565b3480156108fd57600080fd5b506103b2601c5481565b34801561091357600080fd5b5060195461044290600160a81b900460ff1681565b34801561093457600080fd5b506103e5610943366004613973565b611e92565b34801561095457600080fd5b506103e561096336600461370b565b612019565b34801561097457600080fd5b506103e561098336600461398c565b612146565b34801561099457600080fd5b506103e56109a33660046139a9565b6121ab565b3480156109b457600080fd5b506103e56109c3366004613821565b612327565b3480156109d457600080fd5b506103b26109e33660046137da565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6103e5610a1c36600461370b565b6123f8565b348015610a2d57600080fd5b50601354610553906001600160a01b031681565b348015610a4d57600080fd5b506103e5610a5c36600461370b565b6127d6565b348015610a6d57600080fd5b506103e5610a7c366004613821565b6128c0565b348015610a8d57600080fd5b506103b260205481565b348015610aa357600080fd5b50601754610553906001600160a01b031681565b348015610ac357600080fd5b506103b2600181565b6000546001600160a01b03163314610aff5760405162461bcd60e51b8152600401610af6906139de565b60405180910390fd5b600b859055600a849055600c83905582610b198686613a29565b610b239190613a29565b600d55600e8290556011819055610b3b600282613a41565b600d5410610b4857600080fd5b600080516020613f628339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b8152508152602001601154600d546064610bae9190613a63565b610bb89190613a41565b905281526040805160808101825260119181018281527013585c9ad95d1a5b99c814195c98d95b9d607a1b606083015281529054602092830192820190610c008b6064613a63565b610c0a9190613a41565b9052815260408051608081018252600b9181019182526a11195d8814195c98d95b9d60aa1b6060820152908152601154602092830192820190610c4e8a6064613a63565b610c589190613a41565b90529052604051610c699190613adb565b60405180910390a15050505050565b6000610c853384846129b0565b5060015b92915050565b6000610c9d6009600a613bed565b610cab906305f5e100613a63565b905090565b6000546001600160a01b03163314610cda5760405162461bcd60e51b8152600401610af6906139de565b601280546001600160a01b03199081166001600160a01b0388811691909117909255601380548216878416179055601480548216868416178155601580548316868516179055601680549092169284169290921790556040805160e08101825260a0810192835273026b0b935b2ba34b733902932b1b2b4bb32b91d160651b60c08201529051600080516020613f6283398151915292829160608301918291610da99190610da490610d90908e90602001613bfc565b604051602081830303815290604052612abd565b612cd6565b8152602001600181525081526020016040518060400160405280610e026040518060400160405280600f81526020016e02837b7b6102932b1b2b4bb32b91d1608d1b815250610da488604051602001610d909190613bfc565b81526001602091820152908252604080516060810182526000818301818152825281840152929091019190915251610c699190613c19565b6000610e486009600a613bed565b600254610cab9190613a41565b6001600160a01b038316600090815260066020908152604080832033845290915281205460001914610ed5576001600160a01b0384166000908152600660209081526040808320338452909152902054610eb0908390613c50565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b610ee0848484612d02565b90505b9392505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd549091610f4691613a29565b610f526009600a613bed565b610f60906305f5e100613a63565b610cab9190613c50565b6000546001600160a01b03163314610f945760405162461bcd60e51b8152600401610af6906139de565b610fa06009600a613bed565b610fae906305f5e100613a63565b600155610fbd6009600a613bed565b610fcb906305f5e100613a63565b60029081556040805182815260608101825260009290916020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190613c7d565b8160008151811061107157611071613c9a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106110a5576110a5613c9a565b6001600160a01b03928316602091820292909201015260175460405163b6f9de9560e01b815291169063b6f9de959047906110ed90600090869061dead904290600401613cf4565b6000604051808303818588803b15801561110657600080fd5b505af115801561111a573d6000803e3d6000fd5b505043601c55505042601d5550601e805460ff1916600117905560a66111426009600a613bed565b611150906305f5e100613a63565b61115b906001613a63565b6111659190613a41565b60015560a66111766009600a613bed565b611184906305f5e100613a63565b61118f906001613a63565b6111999190613a41565b60025550565b600080546001600160a01b031633146111ca5760405162461bcd60e51b8152600401610af6906139de565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611217573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee39190613d29565b6000546001600160a01b031633146112655760405162461bcd60e51b8152600401610af6906139de565b600d54600b54479160009161127a9084613a63565b6112849190613a41565b90506000600d54600c54846112999190613a63565b6112a39190613a41565b905060006112b18284613a29565b6112bb9085613c50565b905082156112ff576012546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156112fd573d6000803e3d6000fd5b505b8115611341576016546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561133f573d6000803e3d6000fd5b505b80156114265760006008611356836003613a63565b6113609190613a41565b6013546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561139b573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156113d6573d6000803e3d6000fd5b506015546001600160a01b03166108fc6113f1836002613a63565b6113fb9085613c50565b6040518115909202916000818181858888f19350505050158015611423573d6000803e3d6000fd5b50505b50505050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c85918590611463908690613a29565b6129b0565b6000546001600160a01b031633146114925760405162461bcd60e51b8152600401610af6906139de565b6019805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146114d15760405162461bcd60e51b8152600401610af6906139de565b601780546001600160a01b038085166001600160a01b03199283168117909355601a80549185169190921681179091556000908152601860209081526040808320805460ff19908116600190811790925594845260088352928190208054909416909217909255805160e081018252600c60a082019081526b02732bb902937baba32b91d160a51b60c08301529151600080516020613f62833981519152939192839260608401928392611591929091610da491610d90918c9101613bfc565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b6060830152601a54925194840194919384936115f693610da492610d90926001600160a01b03169101613bfc565b8152600160209182015290825260408051606081018252600081830181815282528184015292909101919091525161162e9190613d46565b60405180910390a15050565b6000546001600160a01b031633146116645760405162461bcd60e51b8152600401610af6906139de565b601a546001600160a01b03838116911614156116cd5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610af6565b6001600160a01b0382166000908152601860205260409020805460ff1916821515179055600080516020613f6283398151915281611740576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c6564000000000000000000815250611770565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a08101909152806060810180611791610d908960c08601613bfc565b815260016020918201529082526040805160608082018352600082840181815283528285018190528585019290925282519081018352808301828152815292830152918201525161162e929190613d8d565b6000546001600160a01b0316331461180d5760405162461bcd60e51b8152600401610af6906139de565b60008311801561181d5750600082115b80156118295750600081115b801561183757506127108111155b61184057600080fd5b808361184e6009600a613bed565b61185c906305f5e100613a63565b6118669190613a63565b6118709190613a41565b60015580826118816009600a613bed565b61188f906305f5e100613a63565b6118999190613a63565b6118a39190613a41565b6002556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c083015260608201908152600080516020613f6283398151915291908190608082016118fb6009600a613bed565b6001546119089190613a41565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b6060820152908152602091820191810161194d6009600a613bed565b60025461195a9190613a41565b905281526040805160608101825260008183018181528252602082810191909152909201919091525161198d9190613dbb565b60405180910390a1505050565b6000610c8982600019610c78565b60006119b66009600a613bed565b600354610cab9190613a41565b6000436001601c546119d59190613a29565b11156119f15760016011546119ea9190613c50565b9050610c89565b8215611a2d5781611a1157600e54600d54611a0c9190613a29565b6119ea565b6064601054600d54611a239190613a63565b6119ea9190613a41565b81611a4757600e54600d54611a429190613c50565b610ee3565b6064601054600d54611a599190613a63565b610ee39190613a41565b6000546001600160a01b03163314611a8d5760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b0382166000908152600760205260409020805460ff1916821515179055600080516020613f6283398151915281611af0576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b815250611770565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a0810190925290806060810180611791610d908960c08601613bfc565b6000546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610af6906139de565b8215801590611b6a57508083145b611b7357600080fd5b3360005b848110156114235760186000878784818110611b9557611b95613c9a565b9050602002016020810190611baa919061370b565b6001600160a01b0316815260208101919091526040016000205460ff16158015611c19575060096000878784818110611be557611be5613c9a565b9050602002016020810190611bfa919061370b565b6001600160a01b0316815260208101919091526040016000205460ff16155b15611c7f57611c7d82878784818110611c3457611c34613c9a565b9050602002016020810190611c49919061370b565b611c556009600a613bed565b878786818110611c6757611c67613c9a565b90506020020135611c789190613a63565b613103565b505b80611c8981613e02565b915050611b77565b6000546001600160a01b03163314611cbb5760405162461bcd60e51b8152600401610af6906139de565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c85918590611463908690613c50565b6000610ee3338484612d02565b6000546001600160a01b03163314611d735760405162461bcd60e51b8152600401610af6906139de565b600082118015611d835750600081115b8015611d9157506127108111155b611d9a57600080fd5b8082611da86009600a613bed565b611db6906305f5e100613a63565b611dc09190613a63565b611dca9190613a41565b6003556040805160e08101909152600660a0820190815265546f6b656e7360d01b60c083015260608201908152600080516020613f628339815191529190819060808201611e1a6009600a613bed565b600354611e279190613a41565b9052815260408051606080820183526000828401818152835260208381018290528086019390935283519182018452818401818152825291810191909152918101919091525161162e9190613e1d565b6000611e856009600a613bed565b600154610cab9190613a41565b6000546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610af6906139de565b610708601b54611ecc9190613a29565b4211611f1a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610af6565b60058111158015611f2b5750600081115b611f775760405162461bcd60e51b815260206004820152601960248201527f4d6178206f66203525206f6620746f6b656e7320696e204c50000000000000006044820152606401610af6565b42601b55601a546001600160a01b031660008181526004602052604090205490611fb49061dead6064611faa8686613a63565b611c789190613a41565b50601a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561200557600080fd5b505af1158015611423573d6000803e3d6000fd5b6000546001600160a01b031633146120435760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b03811660009081526009602090815260408083208054600160ff1991821681179092556008845282852080548216831790556007845293829020805490941617909255815160e081018352601160a08201908152700283932b9b0b6329020b2323932b9b99d1607d1b60c08301529251600080516020613f628339815191529391928392606084019283926120ea9291610da491610d90918b9101613bfc565b815260016020918201529082526040805160608082018352600082840181815283528285018190528585019290925282519081018352808301828152815292830152918201525161213b9190613e5a565b60405180910390a150565b6000546001600160a01b031633146121705760405162461bcd60e51b8152600401610af6906139de565b801561218d57601954600160a81b900460ff161561218d57600080fd5b60198054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146121d55760405162461bcd60e51b8152600401610af6906139de565b600082116121e257600080fd5b601e805460ff1916841515179055816121fd6009600a613bed565b61220b906305f5e100613a63565b6122159190613a41565b601f55806122256009600a613bed565b612233906305f5e100613a63565b61223d9190613a41565b6020556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c083015260608201908152600080516020613f6283398151915291908190608082018761228e576000612291565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001601f54815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d696e696d756d60a01b815250815260200160205481525081525060405161198d9190613e91565b6000546001600160a01b031633146123515760405162461bcd60e51b8152600401610af6906139de565b6019546001600160a01b0383811691161461239957601954600160a81b900460ff161561237d57600080fd5b601980546001600160a01b0319166001600160a01b0384161790555b80156123f457601954601a54604051633d42475360e01b81523360048201523060248201526001600160a01b039182166044820152911690633d42475390606401600060405180830381600087803b15801561200557600080fd5b5050565b6000546001600160a01b031633146124225760405162461bcd60e51b8152600401610af6906139de565b601d54156124725760405162461bcd60e51b815260206004820152601760248201527f4c697175696469747920616c72656164792061646465640000000000000000006044820152606401610af6565b600034116124b75760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610af6565b34600060646124c7836050613a63565b6124d19190613a41565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051929350909163c45a0155916004808201926020929091908290030181865afa15801561253a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255e9190613c7d565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e49190613c7d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126559190613c7d565b601a80546001600160a01b039283166001600160a01b03199182168117835560009081526018602052604090819020805460ff191660011790556019805488861693168317905591549151633d42475360e01b8152336004820152306024820152919092166044820152633d42475390606401600060405180830381600087803b1580156126e257600080fd5b505af11580156126f6573d6000803e3d6000fd5b50503060008181526009602090815260408083208054600160ff19918216811790925560078452828520805490911690911790556017546004909252909120546001600160a01b03909116935063f305d71992508491906040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156127b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114239190613ec8565b6000546001600160a01b031633146128005760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b0381166128655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146128ea5760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b0382166000908152600860205260409020805460ff1916821515179055600080516020613f628339815191528161295d576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f72636564000000000000815250611770565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a0810190925290806060810180611791610d908960c08601613bfc565b6001600160a01b038316612a065760405162461bcd60e51b815260206004820181905260248201527f42455032303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610af6565b6001600160a01b038216612a5c5760405162461bcd60e51b815260206004820152601e60248201527f42455032303a20617070726f766520746f207a65726f206164647265737300006044820152606401610af6565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160609190600090612af8906002613a63565b612b03906002613a29565b67ffffffffffffffff811115612b1b57612b1b613c67565b6040519080825280601f01601f191660200182016040528015612b45576020820181803683370190505b509050600360fc1b81600081518110612b6057612b60613c9a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612b8f57612b8f613c9a565b60200101906001600160f81b031916908160001a90535060005b8451811015612cce57826004868381518110612bc757612bc7613c9a565b016020015182516001600160f81b031990911690911c60f81c908110612bef57612bef613c9a565b01602001516001600160f81b03191682612c0a836002613a63565b612c15906002613a29565b81518110612c2557612c25613c9a565b60200101906001600160f81b031916908160001a90535082858281518110612c4f57612c4f613c9a565b602091010151815160f89190911c600f16908110612c6f57612c6f613c9a565b01602001516001600160f81b03191682612c8a836002613a63565b612c95906003613a29565b81518110612ca557612ca5613c9a565b60200101906001600160f81b031916908160001a90535080612cc681613e02565b915050612ba9565b509392505050565b60608282604051602001612ceb929190613ef6565b604051602081830303815290604052905092915050565b6000808211612d4b5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610af6565b6001600160a01b038416600090815260046020526040902054821115612daa5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610af6565b601d54158015612dd257506001600160a01b03831660009081526018602052604090205460ff165b15612e3f576001600160a01b03841660009081526009602052604090205460ff16612e3f5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610af6565b612e4984836131bd565b6001600160a01b03831660009081526018602052604090205460ff16158015612e7d57506001600160a01b03831661dead14155b15612ee5576001600160a01b038316600090815260046020526040902054612ebb576001600160a01b03831660009081526005602052604090204290555b6001600160a01b03831660009081526008602052604090205460ff16612ee557612ee5838361324f565b60215460ff1615612f0257612efb848484613103565b9050610ee3565b6001600160a01b038416600090815260046020526040902054612f26908390613c50565b6001600160a01b038516600090815260046020908152604080832093909355600790529081205460ff16158015612f7657506001600160a01b03841660009081526007602052604090205460ff16155b612f805782612f8b565b612f8b8585856132d9565b9050612fb0856001600160a01b031660009081526007602052604090205460ff161590565b8015612fc05750612fc0846133ff565b15612fce57612fce83613486565b6001600160a01b038416600090815260046020526040902054612ff2908290613a29565b6001600160a01b038516600090815260046020526040902055601d54151580156130255750601954600160a01b900460ff165b156130ab5760195460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015613085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a99190613d29565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130f091815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260046020526040812054613127908390613c50565b6001600160a01b038086166000908152600460205260408082209390935590851681522054613157908390613a29565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131ab9086815260200190565b60405180910390a35060019392505050565b6001600160a01b03821660009081526008602052604090205460ff168061320f57506001600160a01b03821660009081526018602052604090205460ff166132075760025461320b565b6001545b8111155b6123f45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610af6565b6003546001600160a01b0383166000908152600460205260409020548190613278908490613a29565b11156132d45760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610af6565b505050565b6001600160a01b0380831660009081526018602052604080822054601154938716835290822054919260ff91821692849261336a9185911615801561333657506001600160a01b0389166000908152600560205260409020544214155b80156106d05750600f546001600160a01b038a16600090815260056020526040902054429161336491613a29565b116119c3565b6133749086613a63565b61337e9190613a41565b905080156133eb5730600090815260046020526040812080548392906133a5908490613a29565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6133f58185613c50565b9695505050505050565b3360009081526018602052604081205460ff16158015613422575060215460ff16155b80156134305750601e5460ff165b801561345457506001600160a01b03821660009081526018602052604090205460ff165b8015613473575060208054306000908152600490925260409091205410155b8015610c8957506000600d541192915050565b6021805460ff19166001179055601f5460009082106134a757601f546134a9565b815b306000908152600460205260409020549091508111156134d55750306000908152600460205260409020545b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350a5761350a613c9a565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135879190613c7d565b8160018151811061359a5761359a613c9a565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906135e0908590600090869030904290600401613f25565b600060405180830381600087803b1580156135fa57600080fd5b505af115801561360e573d6000803e3d6000fd5b50506021805460ff191690555050505050565b600080600080600060a0868803121561363957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561367757818101518382015260200161365f565b838111156114265750506000910152565b600081518084526136a081602086016020860161365c565b601f01601f19169290920160200192915050565b602081526000610ee36020830184613688565b6001600160a01b03811681146136dc57600080fd5b50565b600080604083850312156136f257600080fd5b82356136fd816136c7565b946020939093013593505050565b60006020828403121561371d57600080fd5b8135610ee3816136c7565b600080600080600060a0868803121561374057600080fd5b853561374b816136c7565b9450602086013561375b816136c7565b9350604086013561376b816136c7565b9250606086013561377b816136c7565b9150608086013561378b816136c7565b809150509295509295909350565b6000806000606084860312156137ae57600080fd5b83356137b9816136c7565b925060208401356137c9816136c7565b929592945050506040919091013590565b600080604083850312156137ed57600080fd5b82356137f8816136c7565b91506020830135613808816136c7565b809150509250929050565b80151581146136dc57600080fd5b6000806040838503121561383457600080fd5b823561383f816136c7565b9150602083013561380881613813565b60008060006060848603121561386457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561388e57600080fd5b823561383f81613813565b60008083601f8401126138ab57600080fd5b50813567ffffffffffffffff8111156138c357600080fd5b6020830191508360208260051b85010111156138de57600080fd5b9250929050565b600080600080604085870312156138fb57600080fd5b843567ffffffffffffffff8082111561391357600080fd5b61391f88838901613899565b9096509450602087013591508082111561393857600080fd5b5061394587828801613899565b95989497509550505050565b6000806040838503121561396457600080fd5b50508035926020909101359150565b60006020828403121561398557600080fd5b5035919050565b60006020828403121561399e57600080fd5b8135610ee381613813565b6000806000606084860312156139be57600080fd5b83356139c981613813565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a3c57613a3c613a13565b500190565b600082613a5e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613a7d57613a7d613a13565b500290565b600082606081018360005b6003811015613ad0578383038752815160408151818652613ab082870182613688565b602093840151968401969096525050968701969190910190600101613a8d565b509095945050505050565b6040815260046040820152634665657360e01b6060820152608060208201526000610ee36080830184613a82565b600181815b80851115613b44578160001904821115613b2a57613b2a613a13565b80851615613b3757918102915b93841c9390800290613b0e565b509250929050565b600082613b5b57506001610c89565b81613b6857506000610c89565b8160018114613b7e5760028114613b8857613ba4565b6001915050610c89565b60ff841115613b9957613b99613a13565b50506001821b610c89565b5060208310610133831016604e8410600b8410161715613bc7575081810a610c89565b613bd18383613b09565b8060001904821115613be557613be5613a13565b029392505050565b6000610ee360ff841683613b4c565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610ee36080830184613a82565b600082821015613c6257613c62613a13565b500390565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613c8f57600080fd5b8151610ee3816136c7565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613ce95781516001600160a01b031687529582019590820190600101613cc4565b509495945050505050565b848152608060208201526000613d0d6080830186613cb0565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215613d3b57600080fd5b8151610ee381613813565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610ee36080830184613a82565b604081526000613da06040830185613688565b8281036020840152613db28185613a82565b95945050505050565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610ee36080830184613a82565b6000600019821415613e1657613e16613a13565b5060010190565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610ee36080830184613a82565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610ee36080830184613a82565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610ee36080830184613a82565b600080600060608486031215613edd57600080fd5b8351925060208401519150604084015190509250925092565b60008351613f0881846020880161365c565b835190830190613f1c81836020880161365c565b01949350505050565b85815284602082015260a060408201526000613f4460a0830186613cb0565b6001600160a01b039490941660608301525060800152939250505056fe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96a2646970667358221220152fc45772689a5ca534508a6d84f9b301728bf3336d9ef1db538814799cccc064736f6c634300080b0033000000000000000000000000212dd56a85f3d3338bc2bf7978784e00165d9187000000000000000000000000db07aa1b7f0151bf466c17fe35b90b559d9c6d9f000000000000000000000000d45b17b65eca7eb779a77cfd7fe95b74dc0281da000000000000000000000000a33a0bf545035c21afd41e6f1c20a25849cfe629

Deployed Bytecode

0x6080604052600436106103905760003560e01c806370a08231116101dc578063bf56b37111610102578063dd62ed3e116100a0578063f84ba65d1161006f578063f84ba65d14610a61578063f8821a6214610a81578063f887ea4014610a97578063fabb0b4f14610ab757600080fd5b8063dd62ed3e146109c8578063ddf731f314610a0e578063e709bedb14610a21578063f2fde38b14610a4157600080fd5b8063cbc87098116100dc578063cbc8709814610948578063ceafd6da14610968578063d088935814610988578063d5d035f5146109a857600080fd5b8063bf56b371146108f1578063c5363caa14610907578063c6ef20611461092857600080fd5b806395d89b411161017a578063a8aa1b3111610149578063a8aa1b311461087c578063a9059cbb1461089c578063abe57e70146108bc578063bafe446b146108dc57600080fd5b806395d89b41146107f95780639ec22c0e14610826578063a457c2d71461083c578063a5949bcf1461085c57600080fd5b8063882cfb3f116101b6578063882cfb3f1461079b578063893d20e8146107bb5780638da5cb5b146107bb57806392895e4e146107d957600080fd5b806370a082311461072f578063715018a6146107655780637516baec1461077a57600080fd5b806333f3d628116102c1578063507139351161025f5780636419b6f91161022e5780636419b6f9146106b5578063658d4b7f146106d557806367243482146106f55780636ddd17131461071557600080fd5b8063507139351461064a578063571ac8b01461066a5780635804f1e41461068a57806363a803e1146106a057600080fd5b80633c109ee61161029b5780633c109ee6146105d5578063421dd7c7146105f55780634592c0b81461060a578063492a937b1461062a57600080fd5b806333f3d62814610580578063374ddd36146105a057806339509351146105b557600080fd5b806318abb6351161032e5780632b112e49116103085780632b112e4914610502578063313ce567146105175780633183ea1b1461053357806333cec8681461056b57600080fd5b806318abb635146104ad578063234e9494146104cd57806323b872dd146104e257600080fd5b8063095ea7b31161036a578063095ea7b3146104225780630b0fd47e1461045257806318160ddd14610482578063184c16c51461049757600080fd5b80630445b6671461039c57806304a66b48146103c557806306fdde03146103e757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601f5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103e56103e0366004613621565b610acc565b005b3480156103f357600080fd5b506040805180820190915260098152682837b5b2ba3436b7b760b91b60208201525b6040516103bc91906136b4565b34801561042e57600080fd5b5061044261043d3660046136df565b610c78565b60405190151581526020016103bc565b34801561045e57600080fd5b5061044261046d36600461370b565b60186020526000908152604090205460ff1681565b34801561048e57600080fd5b506103b2610c8f565b3480156104a357600080fd5b506103b261070881565b3480156104b957600080fd5b506103e56104c8366004613728565b610cb0565b3480156104d957600080fd5b506103b2610e3a565b3480156104ee57600080fd5b506104426104fd366004613799565b610e55565b34801561050e57600080fd5b506103b2610eea565b34801561052357600080fd5b50604051600981526020016103bc565b34801561053f57600080fd5b50601554610553906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561057757600080fd5b506103e5610f6a565b34801561058c57600080fd5b5061044261059b3660046136df565b61119f565b3480156105ac57600080fd5b506103e561123b565b3480156105c157600080fd5b506104426105d03660046136df565b61142c565b3480156105e157600080fd5b50601454610553906001600160a01b031681565b34801561060157600080fd5b506103e5611468565b34801561061657600080fd5b506103e56106253660046137da565b6114a7565b34801561063657600080fd5b506103e5610645366004613821565b61163a565b34801561065657600080fd5b506103e561066536600461384f565b6117e3565b34801561067657600080fd5b5061044261068536600461370b565b61199a565b34801561069657600080fd5b506103b2601d5481565b3480156106ac57600080fd5b506103b26119a8565b3480156106c157600080fd5b506103b26106d036600461387b565b6119c3565b3480156106e157600080fd5b506103e56106f0366004613821565b611a63565b34801561070157600080fd5b506103e56107103660046138e5565b611b32565b34801561072157600080fd5b50601e546104429060ff1681565b34801561073b57600080fd5b506103b261074a36600461370b565b6001600160a01b031660009081526004602052604090205490565b34801561077157600080fd5b506103e5611c91565b34801561078657600080fd5b5060195461044290600160a01b900460ff1681565b3480156107a757600080fd5b50601954610553906001600160a01b031681565b3480156107c757600080fd5b506000546001600160a01b0316610553565b3480156107e557600080fd5b50601654610553906001600160a01b031681565b34801561080557600080fd5b506040805180820190915260048152630a08aa8960e31b6020820152610415565b34801561083257600080fd5b506103b2601b5481565b34801561084857600080fd5b506104426108573660046136df565b611d05565b34801561086857600080fd5b50601254610553906001600160a01b031681565b34801561088857600080fd5b50601a54610553906001600160a01b031681565b3480156108a857600080fd5b506104426108b73660046136df565b611d3c565b3480156108c857600080fd5b506103e56108d7366004613951565b611d49565b3480156108e857600080fd5b506103b2611e77565b3480156108fd57600080fd5b506103b2601c5481565b34801561091357600080fd5b5060195461044290600160a81b900460ff1681565b34801561093457600080fd5b506103e5610943366004613973565b611e92565b34801561095457600080fd5b506103e561096336600461370b565b612019565b34801561097457600080fd5b506103e561098336600461398c565b612146565b34801561099457600080fd5b506103e56109a33660046139a9565b6121ab565b3480156109b457600080fd5b506103e56109c3366004613821565b612327565b3480156109d457600080fd5b506103b26109e33660046137da565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6103e5610a1c36600461370b565b6123f8565b348015610a2d57600080fd5b50601354610553906001600160a01b031681565b348015610a4d57600080fd5b506103e5610a5c36600461370b565b6127d6565b348015610a6d57600080fd5b506103e5610a7c366004613821565b6128c0565b348015610a8d57600080fd5b506103b260205481565b348015610aa357600080fd5b50601754610553906001600160a01b031681565b348015610ac357600080fd5b506103b2600181565b6000546001600160a01b03163314610aff5760405162461bcd60e51b8152600401610af6906139de565b60405180910390fd5b600b859055600a849055600c83905582610b198686613a29565b610b239190613a29565b600d55600e8290556011819055610b3b600282613a41565b600d5410610b4857600080fd5b600080516020613f628339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b8152508152602001601154600d546064610bae9190613a63565b610bb89190613a41565b905281526040805160808101825260119181018281527013585c9ad95d1a5b99c814195c98d95b9d607a1b606083015281529054602092830192820190610c008b6064613a63565b610c0a9190613a41565b9052815260408051608081018252600b9181019182526a11195d8814195c98d95b9d60aa1b6060820152908152601154602092830192820190610c4e8a6064613a63565b610c589190613a41565b90529052604051610c699190613adb565b60405180910390a15050505050565b6000610c853384846129b0565b5060015b92915050565b6000610c9d6009600a613bed565b610cab906305f5e100613a63565b905090565b6000546001600160a01b03163314610cda5760405162461bcd60e51b8152600401610af6906139de565b601280546001600160a01b03199081166001600160a01b0388811691909117909255601380548216878416179055601480548216868416178155601580548316868516179055601680549092169284169290921790556040805160e08101825260a0810192835273026b0b935b2ba34b733902932b1b2b4bb32b91d160651b60c08201529051600080516020613f6283398151915292829160608301918291610da99190610da490610d90908e90602001613bfc565b604051602081830303815290604052612abd565b612cd6565b8152602001600181525081526020016040518060400160405280610e026040518060400160405280600f81526020016e02837b7b6102932b1b2b4bb32b91d1608d1b815250610da488604051602001610d909190613bfc565b81526001602091820152908252604080516060810182526000818301818152825281840152929091019190915251610c699190613c19565b6000610e486009600a613bed565b600254610cab9190613a41565b6001600160a01b038316600090815260066020908152604080832033845290915281205460001914610ed5576001600160a01b0384166000908152600660209081526040808320338452909152902054610eb0908390613c50565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b610ee0848484612d02565b90505b9392505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd549091610f4691613a29565b610f526009600a613bed565b610f60906305f5e100613a63565b610cab9190613c50565b6000546001600160a01b03163314610f945760405162461bcd60e51b8152600401610af6906139de565b610fa06009600a613bed565b610fae906305f5e100613a63565b600155610fbd6009600a613bed565b610fcb906305f5e100613a63565b60029081556040805182815260608101825260009290916020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e9190613c7d565b8160008151811061107157611071613c9a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106110a5576110a5613c9a565b6001600160a01b03928316602091820292909201015260175460405163b6f9de9560e01b815291169063b6f9de959047906110ed90600090869061dead904290600401613cf4565b6000604051808303818588803b15801561110657600080fd5b505af115801561111a573d6000803e3d6000fd5b505043601c55505042601d5550601e805460ff1916600117905560a66111426009600a613bed565b611150906305f5e100613a63565b61115b906001613a63565b6111659190613a41565b60015560a66111766009600a613bed565b611184906305f5e100613a63565b61118f906001613a63565b6111999190613a41565b60025550565b600080546001600160a01b031633146111ca5760405162461bcd60e51b8152600401610af6906139de565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611217573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee39190613d29565b6000546001600160a01b031633146112655760405162461bcd60e51b8152600401610af6906139de565b600d54600b54479160009161127a9084613a63565b6112849190613a41565b90506000600d54600c54846112999190613a63565b6112a39190613a41565b905060006112b18284613a29565b6112bb9085613c50565b905082156112ff576012546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156112fd573d6000803e3d6000fd5b505b8115611341576016546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561133f573d6000803e3d6000fd5b505b80156114265760006008611356836003613a63565b6113609190613a41565b6013546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561139b573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156113d6573d6000803e3d6000fd5b506015546001600160a01b03166108fc6113f1836002613a63565b6113fb9085613c50565b6040518115909202916000818181858888f19350505050158015611423573d6000803e3d6000fd5b50505b50505050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c85918590611463908690613a29565b6129b0565b6000546001600160a01b031633146114925760405162461bcd60e51b8152600401610af6906139de565b6019805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146114d15760405162461bcd60e51b8152600401610af6906139de565b601780546001600160a01b038085166001600160a01b03199283168117909355601a80549185169190921681179091556000908152601860209081526040808320805460ff19908116600190811790925594845260088352928190208054909416909217909255805160e081018252600c60a082019081526b02732bb902937baba32b91d160a51b60c08301529151600080516020613f62833981519152939192839260608401928392611591929091610da491610d90918c9101613bfc565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b6060830152601a54925194840194919384936115f693610da492610d90926001600160a01b03169101613bfc565b8152600160209182015290825260408051606081018252600081830181815282528184015292909101919091525161162e9190613d46565b60405180910390a15050565b6000546001600160a01b031633146116645760405162461bcd60e51b8152600401610af6906139de565b601a546001600160a01b03838116911614156116cd5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610af6565b6001600160a01b0382166000908152601860205260409020805460ff1916821515179055600080516020613f6283398151915281611740576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c6564000000000000000000815250611770565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a08101909152806060810180611791610d908960c08601613bfc565b815260016020918201529082526040805160608082018352600082840181815283528285018190528585019290925282519081018352808301828152815292830152918201525161162e929190613d8d565b6000546001600160a01b0316331461180d5760405162461bcd60e51b8152600401610af6906139de565b60008311801561181d5750600082115b80156118295750600081115b801561183757506127108111155b61184057600080fd5b808361184e6009600a613bed565b61185c906305f5e100613a63565b6118669190613a63565b6118709190613a41565b60015580826118816009600a613bed565b61188f906305f5e100613a63565b6118999190613a63565b6118a39190613a41565b6002556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c083015260608201908152600080516020613f6283398151915291908190608082016118fb6009600a613bed565b6001546119089190613a41565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b6060820152908152602091820191810161194d6009600a613bed565b60025461195a9190613a41565b905281526040805160608101825260008183018181528252602082810191909152909201919091525161198d9190613dbb565b60405180910390a1505050565b6000610c8982600019610c78565b60006119b66009600a613bed565b600354610cab9190613a41565b6000436001601c546119d59190613a29565b11156119f15760016011546119ea9190613c50565b9050610c89565b8215611a2d5781611a1157600e54600d54611a0c9190613a29565b6119ea565b6064601054600d54611a239190613a63565b6119ea9190613a41565b81611a4757600e54600d54611a429190613c50565b610ee3565b6064601054600d54611a599190613a63565b610ee39190613a41565b6000546001600160a01b03163314611a8d5760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b0382166000908152600760205260409020805460ff1916821515179055600080516020613f6283398151915281611af0576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b815250611770565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a0810190925290806060810180611791610d908960c08601613bfc565b6000546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610af6906139de565b8215801590611b6a57508083145b611b7357600080fd5b3360005b848110156114235760186000878784818110611b9557611b95613c9a565b9050602002016020810190611baa919061370b565b6001600160a01b0316815260208101919091526040016000205460ff16158015611c19575060096000878784818110611be557611be5613c9a565b9050602002016020810190611bfa919061370b565b6001600160a01b0316815260208101919091526040016000205460ff16155b15611c7f57611c7d82878784818110611c3457611c34613c9a565b9050602002016020810190611c49919061370b565b611c556009600a613bed565b878786818110611c6757611c67613c9a565b90506020020135611c789190613a63565b613103565b505b80611c8981613e02565b915050611b77565b6000546001600160a01b03163314611cbb5760405162461bcd60e51b8152600401610af6906139de565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c85918590611463908690613c50565b6000610ee3338484612d02565b6000546001600160a01b03163314611d735760405162461bcd60e51b8152600401610af6906139de565b600082118015611d835750600081115b8015611d9157506127108111155b611d9a57600080fd5b8082611da86009600a613bed565b611db6906305f5e100613a63565b611dc09190613a63565b611dca9190613a41565b6003556040805160e08101909152600660a0820190815265546f6b656e7360d01b60c083015260608201908152600080516020613f628339815191529190819060808201611e1a6009600a613bed565b600354611e279190613a41565b9052815260408051606080820183526000828401818152835260208381018290528086019390935283519182018452818401818152825291810191909152918101919091525161162e9190613e1d565b6000611e856009600a613bed565b600154610cab9190613a41565b6000546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610af6906139de565b610708601b54611ecc9190613a29565b4211611f1a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610af6565b60058111158015611f2b5750600081115b611f775760405162461bcd60e51b815260206004820152601960248201527f4d6178206f66203525206f6620746f6b656e7320696e204c50000000000000006044820152606401610af6565b42601b55601a546001600160a01b031660008181526004602052604090205490611fb49061dead6064611faa8686613a63565b611c789190613a41565b50601a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561200557600080fd5b505af1158015611423573d6000803e3d6000fd5b6000546001600160a01b031633146120435760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b03811660009081526009602090815260408083208054600160ff1991821681179092556008845282852080548216831790556007845293829020805490941617909255815160e081018352601160a08201908152700283932b9b0b6329020b2323932b9b99d1607d1b60c08301529251600080516020613f628339815191529391928392606084019283926120ea9291610da491610d90918b9101613bfc565b815260016020918201529082526040805160608082018352600082840181815283528285018190528585019290925282519081018352808301828152815292830152918201525161213b9190613e5a565b60405180910390a150565b6000546001600160a01b031633146121705760405162461bcd60e51b8152600401610af6906139de565b801561218d57601954600160a81b900460ff161561218d57600080fd5b60198054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146121d55760405162461bcd60e51b8152600401610af6906139de565b600082116121e257600080fd5b601e805460ff1916841515179055816121fd6009600a613bed565b61220b906305f5e100613a63565b6122159190613a41565b601f55806122256009600a613bed565b612233906305f5e100613a63565b61223d9190613a41565b6020556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c083015260608201908152600080516020613f6283398151915291908190608082018761228e576000612291565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001601f54815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d696e696d756d60a01b815250815260200160205481525081525060405161198d9190613e91565b6000546001600160a01b031633146123515760405162461bcd60e51b8152600401610af6906139de565b6019546001600160a01b0383811691161461239957601954600160a81b900460ff161561237d57600080fd5b601980546001600160a01b0319166001600160a01b0384161790555b80156123f457601954601a54604051633d42475360e01b81523360048201523060248201526001600160a01b039182166044820152911690633d42475390606401600060405180830381600087803b15801561200557600080fd5b5050565b6000546001600160a01b031633146124225760405162461bcd60e51b8152600401610af6906139de565b601d54156124725760405162461bcd60e51b815260206004820152601760248201527f4c697175696469747920616c72656164792061646465640000000000000000006044820152606401610af6565b600034116124b75760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610af6565b34600060646124c7836050613a63565b6124d19190613a41565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051929350909163c45a0155916004808201926020929091908290030181865afa15801561253a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255e9190613c7d565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e49190613c7d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126559190613c7d565b601a80546001600160a01b039283166001600160a01b03199182168117835560009081526018602052604090819020805460ff191660011790556019805488861693168317905591549151633d42475360e01b8152336004820152306024820152919092166044820152633d42475390606401600060405180830381600087803b1580156126e257600080fd5b505af11580156126f6573d6000803e3d6000fd5b50503060008181526009602090815260408083208054600160ff19918216811790925560078452828520805490911690911790556017546004909252909120546001600160a01b03909116935063f305d71992508491906040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156127b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114239190613ec8565b6000546001600160a01b031633146128005760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b0381166128655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146128ea5760405162461bcd60e51b8152600401610af6906139de565b6001600160a01b0382166000908152600860205260409020805460ff1916821515179055600080516020613f628339815191528161295d576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f72636564000000000000815250611770565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a0810190925290806060810180611791610d908960c08601613bfc565b6001600160a01b038316612a065760405162461bcd60e51b815260206004820181905260248201527f42455032303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610af6565b6001600160a01b038216612a5c5760405162461bcd60e51b815260206004820152601e60248201527f42455032303a20617070726f766520746f207a65726f206164647265737300006044820152606401610af6565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160609190600090612af8906002613a63565b612b03906002613a29565b67ffffffffffffffff811115612b1b57612b1b613c67565b6040519080825280601f01601f191660200182016040528015612b45576020820181803683370190505b509050600360fc1b81600081518110612b6057612b60613c9a565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612b8f57612b8f613c9a565b60200101906001600160f81b031916908160001a90535060005b8451811015612cce57826004868381518110612bc757612bc7613c9a565b016020015182516001600160f81b031990911690911c60f81c908110612bef57612bef613c9a565b01602001516001600160f81b03191682612c0a836002613a63565b612c15906002613a29565b81518110612c2557612c25613c9a565b60200101906001600160f81b031916908160001a90535082858281518110612c4f57612c4f613c9a565b602091010151815160f89190911c600f16908110612c6f57612c6f613c9a565b01602001516001600160f81b03191682612c8a836002613a63565b612c95906003613a29565b81518110612ca557612ca5613c9a565b60200101906001600160f81b031916908160001a90535080612cc681613e02565b915050612ba9565b509392505050565b60608282604051602001612ceb929190613ef6565b604051602081830303815290604052905092915050565b6000808211612d4b5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610af6565b6001600160a01b038416600090815260046020526040902054821115612daa5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610af6565b601d54158015612dd257506001600160a01b03831660009081526018602052604090205460ff165b15612e3f576001600160a01b03841660009081526009602052604090205460ff16612e3f5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610af6565b612e4984836131bd565b6001600160a01b03831660009081526018602052604090205460ff16158015612e7d57506001600160a01b03831661dead14155b15612ee5576001600160a01b038316600090815260046020526040902054612ebb576001600160a01b03831660009081526005602052604090204290555b6001600160a01b03831660009081526008602052604090205460ff16612ee557612ee5838361324f565b60215460ff1615612f0257612efb848484613103565b9050610ee3565b6001600160a01b038416600090815260046020526040902054612f26908390613c50565b6001600160a01b038516600090815260046020908152604080832093909355600790529081205460ff16158015612f7657506001600160a01b03841660009081526007602052604090205460ff16155b612f805782612f8b565b612f8b8585856132d9565b9050612fb0856001600160a01b031660009081526007602052604090205460ff161590565b8015612fc05750612fc0846133ff565b15612fce57612fce83613486565b6001600160a01b038416600090815260046020526040902054612ff2908290613a29565b6001600160a01b038516600090815260046020526040902055601d54151580156130255750601954600160a01b900460ff165b156130ab5760195460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015613085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a99190613d29565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130f091815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260046020526040812054613127908390613c50565b6001600160a01b038086166000908152600460205260408082209390935590851681522054613157908390613a29565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131ab9086815260200190565b60405180910390a35060019392505050565b6001600160a01b03821660009081526008602052604090205460ff168061320f57506001600160a01b03821660009081526018602052604090205460ff166132075760025461320b565b6001545b8111155b6123f45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610af6565b6003546001600160a01b0383166000908152600460205260409020548190613278908490613a29565b11156132d45760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610af6565b505050565b6001600160a01b0380831660009081526018602052604080822054601154938716835290822054919260ff91821692849261336a9185911615801561333657506001600160a01b0389166000908152600560205260409020544214155b80156106d05750600f546001600160a01b038a16600090815260056020526040902054429161336491613a29565b116119c3565b6133749086613a63565b61337e9190613a41565b905080156133eb5730600090815260046020526040812080548392906133a5908490613a29565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6133f58185613c50565b9695505050505050565b3360009081526018602052604081205460ff16158015613422575060215460ff16155b80156134305750601e5460ff165b801561345457506001600160a01b03821660009081526018602052604090205460ff165b8015613473575060208054306000908152600490925260409091205410155b8015610c8957506000600d541192915050565b6021805460ff19166001179055601f5460009082106134a757601f546134a9565b815b306000908152600460205260409020549091508111156134d55750306000908152600460205260409020545b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350a5761350a613c9a565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135879190613c7d565b8160018151811061359a5761359a613c9a565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906135e0908590600090869030904290600401613f25565b600060405180830381600087803b1580156135fa57600080fd5b505af115801561360e573d6000803e3d6000fd5b50506021805460ff191690555050505050565b600080600080600060a0868803121561363957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561367757818101518382015260200161365f565b838111156114265750506000910152565b600081518084526136a081602086016020860161365c565b601f01601f19169290920160200192915050565b602081526000610ee36020830184613688565b6001600160a01b03811681146136dc57600080fd5b50565b600080604083850312156136f257600080fd5b82356136fd816136c7565b946020939093013593505050565b60006020828403121561371d57600080fd5b8135610ee3816136c7565b600080600080600060a0868803121561374057600080fd5b853561374b816136c7565b9450602086013561375b816136c7565b9350604086013561376b816136c7565b9250606086013561377b816136c7565b9150608086013561378b816136c7565b809150509295509295909350565b6000806000606084860312156137ae57600080fd5b83356137b9816136c7565b925060208401356137c9816136c7565b929592945050506040919091013590565b600080604083850312156137ed57600080fd5b82356137f8816136c7565b91506020830135613808816136c7565b809150509250929050565b80151581146136dc57600080fd5b6000806040838503121561383457600080fd5b823561383f816136c7565b9150602083013561380881613813565b60008060006060848603121561386457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561388e57600080fd5b823561383f81613813565b60008083601f8401126138ab57600080fd5b50813567ffffffffffffffff8111156138c357600080fd5b6020830191508360208260051b85010111156138de57600080fd5b9250929050565b600080600080604085870312156138fb57600080fd5b843567ffffffffffffffff8082111561391357600080fd5b61391f88838901613899565b9096509450602087013591508082111561393857600080fd5b5061394587828801613899565b95989497509550505050565b6000806040838503121561396457600080fd5b50508035926020909101359150565b60006020828403121561398557600080fd5b5035919050565b60006020828403121561399e57600080fd5b8135610ee381613813565b6000806000606084860312156139be57600080fd5b83356139c981613813565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a3c57613a3c613a13565b500190565b600082613a5e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613a7d57613a7d613a13565b500290565b600082606081018360005b6003811015613ad0578383038752815160408151818652613ab082870182613688565b602093840151968401969096525050968701969190910190600101613a8d565b509095945050505050565b6040815260046040820152634665657360e01b6060820152608060208201526000610ee36080830184613a82565b600181815b80851115613b44578160001904821115613b2a57613b2a613a13565b80851615613b3757918102915b93841c9390800290613b0e565b509250929050565b600082613b5b57506001610c89565b81613b6857506000610c89565b8160018114613b7e5760028114613b8857613ba4565b6001915050610c89565b60ff841115613b9957613b99613a13565b50506001821b610c89565b5060208310610133831016604e8410600b8410161715613bc7575081810a610c89565b613bd18383613b09565b8060001904821115613be557613be5613a13565b029392505050565b6000610ee360ff841683613b4c565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610ee36080830184613a82565b600082821015613c6257613c62613a13565b500390565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613c8f57600080fd5b8151610ee3816136c7565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613ce95781516001600160a01b031687529582019590820190600101613cc4565b509495945050505050565b848152608060208201526000613d0d6080830186613cb0565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215613d3b57600080fd5b8151610ee381613813565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610ee36080830184613a82565b604081526000613da06040830185613688565b8281036020840152613db28185613a82565b95945050505050565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610ee36080830184613a82565b6000600019821415613e1657613e16613a13565b5060010190565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610ee36080830184613a82565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610ee36080830184613a82565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610ee36080830184613a82565b600080600060608486031215613edd57600080fd5b8351925060208401519150604084015190509250925092565b60008351613f0881846020880161365c565b835190830190613f1c81836020880161365c565b01949350505050565b85815284602082015260a060408201526000613f4460a0830186613cb0565b6001600160a01b039490941660608301525060800152939250505056fe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96a2646970667358221220152fc45772689a5ca534508a6d84f9b301728bf3336d9ef1db538814799cccc064736f6c634300080b0033

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

000000000000000000000000212dd56a85f3d3338bc2bf7978784e00165d9187000000000000000000000000db07aa1b7f0151bf466c17fe35b90b559d9c6d9f000000000000000000000000d45b17b65eca7eb779a77cfd7fe95b74dc0281da000000000000000000000000a33a0bf545035c21afd41e6f1c20a25849cfe629

-----Decoded View---------------
Arg [0] : _dev1 (address): 0x212dD56a85F3d3338BC2Bf7978784e00165D9187
Arg [1] : _dev2 (address): 0xdB07Aa1b7F0151bF466C17fe35B90B559D9c6d9F
Arg [2] : _dev3 (address): 0xd45b17b65eca7Eb779A77CFD7fE95b74DC0281Da
Arg [3] : _marketing (address): 0xa33a0bf545035C21Afd41e6f1c20a25849CFe629

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000212dd56a85f3d3338bc2bf7978784e00165d9187
Arg [1] : 000000000000000000000000db07aa1b7f0151bf466c17fe35b90b559d9c6d9f
Arg [2] : 000000000000000000000000d45b17b65eca7eb779a77cfd7fe95b74dc0281da
Arg [3] : 000000000000000000000000a33a0bf545035c21afd41e6f1c20a25849cfe629


Deployed Bytecode Sourcemap

15582:19286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17707:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17707:49:0;;;;;;;;31740:639;;;;;;;;;;-1:-1:-1;31740:639:0;;;;;:::i;:::-;;:::i;:::-;;19032:71;;;;;;;;;;-1:-1:-1;19095:5:0;;;;;;;;;;;;-1:-1:-1;;;19095:5:0;;;;19032:71;;;;;;;:::i;20115:152::-;;;;;;;;;;-1:-1:-1;20115:152:0;;;;;:::i;:::-;;:::i;:::-;;;2027:14:1;;2020:22;2002:41;;1990:2;1975:18;20115:152:0;1862:187:1;17239:47:0;;;;;;;;;;-1:-1:-1;17239:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18780:88;;;;;;;;;;;;;:::i;17449:56::-;;;;;;;;;;;;17495:10;17449:56;;32387:609;;;;;;;;;;-1:-1:-1;32387:609:0;;;;;:::i;:::-;;:::i;19297:107::-;;;;;;;;;;;;;:::i;23074:341::-;;;;;;;;;;-1:-1:-1;23074:341:0;;;;;:::i;:::-;;:::i;33465:138::-;;;;;;;;;;;;;:::i;18874:71::-;;;;;;;;;;-1:-1:-1;18874:71:0;;15921:1;3727:36:1;;3715:2;3700:18;18874:71:0;3585:184:1;16890:35:0;;;;;;;;;;-1:-1:-1;16890:35:0;;;;-1:-1:-1;;;;;16890:35:0;;;;;;-1:-1:-1;;;;;3954:32:1;;;3936:51;;3924:2;3909:18;16890:35:0;3774:219:1;24898:671:0;;;;;;;;;;;;;:::i;21345:190::-;;;;;;;;;;-1:-1:-1;21345:190:0;;;;;:::i;:::-;;:::i;21547:723::-;;;;;;;;;;;;;:::i;20275:215::-;;;;;;;;;;-1:-1:-1;20275:215:0;;;;;:::i;:::-;;:::i;16848:35::-;;;;;;;;;;-1:-1:-1;16848:35:0;;;;-1:-1:-1;;;;;16848:35:0;;;22810:92;;;;;;;;;;;;;:::i;29395:460::-;;;;;;;;;;-1:-1:-1;29395:460:0;;;;;:::i;:::-;;:::i;29039:344::-;;;;;;;;;;-1:-1:-1;29039:344:0;;;;;:::i;:::-;;:::i;30260:534::-;;;;;;;;;;-1:-1:-1;30260:534:0;;;;;:::i;:::-;;:::i;20731:122::-;;;;;;;;;;-1:-1:-1;20731:122:0;;;;;:::i;:::-;;:::i;17588:27::-;;;;;;;;;;;;;;;;19410:105;;;;;;;;;;;;;:::i;27257:355::-;;;;;;;;;;-1:-1:-1;27257:355:0;;;;;:::i;:::-;;:::i;31164:263::-;;;;;;;;;;-1:-1:-1;31164:263:0;;;;;:::i;:::-;;:::i;20865:468::-;;;;;;;;;;-1:-1:-1;20865:468:0;;;;;:::i;:::-;;:::i;17669:31::-;;;;;;;;;;-1:-1:-1;17669:31:0;;;;;;;;19521:105;;;;;;;;;;-1:-1:-1;19521:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;19605:18:0;19587:7;19605:18;;;:9;:18;;;;;;;19521:105;14791:148;;;;;;;;;;;;;:::i;17333:36::-;;;;;;;;;;-1:-1:-1;17333:36:0;;;;-1:-1:-1;;;17333:36:0;;;;;;17299:27;;;;;;;;;;-1:-1:-1;17299:27:0;;;;-1:-1:-1;;;;;17299:27:0;;;19109:71;;;;;;;;;;-1:-1:-1;19152:7:0;14215:6;-1:-1:-1;;;;;14215:6:0;19109:71;18780:88;16932:35;;;;;;;;;;-1:-1:-1;16932:35:0;;;;-1:-1:-1;;;;;16932:35:0;;;18951:75;;;;;;;;;;-1:-1:-1;19016:7:0;;;;;;;;;;;;-1:-1:-1;;;19016:7:0;;;;18951:75;;17512:35;;;;;;;;;;;;;;;;20498:225;;;;;;;;;;-1:-1:-1;20498:225:0;;;;;:::i;:::-;;:::i;16759:40::-;;;;;;;;;;-1:-1:-1;16759:40:0;;;;-1:-1:-1;;;;;16759:40:0;;;17423:19;;;;;;;;;;-1:-1:-1;17423:19:0;;;;-1:-1:-1;;;;;17423:19:0;;;22910:156;;;;;;;;;;-1:-1:-1;22910:156:0;;;;;:::i;:::-;;:::i;30806:350::-;;;;;;;;;;-1:-1:-1;30806:350:0;;;;;:::i;:::-;;:::i;19186:105::-;;;;;;;;;;;;;:::i;17556:25::-;;;;;;;;;;;;;;;;17376:38;;;;;;;;;;-1:-1:-1;17376:38:0;;;;-1:-1:-1;;;17376:38:0;;;;;;33611:480;;;;;;;;;;-1:-1:-1;33611:480:0;;;;;:::i;:::-;;:::i;29867:385::-;;;;;;;;;;-1:-1:-1;29867:385:0;;;;;:::i;:::-;;:::i;22282:177::-;;;;;;;;;;-1:-1:-1;22282:177:0;;;;;:::i;:::-;;:::i;33004:453::-;;;;;;;;;;-1:-1:-1;33004:453:0;;;;;:::i;:::-;;:::i;22471:327::-;;;;;;;;;;-1:-1:-1;22471:327:0;;;;;:::i;:::-;;:::i;19632:133::-;;;;;;;;;;-1:-1:-1;19632:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;19734:19:0;;;19716:7;19734:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19632:133;25577:772;;;;;;:::i;:::-;;:::i;16806:35::-;;;;;;;;;;-1:-1:-1;16806:35:0;;;;-1:-1:-1;;;;;16806:35:0;;;15094:244;;;;;;;;;;-1:-1:-1;15094:244:0;;;;;:::i;:::-;;:::i;31435:297::-;;;;;;;;;;-1:-1:-1;31435:297:0;;;;;:::i;:::-;;:::i;17763:49::-;;;;;;;;;;;;;;;;16976:24;;;;;;;;;;-1:-1:-1;16976:24:0;;;;-1:-1:-1;;;;;16976:24:0;;;17622:38;;;;;;;;;;;;17659:1;17622:38;;31740:639;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;;;;;;;;;31889:12:::1;:28:::0;;;31928:6:::1;:16:::0;;;31955:7:::1;:18:::0;;;31965:8;31996:23:::1;31904:13:::0;31937:7;31996:23:::1;:::i;:::-;:34;;;;:::i;:::-;31984:9;:46:::0;32041:8:::1;:20:::0;;;32072:14:::1;:32:::0;;;32135:18:::1;32152:1;32089:15:::0;32135:18:::1;:::i;:::-;32123:9;;:30;32115:39;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;32170:201:0::1;;;;;;;;32195:58;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;32195:58:0::1;;::::0;::::1;;;;32238:14;;32220:9;;32232:3;32220:15;;;;:::i;:::-;:32;;;;:::i;:::-;32195:58:::0;;32170:201;;32255:62:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;32255:62:0;;;;;;32302:14;;32170:201:::1;::::0;;::::1;::::0;32255:62;::::1;::::0;32280:19:::1;:13:::0;32296:3:::1;32280:19;:::i;:::-;:36;;;;:::i;:::-;32255:62:::0;;32170:201;;32319:50:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;32319:50:0;;;;;;;32354:14:::1;::::0;32170:201:::1;::::0;;::::1;::::0;32319:50;::::1;::::0;32338:13:::1;:7:::0;32348:3:::1;32338:13;:::i;:::-;:30;;;;:::i;:::-;32319:50:::0;;32170:201;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;31740:639:::0;;;;;:::o;20115:152::-;20181:4;20198:39;6408:10;20221:7;20230:6;20198:8;:39::i;:::-;-1:-1:-1;20255:4:0;20115:152;;;;;:::o;18780:88::-;18835:7;15978:15;15921:1;15978:2;:15;:::i;:::-;15963:31;;:11;:31;:::i;:::-;18846:19;;18780:88;:::o;32387:609::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;32538:17:::1;:47:::0;;-1:-1:-1;;;;;;32538:47:0;;::::1;-1:-1:-1::0;;;;;32538:47:0;;::::1;::::0;;;::::1;::::0;;;32596:12:::1;:29:::0;;;::::1;::::0;;::::1;;::::0;;32636:12:::1;:29:::0;;;::::1;::::0;;::::1;;::::0;;32676:12:::1;:29:::0;;;::::1;::::0;;::::1;;::::0;;32716:12:::1;:37:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;32769:219:::1;::::0;;32807:82;;;;;32803:90;;;32807:82;;;-1:-1:-1;;;32807:82:0;;;;32851:36;;-1:-1:-1;;;;;;;;;;;32769:219:0;;;::::1;::::0;::::1;::::0;;;32807:82:::1;::::0;32803:90;32842:46:::1;::::0;32851:36:::1;::::0;32538:47;;32807:82:::1;32851:36;;:::i;:::-;;;;;;;;;;;;;32842:8;:46::i;:::-;32807:11;:82::i;:::-;32803:90;;;;32891:1;32803:90;;::::0;32769:219:::1;;;;32895:80;;;;;;;;32899:72;;;;;;;;;;;;;;-1:-1:-1::0;;;32899:72:0::1;;::::0;32929:41:::1;32955:13;32938:31;;;;;;;;:::i;32899:72::-;32895:80:::0;;32973:1:::1;32895:80;::::0;;::::1;::::0;32769:219;;;32977:9:::1;::::0;;;;;;;-1:-1:-1;32977:9:0;;::::1;::::0;;;;;;;::::1;::::0;32769:219;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;19297:107::-:0;19347:7;19385:15;15921:1;19385:2;:15;:::i;:::-;19365:16;;:36;;;;:::i;23074:341::-;-1:-1:-1;;;;;23194:19:0;;23174:4;23194:19;;;:11;:19;;;;;;;;23214:10;23194:31;;;;;;;;-1:-1:-1;;23194:52:0;23191:157;;-1:-1:-1;;;;;23296:19:0;;;;;;:11;:19;;;;;;;;23316:10;23296:31;;;;;;;;:40;;23330:6;;23296:40;:::i;:::-;-1:-1:-1;;;;;23262:19:0;;;;;;:11;:19;;;;;;;;23282:10;23262:31;;;;;;;:74;23191:157;23367:40;23381:6;23389:9;23400:6;23367:13;:40::i;:::-;23360:47;;23074:341;;;;;;:::o;33465:138::-;19605:9;:18;;;;15689:42;33518:7;19605:18;;;;;33518:7;;33561:33;;;:::i;:::-;15978:15;15921:1;15978:2;:15;:::i;:::-;15963:31;;:11;:31;:::i;:::-;33545:50;;;;:::i;24898:671::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;24956:15;:30:::0;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;24997:16;:31:::0;;;25065:16:::1;::::0;;;;;;;::::1;::::0;;25041:21:::1;::::0;25065:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;25102:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;25102:13:0;;;;25041:40;;-1:-1:-1;;;;;;25102:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;25102:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25092:4;25097:1;25092:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;25092:23:0::1;;;-1:-1:-1::0;;;;;25092:23:0::1;;;::::0;::::1;25144:4;25126;25131:1;25126:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25126:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;25162:6:::1;::::0;:182:::1;::::0;-1:-1:-1;;;25162:182:0;;:6;::::1;::::0;:57:::1;::::0;25227:21:::1;::::0;25162:182:::1;::::0;:6:::1;::::0;25280:4;;15689:42:::1;::::0;25318:15:::1;::::0;25162:182:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25370:12:0::1;25357:10;:25:::0;-1:-1:-1;;25408:15:0::1;25393:12;:30:::0;-1:-1:-1;25434:11:0::1;:18:::0;;-1:-1:-1;;25434:18:0::1;25448:4;25434:18;::::0;;25504:3:::1;15978:15;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;25484:16;::::0;25499:1:::1;25484:16;:::i;:::-;25483:24;;;;:::i;:::-;25465:15;:42:::0;25558:3:::1;15978:15;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;25538:16;::::0;25553:1:::1;25538:16;:::i;:::-;25537:24;;;;:::i;:::-;25518:16;:43:::0;-1:-1:-1;24898:671:0:o;21345:190::-;21441:12;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;21478:49:::1;::::0;-1:-1:-1;;;21478:49:0;;21508:10:::1;21478:49;::::0;::::1;14700:51:1::0;14767:18;;;14760:34;;;-1:-1:-1;;;;;21478:29:0;::::1;::::0;::::1;::::0;14673:18:1;;21478:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21547:723::-:0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;21698:9:::1;::::0;21682:12:::1;::::0;21617:21:::1;::::0;21603:11:::1;::::0;21676:18:::1;::::0;21617:21;21676:18:::1;:::i;:::-;21675:32;;;;:::i;:::-;21649:58;;21718:18;21757:9;;21746:7;;21740:3;:13;;;;:::i;:::-;21739:27;;;;:::i;:::-;21718:48:::0;-1:-1:-1;21777:17:0::1;21804:28;21718:48:::0;21804:15;:28:::1;:::i;:::-;21797:36;::::0;:3;:36:::1;:::i;:::-;21777:56:::0;-1:-1:-1;21858:19:0;;21854:81:::1;;21892:17;::::0;:43:::1;::::0;-1:-1:-1;;;;;21892:17:0;;::::1;::::0;:43;::::1;;;::::0;21919:15;;21892:17:::1;:43:::0;:17;:43;21919:15;21892:17;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21854:81;21950:14:::0;;21946:66:::1;;21979:12;::::0;:33:::1;::::0;-1:-1:-1;;;;;21979:12:0;;::::1;::::0;:33;::::1;;;::::0;22001:10;;21979:12:::1;:33:::0;:12;:33;22001:10;21979:12;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21946:66;22027:13:::0;;22023:240:::1;;22057:16;22094:1;22077:13;:9:::0;22089:1:::1;22077:13;:::i;:::-;22076:19;;;;:::i;:::-;22110:12;::::0;:31:::1;::::0;22057:38;;-1:-1:-1;;;;;;22110:12:0::1;::::0;:31;::::1;;;::::0;22057:38;;22110:12:::1;:31:::0;:12;:31;22057:38;22110:12;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22156:12:0::1;::::0;:31:::1;::::0;-1:-1:-1;;;;;22156:12:0;;::::1;::::0;:31;::::1;;;::::0;22178:8;;22156:12:::1;:31:::0;:12;:31;22178:8;22156:12;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22202:12:0::1;::::0;-1:-1:-1;;;;;22202:12:0::1;:49;22237:12;:8:::0;22248:1:::1;22237:12;:::i;:::-;22224:26;::::0;:9;:26:::1;:::i;:::-;22202:49;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22042:221;22023:240;21592:678;;;;21547:723::o:0;20275:215::-;6408:10;20363:4;20412:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20412:34:0;;;;;;;;;;20363:4;;20380:80;;20403:7;;20412:47;;20449:10;;20412:47;:::i;:::-;20380:8;:80::i;22810:92::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;22869:18:::1;:25:::0;;-1:-1:-1;;;;22869:25:0::1;-1:-1:-1::0;;;22869:25:0::1;::::0;;22810:92::o;29395:460::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;29483:6:::1;:30:::0;;-1:-1:-1;;;;;29483:30:0;;::::1;-1:-1:-1::0;;;;;;29483:30:0;;::::1;::::0;::::1;::::0;;;29524:4:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;29483:6:::1;29549:23:::0;;;:14:::1;:23;::::0;;;;;;;:30;;-1:-1:-1;;29549:30:0;;::::1;29483::::0;29549;;::::1;::::0;;;29590:26;;;:15:::1;:26:::0;;;;;;:33;;;;::::1;::::0;;::::1;::::0;;;29639:208;;29687:65;;;;;::::1;29683:73:::0;;;29687:65;;;-1:-1:-1;;;29687:65:0;;;;29723:27;;-1:-1:-1;;;;;;;;;;;29639:208:0;;;;;::::1;::::0;::::1;::::0;;;29687:65:::1;::::0;29683:73;;29714:37:::1;::::0;29723:27:::1;::::0;29503:9;;29723:27:::1;;:::i;29687:65::-;29683:73:::0;;29754:1:::1;29683:73;::::0;;::::1;::::0;29639:208;;;29757:76:::1;::::0;;29761:68;;;;;::::1;29757:76:::0;;::::1;29761:68:::0;;;-1:-1:-1;;;29761:68:0;;;;29822:4:::1;::::0;29805:22;;29639:208;;::::1;::::0;29757:76;;;;29761:68:::1;::::0;29796:32:::1;::::0;29805:22:::1;::::0;-1:-1:-1;;;;;29822:4:0::1;::::0;29805:22:::1;;:::i;29761:68::-;29757:76:::0;;29831:1:::1;29757:76;::::0;;::::1;::::0;29639:208;;;29835:10:::1;::::0;;;;;;;-1:-1:-1;29835:10:0;;::::1;::::0;;;;;;;::::1;::::0;29639:208;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;29395:460:::0;;:::o;29039:344::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;29134:4:::1;::::0;-1:-1:-1;;;;;29128:10:0;;::::1;29134:4:::0;::::1;29128:10;;29120:57;;;::::0;-1:-1:-1;;;29120:57:0;;15805:2:1;29120:57:0::1;::::0;::::1;15787:21:1::0;15844:2;15824:18;;;15817:30;15883:34;15863:18;;;15856:62;-1:-1:-1;;;15934:18:1;;;15927:32;15976:19;;29120:57:0::1;15603:398:1::0;29120:57:0::1;-1:-1:-1::0;;;;;29188:18:0;::::1;;::::0;;;:14:::1;:18;::::0;;;;:27;;-1:-1:-1;;29188:27:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;29188:27:0;29247:61:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;29247:61:0::1;;::::0;::::1;29231:144;::::0;;29311:38;;;;;;29231:144;::::1;::::0;::::1;::::0;29315:30:::1;29324:20;29341:2:::0;29324:20;;;::::1;:::i;29315:30::-;29311:38:::0;;29347:1:::1;29311:38;::::0;;::::1;::::0;29231:144;;;29351:10:::1;::::0;;;;;;;;-1:-1:-1;29351:10:0;;::::1;::::0;;;;;;;::::1;::::0;;;29231:144;;::::1;::::0;;;;29363:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;29231:144;;;;;::::1;::::0;;;::::1;:::i;30260:534::-:0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;30395:1:::1;30380:12;:16;:37;;;;;30416:1;30400:13;:17;30380:37;:52;;;;;30431:1;30421:7;:11;30380:52;:72;;;;;30447:5;30436:7;:16;;30380:72;30372:81;;;::::0;::::1;;30514:7:::0;30498:12;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;30483:27;;;;:::i;:::-;30482:39;;;;:::i;:::-;30464:15;:57:::0;30584:7;30567:13;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;30552:28;;;;:::i;:::-;30551:40;;;;:::i;:::-;30532:16;:59:::0;30607:179:::1;::::0;;30652:58;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;30652:58:0;;;;30607:179:::1;::::0;::::1;30652:58:::0;;;-1:-1:-1;;;;;;;;;;;30607:179:0;;;;30652:58;;;30693:15:::1;15921:1;30693:2;:15;:::i;:::-;30674;;:35;;;;:::i;:::-;30652:58:::0;;30607:179;;30712:60:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;30712:60:0;;;;;;;30607:179:::1;::::0;;::::1;::::0;30712:60;::::1;30755:15;15921:1;30755:2;:15;:::i;:::-;30735:16;;:36;;;;:::i;:::-;30712:60:::0;;30607:179;;30774:10:::1;::::0;;;;;;;-1:-1:-1;30774:10:0;;::::1;::::0;;;;;30607:179:::1;30774:10:::0;;::::1;::::0;;;;30607:179;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;30260:534:::0;;;:::o;20731:122::-;20786:4;20810:35;20818:7;-1:-1:-1;;20810:7:0;:35::i;19410:105::-;19460:7;19496:15;15921:1;19496:2;:15;:::i;:::-;19478:14;;:34;;;;:::i;27257:355::-;27330:7;27379:12;17659:1;27353:10;;:23;;;;:::i;:::-;:38;27350:72;;;27418:1;27401:14;;:18;;;;:::i;:::-;27394:25;;;;27350:72;27436:7;27432:87;;;27452:10;:67;;27511:8;;27499:9;;:20;;;;:::i;:::-;27452:67;;;27493:3;27478:11;;27466:9;;:23;;;;:::i;:::-;27465:31;;;;:::i;27432:87::-;27537:10;:67;;27596:8;;27584:9;;:20;;;;:::i;:::-;27537:67;;;27578:3;27563:11;;27551:9;;:23;;;;:::i;:::-;27550:31;;;;:::i;31164:263::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31247:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;31247:28:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;31247:28:0;31307:41:::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;31307:41:0::1;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;31307:41:0::1;::::0;::::1;::::0;31291:128;;31351:42;;;;;;31307:41;31291:128;::::1;::::0;::::1;::::0;31355:34:::1;31364:24;31381:6:::0;31364:24;;;::::1;:::i;20865:468::-:0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;20978:20;;;;;:58:::1;;-1:-1:-1::0;21002:34:0;;::::1;20978:58;20970:67;;;::::0;::::1;;21063:10;21048:12;21086:240;21103:20:::0;;::::1;21086:240;;;21149:14;:28;21164:9;;21174:1;21164:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21149:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21149:28:0;;::::1;;21148:29;:64:::0;::::1;;;;21182:16;:30;21199:9;;21209:1;21199:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21182:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21182:30:0;;::::1;;21181:31;21148:64;21145:170;;;21233:66;21248:4;21254:9;;21264:1;21254:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21282:15;15921:1;21282:2;:15;:::i;:::-;21268:7;;21276:1;21268:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;21233:14;:66::i;:::-;;21145:170;21125:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21086:240;;14791:148:::0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;14898:1:::1;14882:6:::0;;14861:40:::1;::::0;-1:-1:-1;;;;;14882:6:0;;::::1;::::0;14861:40:::1;::::0;14898:1;;14861:40:::1;14929:1;14912:19:::0;;-1:-1:-1;;;;;;14912:19:0::1;::::0;;14791:148::o;20498:225::-;6408:10;20591:4;20640:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20640:34:0;;;;;;;;;;20591:4;;20608:85;;20631:7;;20640:52;;20677:15;;20640:52;:::i;22910:156::-;22990:4;23014:44;23028:10;23040:9;23051:6;23014:13;:44::i;30806:350::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;30916:1:::1;30904:9;:13;:28;;;;;30931:1;30921:7;:11;30904:28;:48;;;;;30947:5;30936:7;:16;;30904:48;30896:57;;;::::0;::::1;;31010:7:::0;30997:9;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;30982:24;;;;:::i;:::-;30981:36;;;;:::i;:::-;30964:14;:53:::0;31033:115:::1;::::0;;31073:49;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;31073:49:0;;;;31033:115:::1;::::0;::::1;31073:49:::0;;;-1:-1:-1;;;;;;;;;;;31033:115:0;;;;31073:49;;;31105:15:::1;15921:1;31105:2;:15;:::i;:::-;31087:14;;:34;;;;:::i;:::-;31073:49:::0;;31033:115;;31124:10:::1;::::0;;;;;;;;-1:-1:-1;31124:10:0;;::::1;::::0;;;;;31033:115:::1;31124:10:::0;;::::1;::::0;;;31033:115;;::::1;::::0;;;;31136:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;31033:115;;;;;;;;::::1;::::0;;::::1;:::i;19186:105::-:0;19235:7;19272:15;15921:1;19272:2;:15;:::i;:::-;19253;;:35;;;;:::i;33611:480::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;17495:10:::1;33700:20;;:42;;;;:::i;:::-;33682:15;:60;33674:106;;;::::0;-1:-1:-1;;;33674:106:0;;17907:2:1;33674:106:0::1;::::0;::::1;17889:21:1::0;;;17926:18;;;17919:30;17985:34;17965:18;;;17958:62;18037:18;;33674:106:0::1;17705:356:1::0;33674:106:0::1;33810:1;33799:7;:12;;:27;;;;;33825:1;33815:7;:11;33799:27;33791:65;;;::::0;-1:-1:-1;;;33791:65:0;;18268:2:1;33791:65:0::1;::::0;::::1;18250:21:1::0;18307:2;18287:18;;;18280:30;18346:27;18326:18;;;18319:55;18391:18;;33791:65:0::1;18066:349:1::0;33791:65:0::1;33890:15;33867:20;:38:::0;33958:4:::1;::::0;-1:-1:-1;;;;;33958:4:0::1;33926:19;19605:18:::0;;;:9;:18;;;;;;;33984:57:::1;::::0;15689:42:::1;34037:3;34012:21;34026:7:::0;19605:18;34012:21:::1;:::i;:::-;34011:29;;;;:::i;33984:57::-;;34071:4;;;;;;;;;-1:-1:-1::0;;;;;34071:4:0::1;-1:-1:-1::0;;;;;34062:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;29867:385:::0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29952:32:0;::::1;;::::0;;;:16:::1;:32;::::0;;;;;;;:39;;29987:4:::1;-1:-1:-1::0;;29952:39:0;;::::1;::::0;::::1;::::0;;;30002:15:::1;:31:::0;;;;;:38;;;::::1;::::0;::::1;::::0;;30051:11:::1;:27:::0;;;;;;:34;;;;::::1;;::::0;;;30101:143;;30139:75;;;;;::::1;30135:83:::0;;;30139:75;;;-1:-1:-1;;;30139:75:0;;;;30180:32;;-1:-1:-1;;;;;;;;;;;30101:143:0;;;;;::::1;::::0;::::1;::::0;;;30139:75:::1;::::0;30135:83;30171:42:::1;::::0;30180:32:::1;::::0;29952;;30180::::1;;:::i;30139:75::-;30135:83:::0;;30216:1:::1;30135:83;::::0;;::::1;::::0;30101:143;;;30220:10:::1;::::0;;;;;;;;-1:-1:-1;30220:10:0;;::::1;::::0;;;;;;;::::1;::::0;;;30101:143;;::::1;::::0;;;;30232:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;30101:143;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;29867:385:::0;:::o;22282:177::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;22361:8:::1;22357:55;;;22393:18;::::0;-1:-1:-1;;;22393:18:0;::::1;;;22392:19;22384:28;;;::::0;::::1;;22423:17;:28:::0;;;::::1;;-1:-1:-1::0;;;22423:28:0::1;-1:-1:-1::0;;;;22423:28:0;;::::1;::::0;;;::::1;::::0;;22282:177::o;33004:453::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;33150:1:::1;33135:12;:16;33127:25;;;::::0;::::1;;33163:11;:22:::0;;-1:-1:-1;;33163:22:0::1;::::0;::::1;;;::::0;;33227:12;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;33212:27;;;;:::i;:::-;33196:13;:43:::0;33279:17;15978:15:::1;15921:1;15978:2;:15;:::i;:::-;15963:31;::::0;:11:::1;:31;:::i;:::-;33264:32;;;;:::i;:::-;33250:11;:46:::0;33312:137:::1;::::0;;33346:32;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;33346:32:0;;;;33312:137:::1;::::0;::::1;33346:32:::0;;;-1:-1:-1;;;;;;;;;;;33312:137:0;;;;33346:32;;;33361:8;:16:::1;;33376:1;33361:16;;;33372:1;33361:16;33346:32;;;;::::0;33312:137:::1;;;;33379:34;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;33379:34:0::1;;::::0;::::1;;;;33399:13;;33379:34;;::::0;33312:137:::1;;;;33415:32;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;33415:32:0::1;;::::0;::::1;;;;33435:11;;33415:32;;::::0;33312:137:::1;;::::0;::::1;;;;;;:::i;22471:327::-:0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;22584:9:::1;::::0;-1:-1:-1;;;;;22561:33:0;;::::1;22584:9:::0;::::1;22561:33;22557:143;;22619:18;::::0;-1:-1:-1;;;22619:18:0;::::1;;;22618:19;22610:28;;;::::0;::::1;;22653:9;:35:::0;;-1:-1:-1;;;;;;22653:35:0::1;-1:-1:-1::0;;;;;22653:35:0;::::1;;::::0;;22557:143:::1;22714:5;22710:80;;;22734:9;::::0;22785:4:::1;::::0;22734:56:::1;::::0;-1:-1:-1;;;22734:56:0;;22758:10:::1;22734:56;::::0;::::1;19736:34:1::0;22778:4:0::1;19786:18:1::0;;;19779:43;-1:-1:-1;;;;;22785:4:0;;::::1;19838:18:1::0;;;19831:43;22734:9:0;::::1;::::0;:23:::1;::::0;19671:18:1;;22734:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;22710:80;22471:327:::0;;:::o;25577:772::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;24865:12;;:17;25653:47:::1;;;::::0;-1:-1:-1;;;25653:47:0;;20087:2:1;25653:47:0::1;::::0;::::1;20069:21:1::0;20126:2;20106:18;;;20099:30;20165:25;20145:18;;;20138:53;20208:18;;25653:47:0::1;19885:347:1::0;25653:47:0::1;25732:1;25720:9;:13;25712:44;;;::::0;-1:-1:-1;;;25712:44:0;;20439:2:1;25712:44:0::1;::::0;::::1;20421:21:1::0;20478:2;20458:18;;;20451:30;-1:-1:-1;;;20497:18:1;;;20490:48;20555:18;;25712:44:0::1;20237:342:1::0;25712:44:0::1;25781:9;25767:11;25827:3;25816:8;25781:9:::0;25822:2:::1;25816:8;:::i;:::-;:14;;;;:::i;:::-;25843:6;:34:::0;;-1:-1:-1;;;;;;25843:34:0::1;17190:42;25843:34:::0;;::::1;::::0;;;25907:16:::1;::::0;;-1:-1:-1;;;25907:16:0;;;;25801:29;;-1:-1:-1;17190:42:0;;25907:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;17190:42;25907:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25895:40:0::1;;25944:4;25950:6;;;;;;;;;-1:-1:-1::0;;;;;25950:6:0::1;-1:-1:-1::0;;;;;25950:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25895:69;::::0;-1:-1:-1;;;;;;25895:69:0::1;::::0;;;;;;-1:-1:-1;;;;;20814:15:1;;;25895:69:0::1;::::0;::::1;20796:34:1::0;20866:15;;20846:18;;;20839:43;20731:18;;25895:69:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25888:4;:76:::0;;-1:-1:-1;;;;;25888:76:0;;::::1;-1:-1:-1::0;;;;;;25888:76:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25975:20:0;;;:14:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;25975:27:0::1;-1:-1:-1::0;25975:27:0::1;::::0;;26015:9:::1;:35:::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;;26112:4;;26061:56;;-1:-1:-1;;;26061:56:0;;26085:10:::1;26061:56;::::0;::::1;19736:34:1::0;26105:4:0::1;19786:18:1::0;;;19779:43;26112:4:0;;;::::1;19838:18:1::0;;;19831:43;26061:23:0::1;::::0;19671:18:1;;26061:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26155:4:0::1;26130:31;::::0;;;:16:::1;:31;::::0;;;;;;;:38;;26164:4:::1;-1:-1:-1::0;;26130:38:0;;::::1;::::0;::::1;::::0;;;26179:11:::1;:26:::0;;;;;:33;;;;::::1;::::0;;::::1;::::0;;26225:6:::1;::::0;19605:9;:18;;;;;;;-1:-1:-1;;;;;26225:6:0;;::::1;::::0;-1:-1:-1;26225:22:0::1;::::0;-1:-1:-1;26255:4:0;;26155;26225:106:::1;::::0;-1:-1:-1;;;;;;26225:106:0::1;::::0;;;;;;-1:-1:-1;;;;;21252:15:1;;;26225:106:0::1;::::0;::::1;21234:34:1::0;21284:18;;;21277:34;26300:1:0::1;21327:18:1::0;;;21320:34;;;21370:18;;;21363:34;26304:10:0::1;21413:19:1::0;;;21406:44;26315:15:0::1;21466:19:1::0;;;21459:35;21168:19;;26225:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15094:244::-:0;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15183:22:0;::::1;15175:73;;;::::0;-1:-1:-1;;;15175:73:0;;22018:2:1;15175:73:0::1;::::0;::::1;22000:21:1::0;22057:2;22037:18;;;22030:30;22096:34;22076:18;;;22069:62;-1:-1:-1;;;22147:18:1;;;22140:36;22193:19;;15175:73:0::1;21816:402:1::0;15175:73:0::1;15285:6;::::0;;15264:38:::1;::::0;-1:-1:-1;;;;;15264:38:0;;::::1;::::0;15285:6;::::1;::::0;15264:38:::1;::::0;::::1;15313:6;:17:::0;;-1:-1:-1;;;;;;15313:17:0::1;-1:-1:-1::0;;;;;15313:17:0;;;::::1;::::0;;;::::1;::::0;;15094:244::o;31435:297::-;14362:6;;-1:-1:-1;;;;;14362:6:0;6408:10;14362:22;14354:67;;;;-1:-1:-1;;;14354:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31522:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;31522:32:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;31522:32:0;31586:67:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;31570:154;;31656:42;;;;;;31586:67;31570:154;::::1;::::0;::::1;::::0;31660:34:::1;31669:24;31686:6:::0;31669:24;;;::::1;:::i;19773:334::-:0;-1:-1:-1;;;;;19868:20:0;;19860:65;;;;-1:-1:-1;;;19860:65:0;;22425:2:1;19860:65:0;;;22407:21:1;;;22444:18;;;22437:30;22503:34;22483:18;;;22476:62;22555:18;;19860:65:0;22223:356:1;19860:65:0;-1:-1:-1;;;;;19944:21:0;;19936:64;;;;-1:-1:-1;;;19936:64:0;;22786:2:1;19936:64:0;;;22768:21:1;22825:2;22805:18;;;22798:30;22864:32;22844:18;;;22837:60;22914:18;;19936:64:0;22584:354:1;19936:64:0;-1:-1:-1;;;;;20013:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;20066:33;;160:25:1;;;20066:33:0;;133:18:1;20066:33:0;;;;;;;19773:334;;;:::o;34097:465::-;34182:42;;;;;;;;;;;;-1:-1:-1;;;34182:42:0;;;;34274:11;;34156:13;;34182:42;:21;;34274:15;;34288:1;34274:15;:::i;:::-;34270:19;;:1;:19;:::i;:::-;34260:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34260:30:0;;34241:49;;-1:-1:-1;;;34301:3:0;34305:1;34301:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;34301:12:0;;;;;;;;;-1:-1:-1;;;34324:3:0;34328:1;34324:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;34324:12:0;;;;;;;;;34352:6;34347:179;34368:4;:11;34364:1;:15;34347:179;;;34414:8;34445:1;34434:4;34439:1;34434:7;;;;;;;;:::i;:::-;;;;;34414:35;;-1:-1:-1;;;;;;34434:7:0;;;:12;;;:7;34428:19;;34414:35;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34414:35:0;34401:3;34407;:1;34409;34407:3;:::i;:::-;34405:5;;:1;:5;:::i;:::-;34401:10;;;;;;;;:::i;:::-;;;;:48;-1:-1:-1;;;;;34401:48:0;;;;;;;;;34477:8;34497:4;34502:1;34497:7;;;;;;;;:::i;:::-;;;;;;34477:37;;34497:7;;;;;34507:4;34491:21;;34477:37;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34477:37:0;34464:3;34470;:1;34472;34470:3;:::i;:::-;34468:5;;:1;:5;:::i;:::-;34464:10;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;34464:50:0;;;;;;;;-1:-1:-1;34381:3:0;;;;:::i;:::-;;;;34347:179;;;-1:-1:-1;34550:3:0;34097:465;-1:-1:-1;;;34097:465:0:o;34574:149::-;34652:13;34709:1;34712;34692:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34678:37;;34574:149;;;;:::o;23423:1363::-;23515:4;23549:1;23540:6;:10;23532:44;;;;-1:-1:-1;;;23532:44:0;;23620:2:1;23532:44:0;;;23602:21:1;23659:2;23639:18;;;23632:30;-1:-1:-1;;;23678:18:1;;;23671:51;23739:18;;23532:44:0;23418:345:1;23532:44:0;-1:-1:-1;;;;;23595:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;23595:27:0;23587:60;;;;-1:-1:-1;;;23587:60:0;;23970:2:1;23587:60:0;;;23952:21:1;24009:2;23989:18;;;23982:30;-1:-1:-1;;;24028:18:1;;;24021:50;24088:18;;23587:60:0;23768:344:1;23587:60:0;24865:12;;:17;;;23661:40;;-1:-1:-1;;;;;;23676:25:0;;;;;;:14;:25;;;;;;;;23661:40;23658:110;;;-1:-1:-1;;;;;23712:24:0;;;;;;:16;:24;;;;;;;;23704:61;;;;-1:-1:-1;;;23704:61:0;;24319:2:1;23704:61:0;;;24301:21:1;24358:2;24338:18;;;24331:30;24397:26;24377:18;;;24370:54;24441:18;;23704:61:0;24117:348:1;23704:61:0;23780:28;23793:6;23801;23780:12;:28::i;:::-;-1:-1:-1;;;;;23834:25:0;;;;;;:14;:25;;;;;;;;23833:26;:47;;;;-1:-1:-1;;;;;;23863:17:0;;15689:42;23863:17;;23833:47;23829:298;;;-1:-1:-1;;;;;23900:20:0;;;;;;:9;:20;;;;;;23897:102;;-1:-1:-1;;;;;23946:19:0;;;;;;:8;:19;;;;;23968:15;23946:37;;23897:102;-1:-1:-1;;;;;24018:26:0;;;;;;:15;:26;;;;;;;;24013:103;;24065:35;24082:9;24093:6;24065:16;:35::i;:::-;24150:6;;;;24147:63;;;24166:41;24181:6;24189:9;24200:6;24166:14;:41::i;:::-;24159:48;;;;24147:63;-1:-1:-1;;;;;24242:17:0;;;;;;:9;:17;;;;;;:26;;24262:6;;24242:26;:::i;:::-;-1:-1:-1;;;;;24222:17:0;;;;;;:9;:17;;;;;;;;:46;;;;27222:11;:19;;;;;;;;27221:20;24306:49;;;;-1:-1:-1;;;;;;27222:19:0;;27197:4;27222:19;;;:11;:19;;;;;;;;27221:20;24331:24;24306:95;;24395:6;24306:95;;;24358:34;24366:6;24374:9;24385:6;24358:7;:34::i;:::-;24281:120;;24425:21;24439:6;-1:-1:-1;;;;;27222:19:0;27197:4;27222:19;;;:11;:19;;;;;;;;27221:20;;27135:114;24425:21;:50;;;;;24450:25;24465:9;24450:14;:25::i;:::-;24422:75;;;24478:16;24487:6;24478:8;:16::i;:::-;-1:-1:-1;;;;;24532:20:0;;;;;;:9;:20;;;;;;:37;;24555:14;;24532:37;:::i;:::-;-1:-1:-1;;;;;24509:20:0;;;;;;:9;:20;;;;;:60;24865:12;;:17;;24594:31;;;;-1:-1:-1;24608:17:0;;-1:-1:-1;;;24608:17:0;;;;24594:31;24590:105;;;24640:9;;:55;;-1:-1:-1;;;24640:55:0;;-1:-1:-1;;;;;24728:15:1;;;24640:55:0;;;24710:34:1;24780:15;;;24760:18;;;24753:43;24812:18;;;24805:34;;;24640:9:0;;;;:28;;24645:18:1;;24640:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24590:105;24730:9;-1:-1:-1;;;;;24713:43:0;24722:6;-1:-1:-1;;;;;24713:43:0;;24741:14;24713:43;;;;160:25:1;;148:2;133:18;;14:177;24713:43:0;;;;;;;;-1:-1:-1;24774:4:0;;23423:1363;-1:-1:-1;;;;23423:1363:0:o;26357:300::-;-1:-1:-1;;;;;26487:17:0;;26450:4;26487:17;;;:9;:17;;;;;;:26;;26507:6;;26487:26;:::i;:::-;-1:-1:-1;;;;;26467:17:0;;;;;;;:9;:17;;;;;;:46;;;;26547:20;;;;;;;:29;;26570:6;;26547:29;:::i;:::-;-1:-1:-1;;;;;26524:20:0;;;;;;;:9;:20;;;;;;;:52;;;;26592:35;;;;;;;;;;26620:6;160:25:1;;148:2;133:18;;14:177;26592:35:0;;;;;;;;-1:-1:-1;26645:4:0;26357:300;;;;;:::o;26912:215::-;-1:-1:-1;;;;;26999:23:0;;;;;;:15;:23;;;;;;;;;:98;;-1:-1:-1;;;;;;27037:22:0;;;;;;:14;:22;;;;;;;;:59;;27080:16;;27037:59;;;27062:15;;27037:59;27026:6;:71;;26999:98;26991:128;;;;-1:-1:-1;;;26991:128:0;;25052:2:1;26991:128:0;;;25034:21:1;25091:2;25071:18;;;25064:30;-1:-1:-1;;;25110:18:1;;;25103:47;25167:18;;26991:128:0;24850:341:1;26669:235:0;26777:14;;-1:-1:-1;;;;;26810:20:0;;26755:19;26810:20;;;:9;:20;;;;;;26777:14;;26810:29;;26833:6;;26810:29;:::i;:::-;:44;;26802:94;;;;-1:-1:-1;;;26802:94:0;;25398:2:1;26802:94:0;;;25380:21:1;25437:2;25417:18;;;25410:30;25476:34;25456:18;;;25449:62;-1:-1:-1;;;25527:18:1;;;25520:35;25572:19;;26802:94:0;25196:401:1;26802:94:0;26744:160;26669:235;;:::o;27620:540::-;-1:-1:-1;;;;;27739:25:0;;;27704:7;27739:25;;;:14;:25;;;;;;;27941:14;;27827:20;;;;;;;;;27704:7;;27739:25;;;;;27704:7;;27805:132;;27739:25;;27827:20;27826:21;:58;;;;-1:-1:-1;;;;;;27851:14:0;;;;;;:8;:14;;;;;;27869:15;27851:33;;27826:58;:110;;;;-1:-1:-1;27905:13:0;;-1:-1:-1;;;;;27888:14:0;;;;;;:8;:14;;;;;;27921:15;;27888:30;;;:::i;:::-;:48;27805:11;:132::i;:::-;27796:141;;:6;:141;:::i;:::-;27795:160;;;;:::i;:::-;27775:180;-1:-1:-1;27972:13:0;;27968:143;;28020:4;28002:24;;;;:9;:24;;;;;:37;;28030:9;;28002:24;:37;;28030:9;;28002:37;:::i;:::-;;;;-1:-1:-1;;28059:40:0;;160:25:1;;;28082:4:0;;-1:-1:-1;;;;;28059:40:0;;;;;148:2:1;133:18;28059:40:0;;;;;;;27968:143;28134:18;28143:9;28134:6;:18;:::i;:::-;28127:25;27620:540;-1:-1:-1;;;;;;27620:540:0:o;28168:285::-;28274:10;28234:4;28259:26;;;:14;:26;;;;;;;;28258:27;:47;;;;-1:-1:-1;28299:6:0;;;;28298:7;28258:47;:71;;;;-1:-1:-1;28318:11:0;;;;28258:71;:109;;;;-1:-1:-1;;;;;;28342:25:0;;;;;;:14;:25;;;;;;;;28258:109;:161;;;;-1:-1:-1;28408:11:0;;;28398:4;28380:24;;;;:9;:24;;;;;;;;:39;;28258:161;:187;;;;;28444:1;28432:9;;:13;28251:194;28168:285;-1:-1:-1;;28168:285:0:o;28461:566::-;17859:6;:13;;-1:-1:-1;;17859:13:0;17868:4;17859:13;;;28556::::1;::::0;17859:6;;28547:22;::::1;:47;;28581:13;;28547:47;;;28572:6;28547:47;28627:4;28609:24;::::0;;;:9:::1;:24;::::0;;;;;28524:70;;-1:-1:-1;28609:39:0;-1:-1:-1;28605:84:0::1;;;-1:-1:-1::0;28683:4:0::1;28665:24;::::0;;;:9:::1;:24;::::0;;;;;28605:84:::1;28726:16;::::0;;28740:1:::1;28726:16:::0;;;;;::::1;::::0;;28702:21:::1;::::0;28726:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28726:16:0::1;28702:40;;28771:4;28753;28758:1;28753:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28753:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28797:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;28797:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;28753:7;;28797:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28787:4;28792:1;28787:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28787:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28831:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;28831:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;28903:12;;28831:6:::1;::::0;28946:4;;28973::::1;::::0;28993:15:::1;::::0;28831:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17877:6:0;:14;;-1:-1:-1;;17877:14:0;;;-1:-1:-1;;;;;28461:566:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:258::-;727:1;737:113;751:6;748:1;745:13;737:113;;;827:11;;;821:18;808:11;;;801:39;773:2;766:10;737:113;;;868:6;865:1;862:13;859:48;;;-1:-1:-1;;903:1:1;885:16;;878:27;655:258::o;918:::-;960:3;998:5;992:12;1025:6;1020:3;1013:19;1041:63;1097:6;1090:4;1085:3;1081:14;1074:4;1067:5;1063:16;1041:63;:::i;:::-;1158:2;1137:15;-1:-1:-1;;1133:29:1;1124:39;;;;1165:4;1120:50;;918:258;-1:-1:-1;;918:258:1:o;1181:220::-;1330:2;1319:9;1312:21;1293:4;1350:45;1391:2;1380:9;1376:18;1368:6;1350:45;:::i;1406:131::-;-1:-1:-1;;;;;1481:31:1;;1471:42;;1461:70;;1527:1;1524;1517:12;1461:70;1406:131;:::o;1542:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;1847:2;1832:18;;;;1819:32;;-1:-1:-1;;;1542:315:1:o;2054:247::-;2113:6;2166:2;2154:9;2145:7;2141:23;2137:32;2134:52;;;2182:1;2179;2172:12;2134:52;2221:9;2208:23;2240:31;2265:5;2240:31;:::i;2306:813::-;2401:6;2409;2417;2425;2433;2486:3;2474:9;2465:7;2461:23;2457:33;2454:53;;;2503:1;2500;2493:12;2454:53;2542:9;2529:23;2561:31;2586:5;2561:31;:::i;:::-;2611:5;-1:-1:-1;2668:2:1;2653:18;;2640:32;2681:33;2640:32;2681:33;:::i;:::-;2733:7;-1:-1:-1;2792:2:1;2777:18;;2764:32;2805:33;2764:32;2805:33;:::i;:::-;2857:7;-1:-1:-1;2916:2:1;2901:18;;2888:32;2929:33;2888:32;2929:33;:::i;:::-;2981:7;-1:-1:-1;3040:3:1;3025:19;;3012:33;3054;3012;3054;:::i;:::-;3106:7;3096:17;;;2306:813;;;;;;;;:::o;3124:456::-;3201:6;3209;3217;3270:2;3258:9;3249:7;3245:23;3241:32;3238:52;;;3286:1;3283;3276:12;3238:52;3325:9;3312:23;3344:31;3369:5;3344:31;:::i;:::-;3394:5;-1:-1:-1;3451:2:1;3436:18;;3423:32;3464:33;3423:32;3464:33;:::i;:::-;3124:456;;3516:7;;-1:-1:-1;;;3570:2:1;3555:18;;;;3542:32;;3124:456::o;3998:388::-;4066:6;4074;4127:2;4115:9;4106:7;4102:23;4098:32;4095:52;;;4143:1;4140;4133:12;4095:52;4182:9;4169:23;4201:31;4226:5;4201:31;:::i;:::-;4251:5;-1:-1:-1;4308:2:1;4293:18;;4280:32;4321:33;4280:32;4321:33;:::i;:::-;4373:7;4363:17;;;3998:388;;;;;:::o;4391:118::-;4477:5;4470:13;4463:21;4456:5;4453:32;4443:60;;4499:1;4496;4489:12;4514:382;4579:6;4587;4640:2;4628:9;4619:7;4615:23;4611:32;4608:52;;;4656:1;4653;4646:12;4608:52;4695:9;4682:23;4714:31;4739:5;4714:31;:::i;:::-;4764:5;-1:-1:-1;4821:2:1;4806:18;;4793:32;4834:30;4793:32;4834:30;:::i;4901:316::-;4978:6;4986;4994;5047:2;5035:9;5026:7;5022:23;5018:32;5015:52;;;5063:1;5060;5053:12;5015:52;-1:-1:-1;;5086:23:1;;;5156:2;5141:18;;5128:32;;-1:-1:-1;5207:2:1;5192:18;;;5179:32;;4901:316;-1:-1:-1;4901:316:1:o;5222:376::-;5284:6;5292;5345:2;5333:9;5324:7;5320:23;5316:32;5313:52;;;5361:1;5358;5351:12;5313:52;5400:9;5387:23;5419:28;5441:5;5419:28;:::i;5603:367::-;5666:8;5676:6;5730:3;5723:4;5715:6;5711:17;5707:27;5697:55;;5748:1;5745;5738:12;5697:55;-1:-1:-1;5771:20:1;;5814:18;5803:30;;5800:50;;;5846:1;5843;5836:12;5800:50;5883:4;5875:6;5871:17;5859:29;;5943:3;5936:4;5926:6;5923:1;5919:14;5911:6;5907:27;5903:38;5900:47;5897:67;;;5960:1;5957;5950:12;5897:67;5603:367;;;;;:::o;5975:773::-;6097:6;6105;6113;6121;6174:2;6162:9;6153:7;6149:23;6145:32;6142:52;;;6190:1;6187;6180:12;6142:52;6230:9;6217:23;6259:18;6300:2;6292:6;6289:14;6286:34;;;6316:1;6313;6306:12;6286:34;6355:70;6417:7;6408:6;6397:9;6393:22;6355:70;:::i;:::-;6444:8;;-1:-1:-1;6329:96:1;-1:-1:-1;6532:2:1;6517:18;;6504:32;;-1:-1:-1;6548:16:1;;;6545:36;;;6577:1;6574;6567:12;6545:36;;6616:72;6680:7;6669:8;6658:9;6654:24;6616:72;:::i;:::-;5975:773;;;;-1:-1:-1;6707:8:1;-1:-1:-1;;;;5975:773:1:o;7187:248::-;7255:6;7263;7316:2;7304:9;7295:7;7291:23;7287:32;7284:52;;;7332:1;7329;7322:12;7284:52;-1:-1:-1;;7355:23:1;;;7425:2;7410:18;;;7397:32;;-1:-1:-1;7187:248:1:o;7440:180::-;7499:6;7552:2;7540:9;7531:7;7527:23;7523:32;7520:52;;;7568:1;7565;7558:12;7520:52;-1:-1:-1;7591:23:1;;7440:180;-1:-1:-1;7440:180:1:o;7625:241::-;7681:6;7734:2;7722:9;7713:7;7709:23;7705:32;7702:52;;;7750:1;7747;7740:12;7702:52;7789:9;7776:23;7808:28;7830:5;7808:28;:::i;7871:377::-;7945:6;7953;7961;8014:2;8002:9;7993:7;7989:23;7985:32;7982:52;;;8030:1;8027;8020:12;7982:52;8069:9;8056:23;8088:28;8110:5;8088:28;:::i;:::-;8135:5;8187:2;8172:18;;8159:32;;-1:-1:-1;8238:2:1;8223:18;;;8210:32;;7871:377;-1:-1:-1;;;7871:377:1:o;8479:356::-;8681:2;8663:21;;;8700:18;;;8693:30;8759:34;8754:2;8739:18;;8732:62;8826:2;8811:18;;8479:356::o;8840:127::-;8901:10;8896:3;8892:20;8889:1;8882:31;8932:4;8929:1;8922:15;8956:4;8953:1;8946:15;8972:128;9012:3;9043:1;9039:6;9036:1;9033:13;9030:39;;;9049:18;;:::i;:::-;-1:-1:-1;9085:9:1;;8972:128::o;9105:217::-;9145:1;9171;9161:132;;9215:10;9210:3;9206:20;9203:1;9196:31;9250:4;9247:1;9240:15;9278:4;9275:1;9268:15;9161:132;-1:-1:-1;9307:9:1;;9105:217::o;9327:168::-;9367:7;9433:1;9429;9425:6;9421:14;9418:1;9415:21;9410:1;9403:9;9396:17;9392:45;9389:71;;;9440:18;;:::i;:::-;-1:-1:-1;9480:9:1;;9327:168::o;9500:707::-;9552:3;9583;9637:2;9630:5;9626:14;9663:5;9686:1;9696:485;9710:4;9707:1;9704:11;9696:485;;;9779:5;9773:4;9769:16;9764:3;9757:29;9815:6;9809:13;9845:4;9888:2;9882:9;9917:2;9911:4;9904:16;9947:46;9989:2;9983:4;9979:13;9965:12;9947:46;:::i;:::-;10016:4;10061:11;;;10055:18;10040:13;;;10033:41;;;;-1:-1:-1;;10159:12:1;;;;10124:15;;;;;9730:1;9723:9;9696:485;;;-1:-1:-1;10197:4:1;;9500:707;-1:-1:-1;;;;;9500:707:1:o;10212:523::-;10530:2;10519:9;10512:21;10569:1;10564:2;10553:9;10549:18;10542:29;-1:-1:-1;;;10602:2:1;10591:9;10587:18;10580:34;10652:3;10645:4;10634:9;10630:20;10623:33;10493:4;10673:56;10724:3;10713:9;10709:19;10701:6;10673:56;:::i;10740:422::-;10829:1;10872:5;10829:1;10886:270;10907:7;10897:8;10894:21;10886:270;;;10966:4;10962:1;10958:6;10954:17;10948:4;10945:27;10942:53;;;10975:18;;:::i;:::-;11025:7;11015:8;11011:22;11008:55;;;11045:16;;;;11008:55;11124:22;;;;11084:15;;;;10886:270;;;10890:3;10740:422;;;;;:::o;11167:806::-;11216:5;11246:8;11236:80;;-1:-1:-1;11287:1:1;11301:5;;11236:80;11335:4;11325:76;;-1:-1:-1;11372:1:1;11386:5;;11325:76;11417:4;11435:1;11430:59;;;;11503:1;11498:130;;;;11410:218;;11430:59;11460:1;11451:10;;11474:5;;;11498:130;11535:3;11525:8;11522:17;11519:43;;;11542:18;;:::i;:::-;-1:-1:-1;;11598:1:1;11584:16;;11613:5;;11410:218;;11712:2;11702:8;11699:16;11693:3;11687:4;11684:13;11680:36;11674:2;11664:8;11661:16;11656:2;11650:4;11647:12;11643:35;11640:77;11637:159;;;-1:-1:-1;11749:19:1;;;11781:5;;11637:159;11828:34;11853:8;11847:4;11828:34;:::i;:::-;11898:6;11894:1;11890:6;11886:19;11877:7;11874:32;11871:58;;;11909:18;;:::i;:::-;11947:20;;11167:806;-1:-1:-1;;;11167:806:1:o;11978:140::-;12036:5;12065:47;12106:4;12096:8;12092:19;12086:4;12065:47;:::i;12123:229::-;12272:2;12268:15;;;;-1:-1:-1;;12264:53:1;12252:66;;12343:2;12334:12;;12123:229::o;12357:533::-;12675:2;12664:9;12657:21;12714:2;12709;12698:9;12694:18;12687:30;-1:-1:-1;;;12748:2:1;12737:9;12733:18;12726:43;12807:3;12800:4;12789:9;12785:20;12778:33;12638:4;12828:56;12879:3;12868:9;12864:19;12856:6;12828:56;:::i;12895:125::-;12935:4;12963:1;12960;12957:8;12954:34;;;12968:18;;:::i;:::-;-1:-1:-1;13005:9:1;;12895:125::o;13025:127::-;13086:10;13081:3;13077:20;13074:1;13067:31;13117:4;13114:1;13107:15;13141:4;13138:1;13131:15;13157:251;13227:6;13280:2;13268:9;13259:7;13255:23;13251:32;13248:52;;;13296:1;13293;13286:12;13248:52;13328:9;13322:16;13347:31;13372:5;13347:31;:::i;13413:127::-;13474:10;13469:3;13465:20;13462:1;13455:31;13505:4;13502:1;13495:15;13529:4;13526:1;13519:15;13545:461;13598:3;13636:5;13630:12;13663:6;13658:3;13651:19;13689:4;13718:2;13713:3;13709:12;13702:19;;13755:2;13748:5;13744:14;13776:1;13786:195;13800:6;13797:1;13794:13;13786:195;;;13865:13;;-1:-1:-1;;;;;13861:39:1;13849:52;;13921:12;;;;13956:15;;;;13897:1;13815:9;13786:195;;;-1:-1:-1;13997:3:1;;13545:461;-1:-1:-1;;;;;13545:461:1:o;14011:510::-;14282:6;14271:9;14264:25;14325:3;14320:2;14309:9;14305:18;14298:31;14245:4;14346:57;14398:3;14387:9;14383:19;14375:6;14346:57;:::i;:::-;-1:-1:-1;;;;;14439:32:1;;;;14434:2;14419:18;;14412:60;-1:-1:-1;14503:2:1;14488:18;14481:34;14338:65;14011:510;-1:-1:-1;;14011:510:1:o;14805:245::-;14872:6;14925:2;14913:9;14904:7;14900:23;14896:32;14893:52;;;14941:1;14938;14931:12;14893:52;14973:9;14967:16;14992:28;15014:5;14992:28;:::i;15055:543::-;15373:2;15362:9;15355:21;15412:2;15407;15396:9;15392:18;15385:30;15451:25;15446:2;15435:9;15431:18;15424:53;15515:3;15508:4;15497:9;15493:20;15486:33;15336:4;15536:56;15587:3;15576:9;15572:19;15564:6;15536:56;:::i;16006:461::-;16271:2;16260:9;16253:21;16234:4;16297:45;16338:2;16327:9;16323:18;16315:6;16297:45;:::i;:::-;16390:9;16382:6;16378:22;16373:2;16362:9;16358:18;16351:50;16418:43;16454:6;16446;16418:43;:::i;:::-;16410:51;16006:461;-1:-1:-1;;;;;16006:461:1:o;16472:544::-;16790:2;16779:9;16772:21;16829:2;16824;16813:9;16809:18;16802:30;16868:26;16863:2;16852:9;16848:18;16841:54;16933:3;16926:4;16915:9;16911:20;16904:33;16753:4;16954:56;17005:3;16994:9;16990:19;16982:6;16954:56;:::i;17021:135::-;17060:3;-1:-1:-1;;17081:17:1;;17078:43;;;17101:18;;:::i;:::-;-1:-1:-1;17148:1:1;17137:13;;17021:135::o;17161:539::-;17479:2;17468:9;17461:21;17518:2;17513;17502:9;17498:18;17491:30;-1:-1:-1;;;17552:2:1;17541:9;17537:18;17530:49;17617:3;17610:4;17599:9;17595:20;17588:33;17442:4;17638:56;17689:3;17678:9;17674:19;17666:6;17638:56;:::i;18420:533::-;18738:2;18727:9;18720:21;18777:2;18772;18761:9;18757:18;18750:30;-1:-1:-1;;;18811:2:1;18800:9;18796:18;18789:43;18870:3;18863:4;18852:9;18848:20;18841:33;18701:4;18891:56;18942:3;18931:9;18927:19;18919:6;18891:56;:::i;18958:533::-;19276:2;19265:9;19258:21;19315:2;19310;19299:9;19295:18;19288:30;-1:-1:-1;;;19349:2:1;19338:9;19334:18;19327:43;19408:3;19401:4;19390:9;19386:20;19379:33;19239:4;19429:56;19480:3;19469:9;19465:19;19457:6;19429:56;:::i;21505:306::-;21593:6;21601;21609;21662:2;21650:9;21641:7;21637:23;21633:32;21630:52;;;21678:1;21675;21668:12;21630:52;21707:9;21701:16;21691:26;;21757:2;21746:9;21742:18;21736:25;21726:35;;21801:2;21790:9;21786:18;21780:25;21770:35;;21505:306;;;;;:::o;22943:470::-;23122:3;23160:6;23154:13;23176:53;23222:6;23217:3;23210:4;23202:6;23198:17;23176:53;:::i;:::-;23292:13;;23251:16;;;;23314:57;23292:13;23251:16;23348:4;23336:17;;23314:57;:::i;:::-;23387:20;;22943:470;-1:-1:-1;;;;22943:470:1:o;25602:582::-;25901:6;25890:9;25883:25;25944:6;25939:2;25928:9;25924:18;25917:34;25987:3;25982:2;25971:9;25967:18;25960:31;25864:4;26008:57;26060:3;26049:9;26045:19;26037:6;26008:57;:::i;:::-;-1:-1:-1;;;;;26101:32:1;;;;26096:2;26081:18;;26074:60;-1:-1:-1;26165:3:1;26150:19;26143:35;26000:65;25602:582;-1:-1:-1;;;25602:582:1:o

Swarm Source

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