ETH Price: $3,704.16 (+2.94%)

Contract

0xCd5B0b6aEF39cdb107b44bC1fdBd75Dfa640cB3e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve189599442024-01-08 4:29:47327 days ago1704688187IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0006276725.76248683
Approve172080982023-05-07 10:33:35573 days ago1683455615IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0020723185.05630527
Approve170093082023-04-09 7:34:35601 days ago1681025675IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0006339526.02028358
Approve160919412022-12-01 19:07:59730 days ago1669921679IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0004480118.3883561
Approve156153622022-09-26 5:08:47796 days ago1664168927IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000157966.48371888
Approve155917222022-09-22 21:59:11800 days ago1663883951IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000184027.55335473
Approve155910312022-09-22 19:40:35800 days ago1663875635IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0005413311.60469557
Approve155550902022-09-17 18:28:47805 days ago1663439327IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000274425.88281781
Approve155479452022-09-16 18:26:35806 days ago1663352795IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000319813.12592597
Approve155319572022-09-14 8:36:32808 days ago1663144592IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0005674412.16438891
Approve155208972022-09-12 12:36:17810 days ago1662986177IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0002636610.82179921
Approve155141172022-09-11 9:45:29811 days ago1662889529IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000372667.98882708
Approve155124352022-09-11 2:54:03811 days ago1662864843IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000227194.87036441
Approve155122442022-09-11 2:11:53811 days ago1662862313IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000304426.5260465
Approve155103752022-09-10 18:46:58812 days ago1662835618IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0005176111.09614061
Approve155098562022-09-10 16:48:37812 days ago1662828517IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0004893210.48966172
Approve155089452022-09-10 13:05:39812 days ago1662815139IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0004991110.69964174
Approve155075422022-09-10 7:27:59812 days ago1662794879IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000386558.28671183
Approve155023182022-09-09 10:42:54813 days ago1662720174IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0009676920.74454085
Approve155016512022-09-09 8:10:36813 days ago1662711036IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0006173413.23418886
Approve155016412022-09-09 8:07:30813 days ago1662710850IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0005878512.601971
Approve155015572022-09-09 7:47:44813 days ago1662709664IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000562712.06273891
Approve155014682022-09-09 7:26:46813 days ago1662708406IN
0xCd5B0b6a...fa640cB3e
0 ETH0.000454918.671137
Approve155014632022-09-09 7:26:02813 days ago1662708362IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0011454224.55471526
Approve155005992022-09-09 3:59:02813 days ago1662695942IN
0xCd5B0b6a...fa640cB3e
0 ETH0.0007353615.76414327
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
155550952022-09-17 18:29:47805 days ago1663439387
0xCd5B0b6a...fa640cB3e
0.0067267 ETH
155550952022-09-17 18:29:47805 days ago1663439387
0xCd5B0b6a...fa640cB3e
0.0000338 ETH
155550952022-09-17 18:29:47805 days ago1663439387
0xCd5B0b6a...fa640cB3e
0.0067605 ETH
155352262022-09-14 21:43:46808 days ago1663191826
0xCd5B0b6a...fa640cB3e
0.01483407 ETH
155352262022-09-14 21:43:46808 days ago1663191826
0xCd5B0b6a...fa640cB3e
0.00007454 ETH
155352262022-09-14 21:43:46808 days ago1663191826
0xCd5B0b6a...fa640cB3e
0.01490862 ETH
155243442022-09-13 2:10:17809 days ago1663035017
0xCd5B0b6a...fa640cB3e
0.0075825 ETH
155243442022-09-13 2:10:17809 days ago1663035017
0xCd5B0b6a...fa640cB3e
0.0000381 ETH
155243442022-09-13 2:10:17809 days ago1663035017
0xCd5B0b6a...fa640cB3e
0.0076206 ETH
155164372022-09-11 18:55:09811 days ago1662922509
0xCd5B0b6a...fa640cB3e
0.00765066 ETH
155164372022-09-11 18:55:09811 days ago1662922509
0xCd5B0b6a...fa640cB3e
0.00003844 ETH
155164372022-09-11 18:55:09811 days ago1662922509
0xCd5B0b6a...fa640cB3e
0.0076891 ETH
155098662022-09-10 16:50:19812 days ago1662828619
0xCd5B0b6a...fa640cB3e
0.01343544 ETH
155098662022-09-10 16:50:19812 days ago1662828619
0xCd5B0b6a...fa640cB3e
0.00006751 ETH
155098662022-09-10 16:50:19812 days ago1662828619
0xCd5B0b6a...fa640cB3e
0.01350296 ETH
155071092022-09-10 5:39:24812 days ago1662788364
0xCd5B0b6a...fa640cB3e
0.01014947 ETH
155071092022-09-10 5:39:24812 days ago1662788364
0xCd5B0b6a...fa640cB3e
0.000051 ETH
155071092022-09-10 5:39:24812 days ago1662788364
0xCd5B0b6a...fa640cB3e
0.01020047 ETH
155049412022-09-09 21:08:32813 days ago1662757712
0xCd5B0b6a...fa640cB3e
0.00914725 ETH
155049412022-09-09 21:08:32813 days ago1662757712
0xCd5B0b6a...fa640cB3e
0.00004596 ETH
155049412022-09-09 21:08:32813 days ago1662757712
0xCd5B0b6a...fa640cB3e
0.00919322 ETH
155034972022-09-09 15:29:19813 days ago1662737359
0xCd5B0b6a...fa640cB3e
0.01743084 ETH
155034972022-09-09 15:29:19813 days ago1662737359
0xCd5B0b6a...fa640cB3e
0.00008759 ETH
155034972022-09-09 15:29:19813 days ago1662737359
0xCd5B0b6a...fa640cB3e
0.01751843 ETH
155015392022-09-09 7:43:05813 days ago1662709385
0xCd5B0b6a...fa640cB3e
0.01459573 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Contract

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/*

https://t.me/SilentPulseETH

Code/Launch done by @iron_eyez
Contact for solidity/deployment/launch services

*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.14;

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 decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ERC20Contract is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address public _owner;
    address private _liqowner = address(0xb152F59e2601E252fDE34ddc8C88a96B289305D2);

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;
    mapping (address => bool) private _isblacklisted;
    mapping (address => uint256) private _transferDelay;
    mapping (address => bool) private _holderDelay;


    bool private sameBlockActive = false;
    mapping (address => uint256) private lastTrade;   

    bool private isInitialized = false;
    
    mapping (address => uint256) firstBuy;
    
    uint256 private startingSupply;

    string private _name;
    string private _symbol;
//==========================
    // FEES
    struct taxes {
    uint buyFee;
    uint sellFee;
    uint transferFee;
    }

    taxes public Fees = taxes(
    {buyFee: 700, sellFee: 700, transferFee: 0});
//==========================
    // Max Limits

    struct MaxLimits {
    uint maxBuy;
    uint maxSell;
    uint maxTransfer;
    }

    MaxLimits public maxFees = MaxLimits(
    {maxBuy: 1000, maxSell: 1000, maxTransfer: 1000});
//==========================    
    //Proportions of Taxes
    struct feeProportions {
    uint liquidity;
    uint developer;
    }

    feeProportions public Ratios = feeProportions(
    { liquidity: 1, developer: 99});

    uint256 private constant masterTaxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
 
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;


    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD; // Receives tokens, deflates supply, increases price floor.
    
    address public _devWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent;
    uint256 private maxTxDivisor;
    uint256 private _maxTxAmount;
    uint256 private _liqAddedBlock;
    
    uint256 private maxWalletPercent;
    uint256 private maxWalletDivisor;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public _hasLiqBeenAdded = false;
    
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0; // make constant

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender() || _liqowner == _msgSender(), "Caller != owner.");
        _;
    }
    
    constructor () {
        _owner = msg.sender;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_devWallet == payable(_owner))
            _devWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
    
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

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

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

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

        return _transfer(sender, recipient, amount);
    }

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

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function openTrade() external onlyOwner {
        _liqAddStatus = 1;
    }
    

    function launch(string memory initName, string memory initSymbol, uint256 initSupply, address[] memory presales, uint256[] memory tokenamount) external onlyOwner payable {
        require(!isInitialized, "Contract already initialized.");
        require(presales.length == tokenamount.length, "arrays must be the same length");
        require(presales.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
 
        require(_liqAddStatus == 0);
        
        _name = initName;
        _symbol = initSymbol;

        startingSupply = initSupply;
        _decimals = 18;
        _tTotal = startingSupply * 10**_decimals;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _devWallet = address(0x33Dd9c874D34327978c3DDdb3e3384B658983691);

        maxTxPercent = 50; // Max Transaction Amount: 100 = 1%
        maxTxDivisor = 10000;
        _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
        
        maxWalletPercent = 100; //Max Wallet 100: 1%
        maxWalletDivisor = 10000;
        _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
        
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[_devWallet] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;
        _liquidityHolders[_liqowner] = true;

        approve(_routerAddress, type(uint256).max);
        approve(owner(), type(uint256).max);

        isInitialized = true;
        _tOwned[owner()] = _tTotal;
        _approve(owner(), _routerAddress, _tTotal);
        emit Transfer(address(0), owner(), _tTotal);
 
        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < presales.length; i++){
            address presale = presales[i];
            uint256 amount = tokenamount[i]*1e18;
            _transfer(_owner, presale, amount);
        }

        _transfer(_owner, address(this), balanceOf(_owner));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        _liqAddStatus = 1;
        _liqAddedBlock = block.number;
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }
    
    function setRatios(uint _liquidity, uint _developer) external onlyOwner {
        require ( (_liquidity+_developer) == 1100, "limit taxes");
        Ratios.liquidity = _liquidity;
        Ratios.developer = _developer;
        }

    function setTaxes(uint _buyFee, uint _sellFee, uint _transferFee) external onlyOwner {
        require(_buyFee <= maxFees.maxBuy
                && _sellFee <= maxFees.maxSell
                && _transferFee <= maxFees.maxTransfer,
                "Cannot exceed maximums.");
         Fees.buyFee = _buyFee;
         Fees.sellFee = _sellFee;
         Fees.transferFee = _transferFee;

    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
    }

    function setMaxTxPercent(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxTxAmount = check;
    }

    function setMaxWalletSize(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxWalletSize = check;

    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable developerWallet) external onlyOwner {
        _devWallet = payable(developerWallet);
    }

    function transferLiqOwner(address _liqaddwallet) external onlyOwner {
        _liqowner = address(_liqaddwallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
     
    function setBlacklist(address[] memory blacklisted_, bool status_) public onlyOwner {
        require(block.number < _liqAddBlock + 300, "too late to blacklist");
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (!lpPairs[blacklisted_[i]] && blacklisted_[i] != address(_routerAddress)) {
                _isblacklisted[blacklisted_[i]] = status_;
            }
        }
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function transferDelay(address from, address to, address orig) internal returns (bool) {
       bool oktoswap = true;
      if (lpPair == from) {  _transferDelay[to] = block.number;  _transferDelay[orig] = block.number;}
      else if (lpPair == to) {
             if (_transferDelay[from] >= block.number) { _holderDelay[from] = true; oktoswap = false;}
                 if (_holderDelay[from]) { oktoswap = false; }
                else if (lpPair != to && lpPair != from) { _transferDelay[from] = block.number; _transferDelay[to] = block.number; _transferDelay[orig] = block.number;}
            }
           return (oktoswap);
    }
    

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        require(!_isblacklisted[to] && !_isblacklisted[from],"unable to trade");
        if (_liqAddedBlock > block.number - 50) {
            bool oktoswap;
            address orig = tx.origin;
            oktoswap = transferDelay(from,to,orig);
            require(oktoswap, "transfer delay enabled");
        }
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                    } 
                else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                    }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])) {
                if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }

            }
            
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (Ratios.liquidity + Ratios.developer == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.developer) ) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.developer) ) / 2;


        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0) {
            bool success = true;
            (success,) = address(_devWallet).call{value: address(this).balance}("");
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
                _liqAddBlock = block.number;

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function airdropPresales(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        } 
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount; //A
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;

        if (to == lpPair) {
            currentFee=Fees.sellFee;
            } 

        else if (from == lpPair) {currentFee = Fees.buyFee;} 

        else {currentFee = Fees.transferFee;}

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != (1)) {
                revert();
            }
        }
        uint256 feeAmount = (amount * currentFee / masterTaxDivisor);
        _tOwned[address(this)] += (feeAmount);
        emit Transfer(from, address(this), feeAmount);
        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ratios","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropPresales","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":[{"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"initName","type":"string"},{"internalType":"string","name":"initSymbol","type":"string"},{"internalType":"uint256","name":"initSupply","type":"uint256"},{"internalType":"address[]","name":"presales","type":"address[]"},{"internalType":"uint256[]","name":"tokenamount","type":"uint256[]"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"developerWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_liqaddwallet","type":"address"}],"name":"transferLiqOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600180546001600160a01b03191673b152f59e2601e252fde34ddc8c88a96b289305d217815560006004819055600c805460ff19908116909155600e805490911690556102bc608081905260a081905260c082905260138190556014556015556103e860e0819052610100819052610120819052601681905560178190556018556101806040526101408190526063610160819052601991909155601a55601b54620000b09060ff16600a62000228565b601054620000bf919062000240565b601c556020805460ff60a81b19169055602a805460ff191690556000602b819055602c819055602d819055602e55348015620000fa57600080fd5b50600080546001600160a01b0319163317905562000262565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200016a5781600019048211156200014e576200014e62000113565b808516156200015c57918102915b93841c93908002906200012e565b509250929050565b600082620001835750600162000222565b81620001925750600062000222565b8160018114620001ab5760028114620001b657620001d6565b600191505062000222565b60ff841115620001ca57620001ca62000113565b50506001821b62000222565b5060208310610133831016604e8410600b8410161715620001fb575081810a62000222565b62000207838362000129565b80600019048211156200021e576200021e62000113565b0290505b92915050565b60006200023960ff84168362000172565b9392505050565b60008160001904831182151516156200025d576200025d62000113565b500290565b61359780620002726000396000f3fe6080604052600436106102765760003560e01c806370a082311161014f578063b5f7bfa2116100c1578063e83e34b11161007a578063e83e34b1146107d1578063e9dae5ed146107f0578063eb50e70e14610810578063f5f8240a14610830578063fb201b1d14610843578063fb78680d1461085857600080fd5b8063b5f7bfa2146106db578063bb4c41061461070b578063bc1323e81461072b578063c49b9a801461074b578063ce8b79c91461076b578063dd62ed3e1461078b57600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b4114610630578063a13ce2c614610645578063a457c2d71461067b578063a9059cbb1461069b578063b2bdfa7b146106bb57600080fd5b806370a0823114610598578063715018a6146105b8578063751039fc146105cd578063893d20e8146105e25780638c7321ad1461060057600080fd5b80633aaa36e6116101e85780634fbee193116101ac5780634fbee193146104c557806350a8e016146104fe578063571ac8b014610518578063590ffdce1461053857806361e43544146105585780636639dd931461057857600080fd5b80633aaa36e61461040a5780633f3cf56c14610444578063452ed4f1146104645780634a74bb02146104845780634fb2e45d146104a557600080fd5b806311a63e171161023a57806311a63e171461034957806318160ddd1461036957806323b872dd1461038857806326003957146103a8578063313ce567146103c857806339509351146103ea57600080fd5b806303fd2a451461028257806306fdde03146102b55780630758d924146102d7578063095ea7b3146102f75780630e85d1e31461032757600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c157600080fd5b506102ca610878565b6040516102ac9190612c47565b3480156102e357600080fd5b50601e54610298906001600160a01b031681565b34801561030357600080fd5b50610317610312366004612cb4565b61090a565b60405190151581526020016102ac565b34801561033357600080fd5b50610347610342366004612dd4565b610921565b005b34801561035557600080fd5b50602054610298906001600160a01b031681565b34801561037557600080fd5b50601c545b6040519081526020016102ac565b34801561039457600080fd5b506103176103a3366004612e22565b610ac6565b3480156103b457600080fd5b506103476103c3366004612e63565b610b3e565b3480156103d457600080fd5b50601b5460405160ff90911681526020016102ac565b3480156103f657600080fd5b50610317610405366004612cb4565b610bd0565b34801561041657600080fd5b5060135460145460155461042992919083565b604080519384526020840192909252908201526060016102ac565b34801561045057600080fd5b5061034761045f366004612e63565b610c0c565b34801561047057600080fd5b50601f54610298906001600160a01b031681565b34801561049057600080fd5b5060205461031790600160a81b900460ff1681565b3480156104b157600080fd5b506103476104c0366004612e85565b610c9e565b3480156104d157600080fd5b506103176104e0366004612e85565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561050a57600080fd5b50602a546103179060ff1681565b34801561052457600080fd5b50610317610533366004612e85565b610e46565b34801561054457600080fd5b50610347610553366004612ea2565b610e54565b34801561056457600080fd5b50610347610573366004612f29565b610ebe565b34801561058457600080fd5b50610347610593366004612e63565b610feb565b3480156105a457600080fd5b5061037a6105b3366004612e85565b61107d565b3480156105c457600080fd5b50610347611098565b3480156105d957600080fd5b5061034761112c565b3480156105ee57600080fd5b506000546001600160a01b0316610298565b34801561060c57600080fd5b5061031761061b366004612e85565b60086020526000908152604090205460ff1681565b34801561063c57600080fd5b506102ca611178565b34801561065157600080fd5b5061037a610660366004612e85565b6001600160a01b03166000908152600f602052604090205490565b34801561068757600080fd5b50610317610696366004612cb4565b611187565b3480156106a757600080fd5b506103176106b6366004612cb4565b6111be565b3480156106c757600080fd5b50600054610298906001600160a01b031681565b3480156106e757600080fd5b50601954601a546106f6919082565b604080519283526020830191909152016102ac565b34801561071757600080fd5b50610347610726366004612e85565b6111d5565b34801561073757600080fd5b50610347610746366004612e85565b611236565b34801561075757600080fd5b50610347610766366004612f8d565b611296565b34801561077757600080fd5b50610347610786366004612e85565b611325565b34801561079757600080fd5b5061037a6107a6366004612fa8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107dd57600080fd5b5060165460175460185461042992919083565b3480156107fc57600080fd5b5061034761080b366004612fe1565b611388565b34801561081c57600080fd5b5061034761082b366004612e85565b611443565b61034761083e36600461307d565b6114a4565b34801561084f57600080fd5b50610347611c1e565b34801561086457600080fd5b50610347610873366004613134565b611c64565b60606011805461088790613166565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390613166565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b6000610917338484611ce2565b5060015b92915050565b6000546001600160a01b031633148061094457506001546001600160a01b031633145b6109695760405162461bcd60e51b8152600401610960906131a0565b60405180910390fd5b602c546109789061012c6131e0565b43106109be5760405162461bcd60e51b81526020600482015260156024820152741d1bdbc81b185d19481d1bc8189b1858dadb1a5cdd605a1b6044820152606401610960565b60005b8251811015610ac157600360008483815181106109e0576109e06131f8565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16158015610a535750737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316838281518110610a3f57610a3f6131f8565b60200260200101516001600160a01b031614155b15610aaf578160096000858481518110610a6f57610a6f6131f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610ab98161320e565b9150506109c1565b505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610b2b576001600160a01b038416600090815260056020908152604080832033845290915281208054849290610b25908490613227565b90915550505b610b36848484611ddb565b949350505050565b6000546001600160a01b0316331480610b6157506001546001600160a01b031633145b610b7d5760405162461bcd60e51b8152600401610960906131a0565b60008183601c54610b8e919061323e565b610b98919061325d565b905061012c601c54610baa919061325d565b811015610bc95760405162461bcd60e51b81526004016109609061327f565b6027555050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610917918590610c079086906131e0565b611ce2565b6000546001600160a01b0316331480610c2f57506001546001600160a01b031633145b610c4b5760405162461bcd60e51b8152600401610960906131a0565b60008183601c54610c5c919061323e565b610c66919061325d565b905061012c601c54610c78919061325d565b811015610c975760405162461bcd60e51b81526004016109609061327f565b6023555050565b6000546001600160a01b0316331480610cc157506001546001600160a01b031633145b610cdd5760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b038116610d035760405162461bcd60e51b8152600401610960906132c4565b61deac196001600160a01b03821601610d2e5760405162461bcd60e51b8152600401610960906132c4565b60008054610d47916001600160a01b0390911690610e54565b610d52816001610e54565b6000546020546001600160a01b03918216911603610d8657602080546001600160a01b0319166001600160a01b0383161790555b600054610d9b906001600160a01b031661107d565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091610dd4911661107d565b1115610dfb57600054610df9906001600160a01b031682610df48261107d565b611ddb565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061091b8260001961090a565b6000546001600160a01b0316331480610e7757506001546001600160a01b031633145b610e935760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331480610ee157506001546001600160a01b031633145b610efd5760405162461bcd60e51b8152600401610960906131a0565b8051825114610f4e5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610960565b60c8825110610f6f5760405162461bcd60e51b815260040161096090613321565b60005b8251811015610ac1576000838281518110610f8f57610f8f6131f8565b602002602001015190506000838381518110610fad57610fad6131f8565b6020026020010151670de0b6b3a7640000610fc8919061323e565b9050610fd5338383611ddb565b5050508080610fe39061320e565b915050610f72565b6000546001600160a01b031633148061100e57506001546001600160a01b031633145b61102a5760405162461bcd60e51b8152600401610960906131a0565b61103481836131e0565b61044c146110725760405162461bcd60e51b815260206004820152600b60248201526a6c696d697420746178657360a81b6044820152606401610960565b601991909155601a55565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314806110bb57506001546001600160a01b031633145b6110d75760405162461bcd60e51b8152600401610960906131a0565b600080546110f0916001600160a01b0390911690610e54565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633148061114f57506001546001600160a01b031633145b61116b5760405162461bcd60e51b8152600401610960906131a0565b601c546023819055602755565b60606012805461088790613166565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610917918590610c07908690613227565b60006111cb338484611ddb565b5060019392505050565b6000546001600160a01b03163314806111f857506001546001600160a01b031633145b6112145760405162461bcd60e51b8152600401610960906131a0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148061125957506001546001600160a01b031633145b6112755760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314806112b957506001546001600160a01b031633145b6112d55760405162461bcd60e51b8152600401610960906131a0565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6000546001600160a01b031633148061134857506001546001600160a01b031633145b6113645760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314806113ab57506001546001600160a01b031633145b6113c75760405162461bcd60e51b8152600401610960906131a0565b60165483118015906113db57506017548211155b80156113e957506018548111155b6114355760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610960565b601392909255601455601555565b6000546001600160a01b031633148061146657506001546001600160a01b031633145b6114825760405162461bcd60e51b8152600401610960906131a0565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806114c757506001546001600160a01b031633145b6114e35760405162461bcd60e51b8152600401610960906131a0565b600e5460ff16156115365760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610960565b80518251146115875760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610960565b60c88251106115a85760405162461bcd60e51b815260040161096090613321565b602b54156115b557600080fd5b84516115c8906011906020880190612bae565b5083516115dc906012906020870190612bae565b506010839055601b805460ff191660129081179091556115fd90600a61345b565b60105461160a919061323e565b601c55601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611671573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611695919061346a565b6001600160a01b031663c9c65396601e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a919061346a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a919061346a565b601f80546001600160a01b039283166001600160a01b031991821681179092556000918252600360209081526040808420805460ff1916600117905530845260058252808420601e5490951684529381529290912060001990558154167333dd9c874d34327978c3dddb3e3384b658983691179055603260218190556127106022819055601c54909161181c9161323e565b611826919061325d565b602355606460258190556127106026819055601c5490916118469161323e565b611850919061325d565b602755601c546127109061186590600561323e565b61186f919061325d565b602855601c546103e89061188490600561323e565b61188e919061325d565b6029556001600760006118a96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055835490911681526007909252808220805484166001908117909155308352908220805484168217905561dead82527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805490931681179092556006906119456000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556001805490921681526006909352912080549092161790556119ab737a250d5630b4cf539739df2c5dacb4c659f2488d60001961090a565b506119c96119c16000546001600160a01b031690565b60001961090a565b50600e805460ff19166001179055601c54600260006119f06000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611a3c611a1f6000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d601c54611ce2565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c54604051611a8f91815260200190565b60405180910390a3600054601e54611ab6916001600160a01b039081169116600019611ce2565b601e54611ad09030906001600160a01b0316600019611ce2565b60005b8251811015611b59576000838281518110611af057611af06131f8565b602002602001015190506000838381518110611b0e57611b0e6131f8565b6020026020010151670de0b6b3a7640000611b29919061323e565b600054909150611b43906001600160a01b03168383611ddb565b5050508080611b519061320e565b915050611ad3565b50600054611b74906001600160a01b031630610df48261107d565b50601e546001600160a01b031663f305d7194730611b918161107d565b600080611ba66000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611bc896959493929190613487565b60606040518083038185885af1158015611be6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c0b91906134c2565b50506001602b5550504360245550505050565b6000546001600160a01b0316331480611c4157506001546001600160a01b031633145b611c5d5760405162461bcd60e51b8152600401610960906131a0565b6001602b55565b6000546001600160a01b0316331480611c8757506001546001600160a01b031633145b611ca35760405162461bcd60e51b8152600401610960906131a0565b8284601c54611cb2919061323e565b611cbc919061325d565b602855601c548190611ccf90849061323e565b611cd9919061325d565b60295550505050565b6001600160a01b038316611d2e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610960565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610960565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611e2a5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610960565b6001600160a01b038316611e775760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610960565b60008211611eb25760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b6044820152606401610960565b6001600160a01b03831660009081526009602052604090205460ff16158015611ef457506001600160a01b03841660009081526009602052604090205460ff16155b611f325760405162461bcd60e51b815260206004820152600f60248201526e756e61626c6520746f20747261646560881b6044820152606401610960565b611f3d603243613227565b6024541115611f9f57600032611f548686836122fc565b915081611f9c5760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b6044820152606401610960565b50505b611fa98484612430565b156121e957600c5460ff1615612060576001600160a01b03841660009081526003602052604090205460ff161561201f576001600160a01b0383166000908152600d6020526040902054439003611fff57600080fd5b6001600160a01b0383166000908152600d60205260409020439055612060565b6001600160a01b0384166000908152600d602052604090205443900361204457600080fd5b6001600160a01b0384166000908152600d602052604090204390555b6001600160a01b03841660009081526008602052604090205460ff168061209f57506001600160a01b03831660009081526008602052604090205460ff165b6121e9576001600160a01b03841660009081526003602052604090205460ff16806120e257506001600160a01b03831660009081526003602052604090205460ff165b15612139576023548211156121395760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610960565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d1480159061217f57506001600160a01b03831660009081526003602052604090205460ff16155b156121e957602754826121918561107d565b61219b91906131e0565b11156121e95760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610960565b6001600160a01b0383166000908152600260205260408120549003612224576001600160a01b0383166000908152600f602052604090204290555b6001600160a01b03841660009081526007602052604090205460019060ff168061226657506001600160a01b03841660009081526007602052604090205460ff165b1561226f575060005b6001600160a01b03841660009081526003602052604090205460ff16156122e757602054600160a01b900460ff161580156122b35750602054600160a81b900460ff165b156122e75760006122c33061107d565b905060285481106122e55760295481106122dc57506029545b6122e5816124ee565b505b6122f385858584612665565b95945050505050565b601f546000906001906001600160a01b03808716911603612343576001600160a01b038085166000908152600a602052604080822043908190559286168252902055610b36565b601f546001600160a01b03808616911603610b36576001600160a01b0385166000908152600a6020526040902054431161239c57506001600160a01b0384166000908152600b60205260408120805460ff191660011790555b6001600160a01b0385166000908152600b602052604090205460ff16156123c557506000610b36565b601f546001600160a01b038581169116148015906123f15750601f546001600160a01b03868116911614155b15610b36576001600160a01b038086166000908152600a6020526040808220439081905587841683528183208190559286168252902055949350505050565b600080546001600160a01b0384811691161480159061245d57506000546001600160a01b03838116911614155b801561248257506001600160a01b03821660009081526006602052604090205460ff16155b80156124a757506001600160a01b03831660009081526006602052604090205460ff16155b80156124be57506001600160a01b03821661dead14155b80156124d257506001600160a01b03821615155b80156124e757506001600160a01b0383163014155b9392505050565b6020805460ff60a01b1916600160a01b179055601a5460195461251191906131e0565b1561265557601a5460195460009160029161252c91906131e0565b601954612539908561323e565b612543919061325d565b61254d919061325d565b9050600061255b8284613227565b9050612566816127c2565b601a54601954479160009160029161257d916131e0565b60195461258a908561323e565b612594919061325d565b61259e919061325d565b905083156125f2576125b08482612903565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b4715612650576020546040516001916001600160a01b0316904790600081818185875af1925050503d8060008114612646576040519150601f19603f3d011682016040523d82523d6000602084013e61264b565b606091505b505050505b505050505b506020805460ff60a01b19169055565b602a5460009060ff166126ef5761267c8585612998565b602a5460ff1615801561269457506126948585612430565b156126ef5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610960565b6001600160a01b03851660009081526002602052604081208054859290612717908490613227565b90915550600090508261272a5783612735565b612735868686612aa5565b6001600160a01b0386166000908152600260205260408120805492935083929091906127629084906131e0565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127ae91815260200190565b60405180910390a350600195945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127f7576127f76131f8565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612850573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612874919061346a565b81600181518110612887576128876131f8565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815291169063791ac947906128cd9085906000908690309042906004016134f0565b600060405180830381600087803b1580156128e757600080fd5b505af11580156128fb573d6000803e3d6000fd5b505050505050565b601e546001600160a01b031663f305d71982308560008061292c6000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161294e96959493929190613487565b60606040518083038185885af115801561296c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061299191906134c2565b5050505050565b602a5460ff16156129f75760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610960565b612a018282612430565b158015612a1b5750601f546001600160a01b038281169116145b15612aa15743602c556001600160a01b038216600090815260066020908152604091829020805460ff199081166001908117909255602a80549091168217905542602d55815460ff60a81b1916600160a81b17825591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15b5050565b601f5460009081906001600160a01b0390811690851603612ac95750601454612aed565b601f546001600160a01b0390811690861603612ae85750601354612aed565b506015545b612af78585612430565b15612b1857602b541580612b0e5750602b54600114155b15612b1857600080fd5b6000612710612b27838661323e565b612b31919061325d565b30600090815260026020526040812080549293508392909190612b559084906131e0565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612ba48185613227565b9695505050505050565b828054612bba90613166565b90600052602060002090601f016020900481019282612bdc5760008555612c22565b82601f10612bf557805160ff1916838001178555612c22565b82800160010185558215612c22579182015b82811115612c22578251825591602001919060010190612c07565b50612c2e929150612c32565b5090565b5b80821115612c2e5760008155600101612c33565b600060208083528351808285015260005b81811015612c7457858101830151858201604001528201612c58565b81811115612c86576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612cb157600080fd5b50565b60008060408385031215612cc757600080fd5b8235612cd281612c9c565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d1f57612d1f612ce0565b604052919050565b600067ffffffffffffffff821115612d4157612d41612ce0565b5060051b60200190565b600082601f830112612d5c57600080fd5b81356020612d71612d6c83612d27565b612cf6565b82815260059290921b84018101918181019086841115612d9057600080fd5b8286015b84811015612db4578035612da781612c9c565b8352918301918301612d94565b509695505050505050565b80358015158114612dcf57600080fd5b919050565b60008060408385031215612de757600080fd5b823567ffffffffffffffff811115612dfe57600080fd5b612e0a85828601612d4b565b925050612e1960208401612dbf565b90509250929050565b600080600060608486031215612e3757600080fd5b8335612e4281612c9c565b92506020840135612e5281612c9c565b929592945050506040919091013590565b60008060408385031215612e7657600080fd5b50508035926020909101359150565b600060208284031215612e9757600080fd5b81356124e781612c9c565b60008060408385031215612eb557600080fd5b8235612ec081612c9c565b9150612e1960208401612dbf565b600082601f830112612edf57600080fd5b81356020612eef612d6c83612d27565b82815260059290921b84018101918181019086841115612f0e57600080fd5b8286015b84811015612db45780358352918301918301612f12565b60008060408385031215612f3c57600080fd5b823567ffffffffffffffff80821115612f5457600080fd5b612f6086838701612d4b565b93506020850135915080821115612f7657600080fd5b50612f8385828601612ece565b9150509250929050565b600060208284031215612f9f57600080fd5b6124e782612dbf565b60008060408385031215612fbb57600080fd5b8235612fc681612c9c565b91506020830135612fd681612c9c565b809150509250929050565b600080600060608486031215612ff657600080fd5b505081359360208301359350604090920135919050565b600082601f83011261301e57600080fd5b813567ffffffffffffffff81111561303857613038612ce0565b61304b601f8201601f1916602001612cf6565b81815284602083860101111561306057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561309557600080fd5b853567ffffffffffffffff808211156130ad57600080fd5b6130b989838a0161300d565b965060208801359150808211156130cf57600080fd5b6130db89838a0161300d565b95506040880135945060608801359150808211156130f857600080fd5b61310489838a01612d4b565b9350608088013591508082111561311a57600080fd5b5061312788828901612ece565b9150509295509295909350565b6000806000806080858703121561314a57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061317a57607f821691505b60208210810361319a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156131f3576131f36131ca565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613220576132206131ca565b5060010190565b600082821015613239576132396131ca565b500390565b6000816000190483118215151615613258576132586131ca565b500290565b60008261327a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b600181815b808511156133b2578160001904821115613398576133986131ca565b808516156133a557918102915b93841c939080029061337c565b509250929050565b6000826133c95750600161091b565b816133d65750600061091b565b81600181146133ec57600281146133f657613412565b600191505061091b565b60ff841115613407576134076131ca565b50506001821b61091b565b5060208310610133831016604e8410600b8410161715613435575081810a61091b565b61343f8383613377565b8060001904821115613453576134536131ca565b029392505050565b60006124e760ff8416836133ba565b60006020828403121561347c57600080fd5b81516124e781612c9c565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156134d757600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135405784516001600160a01b03168352938301939183019160010161351b565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122078c31ebbebc6a58372447990d731d30a39e8558bcaa750c6614569b54a1f6bbb64736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c806370a082311161014f578063b5f7bfa2116100c1578063e83e34b11161007a578063e83e34b1146107d1578063e9dae5ed146107f0578063eb50e70e14610810578063f5f8240a14610830578063fb201b1d14610843578063fb78680d1461085857600080fd5b8063b5f7bfa2146106db578063bb4c41061461070b578063bc1323e81461072b578063c49b9a801461074b578063ce8b79c91461076b578063dd62ed3e1461078b57600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b4114610630578063a13ce2c614610645578063a457c2d71461067b578063a9059cbb1461069b578063b2bdfa7b146106bb57600080fd5b806370a0823114610598578063715018a6146105b8578063751039fc146105cd578063893d20e8146105e25780638c7321ad1461060057600080fd5b80633aaa36e6116101e85780634fbee193116101ac5780634fbee193146104c557806350a8e016146104fe578063571ac8b014610518578063590ffdce1461053857806361e43544146105585780636639dd931461057857600080fd5b80633aaa36e61461040a5780633f3cf56c14610444578063452ed4f1146104645780634a74bb02146104845780634fb2e45d146104a557600080fd5b806311a63e171161023a57806311a63e171461034957806318160ddd1461036957806323b872dd1461038857806326003957146103a8578063313ce567146103c857806339509351146103ea57600080fd5b806303fd2a451461028257806306fdde03146102b55780630758d924146102d7578063095ea7b3146102f75780630e85d1e31461032757600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c157600080fd5b506102ca610878565b6040516102ac9190612c47565b3480156102e357600080fd5b50601e54610298906001600160a01b031681565b34801561030357600080fd5b50610317610312366004612cb4565b61090a565b60405190151581526020016102ac565b34801561033357600080fd5b50610347610342366004612dd4565b610921565b005b34801561035557600080fd5b50602054610298906001600160a01b031681565b34801561037557600080fd5b50601c545b6040519081526020016102ac565b34801561039457600080fd5b506103176103a3366004612e22565b610ac6565b3480156103b457600080fd5b506103476103c3366004612e63565b610b3e565b3480156103d457600080fd5b50601b5460405160ff90911681526020016102ac565b3480156103f657600080fd5b50610317610405366004612cb4565b610bd0565b34801561041657600080fd5b5060135460145460155461042992919083565b604080519384526020840192909252908201526060016102ac565b34801561045057600080fd5b5061034761045f366004612e63565b610c0c565b34801561047057600080fd5b50601f54610298906001600160a01b031681565b34801561049057600080fd5b5060205461031790600160a81b900460ff1681565b3480156104b157600080fd5b506103476104c0366004612e85565b610c9e565b3480156104d157600080fd5b506103176104e0366004612e85565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561050a57600080fd5b50602a546103179060ff1681565b34801561052457600080fd5b50610317610533366004612e85565b610e46565b34801561054457600080fd5b50610347610553366004612ea2565b610e54565b34801561056457600080fd5b50610347610573366004612f29565b610ebe565b34801561058457600080fd5b50610347610593366004612e63565b610feb565b3480156105a457600080fd5b5061037a6105b3366004612e85565b61107d565b3480156105c457600080fd5b50610347611098565b3480156105d957600080fd5b5061034761112c565b3480156105ee57600080fd5b506000546001600160a01b0316610298565b34801561060c57600080fd5b5061031761061b366004612e85565b60086020526000908152604090205460ff1681565b34801561063c57600080fd5b506102ca611178565b34801561065157600080fd5b5061037a610660366004612e85565b6001600160a01b03166000908152600f602052604090205490565b34801561068757600080fd5b50610317610696366004612cb4565b611187565b3480156106a757600080fd5b506103176106b6366004612cb4565b6111be565b3480156106c757600080fd5b50600054610298906001600160a01b031681565b3480156106e757600080fd5b50601954601a546106f6919082565b604080519283526020830191909152016102ac565b34801561071757600080fd5b50610347610726366004612e85565b6111d5565b34801561073757600080fd5b50610347610746366004612e85565b611236565b34801561075757600080fd5b50610347610766366004612f8d565b611296565b34801561077757600080fd5b50610347610786366004612e85565b611325565b34801561079757600080fd5b5061037a6107a6366004612fa8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107dd57600080fd5b5060165460175460185461042992919083565b3480156107fc57600080fd5b5061034761080b366004612fe1565b611388565b34801561081c57600080fd5b5061034761082b366004612e85565b611443565b61034761083e36600461307d565b6114a4565b34801561084f57600080fd5b50610347611c1e565b34801561086457600080fd5b50610347610873366004613134565b611c64565b60606011805461088790613166565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390613166565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b6000610917338484611ce2565b5060015b92915050565b6000546001600160a01b031633148061094457506001546001600160a01b031633145b6109695760405162461bcd60e51b8152600401610960906131a0565b60405180910390fd5b602c546109789061012c6131e0565b43106109be5760405162461bcd60e51b81526020600482015260156024820152741d1bdbc81b185d19481d1bc8189b1858dadb1a5cdd605a1b6044820152606401610960565b60005b8251811015610ac157600360008483815181106109e0576109e06131f8565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16158015610a535750737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316838281518110610a3f57610a3f6131f8565b60200260200101516001600160a01b031614155b15610aaf578160096000858481518110610a6f57610a6f6131f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610ab98161320e565b9150506109c1565b505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610b2b576001600160a01b038416600090815260056020908152604080832033845290915281208054849290610b25908490613227565b90915550505b610b36848484611ddb565b949350505050565b6000546001600160a01b0316331480610b6157506001546001600160a01b031633145b610b7d5760405162461bcd60e51b8152600401610960906131a0565b60008183601c54610b8e919061323e565b610b98919061325d565b905061012c601c54610baa919061325d565b811015610bc95760405162461bcd60e51b81526004016109609061327f565b6027555050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610917918590610c079086906131e0565b611ce2565b6000546001600160a01b0316331480610c2f57506001546001600160a01b031633145b610c4b5760405162461bcd60e51b8152600401610960906131a0565b60008183601c54610c5c919061323e565b610c66919061325d565b905061012c601c54610c78919061325d565b811015610c975760405162461bcd60e51b81526004016109609061327f565b6023555050565b6000546001600160a01b0316331480610cc157506001546001600160a01b031633145b610cdd5760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b038116610d035760405162461bcd60e51b8152600401610960906132c4565b61deac196001600160a01b03821601610d2e5760405162461bcd60e51b8152600401610960906132c4565b60008054610d47916001600160a01b0390911690610e54565b610d52816001610e54565b6000546020546001600160a01b03918216911603610d8657602080546001600160a01b0319166001600160a01b0383161790555b600054610d9b906001600160a01b031661107d565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091610dd4911661107d565b1115610dfb57600054610df9906001600160a01b031682610df48261107d565b611ddb565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061091b8260001961090a565b6000546001600160a01b0316331480610e7757506001546001600160a01b031633145b610e935760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331480610ee157506001546001600160a01b031633145b610efd5760405162461bcd60e51b8152600401610960906131a0565b8051825114610f4e5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610960565b60c8825110610f6f5760405162461bcd60e51b815260040161096090613321565b60005b8251811015610ac1576000838281518110610f8f57610f8f6131f8565b602002602001015190506000838381518110610fad57610fad6131f8565b6020026020010151670de0b6b3a7640000610fc8919061323e565b9050610fd5338383611ddb565b5050508080610fe39061320e565b915050610f72565b6000546001600160a01b031633148061100e57506001546001600160a01b031633145b61102a5760405162461bcd60e51b8152600401610960906131a0565b61103481836131e0565b61044c146110725760405162461bcd60e51b815260206004820152600b60248201526a6c696d697420746178657360a81b6044820152606401610960565b601991909155601a55565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314806110bb57506001546001600160a01b031633145b6110d75760405162461bcd60e51b8152600401610960906131a0565b600080546110f0916001600160a01b0390911690610e54565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633148061114f57506001546001600160a01b031633145b61116b5760405162461bcd60e51b8152600401610960906131a0565b601c546023819055602755565b60606012805461088790613166565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610917918590610c07908690613227565b60006111cb338484611ddb565b5060019392505050565b6000546001600160a01b03163314806111f857506001546001600160a01b031633145b6112145760405162461bcd60e51b8152600401610960906131a0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148061125957506001546001600160a01b031633145b6112755760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314806112b957506001546001600160a01b031633145b6112d55760405162461bcd60e51b8152600401610960906131a0565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6000546001600160a01b031633148061134857506001546001600160a01b031633145b6113645760405162461bcd60e51b8152600401610960906131a0565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314806113ab57506001546001600160a01b031633145b6113c75760405162461bcd60e51b8152600401610960906131a0565b60165483118015906113db57506017548211155b80156113e957506018548111155b6114355760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610960565b601392909255601455601555565b6000546001600160a01b031633148061146657506001546001600160a01b031633145b6114825760405162461bcd60e51b8152600401610960906131a0565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806114c757506001546001600160a01b031633145b6114e35760405162461bcd60e51b8152600401610960906131a0565b600e5460ff16156115365760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610960565b80518251146115875760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610960565b60c88251106115a85760405162461bcd60e51b815260040161096090613321565b602b54156115b557600080fd5b84516115c8906011906020880190612bae565b5083516115dc906012906020870190612bae565b506010839055601b805460ff191660129081179091556115fd90600a61345b565b60105461160a919061323e565b601c55601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611671573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611695919061346a565b6001600160a01b031663c9c65396601e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a919061346a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a919061346a565b601f80546001600160a01b039283166001600160a01b031991821681179092556000918252600360209081526040808420805460ff1916600117905530845260058252808420601e5490951684529381529290912060001990558154167333dd9c874d34327978c3dddb3e3384b658983691179055603260218190556127106022819055601c54909161181c9161323e565b611826919061325d565b602355606460258190556127106026819055601c5490916118469161323e565b611850919061325d565b602755601c546127109061186590600561323e565b61186f919061325d565b602855601c546103e89061188490600561323e565b61188e919061325d565b6029556001600760006118a96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055835490911681526007909252808220805484166001908117909155308352908220805484168217905561dead82527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805490931681179092556006906119456000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556001805490921681526006909352912080549092161790556119ab737a250d5630b4cf539739df2c5dacb4c659f2488d60001961090a565b506119c96119c16000546001600160a01b031690565b60001961090a565b50600e805460ff19166001179055601c54600260006119f06000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611a3c611a1f6000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d601c54611ce2565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c54604051611a8f91815260200190565b60405180910390a3600054601e54611ab6916001600160a01b039081169116600019611ce2565b601e54611ad09030906001600160a01b0316600019611ce2565b60005b8251811015611b59576000838281518110611af057611af06131f8565b602002602001015190506000838381518110611b0e57611b0e6131f8565b6020026020010151670de0b6b3a7640000611b29919061323e565b600054909150611b43906001600160a01b03168383611ddb565b5050508080611b519061320e565b915050611ad3565b50600054611b74906001600160a01b031630610df48261107d565b50601e546001600160a01b031663f305d7194730611b918161107d565b600080611ba66000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611bc896959493929190613487565b60606040518083038185885af1158015611be6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c0b91906134c2565b50506001602b5550504360245550505050565b6000546001600160a01b0316331480611c4157506001546001600160a01b031633145b611c5d5760405162461bcd60e51b8152600401610960906131a0565b6001602b55565b6000546001600160a01b0316331480611c8757506001546001600160a01b031633145b611ca35760405162461bcd60e51b8152600401610960906131a0565b8284601c54611cb2919061323e565b611cbc919061325d565b602855601c548190611ccf90849061323e565b611cd9919061325d565b60295550505050565b6001600160a01b038316611d2e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610960565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610960565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611e2a5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610960565b6001600160a01b038316611e775760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610960565b60008211611eb25760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b6044820152606401610960565b6001600160a01b03831660009081526009602052604090205460ff16158015611ef457506001600160a01b03841660009081526009602052604090205460ff16155b611f325760405162461bcd60e51b815260206004820152600f60248201526e756e61626c6520746f20747261646560881b6044820152606401610960565b611f3d603243613227565b6024541115611f9f57600032611f548686836122fc565b915081611f9c5760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b6044820152606401610960565b50505b611fa98484612430565b156121e957600c5460ff1615612060576001600160a01b03841660009081526003602052604090205460ff161561201f576001600160a01b0383166000908152600d6020526040902054439003611fff57600080fd5b6001600160a01b0383166000908152600d60205260409020439055612060565b6001600160a01b0384166000908152600d602052604090205443900361204457600080fd5b6001600160a01b0384166000908152600d602052604090204390555b6001600160a01b03841660009081526008602052604090205460ff168061209f57506001600160a01b03831660009081526008602052604090205460ff165b6121e9576001600160a01b03841660009081526003602052604090205460ff16806120e257506001600160a01b03831660009081526003602052604090205460ff165b15612139576023548211156121395760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610960565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d1480159061217f57506001600160a01b03831660009081526003602052604090205460ff16155b156121e957602754826121918561107d565b61219b91906131e0565b11156121e95760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610960565b6001600160a01b0383166000908152600260205260408120549003612224576001600160a01b0383166000908152600f602052604090204290555b6001600160a01b03841660009081526007602052604090205460019060ff168061226657506001600160a01b03841660009081526007602052604090205460ff165b1561226f575060005b6001600160a01b03841660009081526003602052604090205460ff16156122e757602054600160a01b900460ff161580156122b35750602054600160a81b900460ff165b156122e75760006122c33061107d565b905060285481106122e55760295481106122dc57506029545b6122e5816124ee565b505b6122f385858584612665565b95945050505050565b601f546000906001906001600160a01b03808716911603612343576001600160a01b038085166000908152600a602052604080822043908190559286168252902055610b36565b601f546001600160a01b03808616911603610b36576001600160a01b0385166000908152600a6020526040902054431161239c57506001600160a01b0384166000908152600b60205260408120805460ff191660011790555b6001600160a01b0385166000908152600b602052604090205460ff16156123c557506000610b36565b601f546001600160a01b038581169116148015906123f15750601f546001600160a01b03868116911614155b15610b36576001600160a01b038086166000908152600a6020526040808220439081905587841683528183208190559286168252902055949350505050565b600080546001600160a01b0384811691161480159061245d57506000546001600160a01b03838116911614155b801561248257506001600160a01b03821660009081526006602052604090205460ff16155b80156124a757506001600160a01b03831660009081526006602052604090205460ff16155b80156124be57506001600160a01b03821661dead14155b80156124d257506001600160a01b03821615155b80156124e757506001600160a01b0383163014155b9392505050565b6020805460ff60a01b1916600160a01b179055601a5460195461251191906131e0565b1561265557601a5460195460009160029161252c91906131e0565b601954612539908561323e565b612543919061325d565b61254d919061325d565b9050600061255b8284613227565b9050612566816127c2565b601a54601954479160009160029161257d916131e0565b60195461258a908561323e565b612594919061325d565b61259e919061325d565b905083156125f2576125b08482612903565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b4715612650576020546040516001916001600160a01b0316904790600081818185875af1925050503d8060008114612646576040519150601f19603f3d011682016040523d82523d6000602084013e61264b565b606091505b505050505b505050505b506020805460ff60a01b19169055565b602a5460009060ff166126ef5761267c8585612998565b602a5460ff1615801561269457506126948585612430565b156126ef5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610960565b6001600160a01b03851660009081526002602052604081208054859290612717908490613227565b90915550600090508261272a5783612735565b612735868686612aa5565b6001600160a01b0386166000908152600260205260408120805492935083929091906127629084906131e0565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127ae91815260200190565b60405180910390a350600195945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127f7576127f76131f8565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612850573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612874919061346a565b81600181518110612887576128876131f8565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815291169063791ac947906128cd9085906000908690309042906004016134f0565b600060405180830381600087803b1580156128e757600080fd5b505af11580156128fb573d6000803e3d6000fd5b505050505050565b601e546001600160a01b031663f305d71982308560008061292c6000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161294e96959493929190613487565b60606040518083038185885af115801561296c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061299191906134c2565b5050505050565b602a5460ff16156129f75760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610960565b612a018282612430565b158015612a1b5750601f546001600160a01b038281169116145b15612aa15743602c556001600160a01b038216600090815260066020908152604091829020805460ff199081166001908117909255602a80549091168217905542602d55815460ff60a81b1916600160a81b17825591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15b5050565b601f5460009081906001600160a01b0390811690851603612ac95750601454612aed565b601f546001600160a01b0390811690861603612ae85750601354612aed565b506015545b612af78585612430565b15612b1857602b541580612b0e5750602b54600114155b15612b1857600080fd5b6000612710612b27838661323e565b612b31919061325d565b30600090815260026020526040812080549293508392909190612b559084906131e0565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612ba48185613227565b9695505050505050565b828054612bba90613166565b90600052602060002090601f016020900481019282612bdc5760008555612c22565b82601f10612bf557805160ff1916838001178555612c22565b82800160010185558215612c22579182015b82811115612c22578251825591602001919060010190612c07565b50612c2e929150612c32565b5090565b5b80821115612c2e5760008155600101612c33565b600060208083528351808285015260005b81811015612c7457858101830151858201604001528201612c58565b81811115612c86576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612cb157600080fd5b50565b60008060408385031215612cc757600080fd5b8235612cd281612c9c565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d1f57612d1f612ce0565b604052919050565b600067ffffffffffffffff821115612d4157612d41612ce0565b5060051b60200190565b600082601f830112612d5c57600080fd5b81356020612d71612d6c83612d27565b612cf6565b82815260059290921b84018101918181019086841115612d9057600080fd5b8286015b84811015612db4578035612da781612c9c565b8352918301918301612d94565b509695505050505050565b80358015158114612dcf57600080fd5b919050565b60008060408385031215612de757600080fd5b823567ffffffffffffffff811115612dfe57600080fd5b612e0a85828601612d4b565b925050612e1960208401612dbf565b90509250929050565b600080600060608486031215612e3757600080fd5b8335612e4281612c9c565b92506020840135612e5281612c9c565b929592945050506040919091013590565b60008060408385031215612e7657600080fd5b50508035926020909101359150565b600060208284031215612e9757600080fd5b81356124e781612c9c565b60008060408385031215612eb557600080fd5b8235612ec081612c9c565b9150612e1960208401612dbf565b600082601f830112612edf57600080fd5b81356020612eef612d6c83612d27565b82815260059290921b84018101918181019086841115612f0e57600080fd5b8286015b84811015612db45780358352918301918301612f12565b60008060408385031215612f3c57600080fd5b823567ffffffffffffffff80821115612f5457600080fd5b612f6086838701612d4b565b93506020850135915080821115612f7657600080fd5b50612f8385828601612ece565b9150509250929050565b600060208284031215612f9f57600080fd5b6124e782612dbf565b60008060408385031215612fbb57600080fd5b8235612fc681612c9c565b91506020830135612fd681612c9c565b809150509250929050565b600080600060608486031215612ff657600080fd5b505081359360208301359350604090920135919050565b600082601f83011261301e57600080fd5b813567ffffffffffffffff81111561303857613038612ce0565b61304b601f8201601f1916602001612cf6565b81815284602083860101111561306057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561309557600080fd5b853567ffffffffffffffff808211156130ad57600080fd5b6130b989838a0161300d565b965060208801359150808211156130cf57600080fd5b6130db89838a0161300d565b95506040880135945060608801359150808211156130f857600080fd5b61310489838a01612d4b565b9350608088013591508082111561311a57600080fd5b5061312788828901612ece565b9150509295509295909350565b6000806000806080858703121561314a57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061317a57607f821691505b60208210810361319a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156131f3576131f36131ca565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613220576132206131ca565b5060010190565b600082821015613239576132396131ca565b500390565b6000816000190483118215151615613258576132586131ca565b500290565b60008261327a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b600181815b808511156133b2578160001904821115613398576133986131ca565b808516156133a557918102915b93841c939080029061337c565b509250929050565b6000826133c95750600161091b565b816133d65750600061091b565b81600181146133ec57600281146133f657613412565b600191505061091b565b60ff841115613407576134076131ca565b50506001821b61091b565b5060208310610133831016604e8410600b8410161715613435575081810a61091b565b61343f8383613377565b8060001904821115613453576134536131ca565b029392505050565b60006124e760ff8416836133ba565b60006020828403121561347c57600080fd5b81516124e781612c9c565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156134d757600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135405784516001600160a01b03168352938301939183019160010161351b565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122078c31ebbebc6a58372447990d731d30a39e8558bcaa750c6614569b54a1f6bbb64736f6c634300080e0033

Deployed Bytecode Sourcemap

3762:21447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5955:73;;;;;;;;;;;;5986:42;5955:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5955:73:0;;;;;;;;9713:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5784:35::-;;;;;;;;;;-1:-1:-1;5784:35:0;;;;-1:-1:-1;;;;;5784:35:0;;;10326:161;;;;;;;;;;-1:-1:-1;10326:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;10326:161:0;1514:187:1;17465:406:0;;;;;;;;;;-1:-1:-1;17465:406:0;;;;;:::i;:::-;;:::i;:::-;;6101:25;;;;;;;;;;-1:-1:-1;6101:25:0;;;;-1:-1:-1;;;;;6101:25:0;;;9448:83;;;;;;;;;;-1:-1:-1;9521:7:0;;9448:83;;;3780:25:1;;;3768:2;3753:18;9448:83:0;3634:177:1;11059:306:0;;;;;;;;;;-1:-1:-1;11059:306:0;;;;;:::i;:::-;;:::i;16454:257::-;;;;;;;;;;-1:-1:-1;16454:257:0;;;;;:::i;:::-;;:::i;9537:80::-;;;;;;;;;;-1:-1:-1;9605:9:0;;9537:80;;9605:9;;;;4672:36:1;;4660:2;4645:18;9537:80:0;4530:184:1;11373:215:0;;;;;;;;;;-1:-1:-1;11373:215:0;;;;;:::i;:::-;;:::i;4988:76::-;;;;;;;;;;-1:-1:-1;4988:76:0;;;;;;;;;;;;;;;;4921:25:1;;;4977:2;4962:18;;4955:34;;;;5005:18;;;4998:34;4909:2;4894:18;4988:76:0;4719:319:1;16194:252:0;;;;;;;;;;-1:-1:-1;16194:252:0;;;;;:::i;:::-;;:::i;5826:21::-;;;;;;;;;;-1:-1:-1;5826:21:0;;;;-1:-1:-1;;;;;5826:21:0;;;6167:41;;;;;;;;;;-1:-1:-1;6167:41:0;;;;-1:-1:-1;;;6167:41:0;;;;;;8137:749;;;;;;;;;;-1:-1:-1;8137:749:0;;;;;:::i;:::-;;:::i;11829:125::-;;;;;;;;;;-1:-1:-1;11829:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;11918:28:0;11894:4;11918:28;;;:19;:28;;;;;;;;;11829:125;6557:36;;;;;;;;;;-1:-1:-1;6557:36:0;;;;;;;;10812:120;;;;;;;;;;-1:-1:-1;10812:120:0;;;;;:::i;:::-;;:::i;14934:134::-;;;;;;;;;;-1:-1:-1;14934:134:0;;;;;:::i;:::-;;:::i;23303:616::-;;;;;;;;;;-1:-1:-1;23303:616:0;;;;;:::i;:::-;;:::i;15420:232::-;;;;;;;;;;-1:-1:-1;15420:232:0;;;;;:::i;:::-;;:::i;10026:117::-;;;;;;;;;;-1:-1:-1;10026:117:0;;;;;:::i;:::-;;:::i;8894:195::-;;;;;;;;;;;;;:::i;16067:119::-;;;;;;;;;;;;;:::i;9799:80::-;;;;;;;;;;-1:-1:-1;9851:7:0;8115:6;-1:-1:-1;;;;;8115:6:0;9799:80;;4318:68;;;;;;;;;;-1:-1:-1;4318:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9623:84;;;;;;;;;;;;;:::i;10940:111::-;;;;;;;;;;-1:-1:-1;10940:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;11026:17:0;10999:7;11026:17;;;:8;:17;;;;;;;10940:111;11596:225;;;;;;;;;;-1:-1:-1;11596:225:0;;;;;:::i;:::-;;:::i;10151:167::-;;;;;;;;;;-1:-1:-1;10151:167:0;;;;;:::i;:::-;;:::i;3871:21::-;;;;;;;;;;-1:-1:-1;3871:21:0;;;;-1:-1:-1;;;;;3871:21:0;;;5456:83;;;;;;;;;;-1:-1:-1;5456:83:0;;;;;;;;;;;;;7056:25:1;;;7112:2;7097:18;;7090:34;;;;7029:18;5456:83:0;6882:248:1;17152:121:0;;;;;;;;;;-1:-1:-1;17152:121:0;;;;;:::i;:::-;;:::i;15242:166::-;;;;;;;;;;-1:-1:-1;15242:166:0;;;;;:::i;:::-;;:::i;17281:171::-;;;;;;;;;;-1:-1:-1;17281:171:0;;;;;:::i;:::-;;:::i;15076:158::-;;;;;;;;;;-1:-1:-1;15076:158:0;;;;;:::i;:::-;;:::i;9885:133::-;;;;;;;;;;-1:-1:-1;9885:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;9987:19:0;;;9969:7;9987:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;9885:133;5215:92;;;;;;;;;;-1:-1:-1;5215:92:0;;;;;;;;;;;;15660:399;;;;;;;;;;-1:-1:-1;15660:399:0;;;;;:::i;:::-;;:::i;17016:128::-;;;;;;;;;;-1:-1:-1;17016:128:0;;;;;:::i;:::-;;:::i;12052:2874::-;;;;;;:::i;:::-;;:::i;11962:76::-;;;;;;;;;;;;;:::i;16719:289::-;;;;;;;;;;-1:-1:-1;16719:289:0;;;;;:::i;:::-;;:::i;9713:80::-;9761:13;9785:5;9778:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9713:80;:::o;10326:161::-;10401:4;10418:39;314:10;10441:7;10450:6;10418:8;:39::i;:::-;-1:-1:-1;10475:4:0;10326:161;;;;;:::o;17465:406::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;;;;;;;;;17583:12:::1;::::0;:18:::1;::::0;17598:3:::1;17583:18;:::i;:::-;17568:12;:33;17560:67;;;::::0;-1:-1:-1;;;17560:67:0;;11487:2:1;17560:67:0::1;::::0;::::1;11469:21:1::0;11526:2;11506:18;;;11499:30;-1:-1:-1;;;11545:18:1;;;11538:51;11606:18;;17560:67:0::1;11285:345:1::0;17560:67:0::1;17643:6;17638:226;17659:12;:19;17655:1;:23;17638:226;;;17705:7;:24;17713:12;17726:1;17713:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;17705:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;17705:24:0;;::::1;;17704:25;:71:::0;::::1;;;;5900:42;-1:-1:-1::0;;;;;17733:42:0::1;:12;17746:1;17733:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;17733:42:0::1;;;17704:71;17700:153;;;17830:7;17796:14;:31;17811:12;17824:1;17811:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;17796:31:0::1;-1:-1:-1::0;;;;;17796:31:0::1;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;17700:153;17680:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17638:226;;;;17465:406:::0;;:::o;11059:306::-;-1:-1:-1;;;;;11180:19:0;;11159:4;11180:19;;;:11;:19;;;;;;;;11200:10;11180:31;;;;;;;;-1:-1:-1;;11180:52:0;11176:126;;-1:-1:-1;;;;;11249:19:0;;;;;;:11;:19;;;;;;;;11269:10;11249:31;;;;;;;:41;;11284:6;;11249:19;:41;;11284:6;;11249:41;:::i;:::-;;;;-1:-1:-1;;11176:126:0;11321:36;11331:6;11339:9;11350:6;11321:9;:36::i;:::-;11314:43;11059:306;-1:-1:-1;;;;11059:306:0:o;16454:257::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;16538:13:::1;16576:7;16565;16555;;:17;;;;:::i;:::-;16554:29;;;;:::i;:::-;16538:45;;16622:3;16612:7;;:13;;;;:::i;:::-;16602:5;:24;;16594:74;;;;-1:-1:-1::0;;;16594:74:0::1;;;;;;;:::i;:::-;16679:14;:22:::0;-1:-1:-1;;16454:257:0:o;11373:215::-;314:10;11461:4;11510:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11510:34:0;;;;;;;;;;11461:4;;11478:80;;11501:7;;11510:47;;11547:10;;11510:47;:::i;:::-;11478:8;:80::i;16194:252::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;16277:13:::1;16315:7;16304;16294;;:17;;;;:::i;:::-;16293:29;;;;:::i;:::-;16277:45;;16361:3;16351:7;;:13;;;;:::i;:::-;16341:5;:24;;16333:74;;;;-1:-1:-1::0;;;16333:74:0::1;;;;;;;:::i;:::-;16418:12;:20:::0;-1:-1:-1;;16194:252:0:o;8137:749::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8218:22:0;::::1;8210:96;;;;-1:-1:-1::0;;;8210:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;8325:16:0;::::1;::::0;8317:90:::1;;;;-1:-1:-1::0;;;8317:90:0::1;;;;;;;:::i;:::-;8438:6;::::0;;8418:34:::1;::::0;-1:-1:-1;;;;;8438:6:0;;::::1;::::0;8418:19:::1;:34::i;:::-;8463:35;8483:8;8493:4;8463:19;:35::i;:::-;8545:6;::::0;8523:10:::1;::::0;-1:-1:-1;;;;;8545:6:0;;::::1;8523:10:::0;::::1;:29:::0;8519:78:::1;;8567:10;:30:::0;;-1:-1:-1;;;;;;8567:30:0::1;-1:-1:-1::0;;;;;8567:30:0;::::1;;::::0;;8519:78:::1;8660:6;::::0;8650:17:::1;::::0;-1:-1:-1;;;;;8660:6:0::1;8650:9;:17::i;:::-;8618:19;8630:6:::0;;-1:-1:-1;;;;;8630:6:0;;::::1;8618:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;8691:6;;8618:19;;8681:17:::1;::::0;8691:6:::1;8681:9;:17::i;:::-;:21;8678:99;;;8729:6;::::0;8719:46:::1;::::0;-1:-1:-1;;;;;8729:6:0::1;8737:8:::0;8747:17:::1;8729:6:::0;8747:9:::1;:17::i;:::-;8719:9;:46::i;:::-;;8678:99;8797:6;:17:::0;;-1:-1:-1;;;;;;8797:17:0::1;-1:-1:-1::0;;;;;8797:17:0;::::1;::::0;;::::1;::::0;;8830:38:::1;::::0;8797:17;;;;8830:38:::1;::::0;8797:6;8830:38:::1;8137:749:::0;:::o;10812:120::-;10865:4;10889:35;10897:7;-1:-1:-1;;10889:7:0;:35::i;14934:134::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15022:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15022:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14934:134::o;23303:616::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;23444:15:::1;:22;23426:7;:14;:40;23418:83;;;::::0;-1:-1:-1;;;23418:83:0;;13470:2:1;23418:83:0::1;::::0;::::1;13452:21:1::0;13509:2;13489:18;;;13482:30;13548:32;13528:18;;;13521:60;13598:18;;23418:83:0::1;13268:354:1::0;23418:83:0::1;23537:3;23520:7;:14;:20;23512:87;;;;-1:-1:-1::0;;;23512:87:0::1;;;;;;;:::i;:::-;23712:9;23708:204;23731:7;:14;23727:1;:18;23708:204;;;23766:14;23783:7;23791:1;23783:10;;;;;;;;:::i;:::-;;;;;;;23766:27;;23808:14;23825:15;23841:1;23825:18;;;;;;;;:::i;:::-;;;;;;;23844:4;23825:23;;;;:::i;:::-;23808:40;;23863:37;23873:10;23885:6;23893;23863:9;:37::i;:::-;;23751:161;;23747:3;;;;;:::i;:::-;;;;23708:204;;15420:232:::0;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;15514:21:::1;15525:10:::0;15514;:21:::1;:::i;:::-;15540:4;15513:31;15503:57;;;::::0;-1:-1:-1;;;15503:57:0;;14252:2:1;15503:57:0::1;::::0;::::1;14234:21:1::0;14291:2;14271:18;;;14264:30;-1:-1:-1;;;14310:18:1;;;14303:41;14361:18;;15503:57:0::1;14050:335:1::0;15503:57:0::1;15571:6;:29:::0;;;;15611:16;:29;15420:232::o;10026:117::-;-1:-1:-1;;;;;10119:16:0;10092:7;10119:16;;;:7;:16;;;;;;;10026:117::o;8894:195::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;8981:6:::1;::::0;;8961:34:::1;::::0;-1:-1:-1;;;;;8981:6:0;;::::1;::::0;8961:19:::1;:34::i;:::-;9023:1;9006:19:::0;;-1:-1:-1;;;;;;9006:19:0::1;::::0;;9041:40:::1;::::0;9023:1;;9041:40:::1;::::0;9023:1;;9041:40:::1;8894:195::o:0;16067:119::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;16136:7:::1;::::0;16121:12:::1;:22:::0;;;16154:14:::1;:24:::0;16067:119::o;9623:84::-;9673:13;9697:7;9690:14;;;;;:::i;11596:225::-;314:10;11689:4;11738:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11738:34:0;;;;;;;;;;11689:4;;11706:85;;11729:7;;11738:52;;11775:15;;11738:52;:::i;10151:167::-;10229:4;10246:42;314:10;10270:9;10281:6;10246:9;:42::i;:::-;-1:-1:-1;10306:4:0;;10151:167;-1:-1:-1;;;10151:167:0:o;17152:121::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;17231:9:::1;:34:::0;;-1:-1:-1;;;;;;17231:34:0::1;-1:-1:-1::0;;;;;17231:34:0;;;::::1;::::0;;;::::1;::::0;;17152:121::o;15242:166::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15340:52:0::1;15395:5;15340:52:::0;;;:35:::1;:52;::::0;;;;:60;;-1:-1:-1;;15340:60:0::1;::::0;;15242:166::o;17281:171::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;17358:21:::1;:32:::0;;-1:-1:-1;;;;17358:32:0::1;-1:-1:-1::0;;;17358:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;17406:38:::1;::::0;1654:41:1;;;17406:38:0::1;::::0;1627:18:1;17406:38:0::1;;;;;;;17281:171:::0;:::o;15076:158::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15167:52:0::1;;::::0;;;:35:::1;:52;::::0;;;;:59;;-1:-1:-1;;15167:59:0::1;15222:4;15167:59;::::0;;15076:158::o;15660:399::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;15775:7:::1;:14:::0;15764:25;::::1;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;15822:15:0;;15810:27;::::1;;15764:73;:129;;;;-1:-1:-1::0;15874:19:0;;15858:35;::::1;;15764:129;15756:182;;;::::0;-1:-1:-1;;;15756:182:0;;14592:2:1;15756:182:0::1;::::0;::::1;14574:21:1::0;14631:2;14611:18;;;14604:30;14670:25;14650:18;;;14643:53;14713:18;;15756:182:0::1;14390:347:1::0;15756:182:0::1;15950:4;:21:::0;;;;15983:12;:23;16018:16;:31;15660:399::o;17016:128::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;17099:10:::1;:37:::0;;-1:-1:-1;;;;;;17099:37:0::1;-1:-1:-1::0;;;;;17099:37:0;;;::::1;::::0;;;::::1;::::0;;17016:128::o;12052:2874::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;12242:13:::1;::::0;::::1;;12241:14;12233:56;;;::::0;-1:-1:-1;;;12233:56:0;;14944:2:1;12233:56:0::1;::::0;::::1;14926:21:1::0;14983:2;14963:18;;;14956:30;15022:31;15002:18;;;14995:59;15071:18;;12233:56:0::1;14742:353:1::0;12233:56:0::1;12327:11;:18;12308:8;:15;:37;12300:80;;;::::0;-1:-1:-1;;;12300:80:0;;13470:2:1;12300:80:0::1;::::0;::::1;13452:21:1::0;13509:2;13489:18;;;13482:30;13548:32;13528:18;;;13521:60;13598:18;;12300:80:0::1;13268:354:1::0;12300:80:0::1;12417:3;12399:8;:15;:21;12391:88;;;;-1:-1:-1::0;;;12391:88:0::1;;;;;;;:::i;:::-;12599:13;::::0;:18;12591:27:::1;;;::::0;::::1;;12639:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12666:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12699:14:0::1;:27:::0;;;12737:9:::1;:14:::0;;-1:-1:-1;;12737:14:0::1;12749:2;12737:14:::0;;::::1;::::0;;;12789:13:::1;::::0;:2:::1;:13;:::i;:::-;12772:14;;:30;;;;:::i;:::-;12762:7;:40:::0;12815:9:::1;:46:::0;;-1:-1:-1;;;;;;12815:46:0::1;5900:42;12815:46:::0;;::::1;::::0;;;12899:19:::1;::::0;;-1:-1:-1;;;12899:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;5900:42;12899:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12881:49:0::1;;12931:9;;;;;;;;;-1:-1:-1::0;;;;;12931:9:0::1;-1:-1:-1::0;;;;;12931:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12881:82;::::0;-1:-1:-1;;;;;;12881:82:0::1;::::0;;;;;;-1:-1:-1;;;;;16969:15:1;;;12881:82:0::1;::::0;::::1;16951:34:1::0;12957:4:0::1;17001:18:1::0;;;16994:43;16886:18;;12881:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12872:6;:91:::0;;-1:-1:-1;;;;;12872:91:0;;::::1;-1:-1:-1::0;;;;;;12872:91:0;;::::1;::::0;::::1;::::0;;;:6:::1;12974:15:::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;12974:22:0::1;12872:91:::0;12974:22:::1;::::0;;13027:4:::1;13007:26:::0;;:11:::1;:26:::0;;;;;13042:9:::1;::::0;;;::::1;13007:46:::0;;;;;;;;;-1:-1:-1;;13007:66:0;;13086:64;;::::1;13107:42;13086:64;::::0;;13178:2:::1;13163:12;:17:::0;;;13242:5:::1;13227:12;:20:::0;;;13274:7:::1;::::0;13242:5;;13274:22:::1;::::0;::::1;:::i;:::-;13273:39;;;;:::i;:::-;13258:12;:54:::0;13352:3:::1;13333:16;:22:::0;;;13406:5:::1;13387:16;:24:::0;;;13440:7:::1;::::0;13406:5;;13440:26:::1;::::0;::::1;:::i;:::-;13439:47;;;;:::i;:::-;13422:14;:64:::0;13524:7:::1;::::0;13539:6:::1;::::0;13524:11:::1;::::0;13534:1:::1;13524:11;:::i;:::-;13523:22;;;;:::i;:::-;13507:13;:38:::0;13570:7:::1;::::0;13585:5:::1;::::0;13570:11:::1;::::0;13580:1:::1;13570:11;:::i;:::-;13569:21;;;;:::i;:::-;13556:10;:34:::0;13634:4:::1;13603:19;:28;13623:7;8088::::0;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;13623:7:::1;-1:-1:-1::0;;;;;13603:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13603:28:0;;;:35;;;::::1;;-1:-1:-1::0;;13603:35:0;;::::1;;::::0;;13669:10;;;;::::1;13649:31:::0;;:19:::1;:31:::0;;;;;;:38;;;::::1;13603:35:::0;13649:38;;::::1;::::0;;;13726:4:::1;13698:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;5986:42:::1;13750:25:::0;;;:32;;;;::::1;::::0;::::1;::::0;;;13793:17:::1;::::0;13811:7:::1;8088::::0;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;13811:7:::1;-1:-1:-1::0;;;;;13793:26:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13793:26:0;;;:33;;;::::1;;-1:-1:-1::0;;13793:33:0;;::::1;;::::0;;;13855:9;;;;::::1;13837:28:::0;;:17:::1;:28:::0;;;;;:35;;;;::::1;;::::0;;13885:42:::1;5900;-1:-1:-1::0;;13885:7:0::1;:42::i;:::-;;13938:35;13946:7;8088::::0;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;13946:7:::1;-1:-1:-1::0;;13938:7:0::1;:35::i;:::-;-1:-1:-1::0;13986:13:0::1;:20:::0;;-1:-1:-1;;13986:20:0::1;14002:4;13986:20;::::0;;14036:7:::1;::::0;14017::::1;13986:13;14025:7;8088::::0;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;14025:7:::1;-1:-1:-1::0;;;;;14017:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14017:16:0;:26;14054:42:::1;14063:7;8088::::0;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;14063:7:::1;5900:42;14088:7;;14054:8;:42::i;:::-;8088:7:::0;8115:6;-1:-1:-1;;;;;8115:6:0;-1:-1:-1;;;;;14112:38:0::1;14129:1;-1:-1:-1::0;;;;;14112:38:0::1;;14142:7;;14112:38;;;;3780:25:1::0;;3768:2;3753:18;;3634:177;14112:38:0::1;;;;;;;;14173:6;::::0;14189:9:::1;::::0;14164:55:::1;::::0;-1:-1:-1;;;;;14173:6:0;;::::1;::::0;14189:9:::1;-1:-1:-1::0;;14164:8:0::1;:55::i;:::-;14262:9;::::0;14230:62:::1;::::0;14247:4:::1;::::0;-1:-1:-1;;;;;14262:9:0::1;-1:-1:-1::0;;14230:8:0::1;:62::i;:::-;14307:9;14303:200;14326:8;:15;14322:1;:19;14303:200;;;14362:15;14380:8;14389:1;14380:11;;;;;;;;:::i;:::-;;;;;;;14362:29;;14406:14;14423:11;14435:1;14423:14;;;;;;;;:::i;:::-;;;;;;;14438:4;14423:19;;;;:::i;:::-;14467:6;::::0;14406:36;;-1:-1:-1;14457:34:0::1;::::0;-1:-1:-1;;;;;14467:6:0::1;14475:7:::0;14406:36;14457:9:::1;:34::i;:::-;;14347:156;;14343:3;;;;;:::i;:::-;;;;14303:200;;;-1:-1:-1::0;14525:6:0::1;::::0;14515:51:::1;::::0;-1:-1:-1;;;;;14525:6:0::1;14541:4;14548:17;14525:6:::0;14548:9:::1;:17::i;14515:51::-;-1:-1:-1::0;14579:9:0::1;::::0;-1:-1:-1;;;;;14579:9:0::1;:25;14612:21;14657:4;14677:24;14657:4:::0;14677:9:::1;:24::i;:::-;14716:1;14759::::0;14802:7:::1;8088::::0;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;14802:7:::1;14824:15;14579:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14877:1:0::1;14861:13;:17:::0;-1:-1:-1;;14906:12:0::1;14889:14;:29:::0;-1:-1:-1;;;;12052:2874:0:o;11962:76::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;12029:1:::1;12013:13;:17:::0;11962:76::o;16719:289::-;7303:6;;-1:-1:-1;;;;;7303:6:0;314:10;7303:22;;:51;;-1:-1:-1;7329:9:0;;-1:-1:-1;;;;;7329:9:0;314:10;7329:25;7303:51;7295:80;;;;-1:-1:-1;;;7295:80:0;;;;;;;:::i;:::-;16919:16:::1;16899;16889:7;;:26;;;;:::i;:::-;16888:47;;;;:::i;:::-;16872:13;:63:::0;16960:7:::1;::::0;16987:13;;16960:23:::1;::::0;16970:13;;16960:23:::1;:::i;:::-;16959:41;;;;:::i;:::-;16946:10;:54:::0;-1:-1:-1;;;;16719:289:0:o;10495:309::-;-1:-1:-1;;;;;10589:20:0;;10581:52;;;;-1:-1:-1;;;10581:52:0;;18173:2:1;10581:52:0;;;18155:21:1;18212:2;18192:18;;;18185:30;-1:-1:-1;;;18231:18:1;;;18224:49;18290:18;;10581:52:0;17971:343:1;10581:52:0;-1:-1:-1;;;;;10652:21:0;;10644:53;;;;-1:-1:-1;;;10644:53:0;;18173:2:1;10644:53:0;;;18155:21:1;18212:2;18192:18;;;18185:30;-1:-1:-1;;;18231:18:1;;;18224:49;18290:18;;10644:53:0;17971:343:1;10644:53:0;-1:-1:-1;;;;;10710:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;10763:33;;3780:25:1;;;10763:33:0;;3753:18:1;10763:33:0;;;;;;;10495:309;;;:::o;18869:2243::-;18948:4;-1:-1:-1;;;;;18973:18:0;;18965:51;;;;-1:-1:-1;;;18965:51:0;;18521:2:1;18965:51:0;;;18503:21:1;18560:2;18540:18;;;18533:30;-1:-1:-1;;;18579:18:1;;;18572:50;18639:18;;18965:51:0;18319:344:1;18965:51:0;-1:-1:-1;;;;;19035:16:0;;19027:49;;;;-1:-1:-1;;;19027:49:0;;18521:2:1;19027:49:0;;;18503:21:1;18560:2;18540:18;;;18533:30;-1:-1:-1;;;18579:18:1;;;18572:50;18639:18;;19027:49:0;18319:344:1;19027:49:0;19104:1;19095:6;:10;19087:31;;;;-1:-1:-1;;;19087:31:0;;18870:2:1;19087:31:0;;;18852:21:1;18909:1;18889:18;;;18882:29;-1:-1:-1;;;18927:18:1;;;18920:38;18975:18;;19087:31:0;18668:331:1;19087:31:0;-1:-1:-1;;;;;19138:18:0;;;;;;:14;:18;;;;;;;;19137:19;:44;;;;-1:-1:-1;;;;;;19161:20:0;;;;;;:14;:20;;;;;;;;19160:21;19137:44;19129:71;;;;-1:-1:-1;;;19129:71:0;;19206:2:1;19129:71:0;;;19188:21:1;19245:2;19225:18;;;19218:30;-1:-1:-1;;;19264:18:1;;;19257:45;19319:18;;19129:71:0;19004:339:1;19129:71:0;19232:17;19247:2;19232:12;:17;:::i;:::-;19215:14;;:34;19211:230;;;19266:13;19309:9;19344:27;19358:4;19363:2;19309:9;19344:13;:27::i;:::-;19333:38;;19394:8;19386:43;;;;-1:-1:-1;;;19386:43:0;;19550:2:1;19386:43:0;;;19532:21:1;19589:2;19569:18;;;19562:30;-1:-1:-1;;;19608:18:1;;;19601:52;19670:18;;19386:43:0;19348:346:1;19386:43:0;19251:190;;19211:230;19454:20;19465:4;19471:2;19454:10;:20::i;:::-;19451:891;;;19495:15;;;;19491:373;;;-1:-1:-1;;;;;19535:13:0;;;;;;:7;:13;;;;;;;;19531:318;;;-1:-1:-1;;;;;19580:13:0;;;;;;:9;:13;;;;;;19597:12;19580:29;;19572:38;;;;;;-1:-1:-1;;;;;19633:13:0;;;;;;:9;:13;;;;;19649:12;19633:28;;19531:318;;;-1:-1:-1;;;;;19740:15:0;;;;;;:9;:15;;;;;;19759:12;19740:31;;19732:40;;;;;;-1:-1:-1;;;;;19795:15:0;;;;;;:9;:15;;;;;19813:12;19795:30;;19531:318;-1:-1:-1;;;;;19883:41:0;;;;;;:35;:41;;;;;;;;;:84;;-1:-1:-1;;;;;;19928:39:0;;;;;;:35;:39;;;;;;;;19883:84;19878:439;;-1:-1:-1;;;;;19992:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;20009:11:0;;;;;;:7;:11;;;;;;;;19992:28;19989:130;;;20058:12;;20048:6;:22;;20040:59;;;;-1:-1:-1;;;20040:59:0;;19901:2:1;20040:59:0;;;19883:21:1;19940:2;19920:18;;;19913:30;19979:26;19959:18;;;19952:54;20023:18;;20040:59:0;19699:348:1;20040:59:0;-1:-1:-1;;;;;20140:20:0;;5900:42;20140:20;;;;:36;;-1:-1:-1;;;;;;20165:11:0;;;;;;:7;:11;;;;;;;;20164:12;20140:36;20137:163;;;20235:14;;20225:6;20209:13;20219:2;20209:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20201:79;;;;-1:-1:-1;;;20201:79:0;;20254:2:1;20201:79:0;;;20236:21:1;20293:2;20273:18;;;20266:30;20332:28;20312:18;;;20305:56;20378:18;;20201:79:0;20052:350:1;20201:79:0;-1:-1:-1;;;;;20358:11:0;;;;;;:7;:11;;;;;;:16;;20354:79;;-1:-1:-1;;;;;20391:12:0;;;;;;:8;:12;;;;;20406:15;20391:30;;20354:79;-1:-1:-1;;;;;20478:25:0;;20445:12;20478:25;;;:19;:25;;;;;;20460:4;;20478:25;;;:52;;-1:-1:-1;;;;;;20507:23:0;;;;;;:19;:23;;;;;;;;20478:52;20475:98;;;-1:-1:-1;20556:5:0;20475:98;-1:-1:-1;;;;;20589:11:0;;;;;;:7;:11;;;;;;;;20585:457;;;20622:16;;-1:-1:-1;;;20622:16:0;;;;20621:17;:59;;;;-1:-1:-1;20659:21:0;;-1:-1:-1;;;20659:21:0;;;;20621:59;20617:408;;;20715:28;20746:24;20764:4;20746:9;:24::i;:::-;20715:55;;20817:13;;20793:20;:37;20789:221;;20882:10;;20858:20;:34;20855:77;;-1:-1:-1;20919:10:0;;20855:77;20954:36;20969:20;20954:14;:36::i;:::-;20696:329;20617:408;21060:44;21078:4;21084:2;21088:6;21096:7;21060:17;:44::i;:::-;21053:51;18869:2243;-1:-1:-1;;;;;18869:2243:0:o;18210:645::-;18340:6;;18291:4;;18323;;-1:-1:-1;;;;;18340:14:0;;;:6;;:14;18336:481;;-1:-1:-1;;;;;18359:18:0;;;;;;;:14;:18;;;;;;18380:12;18359:33;;;;18395:20;;;;;;;:35;18336:481;;;18449:6;;-1:-1:-1;;;;;18449:12:0;;;:6;;:12;18445:372;;-1:-1:-1;;;;;18483:20:0;;;;;;:14;:20;;;;;;18507:12;-1:-1:-1;18479:89:0;;-1:-1:-1;;;;;;18523:18:0;;;;;;:12;:18;;;;;:25;;-1:-1:-1;;18523:25:0;18544:4;18523:25;;;18479:89;-1:-1:-1;;;;;18591:18:0;;;;;;:12;:18;;;;;;;;18587:215;;;-1:-1:-1;18624:5:0;18587:215;;;18659:6;;-1:-1:-1;;;;;18659:12:0;;;:6;;:12;;;;:30;;-1:-1:-1;18675:6:0;;-1:-1:-1;;;;;18675:14:0;;;:6;;:14;;18659:30;18655:147;;;-1:-1:-1;;;;;18693:20:0;;;;;;;:14;:20;;;;;;18716:12;18693:35;;;;18730:18;;;;;;;;:33;;;18765:20;;;;;;;:35;18838:8;18210:645;-1:-1:-1;;;;18210:645:0:o;17879:323::-;17947:4;8115:6;;-1:-1:-1;;;;;17971:15:0;;;8115:6;;17971:15;;;;:45;;-1:-1:-1;8088:7:0;8115:6;-1:-1:-1;;;;;18003:13:0;;;8115:6;;18003:13;;17971:45;:84;;;;-1:-1:-1;;;;;;18034:21:0;;;;;;:17;:21;;;;;;;;18033:22;17971:84;:125;;;;-1:-1:-1;;;;;;18073:23:0;;;;;;:17;:23;;;;;;;;18072:24;17971:125;:152;;;;-1:-1:-1;;;;;;18113:10:0;;5986:42;18113:10;;17971:152;:185;;;;-1:-1:-1;;;;;;18140:16:0;;;;17971:185;:223;;;;-1:-1:-1;;;;;;18173:21:0;;18189:4;18173:21;;17971:223;17964:230;17879:323;-1:-1:-1;;;17879:323:0:o;21120:913::-;7177:16;:23;;-1:-1:-1;;;;7177:23:0;-1:-1:-1;;;7177:23:0;;;21228:16;;:6:::1;21209:16:::0;:35:::1;::::0;21228:16;21209:35:::1;:::i;:::-;21205:66:::0;21264:7:::1;21205:66;21366:16:::0;;:6:::1;21347:16:::0;21281:17:::1;::::0;21388:1:::1;::::0;21347:35:::1;::::0;21366:16;21347:35:::1;:::i;:::-;21326:6;:16:::0;21303:39:::1;::::0;:20;:39:::1;:::i;:::-;21302:81;;;;:::i;:::-;21301:88;;;;:::i;:::-;21281:108:::0;-1:-1:-1;21402:20:0::1;21425:32;21281:108:::0;21425:20;:32:::1;:::i;:::-;21402:55;;21468:30;21485:12;21468:16;:30::i;:::-;21654:16:::0;;:6:::1;21635:16:::0;21536:21:::1;::::0;21511:22:::1;::::0;21676:1:::1;::::0;21635:35:::1;::::0;::::1;:::i;:::-;21614:6;:16:::0;21597:33:::1;::::0;:14;:33:::1;:::i;:::-;21596:75;;;;:::i;:::-;21595:82;;;;:::i;:::-;21568:109:::0;-1:-1:-1;21696:13:0;;21692:161:::1;;21726:41;21739:9;21750:16;21726:12;:41::i;:::-;21787:54;::::0;;4921:25:1;;;4977:2;4962:18;;4955:34;;;5005:18;;;4998:34;;;21787:54:0::1;::::0;4909:2:1;4894:18;21787:54:0::1;;;;;;;21692:161;21867:21;:25:::0;21863:163:::1;;21964:10;::::0;21956:58:::1;::::0;21924:4:::1;::::0;-1:-1:-1;;;;;21964:10:0::1;::::0;21988:21:::1;::::0;21956:58:::1;::::0;;;21988:21;21964:10;21956:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;21863:163:0::1;21194:839;;;;7211:1;-1:-1:-1::0;7223:16:0;:24;;-1:-1:-1;;;;7223:24:0;;;21120:913::o;23927:582::-;24049:16;;24027:4;;24049:16;;24044:221;;24082:28;24101:4;24107:2;24082:18;:28::i;:::-;24130:16;;;;24129:17;:41;;;;;24150:20;24161:4;24167:2;24150:10;:20::i;:::-;24125:129;;;24191:47;;-1:-1:-1;;;24191:47:0;;20819:2:1;24191:47:0;;;20801:21:1;20858:2;20838:18;;;20831:30;20897:34;20877:18;;;20870:62;-1:-1:-1;;;20948:18:1;;;20941:35;20993:19;;24191:47:0;20617:401:1;24125:129:0;-1:-1:-1;;;;;24276:13:0;;;;;;:7;:13;;;;;:23;;24293:6;;24276:13;:23;;24293:6;;24276:23;:::i;:::-;;;;-1:-1:-1;24310:22:0;;-1:-1:-1;24336:7:0;24335:48;;24377:6;24335:48;;;24347:27;24357:4;24363:2;24367:6;24347:9;:27::i;:::-;-1:-1:-1;;;;;24398:11:0;;;;;;:7;:11;;;;;:29;;24310:73;;-1:-1:-1;24310:73:0;;24398:11;;;:29;;24310:73;;24398:29;:::i;:::-;;;;;;;;24460:2;-1:-1:-1;;;;;24445:34:0;24454:4;-1:-1:-1;;;;;24445:34:0;;24464:14;24445:34;;;;3780:25:1;;3768:2;3753:18;;3634:177;24445:34:0;;;;;;;;-1:-1:-1;24497:4:0;;23927:582;-1:-1:-1;;;;;23927:582:0:o;22041:417::-;22132:16;;;22146:1;22132:16;;;;;;;;22108:21;;22132:16;;;;;;;;;;-1:-1:-1;22132:16:0;22108:40;;22177:4;22159;22164:1;22159:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22159:23:0;;;:7;;;;;;;;;;:23;;;;22203:9;;:16;;;-1:-1:-1;;;22203:16:0;;;;:9;;;;;:14;;:16;;;;;22159:7;;22203:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22193:4;22198:1;22193:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22193:26:0;;;:7;;;;;;;;;:26;22232:9;;:218;;-1:-1:-1;;;22232:218:0;;:9;;;:60;;:218;;22307:11;;22232:9;;22377:4;;22404;;22424:15;;22232:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22097:361;22041:417;:::o;22466:335::-;22547:9;;-1:-1:-1;;;;;22547:9:0;:25;22580:9;22613:4;22633:11;22547:9;;22745:7;8088;8115:6;-1:-1:-1;;;;;8115:6:0;;8050:79;22745:7;22767:15;22547:246;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22466:335;;:::o;22809:486::-;22891:16;;;;22890:17;22882:65;;;;-1:-1:-1;;;22882:65:0;;22210:2:1;22882:65:0;;;22192:21:1;22249:2;22229:18;;;22222:30;22288:34;22268:18;;;22261:62;-1:-1:-1;;;22339:18:1;;;22332:33;22382:19;;22882:65:0;22008:399:1;22882:65:0;22963:20;22974:4;22980:2;22963:10;:20::i;:::-;22962:21;:37;;;;-1:-1:-1;22993:6:0;;-1:-1:-1;;;;;22987:12:0;;;22993:6;;22987:12;22962:37;22958:330;;;23035:12;23020;:27;-1:-1:-1;;;;;23064:23:0;;;;;;:17;:23;;;;;;;;;:30;;-1:-1:-1;;23064:30:0;;;23090:4;23064:30;;;;;;23109:16;:23;;;;;;;;;23162:15;23147:12;:30;23194:28;;-1:-1:-1;;;;23194:28:0;-1:-1:-1;;;23194:28:0;;;23242:34;;1654:41:1;;;23242:34:0;;1627:18:1;23242:34:0;;;;;;;22958:330;22809:486;;:::o;24517:689::-;24657:6;;24596:7;;;;-1:-1:-1;;;;;24657:6:0;;;24651:12;;;;24647:187;;-1:-1:-1;24691:12:0;;24647:187;;;24749:6;;-1:-1:-1;;;;;24749:6:0;;;24741:14;;;;24737:97;;-1:-1:-1;24771:4:0;:11;24737:97;;;-1:-1:-1;24816:16:0;;24737:97;24850:20;24861:4;24867:2;24850:10;:20::i;:::-;24846:142;;;24890:13;;:18;;:42;;;24912:13;;24930:1;24912:20;;24890:42;24886:91;;;24953:8;;;24886:91;24998:17;5592:5;25019:19;25028:10;25019:6;:19;:::i;:::-;:38;;;;:::i;:::-;25085:4;25069:22;;;;:7;:22;;;;;:37;;24998:60;;-1:-1:-1;24998:60:0;;25069:22;;;:37;;24998:60;;25069:37;:::i;:::-;;;;-1:-1:-1;;25122:40:0;;3780:25:1;;;25145:4:0;;-1:-1:-1;;;;;25122:40:0;;;;;3768:2:1;3753:18;25122:40:0;;;;;;;25180:18;25189:9;25180:6;:18;:::i;:::-;25173:25;24517:689;-1:-1:-1;;;;;;24517:689:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1058:131;:::o;1194:315::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1706:127::-;1767:10;1762:3;1758:20;1755:1;1748:31;1798:4;1795:1;1788:15;1822:4;1819:1;1812:15;1838:275;1909:2;1903:9;1974:2;1955:13;;-1:-1:-1;;1951:27:1;1939:40;;2009:18;1994:34;;2030:22;;;1991:62;1988:88;;;2056:18;;:::i;:::-;2092:2;2085:22;1838:275;;-1:-1:-1;1838:275:1:o;2118:183::-;2178:4;2211:18;2203:6;2200:30;2197:56;;;2233:18;;:::i;:::-;-1:-1:-1;2278:1:1;2274:14;2290:4;2270:25;;2118:183::o;2306:737::-;2360:5;2413:3;2406:4;2398:6;2394:17;2390:27;2380:55;;2431:1;2428;2421:12;2380:55;2467:6;2454:20;2493:4;2517:60;2533:43;2573:2;2533:43;:::i;:::-;2517:60;:::i;:::-;2611:15;;;2697:1;2693:10;;;;2681:23;;2677:32;;;2642:12;;;;2721:15;;;2718:35;;;2749:1;2746;2739:12;2718:35;2785:2;2777:6;2773:15;2797:217;2813:6;2808:3;2805:15;2797:217;;;2893:3;2880:17;2910:31;2935:5;2910:31;:::i;:::-;2954:18;;2992:12;;;;2830;;2797:217;;;-1:-1:-1;3032:5:1;2306:737;-1:-1:-1;;;;;;2306:737:1:o;3048:160::-;3113:20;;3169:13;;3162:21;3152:32;;3142:60;;3198:1;3195;3188:12;3142:60;3048:160;;;:::o;3213:416::-;3303:6;3311;3364:2;3352:9;3343:7;3339:23;3335:32;3332:52;;;3380:1;3377;3370:12;3332:52;3420:9;3407:23;3453:18;3445:6;3442:30;3439:50;;;3485:1;3482;3475:12;3439:50;3508:61;3561:7;3552:6;3541:9;3537:22;3508:61;:::i;:::-;3498:71;;;3588:35;3619:2;3608:9;3604:18;3588:35;:::i;:::-;3578:45;;3213:416;;;;;:::o;3816:456::-;3893:6;3901;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4017:9;4004:23;4036:31;4061:5;4036:31;:::i;:::-;4086:5;-1:-1:-1;4143:2:1;4128:18;;4115:32;4156:33;4115:32;4156:33;:::i;:::-;3816:456;;4208:7;;-1:-1:-1;;;4262:2:1;4247:18;;;;4234:32;;3816:456::o;4277:248::-;4345:6;4353;4406:2;4394:9;4385:7;4381:23;4377:32;4374:52;;;4422:1;4419;4412:12;4374:52;-1:-1:-1;;4445:23:1;;;4515:2;4500:18;;;4487:32;;-1:-1:-1;4277:248:1:o;5043:247::-;5102:6;5155:2;5143:9;5134:7;5130:23;5126:32;5123:52;;;5171:1;5168;5161:12;5123:52;5210:9;5197:23;5229:31;5254:5;5229:31;:::i;5295:315::-;5360:6;5368;5421:2;5409:9;5400:7;5396:23;5392:32;5389:52;;;5437:1;5434;5427:12;5389:52;5476:9;5463:23;5495:31;5520:5;5495:31;:::i;:::-;5545:5;-1:-1:-1;5569:35:1;5600:2;5585:18;;5569:35;:::i;5615:662::-;5669:5;5722:3;5715:4;5707:6;5703:17;5699:27;5689:55;;5740:1;5737;5730:12;5689:55;5776:6;5763:20;5802:4;5826:60;5842:43;5882:2;5842:43;:::i;5826:60::-;5920:15;;;6006:1;6002:10;;;;5990:23;;5986:32;;;5951:12;;;;6030:15;;;6027:35;;;6058:1;6055;6048:12;6027:35;6094:2;6086:6;6082:15;6106:142;6122:6;6117:3;6114:15;6106:142;;;6188:17;;6176:30;;6226:12;;;;6139;;6106:142;;6282:595;6400:6;6408;6461:2;6449:9;6440:7;6436:23;6432:32;6429:52;;;6477:1;6474;6467:12;6429:52;6517:9;6504:23;6546:18;6587:2;6579:6;6576:14;6573:34;;;6603:1;6600;6593:12;6573:34;6626:61;6679:7;6670:6;6659:9;6655:22;6626:61;:::i;:::-;6616:71;;6740:2;6729:9;6725:18;6712:32;6696:48;;6769:2;6759:8;6756:16;6753:36;;;6785:1;6782;6775:12;6753:36;;6808:63;6863:7;6852:8;6841:9;6837:24;6808:63;:::i;:::-;6798:73;;;6282:595;;;;;:::o;7135:180::-;7191:6;7244:2;7232:9;7223:7;7219:23;7215:32;7212:52;;;7260:1;7257;7250:12;7212:52;7283:26;7299:9;7283:26;:::i;7320:388::-;7388:6;7396;7449:2;7437:9;7428:7;7424:23;7420:32;7417:52;;;7465:1;7462;7455:12;7417:52;7504:9;7491:23;7523:31;7548:5;7523:31;:::i;:::-;7573:5;-1:-1:-1;7630:2:1;7615:18;;7602:32;7643:33;7602:32;7643:33;:::i;:::-;7695:7;7685:17;;;7320:388;;;;;:::o;7713:316::-;7790:6;7798;7806;7859:2;7847:9;7838:7;7834:23;7830:32;7827:52;;;7875:1;7872;7865:12;7827:52;-1:-1:-1;;7898:23:1;;;7968:2;7953:18;;7940:32;;-1:-1:-1;8019:2:1;8004:18;;;7991:32;;7713:316;-1:-1:-1;7713:316:1:o;8294:531::-;8337:5;8390:3;8383:4;8375:6;8371:17;8367:27;8357:55;;8408:1;8405;8398:12;8357:55;8444:6;8431:20;8470:18;8466:2;8463:26;8460:52;;;8492:18;;:::i;:::-;8536:55;8579:2;8560:13;;-1:-1:-1;;8556:27:1;8585:4;8552:38;8536:55;:::i;:::-;8616:2;8607:7;8600:19;8662:3;8655:4;8650:2;8642:6;8638:15;8634:26;8631:35;8628:55;;;8679:1;8676;8669:12;8628:55;8744:2;8737:4;8729:6;8725:17;8718:4;8709:7;8705:18;8692:55;8792:1;8767:16;;;8785:4;8763:27;8756:38;;;;8771:7;8294:531;-1:-1:-1;;;8294:531:1:o;8830:1065::-;8995:6;9003;9011;9019;9027;9080:3;9068:9;9059:7;9055:23;9051:33;9048:53;;;9097:1;9094;9087:12;9048:53;9137:9;9124:23;9166:18;9207:2;9199:6;9196:14;9193:34;;;9223:1;9220;9213:12;9193:34;9246:50;9288:7;9279:6;9268:9;9264:22;9246:50;:::i;:::-;9236:60;;9349:2;9338:9;9334:18;9321:32;9305:48;;9378:2;9368:8;9365:16;9362:36;;;9394:1;9391;9384:12;9362:36;9417:52;9461:7;9450:8;9439:9;9435:24;9417:52;:::i;:::-;9407:62;;9516:2;9505:9;9501:18;9488:32;9478:42;;9573:2;9562:9;9558:18;9545:32;9529:48;;9602:2;9592:8;9589:16;9586:36;;;9618:1;9615;9608:12;9586:36;9641:63;9696:7;9685:8;9674:9;9670:24;9641:63;:::i;:::-;9631:73;;9757:3;9746:9;9742:19;9729:33;9713:49;;9787:2;9777:8;9774:16;9771:36;;;9803:1;9800;9793:12;9771:36;;9826:63;9881:7;9870:8;9859:9;9855:24;9826:63;:::i;:::-;9816:73;;;8830:1065;;;;;;;;:::o;9900:385::-;9986:6;9994;10002;10010;10063:3;10051:9;10042:7;10038:23;10034:33;10031:53;;;10080:1;10077;10070:12;10031:53;-1:-1:-1;;10103:23:1;;;10173:2;10158:18;;10145:32;;-1:-1:-1;10224:2:1;10209:18;;10196:32;;10275:2;10260:18;10247:32;;-1:-1:-1;9900:385:1;-1:-1:-1;9900:385:1:o;10290:380::-;10369:1;10365:12;;;;10412;;;10433:61;;10487:4;10479:6;10475:17;10465:27;;10433:61;10540:2;10532:6;10529:14;10509:18;10506:38;10503:161;;10586:10;10581:3;10577:20;10574:1;10567:31;10621:4;10618:1;10611:15;10649:4;10646:1;10639:15;10503:161;;10290:380;;;:::o;10675:340::-;10877:2;10859:21;;;10916:2;10896:18;;;10889:30;-1:-1:-1;;;10950:2:1;10935:18;;10928:46;11006:2;10991:18;;10675:340::o;11020:127::-;11081:10;11076:3;11072:20;11069:1;11062:31;11112:4;11109:1;11102:15;11136:4;11133:1;11126:15;11152:128;11192:3;11223:1;11219:6;11216:1;11213:13;11210:39;;;11229:18;;:::i;:::-;-1:-1:-1;11265:9:1;;11152:128::o;11635:127::-;11696:10;11691:3;11687:20;11684:1;11677:31;11727:4;11724:1;11717:15;11751:4;11748:1;11741:15;11767:135;11806:3;11827:17;;;11824:43;;11847:18;;:::i;:::-;-1:-1:-1;11894:1:1;11883:13;;11767:135::o;11907:125::-;11947:4;11975:1;11972;11969:8;11966:34;;;11980:18;;:::i;:::-;-1:-1:-1;12017:9:1;;11907:125::o;12037:168::-;12077:7;12143:1;12139;12135:6;12131:14;12128:1;12125:21;12120:1;12113:9;12106:17;12102:45;12099:71;;;12150:18;;:::i;:::-;-1:-1:-1;12190:9:1;;12037:168::o;12210:217::-;12250:1;12276;12266:132;;12320:10;12315:3;12311:20;12308:1;12301:31;12355:4;12352:1;12345:15;12383:4;12380:1;12373:15;12266:132;-1:-1:-1;12412:9:1;;12210:217::o;12432:401::-;12634:2;12616:21;;;12673:2;12653:18;;;12646:30;12712:34;12707:2;12692:18;;12685:62;-1:-1:-1;;;12778:2:1;12763:18;;12756:35;12823:3;12808:19;;12432:401::o;12838:425::-;13040:2;13022:21;;;13079:2;13059:18;;;13052:30;13118:34;13113:2;13098:18;;13091:62;13189:31;13184:2;13169:18;;13162:59;13253:3;13238:19;;12838:425::o;13627:418::-;13829:2;13811:21;;;13868:2;13848:18;;;13841:30;13907:34;13902:2;13887:18;;13880:62;-1:-1:-1;;;13973:2:1;13958:18;;13951:52;14035:3;14020:19;;13627:418::o;15100:422::-;15189:1;15232:5;15189:1;15246:270;15267:7;15257:8;15254:21;15246:270;;;15326:4;15322:1;15318:6;15314:17;15308:4;15305:27;15302:53;;;15335:18;;:::i;:::-;15385:7;15375:8;15371:22;15368:55;;;15405:16;;;;15368:55;15484:22;;;;15444:15;;;;15246:270;;;15250:3;15100:422;;;;;:::o;15527:806::-;15576:5;15606:8;15596:80;;-1:-1:-1;15647:1:1;15661:5;;15596:80;15695:4;15685:76;;-1:-1:-1;15732:1:1;15746:5;;15685:76;15777:4;15795:1;15790:59;;;;15863:1;15858:130;;;;15770:218;;15790:59;15820:1;15811:10;;15834:5;;;15858:130;15895:3;15885:8;15882:17;15879:43;;;15902:18;;:::i;:::-;-1:-1:-1;;15958:1:1;15944:16;;15973:5;;15770:218;;16072:2;16062:8;16059:16;16053:3;16047:4;16044:13;16040:36;16034:2;16024:8;16021:16;16016:2;16010:4;16007:12;16003:35;16000:77;15997:159;;;-1:-1:-1;16109:19:1;;;16141:5;;15997:159;16188:34;16213:8;16207:4;16188:34;:::i;:::-;16258:6;16254:1;16250:6;16246:19;16237:7;16234:32;16231:58;;;16269:18;;:::i;:::-;16307:20;;15527:806;-1:-1:-1;;;15527:806:1:o;16338:140::-;16396:5;16425:47;16466:4;16456:8;16452:19;16446:4;16425:47;:::i;16483:251::-;16553:6;16606:2;16594:9;16585:7;16581:23;16577:32;16574:52;;;16622:1;16619;16612:12;16574:52;16654:9;16648:16;16673:31;16698:5;16673:31;:::i;17048:607::-;-1:-1:-1;;;;;17407:15:1;;;17389:34;;17454:2;17439:18;;17432:34;;;;17497:2;17482:18;;17475:34;;;;17540:2;17525:18;;17518:34;;;;17589:15;;;17583:3;17568:19;;17561:44;17369:3;17621:19;;17614:35;;;;17338:3;17323:19;;17048:607::o;17660:306::-;17748:6;17756;17764;17817:2;17805:9;17796:7;17792:23;17788:32;17785:52;;;17833:1;17830;17823:12;17785:52;17862:9;17856:16;17846:26;;17912:2;17901:9;17897:18;17891:25;17881:35;;17956:2;17945:9;17941:18;17935:25;17925:35;;17660:306;;;;;:::o;21023:980::-;21285:4;21333:3;21322:9;21318:19;21364:6;21353:9;21346:25;21390:2;21428:6;21423:2;21412:9;21408:18;21401:34;21471:3;21466:2;21455:9;21451:18;21444:31;21495:6;21530;21524:13;21561:6;21553;21546:22;21599:3;21588:9;21584:19;21577:26;;21638:2;21630:6;21626:15;21612:29;;21659:1;21669:195;21683:6;21680:1;21677:13;21669:195;;;21748:13;;-1:-1:-1;;;;;21744:39:1;21732:52;;21839:15;;;;21804:12;;;;21780:1;21698:9;21669:195;;;-1:-1:-1;;;;;;;21920:32:1;;;;21915:2;21900:18;;21893:60;-1:-1:-1;;;21984:3:1;21969:19;21962:35;21881:3;21023:980;-1:-1:-1;;;21023:980:1:o

Swarm Source

ipfs://78c31ebbebc6a58372447990d731d30a39e8558bcaa750c6614569b54a1f6bbb

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.