ETH Price: $3,339.90 (-1.72%)

Token

Catopia (Cats)
 

Overview

Max Total Supply

1,000,000,000,000 Cats

Holders

312

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
29,612,500.515920859 Cats

Value
$0.00
0xac97ce2078f7142e0f09e83ecb0a63e4fe26df9c
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:
Catopia

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
Catopia
https://www.catopiatoken.com
https://www.t.me/catopiatoken
*/
// SPDX-License-Identifier: None

pragma solidity 0.8.12;


library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        //C U ON THE MOON
        // 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");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    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");
    }
    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);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);
  function approve(address spender, uint256 value) external returns (bool success);
  function balanceOf(address owner) external view returns (uint256 balance);
  function decimals() external view returns (uint8 decimalPlaces);
  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);
  function increaseApproval(address spender, uint256 subtractedValue) external;
  function name() external view returns (string memory tokenName);
  function symbol() external view returns (string memory tokenSymbol);
  function totalSupply() external view returns (uint256 totalTokensIssued);
  function transfer(address to, uint256 value) external returns (bool success);
  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool success);
}

interface VRFCoordinatorV2Interface {
  function getRequestConfig()
    external
    view
    returns (
      uint16,
      uint32,
      bytes32[] memory
    );
  function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);
  function createSubscription() external returns (uint64 subId);
  function getSubscription(uint64 subId)
    external
    view
    returns (
      uint96 balance,
      uint64 reqCount,
      address owner,
      address[] memory consumers
    );
  function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;
  function acceptSubscriptionOwnerTransfer(uint64 subId) external;
  function addConsumer(uint64 subId, address consumer) external;
  function removeConsumer(uint64 subId, address consumer) external;
  function cancelSubscription(uint64 subId, address to) external;
}

abstract contract VRFConsumerBaseV2 {
  error OnlyCoordinatorCanFulfill(address have, address want);
  address private immutable vrfCoordinator;
  constructor(address _vrfCoordinator) {
    vrfCoordinator = _vrfCoordinator;
  }
  function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;
  function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
    if (msg.sender != vrfCoordinator) {
      revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
    }
    fulfillRandomWords(requestId, randomWords);
  }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    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 pair) external;

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

contract Catopia is IERC20, Ownable, VRFConsumerBaseV2 {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Catopia";
    string constant _symbol = "Cats";
    uint8 constant _decimals = 9;
    uint256 constant _decimalFactor = 10 ** _decimals;

    uint256 constant _totalSupply = 1_000_000_000_000 * _decimalFactor;

    //For ease to the end-user these checks do not adjust for burnt tokens and should be set accordingly.
    uint256 public _maxTxAmount = (_totalSupply * 1) / 500; //0.2%
    uint256 public _maxWalletSize = (_totalSupply * 1) / 500; //0.2%

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;
    mapping (address => uint256) lastSell;

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

    uint256 public jackpotFee = 20; // kept for jackpot
    uint256 public stakingFee = 20; 
    uint256 public liquidityFee = 20;
    uint256 public marketingFee = 40;
    uint256 public devFee = 20;
    uint256 public totalFee = jackpotFee + marketingFee + devFee + liquidityFee + stakingFee;

    uint256 sellBias = 0;

    //Higher tax for a period of time from the first purchase on an address
    uint256 sellPercent = 200;
    uint256 sellPeriod = 48 hours;

    uint256 feeDenominator = 1000;

    struct userData {
        uint256 totalWon;
        uint256 lastWon;
    }
    
    struct lottery {
        uint48 transactionsSinceLastLottery;
        uint48 transactionsPerLottery;
        uint48 playerNewId;
        uint8 maximumWinners;
        uint64 price;
        uint16 winPercentageThousandth;
        uint8 w_rt;
        bool enabled;
        bool multibuy;
        uint256 created;
        uint128 maximumJackpot;
        uint128 minTxAmount;
        uint256[] playerIds;
        mapping(uint256 => address) players;
        mapping(address => uint256[]) tickets;
        uint256[] winnerValues;
        address[] winnerAddresses;
        string name;
    }
    
    mapping(address => userData) private userByAddress;
    uint256 numLotteries;
    mapping(uint256 => lottery) public lotteries;
    mapping (address => bool) private _isExcludedFromLottery;
    uint256 private activeLotteries = 0;
    uint256 private _allWon;
    uint256 private _txCounter = 0;

    address public immutable stakingReceiver;
    address payable public immutable marketingReceiver;
    address payable public immutable devReceiver;

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public immutable router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public immutable pair;

    uint256 public launchedAt;
 
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    VRFCoordinatorV2Interface COORDINATOR;
    LinkTokenInterface LINKTOKEN;
    uint64 s_subscriptionId = 25;
    address vrfCoordinator = 0x271682DEB8C4E0901D1a1550aD2e64D568E69909;
    address link = 0x514910771AF9Ca656af840dff83E8264EcF986CA;
    bytes32 keyHash = 0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef;
    uint32 callbackGasLimit = 100000;
    uint16 requestConfirmations = 5;
    uint32 numWords =  1;
    mapping(uint256 => uint256[]) public s_randomWords;
    mapping(uint256 => uint256) public s_requestId;

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

    constructor (address _newOwner, address _staking, address _marketing, address _dev) VRFConsumerBaseV2(vrfCoordinator) {
        COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator);
        LINKTOKEN = LinkTokenInterface(link);

        stakingReceiver = _staking;
        marketingReceiver = payable(_marketing);
        devReceiver = payable(_dev);

        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[_newOwner][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[_newOwner] = true;
        liquidityProviders[_newOwner] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[_newOwner] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[stakingReceiver] = true;

        _balances[_newOwner] = _totalSupply / 2;
        _balances[DEAD] = _totalSupply / 2;
        emit Transfer(address(0), _newOwner, _totalSupply / 2);
        emit Transfer(address(0), DEAD, _totalSupply / 2);
    }

    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 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 spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    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(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }
        else if(liquidityPools[sender]) { require(activeLotteries > 0, "No lotteries to buy."); }

        _balances[sender] -= amount;

        uint256 amountReceived = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _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(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt == block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        bool highSellPeriod = !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp;

        uint256 feeAmount = (amount * getTotalFee(liquidityPools[recipient], highSellPeriod)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;
        else if(!liquidityPools[sender])
            lastSell[sender] = block.timestamp;

        uint256 staking = 0;
        if (stakingFee > 0) {
            staking = feeAmount * stakingFee / totalFee;
            feeAmount -= staking;
            _balances[stakingReceiver] += feeAmount;
            emit Transfer(sender, stakingReceiver, staking);
        }
        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - (feeAmount + staking);
    }

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

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / (totalFee - stakingFee)) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        //Guaranteed swap desired to prevent trade blockages
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - (stakingFee + dynamicLiquidityFee / 2);

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountMarketing = (contractBalance * marketingFee) / totalETHFee;
        uint256 amountDev = (contractBalance * devFee) / totalETHFee;

        if(amountToLiquify > 0) {
            //Guaranteed swap desired to prevent trade blockages, return values ignored
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            transferToAddressETH(marketingReceiver, amountMarketing);
            
        if (amountDev > 0)
            transferToAddressETH(devReceiver, amountDev);

    }

    function transferToAddressETH(address wallet, uint256 amount) internal {
        (bool sent, ) = wallet.call{value: amount}("");
        require(sent, "Failed to send ETH");
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

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

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function getBuysUntilJackpot(uint256 lotto) external view  returns (uint256) {
        return lotteries[lotto].transactionsPerLottery - lotteries[lotto].transactionsSinceLastLottery;
    }
    
    function getTotalEntries(uint256 lotto) external view  returns (uint256) {
        return lotteries[lotto].playerIds.length;
    }
    
    function getWinningChance(address addr, uint256 lotto) external view returns(uint256 myEntries, uint256 ineligibleEntries ,uint256 totalEntries) {
        require(addr != address(0), "Please enter valid address");
        uint256 entries = lotteries[lotto].tickets[addr].length;
        bool ineligible = lastSell[addr] >= lotteries[lotto].created;
        return (ineligible ? 0 : entries,ineligible ? entries : 0,lotteries[lotto].playerIds.length);
     }
    
    function getTotalWon(address userAddress) external view returns(uint256 totalWon) {
        return userByAddress[userAddress].totalWon;
    }

    function getLastWon(address userAddress) external view returns(uint256 lastWon) {
        return userByAddress[userAddress].lastWon;
    }

    function getTotalWon() external view returns(uint256) {
        return _allWon;
    }
    
    function getPotBalance() external view returns(uint256) {
        return address(this).balance;
    }
    
    function getLottoDetails(uint256 lotto) external view returns(
        string memory lottoName, uint256 transPerLotto, uint256 winPercent, 
        uint256 maxETH, uint256 minTx, uint256 price, bool isEnabled) 
    {
        return (lotteries[lotto].name,
        lotteries[lotto].transactionsPerLottery,
        lotteries[lotto].winPercentageThousandth / 10,
        lotteries[lotto].maximumJackpot,
        lotteries[lotto].minTxAmount,
        lotteries[lotto].price,
        lotteries[lotto].enabled);
    }
    
    function getLastWinner(uint256 lotto) external view returns (address, uint256) {
        return (lotteries[lotto].winnerAddresses[lotteries[lotto].winnerAddresses.length-1], lotteries[lotto].winnerValues[lotteries[lotto].winnerValues.length-1]);
    }
    
    function getWinnerCount(uint256 lotto) external view returns (uint256) {
        return (lotteries[lotto].winnerAddresses.length);
    }
    
    function getWinnerDetails(uint256 lotto, uint256 winner) external view returns (address, uint256) {
        return (lotteries[lotto].winnerAddresses[winner], lotteries[lotto].winnerValues[winner]);
    }

    function getLotteryCount() external view returns (uint256) {
        return numLotteries;
    }

    function createLotto(string memory lottoName, uint48 transPerLotto, uint16 winPercentThousandth, uint8 maxWin, uint128 maxEth, uint128 minTx, uint64 price, bool isEnabled, uint8 randomSelection, bool multiple) external onlyOwner() {
        lottery storage l = lotteries[numLotteries++];
        l.name = lottoName;
        l.transactionsSinceLastLottery = 0;
        l.transactionsPerLottery = transPerLotto;
        l.winPercentageThousandth = winPercentThousandth;
        l.maximumWinners = maxWin;
        l.maximumJackpot = maxEth * 10**18;
        l.minTxAmount = minTx;
        l.price = price;
        l.enabled = isEnabled;
        l.w_rt = randomSelection;
        l.multibuy = multiple;
        
        if (isEnabled) {
            activeLotteries++;
            l.created = block.timestamp;
        }
    }
    
    function setMaximumWinners(uint8 max, uint256 lotto) external onlyOwner() {
        lotteries[lotto].maximumWinners = max;
    }
    
    function setMaximumJackpot(uint128 max, uint256 lotto) external onlyOwner() {
        lotteries[lotto].maximumJackpot = max * 10**18;
    }

    function BuyTickets(uint48 number, uint256 lotto) external payable {
        require(!_isExcludedFromLottery[msg.sender], "Not eligible for lottery");
        require(msg.value == number * lotteries[lotto].price, "Not enough paid");
        require(lotteries[lotto].enabled, "Lottery not enabled");
        require(lotteries[lotto].transactionsSinceLastLottery + number <= lotteries[lotto].transactionsPerLottery, "Lottery full");
        require(_balances[msg.sender] >= lotteries[lotto].minTxAmount, "Not enough tokens held");
        require(lastSell[msg.sender] < lotteries[lotto].created, "Ineligible for this lottery due to token sale");
        if (number > 1)
            require(lotteries[lotto].multibuy, "Only ticket purchase at a time allowed");
        
        require(!msg.sender.isContract(), "Humans only");
        for (uint256 i=0; i < number; i++) {
            insertPlayer(msg.sender, lotto);
        }
        lotteries[lotto].transactionsSinceLastLottery += number;

        transferToAddressETH(owner(), msg.value/10);
    }

    function ShredTickets() external {
        uint256 number = lotteries[numLotteries-1].tickets[msg.sender].length / 5;
        require(number > 0, "Not enough tickets in previous lottery");
        require(lotteries[numLotteries].created > 0, "New lottery not ready yet");

        for (uint256 i=0; i < number; i++) {
            insertPlayer(msg.sender, numLotteries);
            for (uint256 popper=0; popper < 5; popper++)
                lotteries[numLotteries-1].tickets[msg.sender].pop();
        }
    }

    function setPrice(uint64 price, uint256 lotto) external onlyOwner() {
        lotteries[lotto].price = price;
    }
    
    function setMinTxTokens(uint128 minTxTokens, uint256 lotto) external onlyOwner() {
        lotteries[lotto].minTxAmount = minTxTokens;
    }
    
    function setTransactionsPerLottery(uint16 transactions, uint256 lotto) external onlyOwner() {
        lotteries[lotto].transactionsPerLottery = transactions;
    }
    
    function setWinPercentThousandth(uint16 winPercentThousandth, uint256 lotto) external onlyOwner() {
        lotteries[lotto].winPercentageThousandth = winPercentThousandth;
    }
    
    function setLottoEnabled(bool enabled, uint256 lotto) external onlyOwner() {
        if (enabled && !lotteries[lotto].enabled){
            activeLotteries++;
            lotteries[lotto].created = block.timestamp;
        } else if (!enabled && lotteries[lotto].enabled)
            activeLotteries--;

        lotteries[lotto].enabled = enabled;
    }
    
    function setRandomSelection(uint8 randomSelection, uint256 lotto) external onlyOwner() {
        lotteries[lotto].w_rt = randomSelection;
    }
    
    function setMultibuy(bool multiple, uint256 lotto) external onlyOwner() {
        lotteries[lotto].multibuy = multiple;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
        isFeeExempt[newOwner] = true;
        isTxLimitExempt[newOwner] = true;
        liquidityProviders[newOwner] = true;
        _allowances[newOwner][routerAddress] = type(uint256).max;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled, "Protection disabled");
        protectionEnabled = _protect;
        emit ProtectionToggle(_protect);
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled, "Protection disabled");
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(address(this), pair);
        
        emit ProtectionSet(_protection);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
        emit ProtectionDisabled();
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        emit LiquidityProviderSet(_provider);
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_sellPercentIncrease >= 100, "Can't make sells cheaper with this");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
        emit SellPeriodSet(_sellPercentIncrease, _period);
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        emit TradingLaunched();
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5, "Transaction limits too low");
        _maxTxAmount = (_totalSupply * numerator) / divisor;
        emit TransactionLimitSet(_maxTxAmount);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000, "Divisor must be greater than zero");
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit MaxWalletSet(_maxWalletSize);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isTxLimitExempt[holder] = exempt;
        emit TrasactionLimitExemptSet(holder, exempt);
    }

    function setExcludedFromLottery(address account, bool excluded) external onlyOwner() {
        _isExcludedFromLottery[account] = excluded;
    }

    function setFees(uint256 _jackpotFee, uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        require((_liquidityFee / 2) * 2 == _liquidityFee, "Liquidity fee must be an even number due to rounding");
        jackpotFee = _jackpotFee;
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        stakingFee = _stakingFee;
        sellBias = _sellBias;
        totalFee = jackpotFee + marketingFee + devFee + liquidityFee + stakingFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 3, "Fees too high");
        require(sellBias <= totalFee, "Incorrect sell bias");
        emit FeesSet(totalFee, feeDenominator, sellBias);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
        emit TargetLiquiditySet(_target * 100 / _denominator);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != address(0), "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

    function updateChainParameters(bytes32 _keyHash, uint32 _callbackGas, uint16 _confirmations, uint32 _words) external onlyOwner {
        keyHash = _keyHash;
        callbackGasLimit = _callbackGas;
        requestConfirmations = _confirmations;
        numWords = _words;
    }

      function requestRandomWords(uint256 lotto) internal {
        require(s_requestId[lotto] == 0 || s_randomWords[s_requestId[lotto]].length == 0,"Results already drawn");
        s_requestId[lotto] = COORDINATOR.requestRandomWords(
        keyHash,
        s_subscriptionId,
        requestConfirmations,
        callbackGasLimit,
        numWords
        );
    }
  
    function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
        require(s_randomWords[requestId].length == 0,"Results already drawn");
        s_randomWords[requestId] = randomWords;
    }

    function random(uint256 _totalPlayers, uint8 _w_rt) internal view returns (uint256) {
        uint256 w_rnd_c_1 = block.number+_txCounter+_totalPlayers;
        uint256 w_rnd_c_2 = _totalSupply+_allWon;
        uint256 _rnd = 0;
        if (_w_rt == 1) {
            _rnd = uint(keccak256(abi.encodePacked(blockhash(block.number-1), w_rnd_c_1, blockhash(block.number-2), w_rnd_c_2)));
        } else if (_w_rt == 2) {
            _rnd = uint(keccak256(abi.encodePacked(blockhash(block.number-1),blockhash(block.number-2), blockhash(block.number-3),w_rnd_c_1)));
        } else if (_w_rt == 3) {
            _rnd = uint(keccak256(abi.encodePacked(blockhash(block.number-1), blockhash(block.number-2), w_rnd_c_1, blockhash(block.number-3))));
        } else {
            _rnd = uint(keccak256(abi.encodePacked(blockhash(block.number-1), w_rnd_c_2, blockhash(block.number-2), w_rnd_c_1, blockhash(block.number-2))));
        }
        _rnd = _rnd % _totalPlayers;
        return _rnd;
    }

    function _handleLottery(uint256 lotto) external onlyOwner returns (bool) {
        require(lotteries[lotto].transactionsPerLottery - lotteries[lotto].transactionsSinceLastLottery == 0, "Not enough tickets sold");
        require(lotteries[lotto].winnerAddresses.length < lotteries[lotto].maximumWinners, "Winners already picked");

        uint256 _randomWinner; //50% win chance
        if (lotteries[lotto].w_rt == 0) {
            if(s_randomWords[s_requestId[lotto]].length > 0) {
                _randomWinner = s_randomWords[s_requestId[lotto]][lotteries[lotto].winnerAddresses.length] % (lotteries[lotto].playerIds.length*2);
            }
            else {
                require(s_requestId[lotto] == 0 || s_randomWords[s_requestId[lotto]].length == 0, "Request already made");
                requestRandomWords(lotto);
                return false;
            }
        }
        else {
            _randomWinner = random(lotteries[lotto].playerIds.length*2, lotteries[lotto].w_rt);
        }
        address _winnerAddress = _randomWinner >= lotteries[lotto].playerIds.length ? address(0) : lotteries[lotto].players[lotteries[lotto].playerIds[_randomWinner]];
        uint256 _pot = address(this).balance;
        
        if (lotteries[lotto].tickets[_winnerAddress].length > 0 && _balances[_winnerAddress] > 0 && lastSell[_winnerAddress] < lotteries[lotto].created && !_isExcludedFromLottery[_winnerAddress] ) {
            
            if (_pot > lotteries[lotto].maximumJackpot)
                _pot = lotteries[lotto].maximumJackpot;
                
            uint256 _winnings = _pot*lotteries[lotto].winPercentageThousandth/1000;
        
            transferToAddressETH(payable(_winnerAddress), _winnings);
            emit LotteryWon(lotto, _winnerAddress, _winnings);
            
            uint256 winnings = userByAddress[_winnerAddress].totalWon;

            // Update user stats
            userByAddress[_winnerAddress].lastWon = _winnings;
            userByAddress[_winnerAddress].totalWon = winnings+_winnings;

            // Update global stats
            lotteries[lotto].winnerValues.push(_winnings);
            lotteries[lotto].winnerAddresses.push(_winnerAddress);
            _allWon += _winnings;

        }
        else {
            // Player had no tickets/were excluded/had no tokens or has already been won..
            emit LotteryNotWon(lotto, _winnerAddress, _pot);
        }

        return true;
    }

    //Catopia copy pasta inserts players in the right place  
    function insertPlayer(address playerAddress, uint256 lotto) internal {
        lotteries[lotto].players[lotteries[lotto].playerNewId] = playerAddress;
        lotteries[lotto].tickets[playerAddress].push(lotteries[lotto].playerNewId);
        lotteries[lotto].playerIds.push(lotteries[lotto].playerNewId);
        lotteries[lotto].playerNewId += 1;
    }
    
    function popPlayer(address playerAddress, uint256 ticketIndex, uint256 lotto) internal {
        uint256 playerId = lotteries[lotto].tickets[playerAddress][ticketIndex];
        lotteries[lotto].tickets[playerAddress][ticketIndex] = lotteries[lotto].tickets[playerAddress][lotteries[lotto].tickets[playerAddress].length - 1];
        lotteries[lotto].tickets[playerAddress].pop();
        delete lotteries[lotto].players[playerId];
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length, "Array lengths don't match");
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]] && _addresses[i] != address(0), "Can't airdrop the liquidity pool or address 0");
            _transferFrom(msg.sender, _addresses[i], _amount[i] * _decimalFactor);
            lastBuy[_addresses[i]] = block.timestamp;
        }
        swapEnabled = previousSwap;
        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider);
    event SellPeriodSet(uint256 percent, uint256 period);
    event TradingLaunched();
    event TransactionLimitSet(uint256 limit);
    event MaxWalletSet(uint256 limit);
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event TrasactionLimitExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalFees, uint256 denominator, uint256 sellBias);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AirdropSent(address indexed from);
    event AntiDumpTaxSet(uint256 rate, uint256 period, uint256 threshold);
    event TargetLiquiditySet(uint256 percent);
    event ProtectionToggle(bool isEnabled);
    event LotteryWon(uint256 lotto, address winner, uint256 amount);
    event LotteryNotWon(uint256 lotto, address skippedAddress, uint256 pot);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"AirdropSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"AntiDumpTaxSet","type":"event"},{"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":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBias","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"}],"name":"LiquidityProviderSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lotto","type":"uint256"},{"indexed":false,"internalType":"address","name":"skippedAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"pot","type":"uint256"}],"name":"LotteryNotWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lotto","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LotteryWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"MaxWalletSet","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":[],"name":"ProtectionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protection","type":"address"}],"name":"ProtectionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"ProtectionToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"SellPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"TargetLiquiditySet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"TransactionLimitSet","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":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"TrasactionLimitExemptSet","type":"event"},{"inputs":[{"internalType":"uint48","name":"number","type":"uint48"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"BuyTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ShredTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"_handleLottery","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","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":"string","name":"lottoName","type":"string"},{"internalType":"uint48","name":"transPerLotto","type":"uint48"},{"internalType":"uint16","name":"winPercentThousandth","type":"uint16"},{"internalType":"uint8","name":"maxWin","type":"uint8"},{"internalType":"uint128","name":"maxEth","type":"uint128"},{"internalType":"uint128","name":"minTx","type":"uint128"},{"internalType":"uint64","name":"price","type":"uint64"},{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint8","name":"randomSelection","type":"uint8"},{"internalType":"bool","name":"multiple","type":"bool"}],"name":"createLotto","outputs":[],"stateMutability":"nonpayable","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":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"getBuysUntilJackpot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"getLastWinner","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getLastWon","outputs":[{"internalType":"uint256","name":"lastWon","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLotteryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"getLottoDetails","outputs":[{"internalType":"string","name":"lottoName","type":"string"},{"internalType":"uint256","name":"transPerLotto","type":"uint256"},{"internalType":"uint256","name":"winPercent","type":"uint256"},{"internalType":"uint256","name":"maxETH","type":"uint256"},{"internalType":"uint256","name":"minTx","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPotBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"getTotalEntries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getTotalWon","outputs":[{"internalType":"uint256","name":"totalWon","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"getWinnerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lotto","type":"uint256"},{"internalType":"uint256","name":"winner","type":"uint256"}],"name":"getWinnerDetails","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"getWinningChance","outputs":[{"internalType":"uint256","name":"myEntries","type":"uint256"},{"internalType":"uint256","name":"ineligibleEntries","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lotteries","outputs":[{"internalType":"uint48","name":"transactionsSinceLastLottery","type":"uint48"},{"internalType":"uint48","name":"transactionsPerLottery","type":"uint48"},{"internalType":"uint48","name":"playerNewId","type":"uint48"},{"internalType":"uint8","name":"maximumWinners","type":"uint8"},{"internalType":"uint64","name":"price","type":"uint64"},{"internalType":"uint16","name":"winPercentageThousandth","type":"uint16"},{"internalType":"uint8","name":"w_rt","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"bool","name":"multibuy","type":"bool"},{"internalType":"uint256","name":"created","type":"uint256"},{"internalType":"uint128","name":"maximumJackpot","type":"uint128"},{"internalType":"uint128","name":"minTxAmount","type":"uint128"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","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":"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":"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":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_randomWords","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_requestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_jackpotFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","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":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setLottoEnabled","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":"uint128","name":"max","type":"uint128"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setMaximumJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"max","type":"uint8"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setMaximumWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"minTxTokens","type":"uint128"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setMinTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"multiple","type":"bool"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setMultibuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"price","type":"uint64"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setPrice","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":"uint8","name":"randomSelection","type":"uint8"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setRandomSelection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"transactions","type":"uint16"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setTransactionsPerLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"winPercentThousandth","type":"uint16"},{"internalType":"uint256","name":"lotto","type":"uint256"}],"name":"setWinPercentThousandth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"uint32","name":"_callbackGas","type":"uint32"},{"internalType":"uint16","name":"_confirmations","type":"uint16"},{"internalType":"uint32","name":"_words","type":"uint32"}],"name":"updateChainParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101406040526101f4620000166009600a620007c0565b620000279064e8d4a51000620007d8565b62000034906001620007d8565b620000409190620007fa565b6001556101f4620000546009600a620007c0565b620000659064e8d4a51000620007d8565b62000072906001620007d8565b6200007e9190620007fa565b60025560146009556014600a556014600b556028600c556014600d55600a54600b54600d54600c54600954620000b591906200081d565b620000c191906200081d565b620000cd91906200081d565b620000d991906200081d565b600e556000600f81905560c86010556202a3006011556103e860125560178190556019556028601a8190556064601b55601f805461ffff60a01b1916600160a01b17905560218054601960a01b600160a01b600160e01b0319909116179055602280546001600160a01b031990811673271682deb8c4e0901d1a1550ad2e64d568e69909179091556023805490911673514910771af9ca656af840dff83e8264ecf986ca1790557f8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef6024556025805466010005000186a06001600160501b0319909116179055805460ff19166001179055610190620001db6009600a620007c0565b620001ec9064e8d4a51000620007d8565b620001f89190620007fa565b6029556127106200020c6009600a620007c0565b6200021d9064e8d4a51000620007d8565b620002299190620007fa565b602a553480156200023957600080fd5b50604051620068ee380380620068ee8339810160408190526200025c9162000855565b602254600080546001600160a01b0319163390811782556040516001600160a01b0390931692909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03908116608052602254602080549183166001600160a01b031992831617815560235460218054918516919093161790915584821660a05283821660c05290821660e052737a250d5630b4cf539739df2c5dacb4c659f2488d6101008190526040805163c45a015560e01b81529051919263c45a0155926004808401938290030181865afa1580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003709190620008b2565b6001600160a01b031663c9c65396610100516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e69190620008b2565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004599190620008b2565b6001600160a01b039081166101208190526000908152601c602090815260408083208054600160ff1991821681179092558986168086526004808652848720737a250d5630b4cf539739df2c5dacb4c659f2488d8089529087528588206000199081905530808a5292885286892091895290875285882055818752600786528487208054841685179055601d8652848720805484168517905586526008909452828520805482168317905592845281842080548416821790557f226e7c4e32ba0cd918c39b21526eb23f3f5958fcfd83d5cf69b9510bf01e2e17805484168217905560a0519094168352909120805490911690911790556002620005606009600a620007c0565b620005719064e8d4a51000620007d8565b6200057d9190620007fa565b6001600160a01b0385166000908152600360205260409020556002620005a66009600a620007c0565b620005b79064e8d4a51000620007d8565b620005c39190620007fa565b61dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c919091556001600160a01b03851690600080516020620068ce8339815191526002620006206009600a620007c0565b620006319064e8d4a51000620007d8565b6200063d9190620007fa565b60405190815260200160405180910390a361dead6000600080516020620068ce8339815191526002620006736009600a620007c0565b620006849064e8d4a51000620007d8565b620006909190620007fa565b60405190815260200160405180910390a350505050620008d0565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000702578160001904821115620006e657620006e6620006ab565b80851615620006f457918102915b93841c9390800290620006c6565b509250929050565b6000826200071b57506001620007ba565b816200072a57506000620007ba565b81600181146200074357600281146200074e576200076e565b6001915050620007ba565b60ff841115620007625762000762620006ab565b50506001821b620007ba565b5060208310610133831016604e8410600b841016171562000793575081810a620007ba565b6200079f8383620006c1565b8060001904821115620007b657620007b6620006ab565b0290505b92915050565b6000620007d160ff8416836200070a565b9392505050565b6000816000190483118215151615620007f557620007f5620006ab565b500290565b6000826200081857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008335762000833620006ab565b500190565b80516001600160a01b03811681146200085057600080fd5b919050565b600080600080608085870312156200086c57600080fd5b620008778562000838565b9350620008876020860162000838565b9250620008976040860162000838565b9150620008a76060860162000838565b905092959194509250565b600060208284031215620008c557600080fd5b620007d18262000838565b60805160a05160c05160e0516101005161012051615f616200096d60003960008181610ca4015281816130280152818161313c01526133e801526000818161100901528181614f2101528181614fd901526151150152600081816109340152615204015260008181610c7001526151d4015260008181610daf01528181614c5f0152614cab01526000818161160101526116430152615f616000f3fe6080604052600436106104b95760003560e01c806380e3005f1161026b578063bf56b3711161014f578063e9874436116100c1578063f3cbd7fd11610085578063f3cbd7fd14610f76578063f57c214f14610f8b578063f84ba65d14610fc1578063f8821a6214610fe1578063f887ea4014610ff7578063fd16f2141461102b57600080fd5b8063e987443614610ef7578063ea429d7b14610f0d578063eff9884314610f2d578063f0fc334514610f43578063f2fde38b14610f5657600080fd5b8063d088935811610113578063d088935814610e11578063d51ed1c814610e31578063d5d035f514610e51578063da2e3bad14610e71578063dd62ed3e14610e91578063e624c4bc14610ed757600080fd5b8063bf56b37114610d66578063c5363caa14610d7c578063cb3966eb14610d9d578063ceafd6da14610dd1578063cf816bc614610df157600080fd5b806398118cb4116101e8578063a8aa1b31116101ac578063a8aa1b3114610c92578063a9059cbb14610cc6578063abe57e7014610ce6578063b1a22dfe14610d06578063b383f99b14610d26578063bf43ee5014610d4657600080fd5b806398118cb414610be85780639cfb66fb14610bfe578063a24c471614610c1e578063a457c2d714610c3e578063a5949bcf14610c5e57600080fd5b80638da5cb5b1161022f5780638da5cb5b14610b0c5780638f9a55c014610b4a5780639132ad0d14610b6057806395d89b4114610b80578063976093a214610bad57600080fd5b806380e3005f14610aac57806382f684b814610acc578063882cfb3f14610aec578063893d20e814610b0c5780638b135b9a14610b2a57600080fd5b806346a2f9681161039d5780636ddd17131161030f57806372881915116102d357806372881915146109cc5780637516baec14610a055780637a53f02a14610a265780637b95ba0214610a465780637d1db4a514610a665780637f41887014610a7c57600080fd5b80636ddd1713146109085780636f9a880e1461092257806370a082311461096e578063715018a6146109a457806371e8fb57146109b957600080fd5b806360a098881161036157806360a09888146108495780636419b6f91461087c578063658d4b7f1461089c57806367243482146108bc5780636827e764146108dc5780636b67c4df146108f257600080fd5b806346a2f9681461079c578063492a937b146107bc578063571ac8b0146107dc5780635a66a314146107fc5780635e3782a11461081c57600080fd5b806318160ddd1161043657806323b872dd116103fa57806323b872dd146107015780632b112e49146107215780632f9aa1fe14610736578063313ce5671461074b5780633950935114610767578063421dd7c71461078757600080fd5b806318160ddd146106765780631df4ccfc1461068b5780631faf723b146106a15780631fe543e3146106c1578063201e7991146106e157600080fd5b8063097c07931161047d578063097c07931461058e5780630f4f7bfe146105be5780631161ae39146105de5780631398e076146105fe57806316ea2c571461063757600080fd5b806301339c21146104c557806301e78baa146104dc5780630445b667146104fc57806306fdde0314610525578063095ea7b31461055e57600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104da611040565b005b3480156104e857600080fd5b506104da6104f7366004615329565b6110af565b34801561050857600080fd5b5061051260295481565b6040519081526020015b60405180910390f35b34801561053157600080fd5b506040805180820190915260078152664361746f70696160c81b60208201525b60405161051c91906153a0565b34801561056a57600080fd5b5061057e6105793660046153cb565b611112565b604051901515815260200161051c565b34801561059a57600080fd5b506105126105a93660046153e9565b60009081526015602052604090206007015490565b3480156105ca57600080fd5b506104da6105d9366004615402565b61117f565b3480156105ea57600080fd5b5061057e6105f9366004615402565b6112f6565b34801561060a57600080fd5b5061061e6106193660046153e9565b61130a565b60405161051c9d9c9b9a99989796959493929190615424565b34801561064357600080fd5b506106576106523660046153e9565b611437565b604080516001600160a01b03909316835260208301919091520161051c565b34801561068257600080fd5b506105126114c5565b34801561069757600080fd5b50610512600e5481565b3480156106ad57600080fd5b506104da6106bc366004615402565b6114e7565b3480156106cd57600080fd5b506104da6106dc36600461551a565b6115f6565b3480156106ed57600080fd5b506104da6106fc366004615402565b61167e565b34801561070d57600080fd5b5061057e61071c3660046155cb565b6116f7565b34801561072d57600080fd5b5061051261178c565b34801561074257600080fd5b50601454610512565b34801561075757600080fd5b506040516009815260200161051c565b34801561077357600080fd5b5061057e6107823660046153cb565b61180d565b34801561079357600080fd5b506104da611852565b3480156107a857600080fd5b506104da6107b7366004615675565b6118ba565b3480156107c857600080fd5b506104da6107d73660046157a2565b611a44565b3480156107e857600080fd5b5061057e6107f73660046157db565b611af4565b34801561080857600080fd5b506104da6108173660046157f8565b611b02565b34801561082857600080fd5b506105126108373660046153e9565b60276020526000908152604090205481565b34801561085557600080fd5b506108696108643660046153e9565b611b5a565b60405161051c9796959493929190615814565b34801561088857600080fd5b5061051261089736600461585a565b611cc8565b3480156108a857600080fd5b506104da6108b73660046157a2565b611d5c565b3480156108c857600080fd5b506104da6108d73660046158bc565b611e04565b3480156108e857600080fd5b50610512600d5481565b3480156108fe57600080fd5b50610512600c5481565b34801561091457600080fd5b5060285461057e9060ff1681565b34801561092e57600080fd5b506109567f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161051c565b34801561097a57600080fd5b506105126109893660046157db565b6001600160a01b031660009081526003602052604090205490565b3480156109b057600080fd5b506104da612077565b3480156109c557600080fd5b5047610512565b3480156109d857600080fd5b506105126109e73660046157db565b6001600160a01b031660009081526013602052604090206001015490565b348015610a1157600080fd5b50601f5461057e90600160a01b900460ff1681565b348015610a3257600080fd5b506104da610a413660046157a2565b6121c4565b348015610a5257600080fd5b50610512610a61366004615402565b612219565b348015610a7257600080fd5b5061051260015481565b348015610a8857600080fd5b50610512610a973660046153e9565b60009081526015602052604090206003015490565b348015610ab857600080fd5b50610512610ac73660046153e9565b61224a565b348015610ad857600080fd5b5061057e610ae73660046153e9565b612283565b348015610af857600080fd5b50601f54610956906001600160a01b031681565b348015610b1857600080fd5b506000546001600160a01b0316610956565b348015610b3657600080fd5b506104da610b45366004615927565b6127fc565b348015610b5657600080fd5b5061051260025481565b348015610b6c57600080fd5b50610657610b7b366004615402565b612852565b348015610b8c57600080fd5b506040805180820190915260048152634361747360e01b6020820152610551565b348015610bb957600080fd5b50610bcd610bc83660046153cb565b6128cb565b6040805193845260208401929092529082015260600161051c565b348015610bf457600080fd5b50610512600b5481565b348015610c0a57600080fd5b506104da610c19366004615943565b612999565b348015610c2a57600080fd5b506104da610c39366004615927565b6129f1565b348015610c4a57600080fd5b5061057e610c593660046153cb565b612a47565b348015610c6a57600080fd5b506109567f000000000000000000000000000000000000000000000000000000000000000081565b348015610c9e57600080fd5b506109567f000000000000000000000000000000000000000000000000000000000000000081565b348015610cd257600080fd5b5061057e610ce13660046153cb565b612ae0565b348015610cf257600080fd5b506104da610d01366004615402565b612aed565b348015610d1257600080fd5b506104da610d213660046157f8565b612be5565b348015610d3257600080fd5b506104da610d4136600461595f565b612c43565b348015610d5257600080fd5b506104da610d61366004615943565b612d2c565b348015610d7257600080fd5b50610512601e5481565b348015610d8857600080fd5b50601f5461057e90600160a81b900460ff1681565b348015610da957600080fd5b506109567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ddd57600080fd5b506104da610dec36600461597d565b612da3565b348015610dfd57600080fd5b506104da610e0c36600461595f565b612e7b565b348015610e1d57600080fd5b506104da610e2c36600461599a565b612ed1565b348015610e3d57600080fd5b50610512610e4c3660046153e9565b613014565b348015610e5d57600080fd5b506104da610e6c3660046157a2565b61306b565b348015610e7d57600080fd5b506104da610e8c3660046159cf565b6131da565b348015610e9d57600080fd5b50610512610eac366004615a1b565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ee357600080fd5b506104da610ef23660046157db565b6133bc565b348015610f0357600080fd5b5061051260095481565b348015610f1957600080fd5b506104da610f28366004615a5d565b613519565b348015610f3957600080fd5b50610512600a5481565b6104da610f51366004615aaa565b613591565b348015610f6257600080fd5b506104da610f713660046157db565b61399a565b348015610f8257600080fd5b50601854610512565b348015610f9757600080fd5b50610512610fa63660046157db565b6001600160a01b031660009081526013602052604090205490565b348015610fcd57600080fd5b506104da610fdc3660046157a2565b613b59565b348015610fed57600080fd5b50610512602a5481565b34801561100357600080fd5b506109567f000000000000000000000000000000000000000000000000000000000000000081565b34801561103757600080fd5b506104da613c01565b6000546001600160a01b031633146110735760405162461bcd60e51b815260040161106a90615ac6565b60405180910390fd5b601e541561108057600080fd5b43601e556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b6000546001600160a01b031633146110d95760405162461bcd60e51b815260040161106a90615ac6565b600090815260156020526040902080546001600160401b03909216600160981b0267ffffffffffffffff60981b19909216919091179055565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061116d9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146111a95760405162461bcd60e51b815260040161106a90615ac6565b610190606483600e546111bc9190615b11565b6111c69190615b46565b11156112085760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b604482015260640161106a565b60648210156112645760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b606482015260840161106a565b62093a808111156112ae5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b604482015260640161106a565b6010829055601181905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b60008261130283613014565b119392505050565b601560205260009081526040902080546001820154600283015460088401805465ffffffffffff80861696600160301b8704821696600160601b81049092169560ff600160901b84048116966001600160401b03600160981b8604169661ffff600160d81b87041696600160e81b8704841696600160f01b8104851696600160f81b90910490941694936001600160801b0380851694600160801b9004169290916113b490615b5a565b80601f01602080910402602001604051908101604052809291908181526020018280546113e090615b5a565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b505050505090508d565b6000818152601560205260408120600701805482919061145990600190615b95565b8154811061146957611469615bac565b60009182526020808320909101548583526015909152604090912060060180546001600160a01b03909216916114a190600190615b95565b815481106114b1576114b1615bac565b906000526020600020015491509150915091565b60006114d36009600a615ca6565b6114e29064e8d4a51000615b11565b905090565b6000546001600160a01b031633146115115760405162461bcd60e51b815260040161106a90615ac6565b6000821180156115215750600081115b80156115445750600581611537846103e8615b11565b6115419190615b46565b10155b6115905760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f77000000000000604482015260640161106a565b808261159e6009600a615ca6565b6115ad9064e8d4a51000615b11565b6115b79190615b11565b6115c19190615b46565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a3624906020016112ea565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116705760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260440161106a565b61167a8282613da6565b5050565b6000546001600160a01b031633146116a85760405162461bcd60e51b815260040161106a90615ac6565b601a829055601b8190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf816116df846064615b11565b6116e99190615b46565b6040519081526020016112ea565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611777576001600160a01b0384166000908152600460209081526040808320338452909152902054611752908390615b95565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b611782848484613e1e565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c5490916117e891615cb5565b6117f46009600a615ca6565b6118039064e8d4a51000615b11565b6114e29190615b95565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091611849918590611844908690615cb5565b61420e565b50600192915050565b6000546001600160a01b0316331461187c5760405162461bcd60e51b815260040161106a90615ac6565b601f805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b031633146118e45760405162461bcd60e51b815260040161106a90615ac6565b601480546000916015918391826118fa83615ccd565b91905055815260200190815260200160002090508a81600801908051906020019061192692919061523f565b5080547fffffff0000ffffffffffffffffffffffffffffff00000000000000000000000016600160301b65ffffffffffff8c160261ffff60d81b191617600160d81b61ffff8b16021760ff60901b1916600160901b60ff8a160217815561199587670de0b6b3a7640000615ce8565b6001600160801b03878116600160801b0291161760028201558054821515600160f81b026001600160f81b0360ff8616600160e81b0216600161ff0160e81b0387158015600160f01b0260ff60f01b196001600160401b038c16600160981b02166bff000000ffffffffffffffff60981b1990961695909517949094171617178255611a375760178054906000611a2b83615ccd565b90915550504260018201555b5050505050505050505050565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b038216611a945760405162461bcd60e51b815260040161106a90615d17565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b600061117982600019611112565b6000546001600160a01b03163314611b2c5760405162461bcd60e51b815260040161106a90615ac6565b6000908152601560205260409020805461ffff909216600160d81b0261ffff60d81b19909216919091179055565b600081815260156020526040812080546060929182918291829182918291600890910190600160301b810465ffffffffffff1690611ba590600a90600160d81b900461ffff16615d40565b60008b81526015602052604090206002810154905484546001600160801b0380841693600160801b90041691600160981b81046001600160401b031691600160f01b90910460ff16908790611bf990615b5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2590615b5a565b8015611c725780601f10611c4757610100808354040283529160200191611c72565b820191906000526020600020905b815481529060010190602001808311611c5557829003601f168201915b505050505096508565ffffffffffff1695508461ffff169450836001600160801b03169350826001600160801b03169250816001600160401b031691509650965096509650965096509650919395979092949650565b600043601e541415611cea576001601254611ce39190615b95565b9050611179565b8215611d265781611d0a57600f54600e54611d059190615cb5565b611ce3565b6064601054600e54611d1c9190615b11565b611ce39190615b46565b81611d4057600f54600e54611d3b9190615b95565b611785565b6064601054600e54611d529190615b11565b6117859190615b46565b6000546001600160a01b03163314611d865760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b038216611dac5760405162461bcd60e51b815260040161106a90615d17565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611ae8565b6000546001600160a01b03163314611e2e5760405162461bcd60e51b815260040161106a90615ac6565b828114611e7d5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d6174636800000000000000604482015260640161106a565b6028805460ff19811690915560ff1660005b8481101561203657601c6000878784818110611ead57611ead615bac565b9050602002016020810190611ec291906157db565b6001600160a01b0316815260208101919091526040016000205460ff16158015611f1c57506000868683818110611efb57611efb615bac565b9050602002016020810190611f1091906157db565b6001600160a01b031614155b611f7e5760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b606482015260840161106a565b611fdd33878784818110611f9457611f94615bac565b9050602002016020810190611fa991906157db565b611fb56009600a615ca6565b878786818110611fc757611fc7615bac565b90506020020135611fd89190615b11565b613e1e565b504260056000888885818110611ff557611ff5615bac565b905060200201602081019061200a91906157db565b6001600160a01b031681526020810191909152604001600020558061202e81615ccd565b915050611e8f565b506028805460ff191682151517905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b031633146120a15760405162461bcd60e51b815260040161106a90615ac6565b6000600760006120b96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556008816120fb6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601d8161213d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560048161217f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556121c2614332565b565b6000546001600160a01b031633146121ee5760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6026602052816000526040600020818154811061223557600080fd5b90600052602060002001600091509150505481565b6000818152601560205260408120546122759065ffffffffffff80821691600160301b900416615d61565b65ffffffffffff1692915050565b600080546001600160a01b031633146122ae5760405162461bcd60e51b815260040161106a90615ac6565b6000828152601560205260409020546122d99065ffffffffffff80821691600160301b900416615d61565b65ffffffffffff161561232e5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768207469636b65747320736f6c64000000000000000000604482015260640161106a565b60008281526015602052604090208054600790910154600160901b90910460ff16116123955760405162461bcd60e51b815260206004820152601660248201527515da5b9b995c9cc8185b1c9958591e481c1a58dad95960521b604482015260640161106a565b600082815260156020526040812054600160e81b900460ff166124cf576000838152602760209081526040808320548352602690915290205415612446576000838152601560205260409020600301546123f0906002615b11565b6000848152602760209081526040808320548352602682528083208784526015909252909120600701548154811061242a5761242a615bac565b906000526020600020015461243f9190615d88565b9050612511565b600083815260276020526040902054158061247a575060008381526027602090815260408083205483526026909152902054155b6124bd5760405162461bcd60e51b81526020600482015260146024820152735265717565737420616c7265616479206d61646560601b604482015260640161106a565b6124c6836143a6565b50600092915050565b60008381526015602052604090206003015461250e906124f0906002615b11565b600085815260156020526040902054600160e81b900460ff166144f0565b90505b60008381526015602052604081206003015482101561257f576000848152601560205260408120600381018054600490920192918590811061255557612555615bac565b600091825260208083209091015483528201929092526040019020546001600160a01b0316612582565b60005b60008581526015602090815260408083206001600160a01b03851684526005019091529020549091504790158015906125d257506001600160a01b03821660009081526003602052604090205415155b801561260557506000858152601560209081526040808320600101546001600160a01b0386168452600690925290912054105b801561262a57506001600160a01b03821660009081526016602052604090205460ff16155b156127a5576000858152601560205260409020600201546001600160801b031681111561266e57506000848152601560205260409020600201546001600160801b03165b6000858152601560205260408120546103e89061269690600160d81b900461ffff1684615b11565b6126a09190615b46565b90506126ac83826146cd565b604080518781526001600160a01b03851660208201529081018290527f9757c64bc7d9f686827a1985e7f37dc28b61fa0759461fc24343cb65529ea8e69060600160405180910390a16001600160a01b0383166000908152601360205260409020805460019091018290556127218282615cb5565b6001600160a01b0385166000818152601360209081526040808320949094558a8252601581529281206006810180546001818101835591845285842001879055600790910180549182018155825292812090920180546001600160a01b031916909117905560188054849290612798908490615cb5565b909155506127ef92505050565b604080518681526001600160a01b03841660208201529081018290527f1a6c476a8ea23838bd5a986cdc3d6f6ce6cde38553b020c88857da72fcaaf2869060600160405180910390a15b600193505050505b919050565b6000546001600160a01b031633146128265760405162461bcd60e51b815260040161106a90615ac6565b6000908152601560205260409020805460ff909216600160901b0260ff60901b19909216919091179055565b600082815260156020526040812060070180548291908490811061287857612878615bac565b60009182526020808320909101548683526015909152604090912060060180546001600160a01b0390921691859081106128b4576128b4615bac565b9060005260206000200154915091505b9250929050565b600080806001600160a01b0385166129255760405162461bcd60e51b815260206004820152601a60248201527f506c6561736520656e7465722076616c69642061646472657373000000000000604482015260640161106a565b60008481526015602090815260408083206001600160a01b0389168452600581018352818420546001909101546006909352922054101580612967578161296a565b60005b81612976576000612978565b825b60009788526015602052604090972060030154909896975095945050505050565b6000546001600160a01b031633146129c35760405162461bcd60e51b815260040161106a90615ac6565b600090815260156020526040902060020180546001600160801b03928316600160801b029216919091179055565b6000546001600160a01b03163314612a1b5760405162461bcd60e51b815260040161106a90615ac6565b6000908152601560205260409020805460ff909216600160e81b0260ff60e81b19909216919091179055565b3360009081526004602090815260408083206001600160a01b038616845290915281205482811015612ac95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161106a565b612ad6338585840361420e565b5060019392505050565b6000611785338484613e1e565b6000546001600160a01b03163314612b175760405162461bcd60e51b815260040161106a90615ac6565b600081118015612b2957506127108111155b612b7f5760405162461bcd60e51b815260206004820152602160248201527f44697669736f72206d7573742062652067726561746572207468616e207a65726044820152606f60f81b606482015260840161106a565b8082612b8d6009600a615ca6565b612b9c9064e8d4a51000615b11565b612ba69190615b11565b612bb09190615b46565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca788906020016112ea565b6000546001600160a01b03163314612c0f5760405162461bcd60e51b815260040161106a90615ac6565b600090815260156020526040902080546bffffffffffff000000000000191661ffff92909216600160301b02919091179055565b6000546001600160a01b03163314612c6d5760405162461bcd60e51b815260040161106a90615ac6565b818015612c905750600081815260156020526040902054600160f01b900460ff16155b15612cc45760178054906000612ca583615ccd565b9091555050600081815260156020526040902042600190910155612d02565b81158015612ce75750600081815260156020526040902054600160f01b900460ff165b15612d025760178054906000612cfc83615d9c565b91905055505b60009081526015602052604090208054911515600160f01b0260ff60f01b19909216919091179055565b6000546001600160a01b03163314612d565760405162461bcd60e51b815260040161106a90615ac6565b612d6882670de0b6b3a7640000615ce8565b60009182526015602052604090912060020180546fffffffffffffffffffffffffffffffff19166001600160801b0390921691909117905550565b6000546001600160a01b03163314612dcd5760405162461bcd60e51b815260040161106a90615ac6565b8015612e2357601f54600160a81b900460ff1615612e235760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b604482015260640161106a565b601f8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690612e7090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612ea55760405162461bcd60e51b815260040161106a90615ac6565b60009081526015602052604090208054911515600160f81b026001600160f81b03909216919091179055565b6000546001600160a01b03163314612efb5760405162461bcd60e51b815260040161106a90615ac6565b600082118015612f0b5750600081115b612f635760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b606482015260840161106a565b6028805460ff191684151517905580612f7e6009600a615ca6565b612f8d9064e8d4a51000615b11565b612f979190615b46565b602a5581612fa76009600a615ca6565b612fb69064e8d4a51000615b11565b612fc09190615b46565b6029819055602a5460285460408051928352602083019390935260ff1615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b600061301e61178c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600360205260409020546130619084615b11565b6111799190615b46565b6000546001600160a01b031633146130955760405162461bcd60e51b815260040161106a90615ac6565b601f546001600160a01b0383811691161461311657601f54600160a81b900460ff16156130fa5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b604482015260640161106a565b601f80546001600160a01b0319166001600160a01b0384161790555b80156131a257601f546040516366812dbb60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301529091169063cd025b7690604401600060405180830381600087803b15801561318957600080fd5b505af115801561319d573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b031633146132045760405162461bcd60e51b815260040161106a90615ac6565b85613210600282615b46565b61321b906002615b11565b146132855760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b606482015260840161106a565b6009879055600b869055600c859055600d849055600a839055600f8290558286856132b0888b615cb5565b6132ba9190615cb5565b6132c49190615cb5565b6132ce9190615cb5565b600e5560128190556132e1600382615b46565b600e5411156133225760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b604482015260640161106a565b600e54600f54111561336c5760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b604482015260640161106a565b600e54601254600f5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a150505050505050565b6000546001600160a01b031633146133e65760405162461bcd60e51b815260040161106a90615ac6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415801561344557506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b6134a75760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b606482015260840161106a565b6001600160a01b03811660008181526007602090815260408083208054600160ff199182168117909255601d845282852080548216831790556008909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b031633146135435760405162461bcd60e51b815260040161106a90615ac6565b6024939093556025805463ffffffff948516600160301b0269ffffffff0000000000001961ffff9094166401000000000265ffffffffffff1990921695909416949094179390931716179055565b3360009081526016602052604090205460ff16156135f15760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656c696769626c6520666f72206c6f74746572790000000000000000604482015260640161106a565b60008181526015602052604090205461362290600160981b90046001600160401b031665ffffffffffff8416615db3565b6001600160401b0316341461366b5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08195b9bdd59da081c185a59608a1b604482015260640161106a565b600081815260156020526040902054600160f01b900460ff166136c65760405162461bcd60e51b8152602060048201526013602482015272131bdd1d195c9e481b9bdd08195b98589b1959606a1b604482015260640161106a565b60008181526015602052604090205465ffffffffffff600160301b82048116916136f291859116615dd9565b65ffffffffffff1611156137375760405162461bcd60e51b815260206004820152600c60248201526b131bdd1d195c9e48199d5b1b60a21b604482015260640161106a565b600081815260156020908152604080832060020154338452600390925290912054600160801b9091046001600160801b031611156137b05760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81a195b1960521b604482015260640161106a565b600081815260156020908152604080832060010154338452600690925290912054106138345760405162461bcd60e51b815260206004820152602d60248201527f496e656c696769626c6520666f722074686973206c6f7474657279206475652060448201526c746f20746f6b656e2073616c6560981b606482015260840161106a565b60018265ffffffffffff1611156138b957600081815260156020526040902054600160f81b900460ff166138b95760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79207469636b657420707572636861736520617420612074696d6520616044820152651b1b1bddd95960d21b606482015260840161106a565b6138c233614765565b156138fd5760405162461bcd60e51b815260206004820152600b60248201526a48756d616e73206f6e6c7960a81b604482015260640161106a565b60005b8265ffffffffffff1681101561392c5761391a33836147a1565b8061392481615ccd565b915050613900565b506000818152601560205260408120805484929061395390849065ffffffffffff16615dd9565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061167a61398a6000546001600160a01b031690565b613995600a34615b46565b6146cd565b6000546001600160a01b031633146139c45760405162461bcd60e51b815260040161106a90615ac6565b6000600760006139dc6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600881613a1e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601d81613a606000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600481613aa26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055613ae681614877565b6001600160a01b031660009081526007602090815260408083208054600160ff199182168117909255600884528285208054821683179055601d84528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b03163314613b835760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b038216613ba95760405162461bcd60e51b815260040161106a90615d17565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611ae8565b60006005601560006001601454613c189190615b95565b815260208082019290925260409081016000908120338252600501909252902054613c439190615b46565b905060008111613ca45760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f756768207469636b65747320696e2070726576696f7573206c6044820152656f747465727960d01b606482015260840161106a565b601454600090815260156020526040902060010154613d055760405162461bcd60e51b815260206004820152601960248201527f4e6577206c6f7474657279206e6f742072656164792079657400000000000000604482015260640161106a565b60005b8181101561167a57613d1c336014546147a1565b60005b6005811015613d9357601560006001601454613d3b9190615b95565b8152602080820192909252604090810160009081203382526005019092529020805480613d6a57613d6a615e03565b600190038181906000526020600020016000905590558080613d8b90615ccd565b915050613d1f565b5080613d9e81615ccd565b915050613d08565b60008281526026602052604090205415613dfa5760405162461bcd60e51b81526020600482015260156024820152742932b9bab63a399030b63932b0b23c90323930bbb760591b604482015260640161106a565b60008281526026602090815260409091208251613e19928401906152c3565b505050565b6001600160a01b038316600090815260036020526040812054821115613e7d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161106a565b60008211613ecd5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640161106a565b602b5460ff1615613eea57613ee3848484614961565b9050611785565b613ef48483614a04565b6001600160a01b0383166000908152601c602052604090205460ff16158015613f2857506001600160a01b03831661dead14155b15613f57576001600160a01b03831660009081526008602052604090205460ff16613f5757613f578383614a6d565b601e54613fee576001600160a01b0384166000908152601d602052604090205460ff1680613f9d57506001600160a01b0383166000908152601d602052604090205460ff165b613fe95760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640161106a565b614058565b6001600160a01b0384166000908152601c602052604090205460ff1615614058576000601754116140585760405162461bcd60e51b81526020600482015260146024820152732737903637ba3a32b934b2b9903a3790313abc9760611b604482015260640161106a565b6001600160a01b03841660009081526003602052604081208054849290614080908490615b95565b90915550506001600160a01b03841660009081526007602052604081205460ff161580156140c757506001600160a01b03841660009081526007602052604090205460ff16155b6140d157826140dc565b6140dc858585614af2565b90506140e784614d76565b156140fb5782156140fb576140fb83614e17565b6001600160a01b03841660009081526003602052604081208054839290614123908490615cb5565b9091555050601e54151580156141425750601f54600160a01b900460ff165b156141c857601f5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af11580156141a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141c69190615e19565b505b836001600160a01b0316856001600160a01b0316600080516020615f0c833981519152836040516141fb91815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166142705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161106a565b6001600160a01b0382166142d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161106a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b0316331461435c5760405162461bcd60e51b815260040161106a90615ac6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008181526027602052604090205415806143da575060008181526027602090815260408083205483526026909152902054155b61441e5760405162461bcd60e51b81526020600482015260156024820152742932b9bab63a399030b63932b0b23c90323930bbb760591b604482015260640161106a565b602054602480546021546025546040516305d3b1d360e41b81526004810193909352600160a01b9091046001600160401b031692820192909252640100000000820461ffff16604482015263ffffffff8083166064830152600160301b90920490911660848201526001600160a01b0390911690635d3b1d309060a4016020604051808303816000875af11580156144ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144de9190615e36565b60009182526027602052604090912055565b60008083601954436145029190615cb5565b61450c9190615cb5565b905060006018546009600a6145219190615ca6565b6145309064e8d4a51000615b11565b61453a9190615cb5565b905060008460ff16600114156145a557614555600143615b95565b4083614562600243615b95565b6040805160208101949094528301919091524060608201526080810183905260a0015b6040516020818303038152906040528051906020012060001c90506146b9565b8460ff16600214156145fb576145bc600143615b95565b406145c8600243615b95565b406145d4600343615b95565b6040805160208101949094528301919091524060608201526080810184905260a001614585565b8460ff166003141561465057614612600143615b95565b4061461e600243615b95565b408461462b600343615b95565b604080516020810195909552840192909252606083015240608082015260a001614585565b61465b600143615b95565b4082614668600243615b95565b4085614675600243615b95565b604080516020810196909652850193909352606084019190915260808301524060a082015260c0016040516020818303038152906040528051906020012060001c90505b6146c38682615d88565b9695505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461471a576040519150601f19603f3d011682016040523d82523d6000602084013e61471f565b606091505b5050905080613e195760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604482015260640161106a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061479957508115155b949350505050565b6000818152601560208181526040808420805465ffffffffffff600160601b918290048116875260048301855283872080546001600160a01b038b166001600160a01b031990911681179091558752600583018552928620948452815485546001818101885596885285882091839004851691015581546003830180548088018255908852948720908290048416940193909355938590528354929392600c926148519286929190910416615dd9565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505050565b6000546001600160a01b031633146148a15760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b0381166149065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161106a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604081208054839190839061498b908490615b95565b90915550506001600160a01b038316600090815260036020526040812080548492906149b8908490615cb5565b92505081905550826001600160a01b0316846001600160a01b0316600080516020615f0c833981519152846040516149f291815260200190565b60405180910390a35060019392505050565b60015481111580614a2d57506001600160a01b03821660009081526008602052604090205460ff165b61167a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161106a565b6002546001600160a01b0383166000908152600360205260409020548190614a96908490615cb5565b1115613e195760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840161106a565b6001600160a01b0383166000908152601c6020526040812054819060ff16158015614b4157506011546001600160a01b0386166000908152600560205260409020544291614b3f91615cb5565b115b6012546001600160a01b0386166000908152601c602052604081205492935091614b6e9060ff1684611cc8565b614b789086615b11565b614b829190615b46565b6001600160a01b0387166000908152601c602052604090205490915060ff168015614bc357506001600160a01b038516600090815260056020526040902054155b15614be8576001600160a01b0385166000908152600560205260409020429055614c24565b6001600160a01b0386166000908152601c602052604090205460ff16614c24576001600160a01b03861660009081526006602052604090204290555b600a5460009015614d0557600e54600a54614c3f9084615b11565b614c499190615b46565b9050614c558183615b95565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260036020526040812080549294508492909190614ca2908490615cb5565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316600080516020615f0c83398151915283604051614cfc91815260200190565b60405180910390a35b3060009081526003602052604081208054849290614d24908490615cb5565b909155505060405182815230906001600160a01b03891690600080516020615f0c8339815191529060200160405180910390a3614d618183615cb5565b614d6b9086615b95565b979650505050505050565b336000908152601c602052604081205460ff16158015614da657503360009081526007602052604090205460ff16155b8015614db55750602b5460ff16155b8015614dc3575060285460ff165b8015614de757506001600160a01b0382166000908152601c602052604090205460ff165b8015614e045750602a543060009081526003602052604090205410155b801561117957506000600e541192915050565b602b805460ff191660011790556029546000908210614e3857602954614e3a565b815b30600090815260036020526040902054909150811115614e665750306000908152600360205260409020545b6000614e76601a54601b546112f6565b614e8257600b54614e85565b60005b905060006002600a54600e54614e9b9190615b95565b614ea58486615b11565b614eaf9190615b46565b614eb99190615b46565b9050614ec58184615b95565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110614eff57614eff615bac565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa19190615e4f565b81600181518110614fb457614fb4615bac565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790615019908790600090869030904290600401615e6c565b600060405180830381600087803b15801561503357600080fd5b505af1158015615047573d6000803e3d6000fd5b504792506000915061505c9050600286615b46565b600a546150699190615cb5565b600e546150769190615b95565b905060006002826150878886615b11565b6150919190615b46565b61509b9190615b46565b9050600082600c54856150ae9190615b11565b6150b89190615b46565b9050600083600d54866150cb9190615b11565b6150d59190615b46565b905086156151c95760405163f305d71960e01b815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990859060c40160606040518083038185885af1158015615167573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061518c9190615edd565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156151f9576151f97f0000000000000000000000000000000000000000000000000000000000000000836146cd565b8015615229576152297f0000000000000000000000000000000000000000000000000000000000000000826146cd565b5050602b805460ff191690555050505050505050565b82805461524b90615b5a565b90600052602060002090601f01602090048101928261526d57600085556152b3565b82601f1061528657805160ff19168380011785556152b3565b828001600101855582156152b3579182015b828111156152b3578251825591602001919060010190615298565b506152bf9291506152fd565b5090565b8280548282559060005260206000209081019282156152b357916020028201828111156152b3578251825591602001919060010190615298565b5b808211156152bf57600081556001016152fe565b80356001600160401b03811681146127f757600080fd5b6000806040838503121561533c57600080fd5b61534583615312565b946020939093013593505050565b6000815180845260005b818110156153795760208185018101518683018201520161535d565b8181111561538b576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006117856020830184615353565b6001600160a01b03811681146153c857600080fd5b50565b600080604083850312156153de57600080fd5b8235615345816153b3565b6000602082840312156153fb57600080fd5b5035919050565b6000806040838503121561541557600080fd5b50508035926020909101359150565b65ffffffffffff8e811682528d811660208301528c16604082015260ff8b1660608201526001600160401b038a16608082015261ffff891660a082015260ff881660c082015286151560e0820152851515610100820152846101208201526154986101408201856001600160801b03169052565b6001600160801b0383166101608201526101a061018082015260006154c16101a0830184615353565b9f9e505050505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615512576155126154d4565b604052919050565b6000806040838503121561552d57600080fd5b823591506020808401356001600160401b038082111561554c57600080fd5b818601915086601f83011261556057600080fd5b813581811115615572576155726154d4565b8060051b91506155838483016154ea565b818152918301840191848101908984111561559d57600080fd5b938501935b838510156155bb578435825293850193908501906155a2565b8096505050505050509250929050565b6000806000606084860312156155e057600080fd5b83356155eb816153b3565b925060208401356155fb816153b3565b929592945050506040919091013590565b803565ffffffffffff811681146127f757600080fd5b803561ffff811681146127f757600080fd5b803560ff811681146127f757600080fd5b80356001600160801b03811681146127f757600080fd5b80151581146153c857600080fd5b80356127f78161565c565b6000806000806000806000806000806101408b8d03121561569557600080fd5b6001600160401b03808c3511156156ab57600080fd5b8b358c018d601f8201126156be57600080fd5b8035828111156156d0576156d06154d4565b6156e3601f8201601f19166020016154ea565b92508083528e60208284010111156156fa57600080fd5b806020830160208501376000602082850101525050809a505061571f60208c0161560c565b985061572d60408c01615622565b975061573b60608c01615634565b965061574960808c01615645565b955061575760a08c01615645565b945061576560c08c01615312565b935061577360e08c0161566a565b92506157826101008c01615634565b91506157916101208c0161566a565b90509295989b9194979a5092959850565b600080604083850312156157b557600080fd5b82356157c0816153b3565b915060208301356157d08161565c565b809150509250929050565b6000602082840312156157ed57600080fd5b8135611785816153b3565b6000806040838503121561580b57600080fd5b61534583615622565b60e08152600061582760e083018a615353565b60208301989098525060408101959095526060850193909352608084019190915260a0830152151560c090910152919050565b6000806040838503121561586d57600080fd5b82356157c08161565c565b60008083601f84011261588a57600080fd5b5081356001600160401b038111156158a157600080fd5b6020830191508360208260051b85010111156128c457600080fd5b600080600080604085870312156158d257600080fd5b84356001600160401b03808211156158e957600080fd5b6158f588838901615878565b9096509450602087013591508082111561590e57600080fd5b5061591b87828801615878565b95989497509550505050565b6000806040838503121561593a57600080fd5b61534583615634565b6000806040838503121561595657600080fd5b61534583615645565b6000806040838503121561597257600080fd5b82356153458161565c565b60006020828403121561598f57600080fd5b81356117858161565c565b6000806000606084860312156159af57600080fd5b83356159ba8161565c565b95602085013595506040909401359392505050565b600080600080600080600060e0888a0312156159ea57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060408385031215615a2e57600080fd5b8235615a39816153b3565b915060208301356157d0816153b3565b803563ffffffff811681146127f757600080fd5b60008060008060808587031215615a7357600080fd5b84359350615a8360208601615a49565b9250615a9160408601615622565b9150615a9f60608601615a49565b905092959194509250565b60008060408385031215615abd57600080fd5b6153458361560c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615615b2b57615b2b615afb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615b5557615b55615b30565b500490565b600181811c90821680615b6e57607f821691505b60208210811415615b8f57634e487b7160e01b600052602260045260246000fd5b50919050565b600082821015615ba757615ba7615afb565b500390565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115615bfd578160001904821115615be357615be3615afb565b80851615615bf057918102915b93841c9390800290615bc7565b509250929050565b600082615c1457506001611179565b81615c2157506000611179565b8160018114615c375760028114615c4157615c5d565b6001915050611179565b60ff841115615c5257615c52615afb565b50506001821b611179565b5060208310610133831016604e8410600b8410161715615c80575081810a611179565b615c8a8383615bc2565b8060001904821115615c9e57615c9e615afb565b029392505050565b600061178560ff841683615c05565b60008219821115615cc857615cc8615afb565b500190565b6000600019821415615ce157615ce1615afb565b5060010190565b60006001600160801b0380831681851681830481118215151615615d0e57615d0e615afb565b02949350505050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b600061ffff80841680615d5557615d55615b30565b92169190910492915050565b600065ffffffffffff83811690831681811015615d8057615d80615afb565b039392505050565b600082615d9757615d97615b30565b500690565b600081615dab57615dab615afb565b506000190190565b60006001600160401b0380831681851681830481118215151615615d0e57615d0e615afb565b600065ffffffffffff808316818516808303821115615dfa57615dfa615afb565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615e2b57600080fd5b81516117858161565c565b600060208284031215615e4857600080fd5b5051919050565b600060208284031215615e6157600080fd5b8151611785816153b3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615ebc5784516001600160a01b031683529383019391830191600101615e97565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615ef257600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205b306c6f7fd8b6dc1deaaf8b9673cb2fedd84a1a6986076a6fc1414fa8f45df964736f6c634300080c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000048d86741245b28d09bedc9c02eb2065eeb7db663000000000000000000000000e7da913823557f4515f000a24763346936572c73000000000000000000000000e26ff65c074d3c76678e1509862a20ab9513184a000000000000000000000000a9b2dd06904252bb9fd5c05a744a5d03c9459bec

Deployed Bytecode

0x6080604052600436106104b95760003560e01c806380e3005f1161026b578063bf56b3711161014f578063e9874436116100c1578063f3cbd7fd11610085578063f3cbd7fd14610f76578063f57c214f14610f8b578063f84ba65d14610fc1578063f8821a6214610fe1578063f887ea4014610ff7578063fd16f2141461102b57600080fd5b8063e987443614610ef7578063ea429d7b14610f0d578063eff9884314610f2d578063f0fc334514610f43578063f2fde38b14610f5657600080fd5b8063d088935811610113578063d088935814610e11578063d51ed1c814610e31578063d5d035f514610e51578063da2e3bad14610e71578063dd62ed3e14610e91578063e624c4bc14610ed757600080fd5b8063bf56b37114610d66578063c5363caa14610d7c578063cb3966eb14610d9d578063ceafd6da14610dd1578063cf816bc614610df157600080fd5b806398118cb4116101e8578063a8aa1b31116101ac578063a8aa1b3114610c92578063a9059cbb14610cc6578063abe57e7014610ce6578063b1a22dfe14610d06578063b383f99b14610d26578063bf43ee5014610d4657600080fd5b806398118cb414610be85780639cfb66fb14610bfe578063a24c471614610c1e578063a457c2d714610c3e578063a5949bcf14610c5e57600080fd5b80638da5cb5b1161022f5780638da5cb5b14610b0c5780638f9a55c014610b4a5780639132ad0d14610b6057806395d89b4114610b80578063976093a214610bad57600080fd5b806380e3005f14610aac57806382f684b814610acc578063882cfb3f14610aec578063893d20e814610b0c5780638b135b9a14610b2a57600080fd5b806346a2f9681161039d5780636ddd17131161030f57806372881915116102d357806372881915146109cc5780637516baec14610a055780637a53f02a14610a265780637b95ba0214610a465780637d1db4a514610a665780637f41887014610a7c57600080fd5b80636ddd1713146109085780636f9a880e1461092257806370a082311461096e578063715018a6146109a457806371e8fb57146109b957600080fd5b806360a098881161036157806360a09888146108495780636419b6f91461087c578063658d4b7f1461089c57806367243482146108bc5780636827e764146108dc5780636b67c4df146108f257600080fd5b806346a2f9681461079c578063492a937b146107bc578063571ac8b0146107dc5780635a66a314146107fc5780635e3782a11461081c57600080fd5b806318160ddd1161043657806323b872dd116103fa57806323b872dd146107015780632b112e49146107215780632f9aa1fe14610736578063313ce5671461074b5780633950935114610767578063421dd7c71461078757600080fd5b806318160ddd146106765780631df4ccfc1461068b5780631faf723b146106a15780631fe543e3146106c1578063201e7991146106e157600080fd5b8063097c07931161047d578063097c07931461058e5780630f4f7bfe146105be5780631161ae39146105de5780631398e076146105fe57806316ea2c571461063757600080fd5b806301339c21146104c557806301e78baa146104dc5780630445b667146104fc57806306fdde0314610525578063095ea7b31461055e57600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104da611040565b005b3480156104e857600080fd5b506104da6104f7366004615329565b6110af565b34801561050857600080fd5b5061051260295481565b6040519081526020015b60405180910390f35b34801561053157600080fd5b506040805180820190915260078152664361746f70696160c81b60208201525b60405161051c91906153a0565b34801561056a57600080fd5b5061057e6105793660046153cb565b611112565b604051901515815260200161051c565b34801561059a57600080fd5b506105126105a93660046153e9565b60009081526015602052604090206007015490565b3480156105ca57600080fd5b506104da6105d9366004615402565b61117f565b3480156105ea57600080fd5b5061057e6105f9366004615402565b6112f6565b34801561060a57600080fd5b5061061e6106193660046153e9565b61130a565b60405161051c9d9c9b9a99989796959493929190615424565b34801561064357600080fd5b506106576106523660046153e9565b611437565b604080516001600160a01b03909316835260208301919091520161051c565b34801561068257600080fd5b506105126114c5565b34801561069757600080fd5b50610512600e5481565b3480156106ad57600080fd5b506104da6106bc366004615402565b6114e7565b3480156106cd57600080fd5b506104da6106dc36600461551a565b6115f6565b3480156106ed57600080fd5b506104da6106fc366004615402565b61167e565b34801561070d57600080fd5b5061057e61071c3660046155cb565b6116f7565b34801561072d57600080fd5b5061051261178c565b34801561074257600080fd5b50601454610512565b34801561075757600080fd5b506040516009815260200161051c565b34801561077357600080fd5b5061057e6107823660046153cb565b61180d565b34801561079357600080fd5b506104da611852565b3480156107a857600080fd5b506104da6107b7366004615675565b6118ba565b3480156107c857600080fd5b506104da6107d73660046157a2565b611a44565b3480156107e857600080fd5b5061057e6107f73660046157db565b611af4565b34801561080857600080fd5b506104da6108173660046157f8565b611b02565b34801561082857600080fd5b506105126108373660046153e9565b60276020526000908152604090205481565b34801561085557600080fd5b506108696108643660046153e9565b611b5a565b60405161051c9796959493929190615814565b34801561088857600080fd5b5061051261089736600461585a565b611cc8565b3480156108a857600080fd5b506104da6108b73660046157a2565b611d5c565b3480156108c857600080fd5b506104da6108d73660046158bc565b611e04565b3480156108e857600080fd5b50610512600d5481565b3480156108fe57600080fd5b50610512600c5481565b34801561091457600080fd5b5060285461057e9060ff1681565b34801561092e57600080fd5b506109567f000000000000000000000000a9b2dd06904252bb9fd5c05a744a5d03c9459bec81565b6040516001600160a01b03909116815260200161051c565b34801561097a57600080fd5b506105126109893660046157db565b6001600160a01b031660009081526003602052604090205490565b3480156109b057600080fd5b506104da612077565b3480156109c557600080fd5b5047610512565b3480156109d857600080fd5b506105126109e73660046157db565b6001600160a01b031660009081526013602052604090206001015490565b348015610a1157600080fd5b50601f5461057e90600160a01b900460ff1681565b348015610a3257600080fd5b506104da610a413660046157a2565b6121c4565b348015610a5257600080fd5b50610512610a61366004615402565b612219565b348015610a7257600080fd5b5061051260015481565b348015610a8857600080fd5b50610512610a973660046153e9565b60009081526015602052604090206003015490565b348015610ab857600080fd5b50610512610ac73660046153e9565b61224a565b348015610ad857600080fd5b5061057e610ae73660046153e9565b612283565b348015610af857600080fd5b50601f54610956906001600160a01b031681565b348015610b1857600080fd5b506000546001600160a01b0316610956565b348015610b3657600080fd5b506104da610b45366004615927565b6127fc565b348015610b5657600080fd5b5061051260025481565b348015610b6c57600080fd5b50610657610b7b366004615402565b612852565b348015610b8c57600080fd5b506040805180820190915260048152634361747360e01b6020820152610551565b348015610bb957600080fd5b50610bcd610bc83660046153cb565b6128cb565b6040805193845260208401929092529082015260600161051c565b348015610bf457600080fd5b50610512600b5481565b348015610c0a57600080fd5b506104da610c19366004615943565b612999565b348015610c2a57600080fd5b506104da610c39366004615927565b6129f1565b348015610c4a57600080fd5b5061057e610c593660046153cb565b612a47565b348015610c6a57600080fd5b506109567f000000000000000000000000e26ff65c074d3c76678e1509862a20ab9513184a81565b348015610c9e57600080fd5b506109567f000000000000000000000000d0283e654672edbc43e73a524da84441094c4cff81565b348015610cd257600080fd5b5061057e610ce13660046153cb565b612ae0565b348015610cf257600080fd5b506104da610d01366004615402565b612aed565b348015610d1257600080fd5b506104da610d213660046157f8565b612be5565b348015610d3257600080fd5b506104da610d4136600461595f565b612c43565b348015610d5257600080fd5b506104da610d61366004615943565b612d2c565b348015610d7257600080fd5b50610512601e5481565b348015610d8857600080fd5b50601f5461057e90600160a81b900460ff1681565b348015610da957600080fd5b506109567f000000000000000000000000e7da913823557f4515f000a24763346936572c7381565b348015610ddd57600080fd5b506104da610dec36600461597d565b612da3565b348015610dfd57600080fd5b506104da610e0c36600461595f565b612e7b565b348015610e1d57600080fd5b506104da610e2c36600461599a565b612ed1565b348015610e3d57600080fd5b50610512610e4c3660046153e9565b613014565b348015610e5d57600080fd5b506104da610e6c3660046157a2565b61306b565b348015610e7d57600080fd5b506104da610e8c3660046159cf565b6131da565b348015610e9d57600080fd5b50610512610eac366004615a1b565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ee357600080fd5b506104da610ef23660046157db565b6133bc565b348015610f0357600080fd5b5061051260095481565b348015610f1957600080fd5b506104da610f28366004615a5d565b613519565b348015610f3957600080fd5b50610512600a5481565b6104da610f51366004615aaa565b613591565b348015610f6257600080fd5b506104da610f713660046157db565b61399a565b348015610f8257600080fd5b50601854610512565b348015610f9757600080fd5b50610512610fa63660046157db565b6001600160a01b031660009081526013602052604090205490565b348015610fcd57600080fd5b506104da610fdc3660046157a2565b613b59565b348015610fed57600080fd5b50610512602a5481565b34801561100357600080fd5b506109567f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561103757600080fd5b506104da613c01565b6000546001600160a01b031633146110735760405162461bcd60e51b815260040161106a90615ac6565b60405180910390fd5b601e541561108057600080fd5b43601e556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b6000546001600160a01b031633146110d95760405162461bcd60e51b815260040161106a90615ac6565b600090815260156020526040902080546001600160401b03909216600160981b0267ffffffffffffffff60981b19909216919091179055565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061116d9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146111a95760405162461bcd60e51b815260040161106a90615ac6565b610190606483600e546111bc9190615b11565b6111c69190615b46565b11156112085760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b604482015260640161106a565b60648210156112645760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b606482015260840161106a565b62093a808111156112ae5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b604482015260640161106a565b6010829055601181905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b60008261130283613014565b119392505050565b601560205260009081526040902080546001820154600283015460088401805465ffffffffffff80861696600160301b8704821696600160601b81049092169560ff600160901b84048116966001600160401b03600160981b8604169661ffff600160d81b87041696600160e81b8704841696600160f01b8104851696600160f81b90910490941694936001600160801b0380851694600160801b9004169290916113b490615b5a565b80601f01602080910402602001604051908101604052809291908181526020018280546113e090615b5a565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b505050505090508d565b6000818152601560205260408120600701805482919061145990600190615b95565b8154811061146957611469615bac565b60009182526020808320909101548583526015909152604090912060060180546001600160a01b03909216916114a190600190615b95565b815481106114b1576114b1615bac565b906000526020600020015491509150915091565b60006114d36009600a615ca6565b6114e29064e8d4a51000615b11565b905090565b6000546001600160a01b031633146115115760405162461bcd60e51b815260040161106a90615ac6565b6000821180156115215750600081115b80156115445750600581611537846103e8615b11565b6115419190615b46565b10155b6115905760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f77000000000000604482015260640161106a565b808261159e6009600a615ca6565b6115ad9064e8d4a51000615b11565b6115b79190615b11565b6115c19190615b46565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a3624906020016112ea565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990916146116705760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990916602482015260440161106a565b61167a8282613da6565b5050565b6000546001600160a01b031633146116a85760405162461bcd60e51b815260040161106a90615ac6565b601a829055601b8190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf816116df846064615b11565b6116e99190615b46565b6040519081526020016112ea565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611777576001600160a01b0384166000908152600460209081526040808320338452909152902054611752908390615b95565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b611782848484613e1e565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c5490916117e891615cb5565b6117f46009600a615ca6565b6118039064e8d4a51000615b11565b6114e29190615b95565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091611849918590611844908690615cb5565b61420e565b50600192915050565b6000546001600160a01b0316331461187c5760405162461bcd60e51b815260040161106a90615ac6565b601f805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b031633146118e45760405162461bcd60e51b815260040161106a90615ac6565b601480546000916015918391826118fa83615ccd565b91905055815260200190815260200160002090508a81600801908051906020019061192692919061523f565b5080547fffffff0000ffffffffffffffffffffffffffffff00000000000000000000000016600160301b65ffffffffffff8c160261ffff60d81b191617600160d81b61ffff8b16021760ff60901b1916600160901b60ff8a160217815561199587670de0b6b3a7640000615ce8565b6001600160801b03878116600160801b0291161760028201558054821515600160f81b026001600160f81b0360ff8616600160e81b0216600161ff0160e81b0387158015600160f01b0260ff60f01b196001600160401b038c16600160981b02166bff000000ffffffffffffffff60981b1990961695909517949094171617178255611a375760178054906000611a2b83615ccd565b90915550504260018201555b5050505050505050505050565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b038216611a945760405162461bcd60e51b815260040161106a90615d17565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b600061117982600019611112565b6000546001600160a01b03163314611b2c5760405162461bcd60e51b815260040161106a90615ac6565b6000908152601560205260409020805461ffff909216600160d81b0261ffff60d81b19909216919091179055565b600081815260156020526040812080546060929182918291829182918291600890910190600160301b810465ffffffffffff1690611ba590600a90600160d81b900461ffff16615d40565b60008b81526015602052604090206002810154905484546001600160801b0380841693600160801b90041691600160981b81046001600160401b031691600160f01b90910460ff16908790611bf990615b5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2590615b5a565b8015611c725780601f10611c4757610100808354040283529160200191611c72565b820191906000526020600020905b815481529060010190602001808311611c5557829003601f168201915b505050505096508565ffffffffffff1695508461ffff169450836001600160801b03169350826001600160801b03169250816001600160401b031691509650965096509650965096509650919395979092949650565b600043601e541415611cea576001601254611ce39190615b95565b9050611179565b8215611d265781611d0a57600f54600e54611d059190615cb5565b611ce3565b6064601054600e54611d1c9190615b11565b611ce39190615b46565b81611d4057600f54600e54611d3b9190615b95565b611785565b6064601054600e54611d529190615b11565b6117859190615b46565b6000546001600160a01b03163314611d865760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b038216611dac5760405162461bcd60e51b815260040161106a90615d17565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611ae8565b6000546001600160a01b03163314611e2e5760405162461bcd60e51b815260040161106a90615ac6565b828114611e7d5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d6174636800000000000000604482015260640161106a565b6028805460ff19811690915560ff1660005b8481101561203657601c6000878784818110611ead57611ead615bac565b9050602002016020810190611ec291906157db565b6001600160a01b0316815260208101919091526040016000205460ff16158015611f1c57506000868683818110611efb57611efb615bac565b9050602002016020810190611f1091906157db565b6001600160a01b031614155b611f7e5760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b606482015260840161106a565b611fdd33878784818110611f9457611f94615bac565b9050602002016020810190611fa991906157db565b611fb56009600a615ca6565b878786818110611fc757611fc7615bac565b90506020020135611fd89190615b11565b613e1e565b504260056000888885818110611ff557611ff5615bac565b905060200201602081019061200a91906157db565b6001600160a01b031681526020810191909152604001600020558061202e81615ccd565b915050611e8f565b506028805460ff191682151517905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b031633146120a15760405162461bcd60e51b815260040161106a90615ac6565b6000600760006120b96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556008816120fb6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601d8161213d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560048161217f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556121c2614332565b565b6000546001600160a01b031633146121ee5760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6026602052816000526040600020818154811061223557600080fd5b90600052602060002001600091509150505481565b6000818152601560205260408120546122759065ffffffffffff80821691600160301b900416615d61565b65ffffffffffff1692915050565b600080546001600160a01b031633146122ae5760405162461bcd60e51b815260040161106a90615ac6565b6000828152601560205260409020546122d99065ffffffffffff80821691600160301b900416615d61565b65ffffffffffff161561232e5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768207469636b65747320736f6c64000000000000000000604482015260640161106a565b60008281526015602052604090208054600790910154600160901b90910460ff16116123955760405162461bcd60e51b815260206004820152601660248201527515da5b9b995c9cc8185b1c9958591e481c1a58dad95960521b604482015260640161106a565b600082815260156020526040812054600160e81b900460ff166124cf576000838152602760209081526040808320548352602690915290205415612446576000838152601560205260409020600301546123f0906002615b11565b6000848152602760209081526040808320548352602682528083208784526015909252909120600701548154811061242a5761242a615bac565b906000526020600020015461243f9190615d88565b9050612511565b600083815260276020526040902054158061247a575060008381526027602090815260408083205483526026909152902054155b6124bd5760405162461bcd60e51b81526020600482015260146024820152735265717565737420616c7265616479206d61646560601b604482015260640161106a565b6124c6836143a6565b50600092915050565b60008381526015602052604090206003015461250e906124f0906002615b11565b600085815260156020526040902054600160e81b900460ff166144f0565b90505b60008381526015602052604081206003015482101561257f576000848152601560205260408120600381018054600490920192918590811061255557612555615bac565b600091825260208083209091015483528201929092526040019020546001600160a01b0316612582565b60005b60008581526015602090815260408083206001600160a01b03851684526005019091529020549091504790158015906125d257506001600160a01b03821660009081526003602052604090205415155b801561260557506000858152601560209081526040808320600101546001600160a01b0386168452600690925290912054105b801561262a57506001600160a01b03821660009081526016602052604090205460ff16155b156127a5576000858152601560205260409020600201546001600160801b031681111561266e57506000848152601560205260409020600201546001600160801b03165b6000858152601560205260408120546103e89061269690600160d81b900461ffff1684615b11565b6126a09190615b46565b90506126ac83826146cd565b604080518781526001600160a01b03851660208201529081018290527f9757c64bc7d9f686827a1985e7f37dc28b61fa0759461fc24343cb65529ea8e69060600160405180910390a16001600160a01b0383166000908152601360205260409020805460019091018290556127218282615cb5565b6001600160a01b0385166000818152601360209081526040808320949094558a8252601581529281206006810180546001818101835591845285842001879055600790910180549182018155825292812090920180546001600160a01b031916909117905560188054849290612798908490615cb5565b909155506127ef92505050565b604080518681526001600160a01b03841660208201529081018290527f1a6c476a8ea23838bd5a986cdc3d6f6ce6cde38553b020c88857da72fcaaf2869060600160405180910390a15b600193505050505b919050565b6000546001600160a01b031633146128265760405162461bcd60e51b815260040161106a90615ac6565b6000908152601560205260409020805460ff909216600160901b0260ff60901b19909216919091179055565b600082815260156020526040812060070180548291908490811061287857612878615bac565b60009182526020808320909101548683526015909152604090912060060180546001600160a01b0390921691859081106128b4576128b4615bac565b9060005260206000200154915091505b9250929050565b600080806001600160a01b0385166129255760405162461bcd60e51b815260206004820152601a60248201527f506c6561736520656e7465722076616c69642061646472657373000000000000604482015260640161106a565b60008481526015602090815260408083206001600160a01b0389168452600581018352818420546001909101546006909352922054101580612967578161296a565b60005b81612976576000612978565b825b60009788526015602052604090972060030154909896975095945050505050565b6000546001600160a01b031633146129c35760405162461bcd60e51b815260040161106a90615ac6565b600090815260156020526040902060020180546001600160801b03928316600160801b029216919091179055565b6000546001600160a01b03163314612a1b5760405162461bcd60e51b815260040161106a90615ac6565b6000908152601560205260409020805460ff909216600160e81b0260ff60e81b19909216919091179055565b3360009081526004602090815260408083206001600160a01b038616845290915281205482811015612ac95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161106a565b612ad6338585840361420e565b5060019392505050565b6000611785338484613e1e565b6000546001600160a01b03163314612b175760405162461bcd60e51b815260040161106a90615ac6565b600081118015612b2957506127108111155b612b7f5760405162461bcd60e51b815260206004820152602160248201527f44697669736f72206d7573742062652067726561746572207468616e207a65726044820152606f60f81b606482015260840161106a565b8082612b8d6009600a615ca6565b612b9c9064e8d4a51000615b11565b612ba69190615b11565b612bb09190615b46565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca788906020016112ea565b6000546001600160a01b03163314612c0f5760405162461bcd60e51b815260040161106a90615ac6565b600090815260156020526040902080546bffffffffffff000000000000191661ffff92909216600160301b02919091179055565b6000546001600160a01b03163314612c6d5760405162461bcd60e51b815260040161106a90615ac6565b818015612c905750600081815260156020526040902054600160f01b900460ff16155b15612cc45760178054906000612ca583615ccd565b9091555050600081815260156020526040902042600190910155612d02565b81158015612ce75750600081815260156020526040902054600160f01b900460ff165b15612d025760178054906000612cfc83615d9c565b91905055505b60009081526015602052604090208054911515600160f01b0260ff60f01b19909216919091179055565b6000546001600160a01b03163314612d565760405162461bcd60e51b815260040161106a90615ac6565b612d6882670de0b6b3a7640000615ce8565b60009182526015602052604090912060020180546fffffffffffffffffffffffffffffffff19166001600160801b0390921691909117905550565b6000546001600160a01b03163314612dcd5760405162461bcd60e51b815260040161106a90615ac6565b8015612e2357601f54600160a81b900460ff1615612e235760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b604482015260640161106a565b601f8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690612e7090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612ea55760405162461bcd60e51b815260040161106a90615ac6565b60009081526015602052604090208054911515600160f81b026001600160f81b03909216919091179055565b6000546001600160a01b03163314612efb5760405162461bcd60e51b815260040161106a90615ac6565b600082118015612f0b5750600081115b612f635760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b606482015260840161106a565b6028805460ff191684151517905580612f7e6009600a615ca6565b612f8d9064e8d4a51000615b11565b612f979190615b46565b602a5581612fa76009600a615ca6565b612fb69064e8d4a51000615b11565b612fc09190615b46565b6029819055602a5460285460408051928352602083019390935260ff1615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b600061301e61178c565b6001600160a01b037f000000000000000000000000d0283e654672edbc43e73a524da84441094c4cff166000908152600360205260409020546130619084615b11565b6111799190615b46565b6000546001600160a01b031633146130955760405162461bcd60e51b815260040161106a90615ac6565b601f546001600160a01b0383811691161461311657601f54600160a81b900460ff16156130fa5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b604482015260640161106a565b601f80546001600160a01b0319166001600160a01b0384161790555b80156131a257601f546040516366812dbb60e11b81523060048201526001600160a01b037f000000000000000000000000d0283e654672edbc43e73a524da84441094c4cff811660248301529091169063cd025b7690604401600060405180830381600087803b15801561318957600080fd5b505af115801561319d573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b031633146132045760405162461bcd60e51b815260040161106a90615ac6565b85613210600282615b46565b61321b906002615b11565b146132855760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b606482015260840161106a565b6009879055600b869055600c859055600d849055600a839055600f8290558286856132b0888b615cb5565b6132ba9190615cb5565b6132c49190615cb5565b6132ce9190615cb5565b600e5560128190556132e1600382615b46565b600e5411156133225760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b604482015260640161106a565b600e54600f54111561336c5760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b604482015260640161106a565b600e54601254600f5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a150505050505050565b6000546001600160a01b031633146133e65760405162461bcd60e51b815260040161106a90615ac6565b7f000000000000000000000000d0283e654672edbc43e73a524da84441094c4cff6001600160a01b0316816001600160a01b03161415801561344557506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b6134a75760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b606482015260840161106a565b6001600160a01b03811660008181526007602090815260408083208054600160ff199182168117909255601d845282852080548216831790556008909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b031633146135435760405162461bcd60e51b815260040161106a90615ac6565b6024939093556025805463ffffffff948516600160301b0269ffffffff0000000000001961ffff9094166401000000000265ffffffffffff1990921695909416949094179390931716179055565b3360009081526016602052604090205460ff16156135f15760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656c696769626c6520666f72206c6f74746572790000000000000000604482015260640161106a565b60008181526015602052604090205461362290600160981b90046001600160401b031665ffffffffffff8416615db3565b6001600160401b0316341461366b5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08195b9bdd59da081c185a59608a1b604482015260640161106a565b600081815260156020526040902054600160f01b900460ff166136c65760405162461bcd60e51b8152602060048201526013602482015272131bdd1d195c9e481b9bdd08195b98589b1959606a1b604482015260640161106a565b60008181526015602052604090205465ffffffffffff600160301b82048116916136f291859116615dd9565b65ffffffffffff1611156137375760405162461bcd60e51b815260206004820152600c60248201526b131bdd1d195c9e48199d5b1b60a21b604482015260640161106a565b600081815260156020908152604080832060020154338452600390925290912054600160801b9091046001600160801b031611156137b05760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81a195b1960521b604482015260640161106a565b600081815260156020908152604080832060010154338452600690925290912054106138345760405162461bcd60e51b815260206004820152602d60248201527f496e656c696769626c6520666f722074686973206c6f7474657279206475652060448201526c746f20746f6b656e2073616c6560981b606482015260840161106a565b60018265ffffffffffff1611156138b957600081815260156020526040902054600160f81b900460ff166138b95760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79207469636b657420707572636861736520617420612074696d6520616044820152651b1b1bddd95960d21b606482015260840161106a565b6138c233614765565b156138fd5760405162461bcd60e51b815260206004820152600b60248201526a48756d616e73206f6e6c7960a81b604482015260640161106a565b60005b8265ffffffffffff1681101561392c5761391a33836147a1565b8061392481615ccd565b915050613900565b506000818152601560205260408120805484929061395390849065ffffffffffff16615dd9565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061167a61398a6000546001600160a01b031690565b613995600a34615b46565b6146cd565b6000546001600160a01b031633146139c45760405162461bcd60e51b815260040161106a90615ac6565b6000600760006139dc6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600881613a1e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601d81613a606000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600481613aa26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055613ae681614877565b6001600160a01b031660009081526007602090815260408083208054600160ff199182168117909255600884528285208054821683179055601d84528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b03163314613b835760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b038216613ba95760405162461bcd60e51b815260040161106a90615d17565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611ae8565b60006005601560006001601454613c189190615b95565b815260208082019290925260409081016000908120338252600501909252902054613c439190615b46565b905060008111613ca45760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f756768207469636b65747320696e2070726576696f7573206c6044820152656f747465727960d01b606482015260840161106a565b601454600090815260156020526040902060010154613d055760405162461bcd60e51b815260206004820152601960248201527f4e6577206c6f7474657279206e6f742072656164792079657400000000000000604482015260640161106a565b60005b8181101561167a57613d1c336014546147a1565b60005b6005811015613d9357601560006001601454613d3b9190615b95565b8152602080820192909252604090810160009081203382526005019092529020805480613d6a57613d6a615e03565b600190038181906000526020600020016000905590558080613d8b90615ccd565b915050613d1f565b5080613d9e81615ccd565b915050613d08565b60008281526026602052604090205415613dfa5760405162461bcd60e51b81526020600482015260156024820152742932b9bab63a399030b63932b0b23c90323930bbb760591b604482015260640161106a565b60008281526026602090815260409091208251613e19928401906152c3565b505050565b6001600160a01b038316600090815260036020526040812054821115613e7d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161106a565b60008211613ecd5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640161106a565b602b5460ff1615613eea57613ee3848484614961565b9050611785565b613ef48483614a04565b6001600160a01b0383166000908152601c602052604090205460ff16158015613f2857506001600160a01b03831661dead14155b15613f57576001600160a01b03831660009081526008602052604090205460ff16613f5757613f578383614a6d565b601e54613fee576001600160a01b0384166000908152601d602052604090205460ff1680613f9d57506001600160a01b0383166000908152601d602052604090205460ff165b613fe95760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640161106a565b614058565b6001600160a01b0384166000908152601c602052604090205460ff1615614058576000601754116140585760405162461bcd60e51b81526020600482015260146024820152732737903637ba3a32b934b2b9903a3790313abc9760611b604482015260640161106a565b6001600160a01b03841660009081526003602052604081208054849290614080908490615b95565b90915550506001600160a01b03841660009081526007602052604081205460ff161580156140c757506001600160a01b03841660009081526007602052604090205460ff16155b6140d157826140dc565b6140dc858585614af2565b90506140e784614d76565b156140fb5782156140fb576140fb83614e17565b6001600160a01b03841660009081526003602052604081208054839290614123908490615cb5565b9091555050601e54151580156141425750601f54600160a01b900460ff165b156141c857601f5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af11580156141a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141c69190615e19565b505b836001600160a01b0316856001600160a01b0316600080516020615f0c833981519152836040516141fb91815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166142705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161106a565b6001600160a01b0382166142d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161106a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b0316331461435c5760405162461bcd60e51b815260040161106a90615ac6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008181526027602052604090205415806143da575060008181526027602090815260408083205483526026909152902054155b61441e5760405162461bcd60e51b81526020600482015260156024820152742932b9bab63a399030b63932b0b23c90323930bbb760591b604482015260640161106a565b602054602480546021546025546040516305d3b1d360e41b81526004810193909352600160a01b9091046001600160401b031692820192909252640100000000820461ffff16604482015263ffffffff8083166064830152600160301b90920490911660848201526001600160a01b0390911690635d3b1d309060a4016020604051808303816000875af11580156144ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144de9190615e36565b60009182526027602052604090912055565b60008083601954436145029190615cb5565b61450c9190615cb5565b905060006018546009600a6145219190615ca6565b6145309064e8d4a51000615b11565b61453a9190615cb5565b905060008460ff16600114156145a557614555600143615b95565b4083614562600243615b95565b6040805160208101949094528301919091524060608201526080810183905260a0015b6040516020818303038152906040528051906020012060001c90506146b9565b8460ff16600214156145fb576145bc600143615b95565b406145c8600243615b95565b406145d4600343615b95565b6040805160208101949094528301919091524060608201526080810184905260a001614585565b8460ff166003141561465057614612600143615b95565b4061461e600243615b95565b408461462b600343615b95565b604080516020810195909552840192909252606083015240608082015260a001614585565b61465b600143615b95565b4082614668600243615b95565b4085614675600243615b95565b604080516020810196909652850193909352606084019190915260808301524060a082015260c0016040516020818303038152906040528051906020012060001c90505b6146c38682615d88565b9695505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461471a576040519150601f19603f3d011682016040523d82523d6000602084013e61471f565b606091505b5050905080613e195760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604482015260640161106a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061479957508115155b949350505050565b6000818152601560208181526040808420805465ffffffffffff600160601b918290048116875260048301855283872080546001600160a01b038b166001600160a01b031990911681179091558752600583018552928620948452815485546001818101885596885285882091839004851691015581546003830180548088018255908852948720908290048416940193909355938590528354929392600c926148519286929190910416615dd9565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055505050565b6000546001600160a01b031633146148a15760405162461bcd60e51b815260040161106a90615ac6565b6001600160a01b0381166149065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161106a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604081208054839190839061498b908490615b95565b90915550506001600160a01b038316600090815260036020526040812080548492906149b8908490615cb5565b92505081905550826001600160a01b0316846001600160a01b0316600080516020615f0c833981519152846040516149f291815260200190565b60405180910390a35060019392505050565b60015481111580614a2d57506001600160a01b03821660009081526008602052604090205460ff165b61167a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161106a565b6002546001600160a01b0383166000908152600360205260409020548190614a96908490615cb5565b1115613e195760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840161106a565b6001600160a01b0383166000908152601c6020526040812054819060ff16158015614b4157506011546001600160a01b0386166000908152600560205260409020544291614b3f91615cb5565b115b6012546001600160a01b0386166000908152601c602052604081205492935091614b6e9060ff1684611cc8565b614b789086615b11565b614b829190615b46565b6001600160a01b0387166000908152601c602052604090205490915060ff168015614bc357506001600160a01b038516600090815260056020526040902054155b15614be8576001600160a01b0385166000908152600560205260409020429055614c24565b6001600160a01b0386166000908152601c602052604090205460ff16614c24576001600160a01b03861660009081526006602052604090204290555b600a5460009015614d0557600e54600a54614c3f9084615b11565b614c499190615b46565b9050614c558183615b95565b6001600160a01b037f000000000000000000000000e7da913823557f4515f000a24763346936572c7316600090815260036020526040812080549294508492909190614ca2908490615cb5565b925050819055507f000000000000000000000000e7da913823557f4515f000a24763346936572c736001600160a01b0316876001600160a01b0316600080516020615f0c83398151915283604051614cfc91815260200190565b60405180910390a35b3060009081526003602052604081208054849290614d24908490615cb5565b909155505060405182815230906001600160a01b03891690600080516020615f0c8339815191529060200160405180910390a3614d618183615cb5565b614d6b9086615b95565b979650505050505050565b336000908152601c602052604081205460ff16158015614da657503360009081526007602052604090205460ff16155b8015614db55750602b5460ff16155b8015614dc3575060285460ff165b8015614de757506001600160a01b0382166000908152601c602052604090205460ff165b8015614e045750602a543060009081526003602052604090205410155b801561117957506000600e541192915050565b602b805460ff191660011790556029546000908210614e3857602954614e3a565b815b30600090815260036020526040902054909150811115614e665750306000908152600360205260409020545b6000614e76601a54601b546112f6565b614e8257600b54614e85565b60005b905060006002600a54600e54614e9b9190615b95565b614ea58486615b11565b614eaf9190615b46565b614eb99190615b46565b9050614ec58184615b95565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110614eff57614eff615bac565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa19190615e4f565b81600181518110614fb457614fb4615bac565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790615019908790600090869030904290600401615e6c565b600060405180830381600087803b15801561503357600080fd5b505af1158015615047573d6000803e3d6000fd5b504792506000915061505c9050600286615b46565b600a546150699190615cb5565b600e546150769190615b95565b905060006002826150878886615b11565b6150919190615b46565b61509b9190615b46565b9050600082600c54856150ae9190615b11565b6150b89190615b46565b9050600083600d54866150cb9190615b11565b6150d59190615b46565b905086156151c95760405163f305d71960e01b815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990859060c40160606040518083038185885af1158015615167573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061518c9190615edd565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156151f9576151f97f000000000000000000000000e26ff65c074d3c76678e1509862a20ab9513184a836146cd565b8015615229576152297f000000000000000000000000a9b2dd06904252bb9fd5c05a744a5d03c9459bec826146cd565b5050602b805460ff191690555050505050505050565b82805461524b90615b5a565b90600052602060002090601f01602090048101928261526d57600085556152b3565b82601f1061528657805160ff19168380011785556152b3565b828001600101855582156152b3579182015b828111156152b3578251825591602001919060010190615298565b506152bf9291506152fd565b5090565b8280548282559060005260206000209081019282156152b357916020028201828111156152b3578251825591602001919060010190615298565b5b808211156152bf57600081556001016152fe565b80356001600160401b03811681146127f757600080fd5b6000806040838503121561533c57600080fd5b61534583615312565b946020939093013593505050565b6000815180845260005b818110156153795760208185018101518683018201520161535d565b8181111561538b576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006117856020830184615353565b6001600160a01b03811681146153c857600080fd5b50565b600080604083850312156153de57600080fd5b8235615345816153b3565b6000602082840312156153fb57600080fd5b5035919050565b6000806040838503121561541557600080fd5b50508035926020909101359150565b65ffffffffffff8e811682528d811660208301528c16604082015260ff8b1660608201526001600160401b038a16608082015261ffff891660a082015260ff881660c082015286151560e0820152851515610100820152846101208201526154986101408201856001600160801b03169052565b6001600160801b0383166101608201526101a061018082015260006154c16101a0830184615353565b9f9e505050505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615512576155126154d4565b604052919050565b6000806040838503121561552d57600080fd5b823591506020808401356001600160401b038082111561554c57600080fd5b818601915086601f83011261556057600080fd5b813581811115615572576155726154d4565b8060051b91506155838483016154ea565b818152918301840191848101908984111561559d57600080fd5b938501935b838510156155bb578435825293850193908501906155a2565b8096505050505050509250929050565b6000806000606084860312156155e057600080fd5b83356155eb816153b3565b925060208401356155fb816153b3565b929592945050506040919091013590565b803565ffffffffffff811681146127f757600080fd5b803561ffff811681146127f757600080fd5b803560ff811681146127f757600080fd5b80356001600160801b03811681146127f757600080fd5b80151581146153c857600080fd5b80356127f78161565c565b6000806000806000806000806000806101408b8d03121561569557600080fd5b6001600160401b03808c3511156156ab57600080fd5b8b358c018d601f8201126156be57600080fd5b8035828111156156d0576156d06154d4565b6156e3601f8201601f19166020016154ea565b92508083528e60208284010111156156fa57600080fd5b806020830160208501376000602082850101525050809a505061571f60208c0161560c565b985061572d60408c01615622565b975061573b60608c01615634565b965061574960808c01615645565b955061575760a08c01615645565b945061576560c08c01615312565b935061577360e08c0161566a565b92506157826101008c01615634565b91506157916101208c0161566a565b90509295989b9194979a5092959850565b600080604083850312156157b557600080fd5b82356157c0816153b3565b915060208301356157d08161565c565b809150509250929050565b6000602082840312156157ed57600080fd5b8135611785816153b3565b6000806040838503121561580b57600080fd5b61534583615622565b60e08152600061582760e083018a615353565b60208301989098525060408101959095526060850193909352608084019190915260a0830152151560c090910152919050565b6000806040838503121561586d57600080fd5b82356157c08161565c565b60008083601f84011261588a57600080fd5b5081356001600160401b038111156158a157600080fd5b6020830191508360208260051b85010111156128c457600080fd5b600080600080604085870312156158d257600080fd5b84356001600160401b03808211156158e957600080fd5b6158f588838901615878565b9096509450602087013591508082111561590e57600080fd5b5061591b87828801615878565b95989497509550505050565b6000806040838503121561593a57600080fd5b61534583615634565b6000806040838503121561595657600080fd5b61534583615645565b6000806040838503121561597257600080fd5b82356153458161565c565b60006020828403121561598f57600080fd5b81356117858161565c565b6000806000606084860312156159af57600080fd5b83356159ba8161565c565b95602085013595506040909401359392505050565b600080600080600080600060e0888a0312156159ea57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060408385031215615a2e57600080fd5b8235615a39816153b3565b915060208301356157d0816153b3565b803563ffffffff811681146127f757600080fd5b60008060008060808587031215615a7357600080fd5b84359350615a8360208601615a49565b9250615a9160408601615622565b9150615a9f60608601615a49565b905092959194509250565b60008060408385031215615abd57600080fd5b6153458361560c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615615b2b57615b2b615afb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615b5557615b55615b30565b500490565b600181811c90821680615b6e57607f821691505b60208210811415615b8f57634e487b7160e01b600052602260045260246000fd5b50919050565b600082821015615ba757615ba7615afb565b500390565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115615bfd578160001904821115615be357615be3615afb565b80851615615bf057918102915b93841c9390800290615bc7565b509250929050565b600082615c1457506001611179565b81615c2157506000611179565b8160018114615c375760028114615c4157615c5d565b6001915050611179565b60ff841115615c5257615c52615afb565b50506001821b611179565b5060208310610133831016604e8410600b8410161715615c80575081810a611179565b615c8a8383615bc2565b8060001904821115615c9e57615c9e615afb565b029392505050565b600061178560ff841683615c05565b60008219821115615cc857615cc8615afb565b500190565b6000600019821415615ce157615ce1615afb565b5060010190565b60006001600160801b0380831681851681830481118215151615615d0e57615d0e615afb565b02949350505050565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b600061ffff80841680615d5557615d55615b30565b92169190910492915050565b600065ffffffffffff83811690831681811015615d8057615d80615afb565b039392505050565b600082615d9757615d97615b30565b500690565b600081615dab57615dab615afb565b506000190190565b60006001600160401b0380831681851681830481118215151615615d0e57615d0e615afb565b600065ffffffffffff808316818516808303821115615dfa57615dfa615afb565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615e2b57600080fd5b81516117858161565c565b600060208284031215615e4857600080fd5b5051919050565b600060208284031215615e6157600080fd5b8151611785816153b3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615ebc5784516001600160a01b031683529383019391830191600101615e97565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615ef257600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205b306c6f7fd8b6dc1deaaf8b9673cb2fedd84a1a6986076a6fc1414fa8f45df964736f6c634300080c0033

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

00000000000000000000000048d86741245b28d09bedc9c02eb2065eeb7db663000000000000000000000000e7da913823557f4515f000a24763346936572c73000000000000000000000000e26ff65c074d3c76678e1509862a20ab9513184a000000000000000000000000a9b2dd06904252bb9fd5c05a744a5d03c9459bec

-----Decoded View---------------
Arg [0] : _newOwner (address): 0x48d86741245B28D09bedc9c02eb2065eEb7db663
Arg [1] : _staking (address): 0xE7Da913823557F4515f000a24763346936572C73
Arg [2] : _marketing (address): 0xe26Ff65c074D3C76678e1509862A20AB9513184a
Arg [3] : _dev (address): 0xA9B2dd06904252bB9Fd5c05a744a5D03c9459beC

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000048d86741245b28d09bedc9c02eb2065eeb7db663
Arg [1] : 000000000000000000000000e7da913823557f4515f000a24763346936572c73
Arg [2] : 000000000000000000000000e26ff65c074d3c76678e1509862a20ab9513184a
Arg [3] : 000000000000000000000000a9b2dd06904252bb9fd5c05a744a5d03c9459bec


Deployed Bytecode Sourcemap

8687:33577:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31885:150;;;;;;;;;;;;;:::i;:::-;;28115:117;;;;;;;;;;-1:-1:-1;28115:117:0;;;;;:::i;:::-;;:::i;12449:49::-;;;;;;;;;;;;;;;;;;;593:25:1;;;581:2;566:18;12449:49:0;;;;;;;;14148:71;;;;;;;;;;-1:-1:-1;14211:5:0;;;;;;;;;;;;-1:-1:-1;;;14211:5:0;;;;14148:71;;;;;;;:::i;14554:216::-;;;;;;;;;;-1:-1:-1;14554:216:0;;;;;:::i;:::-;;:::i;:::-;;;2048:14:1;;2041:22;2023:41;;2011:2;1996:18;14554:216:0;1883:187:1;24903:138:0;;;;;;;;;;-1:-1:-1;24903:138:0;;;;;:::i;:::-;24965:7;24993:16;;;:9;:16;;;;;:32;;:39;;24903:138;31411:466;;;;;;;;;;-1:-1:-1;31411:466:0;;;;;:::i;:::-;;:::i;22613:150::-;;;;;;;;;;-1:-1:-1;22613:150:0;;;;;:::i;:::-;;:::i;10959:44::-;;;;;;;;;;-1:-1:-1;10959:44:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;24638:253::-;;;;;;;;;;-1:-1:-1;24638:253:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4323:32:1;;;4305:51;;4387:2;4372:18;;4365:34;;;;4278:18;24638:253:0;4131:274:1;13896:88:0;;;;;;;;;;;;;:::i;9858:::-;;;;;;;;;;;;;;;;32043:309;;;;;;;;;;-1:-1:-1;32043:309:0;;;;;:::i;:::-;;:::i;7268:261::-;;;;;;;;;;-1:-1:-1;7268:261:0;;;;;:::i;:::-;;:::i;34566:246::-;;;;;;;;;;-1:-1:-1;34566:246:0;;;;;:::i;:::-;;:::i;16066:341::-;;;;;;;;;;-1:-1:-1;16066:341:0;;;;;:::i;:::-;;:::i;22297:144::-;;;;;;;;;;;;;:::i;25266:97::-;;;;;;;;;;-1:-1:-1;25343:12:0;;25266:97;;13990:71;;;;;;;;;;-1:-1:-1;13990:71:0;;8968:1;6444:36:1;;6432:2;6417:18;13990:71:0;6302:184:1;14778:213:0;;;;;;;;;;-1:-1:-1;14778:213:0;;;;;:::i;:::-;;:::i;30893:128::-;;;;;;;;;;;;;:::i;25371:838::-;;;;;;;;;;-1:-1:-1;25371:838:0;;;;;:::i;:::-;;:::i;34820:233::-;;;;;;;;;;-1:-1:-1;34820:233:0;;;;;:::i;:::-;;:::i;15772:122::-;;;;;;;;;;-1:-1:-1;15772:122:0;;;;;:::i;:::-;;:::i;28575:180::-;;;;;;;;;;-1:-1:-1;28575:180:0;;;;;:::i;:::-;;:::i;12357:46::-;;;;;;;;;;-1:-1:-1;12357:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;24104:522;;;;;;;;;;-1:-1:-1;24104:522:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;18386:345::-;;;;;;;;;;-1:-1:-1;18386:345:0;;;;;:::i;:::-;;:::i;32655:222::-;;;;;;;;;;-1:-1:-1;32655:222:0;;;;;:::i;:::-;;:::i;40385:769::-;;;;;;;;;;-1:-1:-1;40385:769:0;;;;;:::i;:::-;;:::i;9825:26::-;;;;;;;;;;;;;;;;9786:32;;;;;;;;;;;;;;;;12412:30;;;;;;;;;;-1:-1:-1;12412:30:0;;;;;;;;11288:44;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12105:32:1;;;12087:51;;12075:2;12060:18;11288:44:0;11925:219:1;14302:105:0;;;;;;;;;;-1:-1:-1;14302:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;14386:18:0;14368:7;14386:18;;;:9;:18;;;;;;;14302:105;29944:285;;;;;;;;;;;;;:::i;23989:103::-;;;;;;;;;;-1:-1:-1;24063:21:0;23989:103;;23742:140;;;;;;;;;;-1:-1:-1;23742:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;23840:26:0;23805:15;23840:26;;;:13;:26;;;;;:34;;;;23742:140;11763:36;;;;;;;;;;-1:-1:-1;11763:36:0;;;;-1:-1:-1;;;11763:36:0;;;;;;33135:146;;;;;;;;;;-1:-1:-1;33135:146:0;;;;;:::i;:::-;;:::i;12300:50::-;;;;;;;;;;-1:-1:-1;12300:50:0;;;;;:::i;:::-;;:::i;9216:54::-;;;;;;;;;;;;;;;;22973:132;;;;;;;;;;-1:-1:-1;22973:132:0;;;;;:::i;:::-;23037:7;23064:16;;;:9;:16;;;;;:26;;:33;;22973:132;22771:190;;;;;;;;;;-1:-1:-1;22771:190:0;;;;;:::i;:::-;;:::i;36985:2511::-;;;;;;;;;;-1:-1:-1;36985:2511:0;;;;;:::i;:::-;;:::i;11729:27::-;;;;;;;;;;-1:-1:-1;11729:27:0;;;;-1:-1:-1;;;;;11729:27:0;;;14225:71;;;;;;;;;;-1:-1:-1;14268:7:0;7915:6;-1:-1:-1;;;;;7915:6:0;14225:71;13896:88;26221:130;;;;;;;;;;-1:-1:-1;26221:130:0;;;;;:::i;:::-;;:::i;9284:56::-;;;;;;;;;;;;;;;;25053:205;;;;;;;;;;-1:-1:-1;25053:205:0;;;;;:::i;:::-;;:::i;14067:75::-;;;;;;;;;;-1:-1:-1;14132:7:0;;;;;;;;;;;;-1:-1:-1;;;14132:7:0;;;;14067:75;;23117:462;;;;;;;;;;-1:-1:-1;23117:462:0;;;;;:::i;:::-;;:::i;:::-;;;;13040:25:1;;;13096:2;13081:18;;13074:34;;;;13124:18;;;13117:34;13028:2;13013:18;23117:462:0;12838:319:1;9747:32:0;;;;;;;;;;;;;;;;28244:142;;;;;;;;;;-1:-1:-1;28244:142:0;;;;;:::i;:::-;;:::i;29140:145::-;;;;;;;;;;-1:-1:-1;29140:145:0;;;;;:::i;:::-;;:::i;14999:411::-;;;;;;;;;;-1:-1:-1;14999:411:0;;;;;:::i;:::-;;:::i;11231:50::-;;;;;;;;;;;;;;;11656:29;;;;;;;;;;;;;;;15902:156;;;;;;;;;;-1:-1:-1;15902:156:0;;;;;:::i;:::-;;:::i;32364:283::-;;;;;;;;;;-1:-1:-1;32364:283:0;;;;;:::i;:::-;;:::i;28398:165::-;;;;;;;;;;-1:-1:-1;28398:165:0;;;;;:::i;:::-;;:::i;28767:361::-;;;;;;;;;;-1:-1:-1;28767:361:0;;;;;:::i;:::-;;:::i;26363:141::-;;;;;;;;;;-1:-1:-1;26363:141:0;;;;;:::i;:::-;;:::i;11694:25::-;;;;;;;;;;;;;;;;11806:38;;;;;;;;;;-1:-1:-1;11806:38:0;;;;-1:-1:-1;;;11806:38:0;;;;;;11184:40;;;;;;;;;;;;;;;30237:242;;;;;;;;;;-1:-1:-1;30237:242:0;;;;;:::i;:::-;;:::i;29297:127::-;;;;;;;;;;-1:-1:-1;29297:127:0;;;;;:::i;:::-;;:::i;34128:430::-;;;;;;;;;;-1:-1:-1;34128:430:0;;;;;:::i;:::-;;:::i;22449:156::-;;;;;;;;;;-1:-1:-1;22449:156:0;;;;;:::i;:::-;;:::i;30491:390::-;;;;;;;;;;-1:-1:-1;30491:390:0;;;;;:::i;:::-;;:::i;33289:831::-;;;;;;;;;;-1:-1:-1;33289:831:0;;;;;:::i;:::-;;:::i;14413:133::-;;;;;;;;;;-1:-1:-1;14413:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14515:19:0;;;14497:7;14515:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14413:133;31033:370;;;;;;;;;;-1:-1:-1;31033:370:0;;;;;:::i;:::-;;:::i;9652:30::-;;;;;;;;;;;;;;;;35061:282;;;;;;;;;;-1:-1:-1;35061:282:0;;;;;:::i;:::-;;:::i;9709:30::-;;;;;;;;;;;;;;;;26512:1066;;;;;;:::i;:::-;;:::i;29432:504::-;;;;;;;;;;-1:-1:-1;29432:504:0;;;;;:::i;:::-;;:::i;23890:87::-;;;;;;;;;;-1:-1:-1;23962:7:0;;23890:87;;23591:143;;;;;;;;;;-1:-1:-1;23591:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;23691:26:0;23655:16;23691:26;;;:13;:26;;;;;:35;;23591:143;32885:242;;;;;;;;;;-1:-1:-1;32885:242:0;;;;;:::i;:::-;;:::i;12513:49::-;;;;;;;;;;;;;;;;11425:34;;;;;;;;;;;;;;;27586:521;;;;;;;;;;;;;:::i;31885:150::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;;;;;;;;;31942:10:::1;::::0;:15;31933:25:::1;;;::::0;::::1;;31982:12;31969:10;:25:::0;32010:17:::1;::::0;::::1;::::0;;;::::1;31885:150::o:0;28115:117::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;28194:16:::1;::::0;;;:9:::1;:16;::::0;;;;:30;;-1:-1:-1;;;;;28194:30:0;;::::1;-1:-1:-1::0;;;28194:30:0::1;-1:-1:-1::0;;;;28194:30:0;;::::1;::::0;;;::::1;::::0;;28115:117::o;14554:216::-;14658:10;14629:4;14646:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14646:32:0;;;;;;;;;;:41;;;14703:37;14629:4;;14646:32;;14703:37;;;;14681:6;593:25:1;;581:2;566:18;;447:177;14703:37:0;;;;;;;;-1:-1:-1;14758:4:0;14554:216;;;;;:::o;31411:466::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;31562:3:::1;31555;31531:20;31520:8;;:31;;;;:::i;:::-;31519:39;;;;:::i;:::-;:46;;31511:76;;;::::0;-1:-1:-1;;;31511:76:0;;17531:2:1;31511:76:0::1;::::0;::::1;17513:21:1::0;17570:2;17550:18;;;17543:30;-1:-1:-1;;;17589:18:1;;;17582:47;17646:18;;31511:76:0::1;17329:341:1::0;31511:76:0::1;31630:3;31606:20;:27;;31598:74;;;::::0;-1:-1:-1;;;31598:74:0;;17877:2:1;31598:74:0::1;::::0;::::1;17859:21:1::0;17916:2;17896:18;;;17889:30;17955:34;17935:18;;;17928:62;-1:-1:-1;;;18006:18:1;;;17999:32;18048:19;;31598:74:0::1;17675:398:1::0;31598:74:0::1;31702:6;31691:7;:17;;31683:50;;;::::0;-1:-1:-1;;;31683:50:0;;18280:2:1;31683:50:0::1;::::0;::::1;18262:21:1::0;18319:2;18299:18;;;18292:30;-1:-1:-1;;;18338:18:1;;;18331:50;18398:18;;31683:50:0::1;18078:344:1::0;31683:50:0::1;31744:11;:34:::0;;;31789:10:::1;:20:::0;;;31825:44:::1;::::0;;18601:25:1;;;18657:2;18642:18;;18635:34;;;31825:44:0::1;::::0;18574:18:1;31825:44:0::1;;;;;;;;31411:466:::0;;:::o;22613:150::-;22693:4;22749:6;22717:29;22737:8;22717:19;:29::i;:::-;:38;;22613:150;-1:-1:-1;;;22613:150:0:o;10959:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10959:44:0;;;;;-1:-1:-1;;;10959:44:0;;;;;;;-1:-1:-1;;;10959:44:0;;;;;-1:-1:-1;;;;;;;;10959:44:0;;;;;-1:-1:-1;;;10959:44:0;;;;-1:-1:-1;;;10959:44:0;;;;;-1:-1:-1;;;10959:44:0;;;;;-1:-1:-1;;;10959:44:0;;;;;;;;-1:-1:-1;;;;;10959:44:0;;;;-1:-1:-1;;;10959:44:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24638:253::-;24699:7;24736:16;;;:9;:16;;;;;:32;;24769:39;;24699:7;;24736:32;24769:41;;24809:1;;24769:41;:::i;:::-;24736:75;;;;;;;;:::i;:::-;;;;;;;;;;;;;24813:16;;;:9;:16;;;;;;;:29;;24843:36;;-1:-1:-1;;;;;24736:75:0;;;;24843:38;;24736:75;;24843:38;:::i;:::-;24813:69;;;;;;;;:::i;:::-;;;;;;;;;24728:155;;;;24638:253;;;:::o;13896:88::-;13951:7;9010:15;8968:1;9010:2;:15;:::i;:::-;9066:34;;:17;:34;:::i;:::-;13962:19;;13896:88;:::o;32043:309::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;32149:1:::1;32137:9;:13;:28;;;;;32164:1;32154:7;:11;32137:28;:65;;;;-1:-1:-1::0;32201:1:0::1;32190:7:::0;32170:16:::1;:9:::0;32182:4:::1;32170:16;:::i;:::-;32169:28;;;;:::i;:::-;:33;;32137:65;32129:104;;;::::0;-1:-1:-1;;;32129:104:0;;20912:2:1;32129:104:0::1;::::0;::::1;20894:21:1::0;20951:2;20931:18;;;20924:30;20990:28;20970:18;;;20963:56;21036:18;;32129:104:0::1;20710:350:1::0;32129:104:0::1;32288:7:::0;32275:9;9010:15:::1;8968:1;9010:2;:15;:::i;:::-;9066:34;::::0;:17:::1;:34;:::i;:::-;32260:24;;;;:::i;:::-;32259:36;;;;:::i;:::-;32244:12;:51:::0;;;32311:33:::1;::::0;593:25:1;;;32311:33:0::1;::::0;581:2:1;566:18;32311:33:0::1;447:177:1::0;7268:261:0;7368:10;-1:-1:-1;;;;;7382:14:0;7368:28;;7364:111;;7414:53;;-1:-1:-1;;;7414:53:0;;7440:10;7414:53;;;21277:34:1;-1:-1:-1;;;;;7452:14:0;21347:15:1;21327:18;;;21320:43;21212:18;;7414:53:0;21065:304:1;7364:111:0;7481:42;7500:9;7511:11;7481:18;:42::i;:::-;7268:261;;:::o;34566:246::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;34663:15:::1;:25:::0;;;34699:26:::1;:41:::0;;;34756:48:::1;34728:12:::0;34775:13:::1;34681:7:::0;34785:3:::1;34775:13;:::i;:::-;:28;;;;:::i;:::-;34756:48;::::0;593:25:1;;;581:2;566:18;34756:48:0::1;447:177:1::0;16066:341:0;-1:-1:-1;;;;;16186:19:0;;16166:4;16186:19;;;:11;:19;;;;;;;;16206:10;16186:31;;;;;;;;-1:-1:-1;;16186:52:0;16183:157;;-1:-1:-1;;;;;16288:19:0;;;;;;:11;:19;;;;;;;;16308:10;16288:31;;;;;;;;:40;;16322:6;;16288:40;:::i;:::-;-1:-1:-1;;;;;16254:19:0;;;;;;:11;:19;;;;;;;;16274:10;16254:31;;;;;;;:74;16183:157;16359:40;16373:6;16381:9;16392:6;16359:13;:40::i;:::-;16352:47;;16066:341;;;;;;:::o;22297:144::-;14386:9;:18;;;;8811:42;22350:7;14386:18;;;;;22350:7;;22393:39;;;:::i;:::-;9010:15;8968:1;9010:2;:15;:::i;:::-;9066:34;;:17;:34;:::i;:::-;22377:56;;;;:::i;14778:213::-;14894:10;14868:4;14915:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14915:32:0;;;;;;;;;;14868:4;;14885:76;;14906:7;;14915:45;;14950:10;;14915:45;:::i;:::-;14885:8;:76::i;:::-;-1:-1:-1;14979:4:0;14778:213;;;;:::o;30893:128::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;30952:18:::1;:25:::0;;-1:-1:-1;;;;30952:25:0::1;-1:-1:-1::0;;;30952:25:0::1;::::0;;30993:20:::1;::::0;::::1;::::0;30952:25;;30993:20:::1;30893:128::o:0;25371:838::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;25643:12:::1;:14:::0;;25613:17:::1;::::0;25633:9:::1;::::0;25613:17;;;25643:14:::1;::::0;::::1;:::i;:::-;;;;;25633:25;;;;;;;;;;;25613:45;;25678:9;25669:1;:6;;:18;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25698:34:0;;25794:48;;-1:-1:-1;;;25698:34:0::1;25743:40:::0;::::1;;-1:-1:-1::0;;;;25794:48:0;;-1:-1:-1;;;25794:48:0::1;::::0;::::1;;;-1:-1:-1::0;;;;25853:25:0::1;-1:-1:-1::0;;;25853:25:0::1;::::0;::::1;;;::::0;;25908:15:::1;:6:::0;25917::::1;25908:15;:::i;:::-;-1:-1:-1::0;;;;;25934:21:0;;::::1;-1:-1:-1::0;;;25934:21:0::1;25889:34:::0;::::1;25934:21;25889:16;::::0;::::1;25934:21:::0;25966:15;;26059:21;::::1;;-1:-1:-1::0;;;26059:21:0::1;-1:-1:-1::0;;;;;25992:21:0::1;26024:24:::0;::::1;-1:-1:-1::0;;;26024:24:0::1;26059:21:::0;-1:-1:-1;;;;;25992:21:0;::::1;::::0;::::1;-1:-1:-1::0;;;25992:21:0::1;-1:-1:-1::0;;;;;;;;;25966:15:0;::::1;-1:-1:-1::0;;;25966:15:0::1;25992:21:::0;-1:-1:-1;;;;25992:21:0;;;;;;;;;;::::1;26059::::0;;::::1;::::0;;26101:101:::1;;26131:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;26175:15:0::1;26163:9;::::0;::::1;:27:::0;26101:101:::1;25602:607;25371:838:::0;;;;;;;;;;:::o;34820:233::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34914:19:0;::::1;34906:47;;;;-1:-1:-1::0;;;34906:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34964:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;34964:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35012:33;;2023:41:1;;;35012:33:0::1;::::0;1996:18:1;35012:33:0::1;;;;;;;;34820:233:::0;;:::o;15772:122::-;15827:4;15851:35;15859:7;-1:-1:-1;;15851:7:0;:35::i;28575:180::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;28684:16:::1;::::0;;;:9:::1;:16;::::0;;;;:63;;::::1;::::0;;::::1;-1:-1:-1::0;;;28684:63:0::1;-1:-1:-1::0;;;;28684:63:0;;::::1;::::0;;;::::1;::::0;;28575:180::o;24104:522::-;24201:21;24341:16;;;:9;:16;;;;;24373:39;;24176:23;;24201:21;;;;;;;;;;;24341;;;;;-1:-1:-1;;;24373:39:0;;;;;24423:45;;24466:2;;-1:-1:-1;;;24423:40:0;;;;:45;:::i;:::-;24479:16;;;;:9;:16;;;;;:31;;;;24560:22;;24333:285;;-1:-1:-1;;;;;24479:31:0;;;;-1:-1:-1;;;24521:28:0;;;;-1:-1:-1;;;24560:22:0;;-1:-1:-1;;;;;24560:22:0;;-1:-1:-1;;;24593:24:0;;;;;;24333:285;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24333:285:0;;;;-1:-1:-1;;;;;24333:285:0;;;;-1:-1:-1;;;;;24333:285:0;;;;;;;;;;;;;;;;;24104:522;;;;;;;;;:::o;18386:345::-;18461:7;18498:12;18484:10;;:26;18481:60;;;18537:1;18520:14;;:18;;;;:::i;:::-;18513:25;;;;18481:60;18555:7;18551:87;;;18571:12;:67;;18630:8;;18619;;:19;;;;:::i;:::-;18571:67;;;18613:3;18598:11;;18587:8;;:22;;;;:::i;:::-;18586:30;;;;:::i;18551:87::-;18656:12;:67;;18715:8;;18704;;:19;;;;:::i;:::-;18656:67;;;18698:3;18683:11;;18672:8;;:22;;;;:::i;:::-;18671:30;;;;:::i;32655:222::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32746:20:0;::::1;32738:48;;;;-1:-1:-1::0;;;32738:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32797:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;32797:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32841;;2023:41:1;;;32841:28:0::1;::::0;1996:18:1;32841:28:0::1;1883:187:1::0;40385:769:0;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;40504:35;;::::1;40496:73;;;::::0;-1:-1:-1;;;40496:73:0;;22677:2:1;40496:73:0::1;::::0;::::1;22659:21:1::0;22716:2;22696:18;;;22689:30;22755:27;22735:18;;;22728:55;22800:18;;40496:73:0::1;22475:349:1::0;40496:73:0::1;40600:11;::::0;;-1:-1:-1;;40622:19:0;::::1;::::0;;;40600:11:::1;;40580:17;40738:333;40758:21:::0;;::::1;40738:333;;;40810:14;:29;40825:10;;40836:1;40825:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40810:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40810:29:0;;::::1;;40809:30;:61:::0;::::1;;;-1:-1:-1::0;40868:1:0::1;40843:10:::0;;40854:1;40843:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40843:27:0::1;;;40809:61;40801:119;;;::::0;-1:-1:-1;;;40801:119:0;;23031:2:1;40801:119:0::1;::::0;::::1;23013:21:1::0;23070:2;23050:18;;;23043:30;23109:34;23089:18;;;23082:62;-1:-1:-1;;;23160:18:1;;;23153:43;23213:19;;40801:119:0::1;22829:409:1::0;40801:119:0::1;40935:69;40949:10;40961;;40972:1;40961:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9010:15;8968:1;9010:2;:15;:::i;:::-;40976:7;;40984:1;40976:10;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;40935:13;:69::i;:::-;;41044:15;41019:7;:22;41027:10;;41038:1;41027:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41019:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41019:22:0;:40;40781:3;::::1;::::0;::::1;:::i;:::-;;;;40738:333;;;-1:-1:-1::0;41081:11:0::1;:26:::0;;-1:-1:-1;;41081:26:0::1;::::0;::::1;;;::::0;;41123:23:::1;::::0;41135:10:::1;::::0;41123:23:::1;::::0;-1:-1:-1;;41123:23:0::1;40485:669;40385:769:::0;;;;:::o;29944:285::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;30041:5:::1;30018:11;:20;30030:7;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;30030:7:::1;-1:-1:-1::0;;;;;30018:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30018:20:0;;;:28;;;::::1;;-1:-1:-1::0;;30018:28:0;;::::1;::::0;;;::::1;::::0;;;30057:15:::1;-1:-1:-1::0;30073:7:0::1;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;30073:7:::1;-1:-1:-1::0;;;;;30057:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30057:24:0;;;:32;;;::::1;;-1:-1:-1::0;;30057:32:0;;::::1;::::0;;;::::1;::::0;;;30100:18:::1;-1:-1:-1::0;30119:7:0::1;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;30119:7:::1;-1:-1:-1::0;;;;;30100:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30100:27:0;;;:35;;;::::1;;-1:-1:-1::0;;30100:35:0;;::::1;::::0;;;::::1;::::0;;;30146:11:::1;-1:-1:-1::0;30158:7:0::1;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;30158:7:::1;-1:-1:-1::0;;;;;30146:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;30146:20:0;;;11505:42:::1;30146:35:::0;;;;;;;:39;30196:25:::1;:23;:25::i;:::-;29944:285::o:0;33135:146::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33231:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:42;;-1:-1:-1;;33231:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33135:146::o;12300:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22771:190::-;22839:7;22908:16;;;:9;:16;;;;;:45;22866:87;;22908:45;;;;;-1:-1:-1;;;22866:39:0;;;:87;:::i;:::-;22859:94;;;22771:190;-1:-1:-1;;22771:190:0:o;36985:2511::-;37052:4;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;37119:16:::1;::::0;;;:9:::1;:16;::::0;;;;:45;37077:87:::1;::::0;37119:45:::1;::::0;;::::1;::::0;-1:-1:-1;;;37077:39:0;::::1;;:87;:::i;:::-;:92;;::::0;37069:128:::1;;;::::0;-1:-1:-1;;;37069:128:0;;23675:2:1;37069:128:0::1;::::0;::::1;23657:21:1::0;23714:2;23694:18;;;23687:30;23753:25;23733:18;;;23726:53;23796:18;;37069:128:0::1;23473:347:1::0;37069:128:0::1;37258:16;::::0;;;:9:::1;:16;::::0;;;;:31;;37216:32:::1;::::0;;::::1;:39:::0;-1:-1:-1;;;37258:31:0;;::::1;;;-1:-1:-1::0;37208:108:0::1;;;::::0;-1:-1:-1;;;37208:108:0;;24027:2:1;37208:108:0::1;::::0;::::1;24009:21:1::0;24066:2;24046:18;;;24039:30;-1:-1:-1;;;24085:18:1;;;24078:52;24147:18;;37208:108:0::1;23825:346:1::0;37208:108:0::1;37329:21;37382:16:::0;;;:9:::1;:16;::::0;;;;:21;-1:-1:-1;;;37382:21:0;::::1;;;37378:630;;37471:1;37442:18:::0;;;:11:::1;:18;::::0;;;;;;;;37428:33;;:13:::1;:33:::0;;;;;:40;:44;37425:448:::1;;37587:16;::::0;;;:9:::1;:16;::::0;;;;:26:::1;;:33:::0;:35:::1;::::0;37621:1:::1;37587:35;:::i;:::-;37509:33;37523:18:::0;;;:11:::1;:18;::::0;;;;;;;;37509:33;;:13:::1;:33:::0;;;;;37543:16;;;:9:::1;:16:::0;;;;;;:32:::1;;:39:::0;37509:74;;;::::1;;;;;:::i;:::-;;;;;;;;;:114;;;;:::i;:::-;37493:130;;37378:630;;37425:448;37685:18;::::0;;;:11:::1;:18;::::0;;;;;:23;;:72:::1;;-1:-1:-1::0;37712:33:0::1;37726:18:::0;;;:11:::1;:18;::::0;;;;;;;;37712:33;;:13:::1;:33:::0;;;;;:40;:45;37685:72:::1;37677:105;;;::::0;-1:-1:-1;;;37677:105:0;;24495:2:1;37677:105:0::1;::::0;::::1;24477:21:1::0;24534:2;24514:18;;;24507:30;-1:-1:-1;;;24553:18:1;;;24546:50;24613:18;;37677:105:0::1;24293:344:1::0;37677:105:0::1;37801:25;37820:5;37801:18;:25::i;:::-;-1:-1:-1::0;37852:5:0::1;::::0;36985:2511;-1:-1:-1;;36985:2511:0:o;37378:630::-:1;37937:16;::::0;;;:9:::1;:16;::::0;;;;:26:::1;;:33:::0;37930:66:::1;::::0;37937:35:::1;::::0;37971:1:::1;37937:35;:::i;:::-;37974:16;::::0;;;:9:::1;:16;::::0;;;;:21;-1:-1:-1;;;37974:21:0;::::1;;;37930:6;:66::i;:::-;37914:82;;37378:630;38018:22;38060:16:::0;;;:9:::1;:16;::::0;;;;:26:::1;;:33:::0;38043:50;::::1;;:133;;38109:16;::::0;;;:9:::1;:16;::::0;;;;38134:26:::1;::::0;::::1;:41:::0;;38109:24:::1;::::0;;::::1;::::0;:16;38161:13;;38134:41;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;38109:67;;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;38109:67:0::1;38043:133;;;38104:1;38043:133;38187:12;38248:16:::0;;;:9:::1;:16;::::0;;;;;;;-1:-1:-1;;;;;38248:40:0;::::1;::::0;;:24:::1;;:40:::0;;;;;:47;38018:158;;-1:-1:-1;38202:21:0::1;::::0;38248:51;;;;:84:::1;;-1:-1:-1::0;;;;;;38303:25:0;::::1;38331:1;38303:25:::0;;;:9:::1;:25;::::0;;;;;:29;;38248:84:::1;:139;;;;-1:-1:-1::0;38363:16:0::1;::::0;;;:9:::1;:16;::::0;;;;;;;:24:::1;;::::0;-1:-1:-1;;;;;38336:24:0;::::1;::::0;;:8:::1;:24:::0;;;;;;;:51:::1;38248:139;:182;;;;-1:-1:-1::0;;;;;;38392:38:0;::::1;;::::0;;;:22:::1;:38;::::0;;;;;::::1;;38391:39;38248:182;38244:1221;;;38473:16;::::0;;;:9:::1;:16;::::0;;;;:31:::1;;::::0;-1:-1:-1;;;;;38473:31:0::1;38466:38:::0;::::1;38462:99;;;-1:-1:-1::0;38530:16:0::1;::::0;;;:9:::1;:16;::::0;;;;:31:::1;;::::0;-1:-1:-1;;;;;38530:31:0::1;38462:99;38594:17;38619:16:::0;;;:9:::1;:16;::::0;;;;:40;38660:4:::1;::::0;38614:45:::1;::::0;-1:-1:-1;;;38619:40:0;::::1;;;38614:4:::0;:45:::1;:::i;:::-;:50;;;;:::i;:::-;38594:70;;38689:56;38718:14;38735:9;38689:20;:56::i;:::-;38765:44;::::0;;24844:25:1;;;-1:-1:-1;;;;;24905:32:1;;24900:2;24885:18;;24878:60;24954:18;;;24947:34;;;38765:44:0::1;::::0;24832:2:1;24817:18;38765:44:0::1;;;;;;;-1:-1:-1::0;;;;;38857:29:0;::::1;38838:16;38857:29:::0;;;:13:::1;:29;::::0;;;;:38;;38946:37:::1;::::0;;::::1;:49:::0;;;39051:18:::1;38986:9:::0;38857:38;39051:18:::1;:::i;:::-;-1:-1:-1::0;;;;;39010:29:0;::::1;;::::0;;;:13:::1;:29;::::0;;;;;;;:59;;;;39122:16;;;:9:::1;:16:::0;;;;;:29:::1;::::0;::::1;:45:::0;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;39182:32:::1;::::0;;::::1;:53:::0;;;;::::1;::::0;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;39182:53:0::1;::::0;;::::1;::::0;;39250:7:::1;:20:::0;;39157:9;;39010:29;39250:20:::1;::::0;39157:9;;39250:20:::1;:::i;:::-;::::0;;;-1:-1:-1;38244:1221:0::1;::::0;-1:-1:-1;;;38244:1221:0::1;;39411:42;::::0;;24844:25:1;;;-1:-1:-1;;;;;24905:32:1;;24900:2;24885:18;;24878:60;24954:18;;;24947:34;;;39411:42:0::1;::::0;24832:2:1;24817:18;39411:42:0::1;;;;;;;38244:1221;39484:4;39477:11;;;;;8045:1;36985:2511:::0;;;:::o;26221:130::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;26306:16:::1;::::0;;;:9:::1;:16;::::0;;;;:37;;::::1;::::0;;::::1;-1:-1:-1::0;;;26306:37:0::1;-1:-1:-1::0;;;;26306:37:0;;::::1;::::0;;;::::1;::::0;;26221:130::o;25053:205::-;25133:7;25170:16;;;:9;:16;;;;;:32;;:40;;25133:7;;25170:32;25203:6;;25170:40;;;;;;:::i;:::-;;;;;;;;;;;;;25212:16;;;:9;:16;;;;;;;:29;;:37;;-1:-1:-1;;;;;25170:40:0;;;;25242:6;;25212:37;;;;;;:::i;:::-;;;;;;;;;25162:88;;;;25053:205;;;;;;:::o;23117:462::-;23194:17;;;-1:-1:-1;;;;;23281:18:0;;23273:57;;;;-1:-1:-1;;;23273:57:0;;25194:2:1;23273:57:0;;;25176:21:1;25233:2;25213:18;;;25206:30;25272:28;25252:18;;;25245:56;25318:18;;23273:57:0;24992:350:1;23273:57:0;23341:15;23359:16;;;:9;:16;;;;;;;;-1:-1:-1;;;;;23359:30:0;;;;:24;;;:30;;;;;:37;23443:24;;;;;23425:8;:14;;;;;;:42;;;23486:24;;23503:7;23486:24;;;23499:1;23486:24;23511:10;:24;;23534:1;23511:24;;;23524:7;23511:24;23536:16;;;;:9;:16;;;;;;:26;;:33;23478:92;;;;-1:-1:-1;23536:33:0;23117:462;-1:-1:-1;;;;;23117:462:0:o;28244:142::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;28336:16:::1;::::0;;;:9:::1;:16;::::0;;;;:28:::1;;:42:::0;;-1:-1:-1;;;;;28336:42:0;;::::1;-1:-1:-1::0;;;28336:42:0::1;::::0;::::1;::::0;;;::::1;::::0;;28244:142::o;29140:145::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;29238:16:::1;::::0;;;:9:::1;:16;::::0;;;;:39;;::::1;::::0;;::::1;-1:-1:-1::0;;;29238:39:0::1;-1:-1:-1::0;;;;29238:39:0;;::::1;::::0;;;::::1;::::0;;29140:145::o;14999:411::-;15150:10;15094:4;15138:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15138:32:0;;;;;;;;;;15189:35;;;;15181:85;;;;-1:-1:-1;;;15181:85:0;;25549:2:1;15181:85:0;;;25531:21:1;25588:2;25568:18;;;25561:30;25627:34;25607:18;;;25600:62;-1:-1:-1;;;25678:18:1;;;25671:35;25723:19;;15181:85:0;25347:401:1;15181:85:0;15302:65;15311:10;15323:7;15351:15;15332:16;:34;15302:8;:65::i;:::-;-1:-1:-1;15398:4:0;;14999:411;-1:-1:-1;;;14999:411:0:o;15902:156::-;15982:4;16006:44;16020:10;16032:9;16043:6;16006:13;:44::i;32364:283::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;32472:1:::1;32462:7;:11;:31;;;;;32488:5;32477:7;:16;;32462:31;32454:77;;;::::0;-1:-1:-1;;;32454:77:0;;25955:2:1;32454:77:0::1;::::0;::::1;25937:21:1::0;25994:2;25974:18;;;25967:30;26033:34;26013:18;;;26006:62;-1:-1:-1;;;26084:18:1;;;26077:31;26125:19;;32454:77:0::1;25753:397:1::0;32454:77:0::1;32588:7:::0;32575:9;9010:15:::1;8968:1;9010:2;:15;:::i;:::-;9066:34;::::0;:17:::1;:34;:::i;:::-;32560:24;;;;:::i;:::-;32559:36;;;;:::i;:::-;32542:14;:53:::0;;;32611:28:::1;::::0;593:25:1;;;32611:28:0::1;::::0;581:2:1;566:18;32611:28:0::1;447:177:1::0;28398:165:0;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;28501:16:::1;::::0;;;:9:::1;:16;::::0;;;;:54;;-1:-1:-1;;28501:54:0::1;;::::0;;;::::1;-1:-1:-1::0;;;28501:54:0::1;::::0;;;::::1;::::0;;28398:165::o;28767:361::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;28857:7:::1;:36;;;;-1:-1:-1::0;28869:16:0::1;::::0;;;:9:::1;:16;::::0;;;;:24;-1:-1:-1;;;28869:24:0;::::1;;;28868:25;28857:36;28853:220;;;28909:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;28941:16:0::1;::::0;;;:9:::1;:16;::::0;;;;28968:15:::1;28941:24;::::0;;::::1;:42:::0;28853:220:::1;;;29006:7;29005:8;:36;;;;-1:-1:-1::0;29017:16:0::1;::::0;;;:9:::1;:16;::::0;;;;:24;-1:-1:-1;;;29017:24:0;::::1;;;29005:36;29001:72;;;29056:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;29001:72;29086:16;::::0;;;:9:::1;:16;::::0;;;;:34;;;::::1;;-1:-1:-1::0;;;29086:34:0::1;-1:-1:-1::0;;;;29086:34:0;;::::1;::::0;;;::::1;::::0;;28767:361::o;26363:141::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;26484:12:::1;:3:::0;26490:6:::1;26484:12;:::i;:::-;26450:16;::::0;;;:9:::1;:16;::::0;;;;;:31:::1;;:46:::0;;-1:-1:-1;;26450:46:0::1;-1:-1:-1::0;;;;;26450:46:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26363:141:0:o;30237:242::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;30316:8:::1;30312:78;;;30348:18;::::0;-1:-1:-1;;;30348:18:0;::::1;;;30347:19;30339:51;;;::::0;-1:-1:-1;;;30339:51:0;;26498:2:1;30339:51:0::1;::::0;::::1;26480:21:1::0;26537:2;26517:18;;;26510:30;-1:-1:-1;;;26556:18:1;;;26549:49;26615:18;;30339:51:0::1;26296:343:1::0;30339:51:0::1;30401:17;:28:::0;;;::::1;;-1:-1:-1::0;;;30401:28:0::1;-1:-1:-1::0;;;;30401:28:0;;::::1;;::::0;;30445:26:::1;::::0;::::1;::::0;::::1;::::0;30421:8;2048:14:1;2041:22;2023:41;;2011:2;1996:18;;1883:187;30445:26:0::1;;;;;;;;30237:242:::0;:::o;29297:127::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;29380:16:::1;::::0;;;:9:::1;:16;::::0;;;;:36;;;::::1;;-1:-1:-1::0;;;29380:36:0::1;-1:-1:-1::0;;;;;29380:36:0;;::::1;::::0;;;::::1;::::0;;29297:127::o;34128:430::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;34272:1:::1;34257:12;:16;:39;;;;;34295:1;34277:15;:19;34257:39;34249:87;;;::::0;-1:-1:-1;;;34249:87:0;;26846:2:1;34249:87:0::1;::::0;::::1;26828:21:1::0;26885:2;26865:18;;;26858:30;26924:34;26904:18;;;26897:62;-1:-1:-1;;;26975:18:1;;;26968:33;27018:19;;34249:87:0::1;26644:399:1::0;34249:87:0::1;34347:11;:22:::0;;-1:-1:-1;;34347:22:0::1;::::0;::::1;;;::::0;;34409:15;9010::::1;8968:1;9010:2;:15;:::i;:::-;9066:34;::::0;:17:::1;:34;:::i;:::-;34394:30;;;;:::i;:::-;34380:11;:44:::0;34466:12;9010:15:::1;8968:1;9010:2;:15;:::i;:::-;9066:34;::::0;:17:::1;:34;:::i;:::-;34451:27;;;;:::i;:::-;34435:13;:43:::0;;;34510:11:::1;::::0;34538::::1;::::0;34494:56:::1;::::0;;27244:25:1;;;27300:2;27285:18;;27278:34;;;;34538:11:0::1;;27355:14:1::0;27348:22;27328:18;;;27321:50;34494:56:0;;::::1;::::0;;;;27232:2:1;34494:56:0;;::::1;34128:430:::0;;;:::o;22449:156::-;22517:7;22575:22;:20;:22::i;:::-;-1:-1:-1;;;;;22566:4:0;14386:18;14368:7;14386:18;;;:9;:18;;;;;;22545:26;;:8;:26;:::i;:::-;22544:53;;;;:::i;30491:390::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;30604:9:::1;::::0;-1:-1:-1;;;;;30581:33:0;;::::1;30604:9:::0;::::1;30581:33;30577:166;;30639:18;::::0;-1:-1:-1;;;30639:18:0;::::1;;;30638:19;30630:51;;;::::0;-1:-1:-1;;;30630:51:0;;26498:2:1;30630:51:0::1;::::0;::::1;26480:21:1::0;26537:2;26517:18;;;26510:30;-1:-1:-1;;;26556:18:1;;;26549:49;26615:18;;30630:51:0::1;26296:343:1::0;30630:51:0::1;30696:9;:35:::0;;-1:-1:-1;;;;;;30696:35:0::1;-1:-1:-1::0;;;;;30696:35:0;::::1;;::::0;;30577:166:::1;30757:5;30753:68;;;30777:9;::::0;:44:::1;::::0;-1:-1:-1;;;30777:44:0;;30809:4:::1;30777:44;::::0;::::1;21277:34:1::0;-1:-1:-1;;;;;30816:4:0::1;21347:15:1::0;;21327:18;;;21320:43;30777:9:0;;::::1;::::0;:23:::1;::::0;21212:18:1;;30777:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30753:68;30847:26;::::0;-1:-1:-1;;;;;30847:26:0;::::1;::::0;::::1;::::0;;;::::1;30491:390:::0;;:::o;33289:831::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;33520:13;33494:17:::1;33510:1;33520:13:::0;33494:17:::1;:::i;:::-;33493:23;::::0;33515:1:::1;33493:23;:::i;:::-;:40;33485:105;;;::::0;-1:-1:-1;;;33485:105:0;;27584:2:1;33485:105:0::1;::::0;::::1;27566:21:1::0;27623:2;27603:18;;;27596:30;27662:34;27642:18;;;27635:62;-1:-1:-1;;;27713:18:1;;;27706:50;27773:19;;33485:105:0::1;27382:416:1::0;33485:105:0::1;33601:10;:24:::0;;;33636:12:::1;:28:::0;;;33675:12:::1;:28:::0;;;33714:6:::1;:16:::0;;;33741:10:::1;:24:::0;;;33776:8:::1;:20:::0;;;33754:11;33651:13;33723:7;33818:25:::1;33690:13:::0;33614:11;33818:25:::1;:::i;:::-;:34;;;;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;33807:8;:73:::0;33891:14:::1;:32:::0;;;33954:18:::1;33971:1;33908:15:::0;33954:18:::1;:::i;:::-;33942:8;;:30;;33934:56;;;::::0;-1:-1:-1;;;33934:56:0;;28005:2:1;33934:56:0::1;::::0;::::1;27987:21:1::0;28044:2;28024:18;;;28017:30;-1:-1:-1;;;28063:18:1;;;28056:43;28116:18;;33934:56:0::1;27803:337:1::0;33934:56:0::1;34021:8;;34009;;:20;;34001:52;;;::::0;-1:-1:-1;;;34001:52:0;;28347:2:1;34001:52:0::1;::::0;::::1;28329:21:1::0;28386:2;28366:18;;;28359:30;-1:-1:-1;;;28405:18:1;;;28398:49;28464:18;;34001:52:0::1;28145:343:1::0;34001:52:0::1;34077:8;::::0;34087:14:::1;::::0;34103:8:::1;::::0;34069:43:::1;::::0;;13040:25:1;;;13096:2;13081:18;;13074:34;;;;13124:18;;;13117:34;34069:43:0;::::1;::::0;;;;13028:2:1;34069:43:0;;::::1;33289:831:::0;;;;;;;:::o;31033:370::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;31133:4:::1;-1:-1:-1::0;;;;;31120:17:0::1;:9;-1:-1:-1::0;;;;;31120:17:0::1;;;:47;;;;-1:-1:-1::0;;;;;;31141:26:0;::::1;11505:42;31141:26;;31120:47;31112:105;;;::::0;-1:-1:-1;;;31112:105:0;;28695:2:1;31112:105:0::1;::::0;::::1;28677:21:1::0;28734:2;28714:18;;;28707:30;28773:34;28753:18;;;28746:62;-1:-1:-1;;;28824:18:1;;;28817:43;28877:19;;31112:105:0::1;28493:409:1::0;31112:105:0::1;-1:-1:-1::0;;;;;31228:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;31253:4:::1;-1:-1:-1::0;;31228:29:0;;::::1;::::0;::::1;::::0;;;31268:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;31315:15:::1;:26:::0;;;;;;:33;;;;::::1;;::::0;;;31364:31;::::1;::::0;31228:22;31364:31:::1;31033:370:::0;:::o;35061:282::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;35199:7:::1;:18:::0;;;;35228:16:::1;:31:::0;;::::1;35318:17:::0;;::::1;-1:-1:-1::0;;;35318:17:0::1;-1:-1:-1::0;;35270:37:0::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;35270:37:0;;;35228:31;;;::::1;35270:37:::0;;;;;;;::::1;35318:17;;::::0;;35061:282::o;26512:1066::-;26622:10;26599:34;;;;:22;:34;;;;;;;;26598:35;26590:72;;;;-1:-1:-1;;;26590:72:0;;29109:2:1;26590:72:0;;;29091:21:1;29148:2;29128:18;;;29121:30;29187:26;29167:18;;;29160:54;29231:18;;26590:72:0;28907:348:1;26590:72:0;26703:16;;;;:9;:16;;;;;:22;26694:31;;-1:-1:-1;;;26703:22:0;;-1:-1:-1;;;;;26703:22:0;26694:31;;;;:::i;:::-;-1:-1:-1;;;;;26681:44:0;:9;:44;26673:72;;;;-1:-1:-1;;;26673:72:0;;29737:2:1;26673:72:0;;;29719:21:1;29776:2;29756:18;;;29749:30;-1:-1:-1;;;29795:18:1;;;29788:45;29850:18;;26673:72:0;29535:339:1;26673:72:0;26764:16;;;;:9;:16;;;;;:24;-1:-1:-1;;;26764:24:0;;;;26756:56;;;;-1:-1:-1;;;26756:56:0;;30081:2:1;26756:56:0;;;30063:21:1;30120:2;30100:18;;;30093:30;-1:-1:-1;;;30139:18:1;;;30132:49;30198:18;;26756:56:0;29879:343:1;26756:56:0;26889:16;;;;:9;:16;;;;;:39;;-1:-1:-1;;;26889:39:0;;;;;26831:54;;26879:6;;26831:45;:54;:::i;:::-;:97;;;;26823:122;;;;-1:-1:-1;;;26823:122:0;;30666:2:1;26823:122:0;;;30648:21:1;30705:2;30685:18;;;30678:30;-1:-1:-1;;;30724:18:1;;;30717:42;30776:18;;26823:122:0;30464:336:1;26823:122:0;26989:16;;;;:9;:16;;;;;;;;:28;;;26974:10;26964:21;;:9;:21;;;;;;;-1:-1:-1;;;26989:28:0;;;-1:-1:-1;;;;;26989:28:0;-1:-1:-1;26964:53:0;26956:88;;;;-1:-1:-1;;;26956:88:0;;31007:2:1;26956:88:0;;;30989:21:1;31046:2;31026:18;;;31019:30;-1:-1:-1;;;31065:18:1;;;31058:52;31127:18;;26956:88:0;30805:346:1;26956:88:0;27086:16;;;;:9;:16;;;;;;;;:24;;;27072:10;27063:20;;:8;:20;;;;;;;:47;27055:105;;;;-1:-1:-1;;;27055:105:0;;31358:2:1;27055:105:0;;;31340:21:1;31397:2;31377:18;;;31370:30;31436:34;31416:18;;;31409:62;-1:-1:-1;;;31487:18:1;;;31480:43;31540:19;;27055:105:0;31156:409:1;27055:105:0;27184:1;27175:6;:10;;;27171:105;;;27208:16;;;;:9;:16;;;;;:25;-1:-1:-1;;;27208:25:0;;;;27200:76;;;;-1:-1:-1;;;27200:76:0;;31772:2:1;27200:76:0;;;31754:21:1;31811:2;31791:18;;;31784:30;31850:34;31830:18;;;31823:62;-1:-1:-1;;;31901:18:1;;;31894:36;31947:19;;27200:76:0;31570:402:1;27200:76:0;27306:23;:10;:21;:23::i;:::-;27305:24;27297:48;;;;-1:-1:-1;;;27297:48:0;;32179:2:1;27297:48:0;;;32161:21:1;32218:2;32198:18;;;32191:30;-1:-1:-1;;;32237:18:1;;;32230:41;32288:18;;27297:48:0;31977:335:1;27297:48:0;27361:9;27356:93;27378:6;27374:10;;:1;:10;27356:93;;;27406:31;27419:10;27431:5;27406:12;:31::i;:::-;27386:3;;;;:::i;:::-;;;;27356:93;;;-1:-1:-1;27459:16:0;;;;:9;:16;;;;;:55;;27508:6;;27459:16;:55;;27508:6;;27459:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27527:43;27548:7;7888;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;27548:7;27557:12;27567:2;27557:9;:12;:::i;:::-;27527:20;:43::i;29432:504::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;29545:5:::1;29522:11;:20;29534:7;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;29534:7:::1;-1:-1:-1::0;;;;;29522:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29522:20:0;;;:28;;;::::1;;-1:-1:-1::0;;29522:28:0;;::::1;::::0;;;::::1;::::0;;;29561:15:::1;-1:-1:-1::0;29577:7:0::1;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;29577:7:::1;-1:-1:-1::0;;;;;29561:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29561:24:0;;;:32;;;::::1;;-1:-1:-1::0;;29561:32:0;;::::1;::::0;;;::::1;::::0;;;29604:18:::1;-1:-1:-1::0;29623:7:0::1;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;29623:7:::1;-1:-1:-1::0;;;;;29604:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29604:27:0;;;:35;;;::::1;;-1:-1:-1::0;;29604:35:0;;::::1;::::0;;;::::1;::::0;;;29650:11:::1;-1:-1:-1::0;29662:7:0::1;7888::::0;7915:6;-1:-1:-1;;;;;7915:6:0;;7850:79;29662:7:::1;-1:-1:-1::0;;;;;29650:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;29650:20:0;;;11505:42:::1;29650:35:::0;;;;;;;:39;29700:33:::1;29724:8:::0;29700:23:::1;:33::i;:::-;-1:-1:-1::0;;;;;29744:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:28;;29768:4:::1;-1:-1:-1::0;;29744:28:0;;::::1;::::0;::::1;::::0;;;29783:15:::1;:25:::0;;;;;:32;;;::::1;::::0;::::1;::::0;;29826:18:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;29872:11:::1;:21:::0;;;;;11505:42:::1;29872:36:::0;;;;;;;-1:-1:-1;;29872:56:0;;29432:504::o;32885:242::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32980:20:0;::::1;32972:48;;;;-1:-1:-1::0;;;32972:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33031:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;33031:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33079:40;;2023:41:1;;;33079:40:0::1;::::0;1996:18:1;33079:40:0::1;1883:187:1::0;27586:521:0;27630:14;27702:1;27647:9;:25;27670:1;27657:12;;:14;;;;:::i;:::-;27647:25;;;;;;;;;;;;;;-1:-1:-1;27647:25:0;;;27681:10;27647:45;;:33;;:45;;;;;:52;:56;;;;:::i;:::-;27630:73;;27731:1;27722:6;:10;27714:61;;;;-1:-1:-1;;;27714:61:0;;32519:2:1;27714:61:0;;;32501:21:1;32558:2;32538:18;;;32531:30;32597:34;32577:18;;;32570:62;-1:-1:-1;;;32648:18:1;;;32641:36;32694:19;;27714:61:0;32317:402:1;27714:61:0;27804:12;;27828:1;27794:23;;;:9;:23;;;;;:31;;;27786:73;;;;-1:-1:-1;;;27786:73:0;;32926:2:1;27786:73:0;;;32908:21:1;32965:2;32945:18;;;32938:30;33004:27;32984:18;;;32977:55;33049:18;;27786:73:0;32724:349:1;27786:73:0;27877:9;27872:228;27894:6;27890:1;:10;27872:228;;;27922:38;27935:10;27947:12;;27922;:38::i;:::-;27980:14;27975:113;28007:1;27998:6;:10;27975:113;;;28037:9;:25;28060:1;28047:12;;:14;;;;:::i;:::-;28037:25;;;;;;;;;;;;;;-1:-1:-1;28037:25:0;;;28071:10;28037:45;;:33;;:45;;;;;:51;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28010:8;;;;;:::i;:::-;;;;27975:113;;;-1:-1:-1;27902:3:0;;;;:::i;:::-;;;;27872:228;;35734:232;35848:24;;;;:13;:24;;;;;:31;:36;35840:69;;;;-1:-1:-1;;;35840:69:0;;33412:2:1;35840:69:0;;;33394:21:1;33451:2;33431:18;;;33424:30;-1:-1:-1;;;33470:18:1;;;33463:51;33531:18;;35840:69:0;33210:345:1;35840:69:0;35920:24;;;;:13;:24;;;;;;;;:38;;;;;;;;:::i;:::-;;35734:232;;:::o;16415:1275::-;-1:-1:-1;;;;;16532:17:0;;16507:4;16532:17;;;:9;:17;;;;;;:27;-1:-1:-1;16532:27:0;16524:60;;;;-1:-1:-1;;;16524:60:0;;33762:2:1;16524:60:0;;;33744:21:1;33801:2;33781:18;;;33774:30;-1:-1:-1;;;33820:18:1;;;33813:50;33880:18;;16524:60:0;33560:344:1;16524:60:0;16612:1;16603:6;:10;16595:46;;;;-1:-1:-1;;;16595:46:0;;34111:2:1;16595:46:0;;;34093:21:1;34150:2;34130:18;;;34123:30;34189:25;34169:18;;;34162:53;34232:18;;16595:46:0;33909:347:1;16595:46:0;16657:6;;;;16654:63;;;16673:41;16688:6;16696:9;16707:6;16673:14;:41::i;:::-;16666:48;;;;16654:63;16729:28;16742:6;16750;16729:12;:28::i;:::-;-1:-1:-1;;;;;16783:25:0;;;;;;:14;:25;;;;;;;;16782:26;:47;;;;-1:-1:-1;;;;;;16812:17:0;;8811:42;16812:17;;16782:47;16778:148;;;-1:-1:-1;;;;;16851:26:0;;;;;;:15;:26;;;;;;;;16846:68;;16879:35;16896:9;16907:6;16879:16;:35::i;:::-;22266:10;;16938:217;;-1:-1:-1;;;;;16963:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;16993:29:0;;;;;;:18;:29;;;;;;;;16963:59;16955:98;;;;-1:-1:-1;;;16955:98:0;;34463:2:1;16955:98:0;;;34445:21:1;34502:2;34482:18;;;34475:30;34541:28;34521:18;;;34514:56;34587:18;;16955:98:0;34261:350:1;16955:98:0;16938:217;;;-1:-1:-1;;;;;17074:22:0;;;;;;:14;:22;;;;;;;;17071:84;;;17126:1;17108:15;;:19;17100:52;;;;-1:-1:-1;;;17100:52:0;;34818:2:1;17100:52:0;;;34800:21:1;34857:2;34837:18;;;34830:30;-1:-1:-1;;;34876:18:1;;;34869:50;34936:18;;17100:52:0;34616:344:1;17100:52:0;-1:-1:-1;;;;;17167:17:0;;;;;;:9;:17;;;;;:27;;17188:6;;17167:17;:27;;17188:6;;17167:27;:::i;:::-;;;;-1:-1:-1;;;;;;;17233:19:0;;17207:22;17233:19;;;:11;:19;;;;;;;;17232:20;:47;;;;-1:-1:-1;;;;;;17257:22:0;;;;;;:11;:22;;;;;;;;17256:23;17232:47;:93;;17319:6;17232:93;;;17282:34;17290:6;17298:9;17309:6;17282:7;:34::i;:::-;17207:118;;17349:25;17364:9;17349:14;:25::i;:::-;17346:66;;;17381:10;;17377:32;;17393:16;17402:6;17393:8;:16::i;:::-;-1:-1:-1;;;;;17432:20:0;;;;;;:9;:20;;;;;:38;;17456:14;;17432:20;:38;;17456:14;;17432:38;:::i;:::-;;;;-1:-1:-1;;22266:10:0;;:15;;17498:31;;;;-1:-1:-1;17512:17:0;;-1:-1:-1;;;17512:17:0;;;;17498:31;17495:104;;;17544:9;;:55;;-1:-1:-1;;;17544:55:0;;-1:-1:-1;;;;;35223:15:1;;;17544:55:0;;;35205:34:1;35275:15;;;35255:18;;;35248:43;35307:18;;;35300:34;;;17544:9:0;;;;:28;;35140:18:1;;17544:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17495:104;17634:9;-1:-1:-1;;;;;17617:43:0;17626:6;-1:-1:-1;;;;;17617:43:0;-1:-1:-1;;;;;;;;;;;17645:14:0;17617:43;;;;593:25:1;;581:2;566:18;;447:177;17617:43:0;;;;;;;;-1:-1:-1;17678:4:0;;16415:1275;-1:-1:-1;;;;16415:1275:0:o;15418:346::-;-1:-1:-1;;;;;15520:19:0;;15512:68;;;;-1:-1:-1;;;15512:68:0;;35797:2:1;15512:68:0;;;35779:21:1;35836:2;35816:18;;;35809:30;35875:34;35855:18;;;35848:62;-1:-1:-1;;;35926:18:1;;;35919:34;35970:19;;15512:68:0;35595:400:1;15512:68:0;-1:-1:-1;;;;;15599:21:0;;15591:68;;;;-1:-1:-1;;;15591:68:0;;36202:2:1;15591:68:0;;;36184:21:1;36241:2;36221:18;;;36214:30;36280:34;36260:18;;;36253:62;-1:-1:-1;;;36331:18:1;;;36324:32;36373:19;;15591:68:0;36000:398:1;15591:68:0;-1:-1:-1;;;;;15672:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15724:32;;593:25:1;;;15724:32:0;;566:18:1;15724:32:0;;;;;;;15418:346;;;:::o;8060:148::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;8167:1:::1;8151:6:::0;;8130:40:::1;::::0;-1:-1:-1;;;;;8151:6:0;;::::1;::::0;8130:40:::1;::::0;8167:1;;8130:40:::1;8198:1;8181:19:::0;;-1:-1:-1;;;;;;8181:19:0::1;::::0;;8060:148::o;35353:371::-;35424:18;;;;:11;:18;;;;;;:23;;:72;;-1:-1:-1;35451:33:0;35465:18;;;:11;:18;;;;;;;;;35451:33;;:13;:33;;;;;:40;:45;35424:72;35416:105;;;;-1:-1:-1;;;35416:105:0;;33412:2:1;35416:105:0;;;33394:21:1;33451:2;33431:18;;;33424:30;-1:-1:-1;;;33470:18:1;;;33463:51;33531:18;;35416:105:0;33210:345:1;35416:105:0;35553:11;;35594:7;;;35612:16;;35639:20;;35553:163;;-1:-1:-1;;;35553:163:0;;35639:20;35553:163;;36654:25:1;;;;-1:-1:-1;;;35612:16:0;;;-1:-1:-1;;;;;35612:16:0;36695:18:1;;;36688:59;;;;35639:20:0;;;;;36763:18:1;;;36756:47;35670:16:0;;;;36848:18:1;;;36841:43;-1:-1:-1;;;35697:8:0;;;;;;36900:19:1;;;36893:44;-1:-1:-1;;;;;35553:11:0;;;;:30;;36626:19:1;;35553:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35532:18;;;;:11;:18;;;;;;:184;35353:371::o;35974:1003::-;36049:7;36069:17;36113:13;36102:10;;36089:12;:23;;;;:::i;:::-;:37;;;;:::i;:::-;36069:57;;36137:17;36170:7;;8968:1;9010:2;:15;;;;:::i;:::-;9066:34;;:17;:34;:::i;:::-;36157:20;;;;:::i;:::-;36137:40;;36188:12;36219:5;:10;;36228:1;36219:10;36215:695;;;36295:14;36308:1;36295:12;:14;:::i;:::-;36285:25;36312:9;36333:14;36346:1;36333:12;:14;:::i;:::-;36268:92;;;;;;37350:19:1;;;;37385:12;;37378:28;;;;36323:25:0;37422:12:1;;;37415:28;37459:12;;;37452:28;;;37496:13;;36268:92:0;;;;;;;;;;;;;36258:103;;;;;;36253:109;;36246:116;;36215:695;;;36384:5;:10;;36393:1;36384:10;36380:530;;;36460:14;36473:1;36460:12;:14;:::i;:::-;36450:25;36486:14;36499:1;36486:12;:14;:::i;:::-;36476:25;36513:14;36526:1;36513:12;:14;:::i;:::-;36433:106;;;;;;37350:19:1;;;;37385:12;;37378:28;;;;36503:25:0;37422:12:1;;;37415:28;37459:12;;;37452:28;;;37496:13;;36433:106:0;37137:378:1;36380:530:0;36563:5;:10;;36572:1;36563:10;36559:351;;;36639:14;36652:1;36639:12;:14;:::i;:::-;36629:25;36666:14;36679:1;36666:12;:14;:::i;:::-;36656:25;36683:9;36704:14;36717:1;36704:12;:14;:::i;:::-;36612:108;;;;;;37350:19:1;;;;37385:12;;37378:28;;;;37422:12;;;37415:28;36694:25:0;37459:12:1;;;37452:28;37496:13;;36612:108:0;37137:378:1;36559:351:0;36804:14;36817:1;36804:12;:14;:::i;:::-;36794:25;36821:9;36842:14;36855:1;36842:12;:14;:::i;:::-;36832:25;36859:9;36880:14;36893:1;36880:12;:14;:::i;:::-;36777:119;;;;;;38527:19:1;;;;38562:12;;38555:28;;;;38599:12;;;38592:28;;;;38636:12;;;38629:28;36870:25:0;38673:13:1;;;38666:29;38711:13;;36777:119:0;;;;;;;;;;;;36767:130;;;;;;36762:136;;36755:143;;36559:351;36927:20;36934:13;36927:4;:20;:::i;:::-;36920:27;35974:1003;-1:-1:-1;;;;;;35974:1003:0:o;22009:182::-;22092:9;22107:6;-1:-1:-1;;;;;22107:11:0;22126:6;22107:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22091:46;;;22156:4;22148:35;;;;-1:-1:-1;;;22148:35:0;;39147:2:1;22148:35:0;;;39129:21:1;39186:2;39166:18;;;39159:30;-1:-1:-1;;;39205:18:1;;;39198:48;39263:18;;22148:35:0;38945:342:1;166:374:0;226:4;449:20;;292:66;489:23;;;;;;:42;;-1:-1:-1;516:15:0;;;489:42;481:51;166:374;-1:-1:-1;;;;166:374:0:o;39567:359::-;39647:16;;;;:9;:16;;;;;;;;39672:28;;;-1:-1:-1;;;39672:28:0;;;;;;39647:54;;:24;;;:54;;;;;:70;;-1:-1:-1;;;;;39647:70:0;;-1:-1:-1;;;;;;39647:70:0;;;;;;;;39728:39;;:24;;;:39;;;;;39773:16;;;:28;;39728:74;;39647:70;39728:74;;;;;;;;;;;39773:28;;;;;;39728:74;;;39845:28;;39813:26;;;:61;;;;;;;;;;;;;39845:28;;;;;;39813:61;;;;;;39885:16;;;;:33;;39647:70;;:16;39672:28;;39885:33;;39647:70;;39885:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39567:359;;:::o;8214:244::-;7975:6;;-1:-1:-1;;;;;7975:6:0;3016:10;7975:22;7967:67;;;;-1:-1:-1;;;7967:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8303:22:0;::::1;8295:73;;;::::0;-1:-1:-1;;;8295:73:0;;39494:2:1;8295:73:0::1;::::0;::::1;39476:21:1::0;39533:2;39513:18;;;39506:30;39572:34;39552:18;;;39545:62;-1:-1:-1;;;39623:18:1;;;39616:36;39669:19;;8295:73:0::1;39292:402:1::0;8295:73:0::1;8405:6;::::0;;8384:38:::1;::::0;-1:-1:-1;;;;;8384:38:0;;::::1;::::0;8405:6;::::1;::::0;8384:38:::1;::::0;::::1;8433:6;:17:::0;;-1:-1:-1;;;;;;8433:17:0::1;-1:-1:-1::0;;;;;8433:17:0;;;::::1;::::0;;;::::1;::::0;;8214:244::o;17698:259::-;-1:-1:-1;;;;;17808:17:0;;17791:4;17808:17;;;:9;:17;;;;;:27;;17829:6;;17808:17;17791:4;;17808:27;;17829:6;;17808:27;:::i;:::-;;;;-1:-1:-1;;;;;;;17846:20:0;;;;;;:9;:20;;;;;:30;;17870:6;;17846:20;:30;;17870:6;;17846:30;:::i;:::-;;;;;;;;17909:9;-1:-1:-1;;;;;17892:35:0;17901:6;-1:-1:-1;;;;;17892:35:0;-1:-1:-1;;;;;;;;;;;17920:6:0;17892:35;;;;593:25:1;;581:2;566:18;;447:177;17892:35:0;;;;;;;;-1:-1:-1;17945:4:0;17698:259;;;;;:::o;18212:166::-;18309:12;;18299:6;:22;;:49;;;-1:-1:-1;;;;;;18325:23:0;;;;;;:15;:23;;;;;;;;18299:49;18291:79;;;;-1:-1:-1;;;18291:79:0;;39901:2:1;18291:79:0;;;39883:21:1;39940:2;39920:18;;;39913:30;-1:-1:-1;;;39959:18:1;;;39952:47;40016:18;;18291:79:0;39699:341:1;17969:235:0;18077:14;;-1:-1:-1;;;;;18110:20:0;;18055:19;18110:20;;;:9;:20;;;;;;18077:14;;18110:29;;18133:6;;18110:29;:::i;:::-;:44;;18102:94;;;;-1:-1:-1;;;18102:94:0;;40247:2:1;18102:94:0;;;40229:21:1;40286:2;40266:18;;;40259:30;40325:34;40305:18;;;40298:62;-1:-1:-1;;;40376:18:1;;;40369:35;40421:19;;18102:94:0;40045:401:1;18739:979:0;-1:-1:-1;;;;;18868:22:0;;18825:7;18868:22;;;:14;:22;;;;;;18825:7;;18868:22;;18867:23;:73;;;;-1:-1:-1;18912:10:0;;-1:-1:-1;;;;;18894:15:0;;;;;;:7;:15;;;;;;18925;;18894:28;;;:::i;:::-;:46;18867:73;19041:14;;-1:-1:-1;;;;;18995:25:0;;18953:17;18995:25;;;:14;:25;;;;;;18845:95;;-1:-1:-1;18953:17:0;18983:54;;18995:25;;18845:95;18983:11;:54::i;:::-;18974:63;;:6;:63;:::i;:::-;18973:82;;;;:::i;:::-;-1:-1:-1;;;;;19080:22:0;;;;;;:14;:22;;;;;;18953:102;;-1:-1:-1;19080:22:0;;:49;;;;-1:-1:-1;;;;;;19106:18:0;;;;;;:7;:18;;;;;;:23;19080:49;19076:195;;;-1:-1:-1;;;;;19144:18:0;;;;;;:7;:18;;;;;19165:15;19144:36;;19076:195;;;-1:-1:-1;;;;;19200:22:0;;;;;;:14;:22;;;;;;;;19196:75;;-1:-1:-1;;;;;19237:16:0;;;;;;:8;:16;;;;;19256:15;19237:34;;19196:75;19318:10;;19284:15;;19318:14;19314:241;;19384:8;;19371:10;;19359:22;;:9;:22;:::i;:::-;:33;;;;:::i;:::-;19349:43;-1:-1:-1;19407:20:0;19349:43;19407:20;;:::i;:::-;-1:-1:-1;;;;;19452:15:0;19442:26;;;;;:9;:26;;;;;:39;;19407:20;;-1:-1:-1;19407:20:0;;19442:26;;;:39;;19407:20;;19442:39;:::i;:::-;;;;;;;;19518:15;-1:-1:-1;;;;;19501:42:0;19510:6;-1:-1:-1;;;;;19501:42:0;-1:-1:-1;;;;;;;;;;;19535:7:0;19501:42;;;;593:25:1;;581:2;566:18;;447:177;19501:42:0;;;;;;;;19314:241;19583:4;19565:24;;;;:9;:24;;;;;:37;;19593:9;;19565:24;:37;;19593:9;;19565:37;:::i;:::-;;;;-1:-1:-1;;19618:42:0;;593:25:1;;;19643:4:0;;-1:-1:-1;;;;;19618:42:0;;;-1:-1:-1;;;;;;;;;;;19618:42:0;581:2:1;566:18;19618:42:0;;;;;;;19690:19;19702:7;19690:9;:19;:::i;:::-;19680:30;;:6;:30;:::i;:::-;19673:37;18739:979;-1:-1:-1;;;;;;;18739:979:0:o;19726:321::-;19832:10;19792:4;19817:26;;;:14;:26;;;;;;;;19816:27;:64;;;;-1:-1:-1;19869:10:0;19857:23;;;;:11;:23;;;;;;;;19856:24;19816:64;:84;;;;-1:-1:-1;19894:6:0;;;;19893:7;19816:84;:108;;;;-1:-1:-1;19913:11:0;;;;19816:108;:146;;;;-1:-1:-1;;;;;;19937:25:0;;;;;;:14;:25;;;;;;;;19816:146;:198;;;;-1:-1:-1;20003:11:0;;19993:4;19975:24;;;;:9;:24;;;;;;:39;;19816:198;:223;;;;;20038:1;20027:8;;:12;19809:230;19726:321;-1:-1:-1;;19726:321:0:o;20055:1946::-;12617:6;:13;;-1:-1:-1;;12617:13:0;12626:4;12617:13;;;20150::::1;::::0;12617:6;;20141:22;::::1;:47;;20175:13;;20141:47;;;20166:6;20141:47;20221:4;20203:24;::::0;;;:9:::1;:24;::::0;;;;;20118:70;;-1:-1:-1;20203:39:0;-1:-1:-1;20199:84:0::1;;;-1:-1:-1::0;20277:4:0::1;20259:24;::::0;;;:9:::1;:24;::::0;;;;;20199:84:::1;20294:27;20324:60;20340:15;;20357:26;;20324:15;:60::i;:::-;:79;;20391:12;;20324:79;;;20387:1;20324:79;20294:109;;20414:23;20507:1;20492:10;;20481:8;;:21;;;;:::i;:::-;20442:34;20457:19:::0;20442:12;:34:::1;:::i;:::-;20441:62;;;;:::i;:::-;20440:68;;;;:::i;:::-;20414:94:::0;-1:-1:-1;20519:31:0::1;20414:94:::0;20519:31;::::1;:::i;:::-;20587:16;::::0;;20601:1:::1;20587:16:::0;;;;;::::1;::::0;;20519:31;;-1:-1:-1;20563:21:0::1;::::0;20587:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20587:16:0::1;20563:40;;20632:4;20614;20619:1;20614:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20614:23:0::1;;;-1:-1:-1::0;;;;;20614:23:0::1;;;::::0;::::1;20658:6;-1:-1:-1::0;;;;;20658:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20648:4;20653:1;20648:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20648:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;20754:188:::1;::::0;-1:-1:-1;;;20754:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;20826:12;;20853:1:::1;::::0;20869:4;;20896::::1;::::0;20916:15:::1;::::0;20754:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;20981:21:0::1;::::0;-1:-1:-1;20955:23:0::1;::::0;-1:-1:-1;21060:23:0::1;::::0;-1:-1:-1;21082:1:0::1;21060:19:::0;:23:::1;:::i;:::-;21047:10;;:36;;;;:::i;:::-;21035:8;;:49;;;;:::i;:::-;21013:71:::0;-1:-1:-1;21097:23:0::1;21179:1;21013:71:::0;21124:37:::1;21142:19:::0;21124:15;:37:::1;:::i;:::-;21123:53;;;;:::i;:::-;:57;;;;:::i;:::-;21097:83;;21191:23;21252:11;21236:12;;21218:15;:30;;;;:::i;:::-;21217:46;;;;:::i;:::-;21191:72;;21274:17;21323:11;21313:6;;21295:15;:24;;;;:::i;:::-;21294:40;;;;:::i;:::-;21274:60:::0;-1:-1:-1;21350:19:0;;21347:429:::1;;21475:224;::::0;-1:-1:-1;;;21475:224:0;;21548:4:::1;21475:224;::::0;::::1;42033:34:1::0;42083:18;;;42076:34;;;21606:1:0::1;42126:18:1::0;;;42119:34;;;42169:18;;;42162:34;8811:42:0::1;42212:19:1::0;;;42205:44;21669:15:0::1;42265:19:1::0;;;42258:35;21475:6:0::1;-1:-1:-1::0;;;;;21475:22:0::1;::::0;::::1;::::0;21505:15;;41967:19:1;;21475:224:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;21719:45:0::1;::::0;;18601:25:1;;;18657:2;18642:18;;18635:34;;;21719:45:0::1;::::0;-1:-1:-1;18574:18:1;21719:45:0::1;;;;;;;21347:429;21800:19:::0;;21796:94:::1;;21834:56;21855:17;21874:15;21834:20;:56::i;:::-;21919:13:::0;;21915:76:::1;;21947:44;21968:11;21981:9;21947:20;:44::i;:::-;-1:-1:-1::0;;12635:6:0;:14;;-1:-1:-1;;12635:14:0;;;-1:-1:-1;;;;;;;;20055:1946:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:171:1;81:20;;-1:-1:-1;;;;;130:30:1;;120:41;;110:69;;175:1;172;165:12;190:252;257:6;265;318:2;306:9;297:7;293:23;289:32;286:52;;;334:1;331;324:12;286:52;357:28;375:9;357:28;:::i;:::-;347:38;432:2;417:18;;;;404:32;;-1:-1:-1;;;190:252:1:o;629:472::-;671:3;709:5;703:12;736:6;731:3;724:19;761:1;771:162;785:6;782:1;779:13;771:162;;;847:4;903:13;;;899:22;;893:29;875:11;;;871:20;;864:59;800:12;771:162;;;951:6;948:1;945:13;942:87;;;1017:1;1010:4;1001:6;996:3;992:16;988:27;981:38;942:87;-1:-1:-1;1083:2:1;1062:15;-1:-1:-1;;1058:29:1;1049:39;;;;1090:4;1045:50;;629:472;-1:-1:-1;;629:472:1:o;1106:220::-;1255:2;1244:9;1237:21;1218:4;1275:45;1316:2;1305:9;1301:18;1293:6;1275:45;:::i;1331:131::-;-1:-1:-1;;;;;1406:31:1;;1396:42;;1386:70;;1452:1;1449;1442:12;1386:70;1331:131;:::o;1467:315::-;1535:6;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;1651:9;1638:23;1670:31;1695:5;1670:31;:::i;2075:180::-;2134:6;2187:2;2175:9;2166:7;2162:23;2158:32;2155:52;;;2203:1;2200;2193:12;2155:52;-1:-1:-1;2226:23:1;;2075:180;-1:-1:-1;2075:180:1:o;2260:248::-;2328:6;2336;2389:2;2377:9;2368:7;2364:23;2360:32;2357:52;;;2405:1;2402;2395:12;2357:52;-1:-1:-1;;2428:23:1;;;2498:2;2483:18;;;2470:32;;-1:-1:-1;2260:248:1:o;2919:1207::-;3389:14;3377:27;;;3359:46;;3441:27;;;3436:2;3421:18;;3414:55;3505:27;;3500:2;3485:18;;3478:55;3581:4;3569:17;;3564:2;3549:18;;3542:45;-1:-1:-1;;;;;2658:30:1;;3637:3;3622:19;;2646:43;2776:6;2765:18;;3692:3;3677:19;;2753:31;2580:4;2569:16;;3746:3;3731:19;;2557:29;1857:13;;1850:21;3799:3;3784:19;;1838:34;1857:13;;1850:21;3852:3;3837:19;;1838:34;3894:6;3888:3;3877:9;3873:19;3866:35;3910:48;3953:3;3942:9;3938:19;3929:7;-1:-1:-1;;;;;2861:46:1;2849:59;;2795:119;3910:48;-1:-1:-1;;;;;2861:46:1;;4010:3;3995:19;;2849:59;4052:3;4046;4035:9;4031:19;4024:32;3340:4;4073:47;4115:3;4104:9;4100:19;4091:7;4073:47;:::i;:::-;4065:55;2919:1207;-1:-1:-1;;;;;;;;;;;;;;;2919:1207:1:o;4410:127::-;4471:10;4466:3;4462:20;4459:1;4452:31;4502:4;4499:1;4492:15;4526:4;4523:1;4516:15;4542:275;4613:2;4607:9;4678:2;4659:13;;-1:-1:-1;;4655:27:1;4643:40;;-1:-1:-1;;;;;4698:34:1;;4734:22;;;4695:62;4692:88;;;4760:18;;:::i;:::-;4796:2;4789:22;4542:275;;-1:-1:-1;4542:275:1:o;4822:1014::-;4915:6;4923;4976:2;4964:9;4955:7;4951:23;4947:32;4944:52;;;4992:1;4989;4982:12;4944:52;5028:9;5015:23;5005:33;;5057:2;5110;5099:9;5095:18;5082:32;-1:-1:-1;;;;;5174:2:1;5166:6;5163:14;5160:34;;;5190:1;5187;5180:12;5160:34;5228:6;5217:9;5213:22;5203:32;;5273:7;5266:4;5262:2;5258:13;5254:27;5244:55;;5295:1;5292;5285:12;5244:55;5331:2;5318:16;5353:2;5349;5346:10;5343:36;;;5359:18;;:::i;:::-;5405:2;5402:1;5398:10;5388:20;;5428:28;5452:2;5448;5444:11;5428:28;:::i;:::-;5490:15;;;5560:11;;;5556:20;;;5521:12;;;;5588:19;;;5585:39;;;5620:1;5617;5610:12;5585:39;5644:11;;;;5664:142;5680:6;5675:3;5672:15;5664:142;;;5746:17;;5734:30;;5697:12;;;;5784;;;;5664:142;;;5825:5;5815:15;;;;;;;;4822:1014;;;;;:::o;5841:456::-;5918:6;5926;5934;5987:2;5975:9;5966:7;5962:23;5958:32;5955:52;;;6003:1;6000;5993:12;5955:52;6042:9;6029:23;6061:31;6086:5;6061:31;:::i;:::-;6111:5;-1:-1:-1;6168:2:1;6153:18;;6140:32;6181:33;6140:32;6181:33;:::i;:::-;5841:456;;6233:7;;-1:-1:-1;;;6287:2:1;6272:18;;;;6259:32;;5841:456::o;6491:167::-;6558:20;;6618:14;6607:26;;6597:37;;6587:65;;6648:1;6645;6638:12;6663:159;6730:20;;6790:6;6779:18;;6769:29;;6759:57;;6812:1;6809;6802:12;6827:156;6893:20;;6953:4;6942:16;;6932:27;;6922:55;;6973:1;6970;6963:12;6988:188;7056:20;;-1:-1:-1;;;;;7105:46:1;;7095:57;;7085:85;;7166:1;7163;7156:12;7181:118;7267:5;7260:13;7253:21;7246:5;7243:32;7233:60;;7289:1;7286;7279:12;7304:128;7369:20;;7398:28;7369:20;7398:28;:::i;7437:1390::-;7574:6;7582;7590;7598;7606;7614;7622;7630;7638;7646;7699:3;7687:9;7678:7;7674:23;7670:33;7667:53;;;7716:1;7713;7706:12;7667:53;-1:-1:-1;;;;;7797:2:1;7785:9;7772:23;7769:31;7766:51;;;7813:1;7810;7803:12;7766:51;7864:9;7851:23;7840:9;7836:39;7913:7;7906:4;7902:2;7898:13;7894:27;7884:55;;7935:1;7932;7925:12;7884:55;7971:2;7958:16;7993:2;7989;7986:10;7983:36;;;7999:18;;:::i;:::-;8041:55;8084:2;8065:13;;-1:-1:-1;;8061:27:1;8090:4;8057:38;8041:55;:::i;:::-;8028:68;;8119:2;8112:5;8105:17;8161:7;8154:4;8149:2;8145;8141:11;8137:22;8134:35;8131:55;;;8182:1;8179;8172:12;8131:55;8241:2;8234:4;8230:2;8226:13;8219:4;8212:5;8208:16;8195:49;8287:1;8280:4;8275:2;8268:5;8264:14;8260:25;8253:36;;;8308:5;8298:15;;;8332:39;8365:4;8354:9;8350:20;8332:39;:::i;:::-;8322:49;;8390:37;8423:2;8412:9;8408:18;8390:37;:::i;:::-;8380:47;;8446:36;8478:2;8467:9;8463:18;8446:36;:::i;:::-;8436:46;;8501:39;8535:3;8524:9;8520:19;8501:39;:::i;:::-;8491:49;;8559:39;8593:3;8582:9;8578:19;8559:39;:::i;:::-;8549:49;;8617:38;8650:3;8639:9;8635:19;8617:38;:::i;:::-;8607:48;;8674:36;8705:3;8694:9;8690:19;8674:36;:::i;:::-;8664:46;;8729:37;8761:3;8750:9;8746:19;8729:37;:::i;:::-;8719:47;;8785:36;8816:3;8805:9;8801:19;8785:36;:::i;:::-;8775:46;;7437:1390;;;;;;;;;;;;;:::o;8832:382::-;8897:6;8905;8958:2;8946:9;8937:7;8933:23;8929:32;8926:52;;;8974:1;8971;8964:12;8926:52;9013:9;9000:23;9032:31;9057:5;9032:31;:::i;:::-;9082:5;-1:-1:-1;9139:2:1;9124:18;;9111:32;9152:30;9111:32;9152:30;:::i;:::-;9201:7;9191:17;;;8832:382;;;;;:::o;9219:247::-;9278:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:52;;;9347:1;9344;9337:12;9299:52;9386:9;9373:23;9405:31;9430:5;9405:31;:::i;9471:252::-;9538:6;9546;9599:2;9587:9;9578:7;9574:23;9570:32;9567:52;;;9615:1;9612;9605:12;9567:52;9638:28;9656:9;9638:28;:::i;9728:661::-;10039:3;10028:9;10021:22;10002:4;10060:46;10101:3;10090:9;10086:19;10078:6;10060:46;:::i;:::-;10137:2;10122:18;;10115:34;;;;-1:-1:-1;10180:2:1;10165:18;;10158:34;;;;10223:2;10208:18;;10201:34;;;;10266:3;10251:19;;10244:35;;;;10310:3;10295:19;;10288:35;10367:14;10360:22;10354:3;10339:19;;;10332:51;10052:54;9728:661;-1:-1:-1;9728:661:1:o;10394:376::-;10456:6;10464;10517:2;10505:9;10496:7;10492:23;10488:32;10485:52;;;10533:1;10530;10523:12;10485:52;10572:9;10559:23;10591:28;10613:5;10591:28;:::i;10775:367::-;10838:8;10848:6;10902:3;10895:4;10887:6;10883:17;10879:27;10869:55;;10920:1;10917;10910:12;10869:55;-1:-1:-1;10943:20:1;;-1:-1:-1;;;;;10975:30:1;;10972:50;;;11018:1;11015;11008:12;10972:50;11055:4;11047:6;11043:17;11031:29;;11115:3;11108:4;11098:6;11095:1;11091:14;11083:6;11079:27;11075:38;11072:47;11069:67;;;11132:1;11129;11122:12;11147:773;11269:6;11277;11285;11293;11346:2;11334:9;11325:7;11321:23;11317:32;11314:52;;;11362:1;11359;11352:12;11314:52;11402:9;11389:23;-1:-1:-1;;;;;11472:2:1;11464:6;11461:14;11458:34;;;11488:1;11485;11478:12;11458:34;11527:70;11589:7;11580:6;11569:9;11565:22;11527:70;:::i;:::-;11616:8;;-1:-1:-1;11501:96:1;-1:-1:-1;11704:2:1;11689:18;;11676:32;;-1:-1:-1;11720:16:1;;;11717:36;;;11749:1;11746;11739:12;11717:36;;11788:72;11852:7;11841:8;11830:9;11826:24;11788:72;:::i;:::-;11147:773;;;;-1:-1:-1;11879:8:1;-1:-1:-1;;;;11147:773:1:o;12583:250::-;12649:6;12657;12710:2;12698:9;12689:7;12685:23;12681:32;12678:52;;;12726:1;12723;12716:12;12678:52;12749:27;12766:9;12749:27;:::i;13162:254::-;13230:6;13238;13291:2;13279:9;13270:7;13266:23;13262:32;13259:52;;;13307:1;13304;13297:12;13259:52;13330:29;13349:9;13330:29;:::i;13421:309::-;13486:6;13494;13547:2;13535:9;13526:7;13522:23;13518:32;13515:52;;;13563:1;13560;13553:12;13515:52;13602:9;13589:23;13621:28;13643:5;13621:28;:::i;13735:241::-;13791:6;13844:2;13832:9;13823:7;13819:23;13815:32;13812:52;;;13860:1;13857;13850:12;13812:52;13899:9;13886:23;13918:28;13940:5;13918:28;:::i;13981:377::-;14055:6;14063;14071;14124:2;14112:9;14103:7;14099:23;14095:32;14092:52;;;14140:1;14137;14130:12;14092:52;14179:9;14166:23;14198:28;14220:5;14198:28;:::i;:::-;14245:5;14297:2;14282:18;;14269:32;;-1:-1:-1;14348:2:1;14333:18;;;14320:32;;13981:377;-1:-1:-1;;;13981:377:1:o;14363:592::-;14476:6;14484;14492;14500;14508;14516;14524;14577:3;14565:9;14556:7;14552:23;14548:33;14545:53;;;14594:1;14591;14584:12;14545:53;-1:-1:-1;;14617:23:1;;;14687:2;14672:18;;14659:32;;-1:-1:-1;14738:2:1;14723:18;;14710:32;;14789:2;14774:18;;14761:32;;-1:-1:-1;14840:3:1;14825:19;;14812:33;;-1:-1:-1;14892:3:1;14877:19;;14864:33;;-1:-1:-1;14944:3:1;14929:19;14916:33;;-1:-1:-1;14363:592:1;-1:-1:-1;14363:592:1:o;14960:388::-;15028:6;15036;15089:2;15077:9;15068:7;15064:23;15060:32;15057:52;;;15105:1;15102;15095:12;15057:52;15144:9;15131:23;15163:31;15188:5;15163:31;:::i;:::-;15213:5;-1:-1:-1;15270:2:1;15255:18;;15242:32;15283:33;15242:32;15283:33;:::i;15353:163::-;15420:20;;15480:10;15469:22;;15459:33;;15449:61;;15506:1;15503;15496:12;15521:397;15604:6;15612;15620;15628;15681:3;15669:9;15660:7;15656:23;15652:33;15649:53;;;15698:1;15695;15688:12;15649:53;15734:9;15721:23;15711:33;;15763:37;15796:2;15785:9;15781:18;15763:37;:::i;:::-;15753:47;;15819:37;15852:2;15841:9;15837:18;15819:37;:::i;:::-;15809:47;;15875:37;15908:2;15897:9;15893:18;15875:37;:::i;:::-;15865:47;;15521:397;;;;;;;:::o;15923:252::-;15990:6;15998;16051:2;16039:9;16030:7;16026:23;16022:32;16019:52;;;16067:1;16064;16057:12;16019:52;16090:28;16108:9;16090:28;:::i;16406:356::-;16608:2;16590:21;;;16627:18;;;16620:30;16686:34;16681:2;16666:18;;16659:62;16753:2;16738:18;;16406:356::o;16767:127::-;16828:10;16823:3;16819:20;16816:1;16809:31;16859:4;16856:1;16849:15;16883:4;16880:1;16873:15;16899:168;16939:7;17005:1;17001;16997:6;16993:14;16990:1;16987:21;16982:1;16975:9;16968:17;16964:45;16961:71;;;17012:18;;:::i;:::-;-1:-1:-1;17052:9:1;;16899:168::o;17072:127::-;17133:10;17128:3;17124:20;17121:1;17114:31;17164:4;17161:1;17154:15;17188:4;17185:1;17178:15;17204:120;17244:1;17270;17260:35;;17275:18;;:::i;:::-;-1:-1:-1;17309:9:1;;17204:120::o;18680:380::-;18759:1;18755:12;;;;18802;;;18823:61;;18877:4;18869:6;18865:17;18855:27;;18823:61;18930:2;18922:6;18919:14;18899:18;18896:38;18893:161;;;18976:10;18971:3;18967:20;18964:1;18957:31;19011:4;19008:1;19001:15;19039:4;19036:1;19029:15;18893:161;;18680:380;;;:::o;19065:125::-;19105:4;19133:1;19130;19127:8;19124:34;;;19138:18;;:::i;:::-;-1:-1:-1;19175:9:1;;19065:125::o;19195:127::-;19256:10;19251:3;19247:20;19244:1;19237:31;19287:4;19284:1;19277:15;19311:4;19308:1;19301:15;19327:422;19416:1;19459:5;19416:1;19473:270;19494:7;19484:8;19481:21;19473:270;;;19553:4;19549:1;19545:6;19541:17;19535:4;19532:27;19529:53;;;19562:18;;:::i;:::-;19612:7;19602:8;19598:22;19595:55;;;19632:16;;;;19595:55;19711:22;;;;19671:15;;;;19473:270;;;19477:3;19327:422;;;;;:::o;19754:806::-;19803:5;19833:8;19823:80;;-1:-1:-1;19874:1:1;19888:5;;19823:80;19922:4;19912:76;;-1:-1:-1;19959:1:1;19973:5;;19912:76;20004:4;20022:1;20017:59;;;;20090:1;20085:130;;;;19997:218;;20017:59;20047:1;20038:10;;20061:5;;;20085:130;20122:3;20112:8;20109:17;20106:43;;;20129:18;;:::i;:::-;-1:-1:-1;;20185:1:1;20171:16;;20200:5;;19997:218;;20299:2;20289:8;20286:16;20280:3;20274:4;20271:13;20267:36;20261:2;20251:8;20248:16;20243:2;20237:4;20234:12;20230:35;20227:77;20224:159;;;-1:-1:-1;20336:19:1;;;20368:5;;20224:159;20415:34;20440:8;20434:4;20415:34;:::i;:::-;20485:6;20481:1;20477:6;20473:19;20464:7;20461:32;20458:58;;;20496:18;;:::i;:::-;20534:20;;19754:806;-1:-1:-1;;;19754:806:1:o;20565:140::-;20623:5;20652:47;20693:4;20683:8;20679:19;20673:4;20652:47;:::i;21374:128::-;21414:3;21445:1;21441:6;21438:1;21435:13;21432:39;;;21451:18;;:::i;:::-;-1:-1:-1;21487:9:1;;21374:128::o;21507:135::-;21546:3;-1:-1:-1;;21567:17:1;;21564:43;;;21587:18;;:::i;:::-;-1:-1:-1;21634:1:1;21623:13;;21507:135::o;21647:287::-;21687:7;-1:-1:-1;;;;;21780:2:1;21777:1;21773:10;21810:2;21807:1;21803:10;21866:3;21862:2;21858:12;21853:3;21850:21;21843:3;21836:11;21829:19;21825:47;21822:73;;;21875:18;;:::i;:::-;21915:13;;21647:287;-1:-1:-1;;;;21647:287:1:o;21939:339::-;22141:2;22123:21;;;22180:2;22160:18;;;22153:30;-1:-1:-1;;;22214:2:1;22199:18;;22192:45;22269:2;22254:18;;21939:339::o;22283:187::-;22322:1;22348:6;22381:2;22378:1;22374:10;22403:3;22393:37;;22410:18;;:::i;:::-;22448:10;;22444:20;;;;;22283:187;-1:-1:-1;;22283:187:1:o;23243:225::-;23282:4;23311:14;23375:10;;;;23345;;23397:12;;;23394:38;;;23412:18;;:::i;:::-;23449:13;;23243:225;-1:-1:-1;;;23243:225:1:o;24176:112::-;24208:1;24234;24224:35;;24239:18;;:::i;:::-;-1:-1:-1;24273:9:1;;24176:112::o;26155:136::-;26194:3;26222:5;26212:39;;26231:18;;:::i;:::-;-1:-1:-1;;;26267:18:1;;26155:136::o;29260:270::-;29299:7;-1:-1:-1;;;;;29376:2:1;29373:1;29369:10;29406:2;29403:1;29399:10;29462:3;29458:2;29454:12;29449:3;29446:21;29439:3;29432:11;29425:19;29421:47;29418:73;;;29471:18;;:::i;30227:232::-;30266:3;30294:14;30335:2;30332:1;30328:10;30365:2;30362:1;30358:10;30396:3;30392:2;30388:12;30383:3;30380:21;30377:47;;;30404:18;;:::i;:::-;30440:13;;30227:232;-1:-1:-1;;;;30227:232:1:o;33078:127::-;33139:10;33134:3;33130:20;33127:1;33120:31;33170:4;33167:1;33160:15;33194:4;33191:1;33184:15;35345:245;35412:6;35465:2;35453:9;35444:7;35440:23;35436:32;35433:52;;;35481:1;35478;35471:12;35433:52;35513:9;35507:16;35532:28;35554:5;35532:28;:::i;36948:184::-;37018:6;37071:2;37059:9;37050:7;37046:23;37042:32;37039:52;;;37087:1;37084;37077:12;37039:52;-1:-1:-1;37110:16:1;;36948:184;-1:-1:-1;36948:184:1:o;40451:251::-;40521:6;40574:2;40562:9;40553:7;40549:23;40545:32;40542:52;;;40590:1;40587;40580:12;40542:52;40622:9;40616:16;40641:31;40666:5;40641:31;:::i;40707:980::-;40969:4;41017:3;41006:9;41002:19;41048:6;41037:9;41030:25;41074:2;41112:6;41107:2;41096:9;41092:18;41085:34;41155:3;41150:2;41139:9;41135:18;41128:31;41179:6;41214;41208:13;41245:6;41237;41230:22;41283:3;41272:9;41268:19;41261:26;;41322:2;41314:6;41310:15;41296:29;;41343:1;41353:195;41367:6;41364:1;41361:13;41353:195;;;41432:13;;-1:-1:-1;;;;;41428:39:1;41416:52;;41523:15;;;;41488:12;;;;41464:1;41382:9;41353:195;;;-1:-1:-1;;;;;;;41604:32:1;;;;41599:2;41584:18;;41577:60;-1:-1:-1;;;41668:3:1;41653:19;41646:35;41565:3;40707:980;-1:-1:-1;;;40707:980:1:o;42304:306::-;42392:6;42400;42408;42461:2;42449:9;42440:7;42436:23;42432:32;42429:52;;;42477:1;42474;42467:12;42429:52;42506:9;42500:16;42490:26;;42556:2;42545:9;42541:18;42535:25;42525:35;;42600:2;42589:9;42585:18;42579:25;42569:35;;42304:306;;;;;:::o

Swarm Source

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