ETH Price: $3,680.22 (+1.69%)

Token

ERC-20: Caishen (Caish)
 

Overview

Max Total Supply

6,666 Caish

Holders

246

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4.265665779384437409 Caish

Value
$0.00
0x00632ed1f3cd7edb766aeda9c18879b4046b33ce
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
caishenf

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
       
https://t.me/CaishenTokenERC

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

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

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool); 
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

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

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

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "BEP20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {

    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);

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

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

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

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

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

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin,
                                uint256 amountETHMin, address to, uint256 deadline) 
                                external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

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

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

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

contract caishenf is BEP20, Ownable { //
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public USD = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //
    bool public tradingEnabled = false;

    //uint256 internal sellAmount = 0;
    //uint256 internal buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; //
    address payable public devWallet; //

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isBot;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 50 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 0; // DEFAULT COOLDOWN TIMER

    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event blackList(address);
    event unblackList(address);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SendDividends(uint256 opAmount, bool success);
    event transferUSD(uint256 amountUSD);

    constructor() BEP20("Caishen", "Caish") { // 
        marketingWallet = payable(0x60fd5A50733fee4D30A2833b0f34f32967232cBF); // 
        devWallet = payable(0x60fd5A50733fee4D30A2833b0f34f32967232cBF); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; /// 

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 4;
        sellMarketingFees = 4;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDevFee = 0;
        sellDevFee = 0;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), USD);

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (6_666) * (10**18); // 
        _mint(owner(), totalSupply); // 
        maxWallet = _totalSupply / 50; // 2%
        swapTokensAtAmount = _totalSupply / 1000; // 1%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function addBot(address account) public onlyOwner {
        _isBot[account] = true;
        emit blackList(account);
    }

    function removeBot(address account) public onlyOwner {
        _isBot[account] = false;
        emit unblackList(account);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }
    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB/ETH FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function SendUSD() external onlyOwner {
        uint256 amountUSD = IBEP20(USD).balanceOf(address(this));
        IBEP20(USD).approve(address(this), amountUSD.mul(10));
        IBEP20(USD).transferFrom(address(this),msg.sender,amountUSD);
        emit transferUSD(amountUSD);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyDevFee);

        // ABSOLUTE TAX LIMITS GO HERE
        require(totalSellFees <= 99 && totalBuyFees <= 99, "%");

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, buyDevFee);
    }

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

    function isBot(address account) public view returns (bool) {
        return _isBot[account];
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");
        require(!_isBot[from] && !_isBot[to]);

        uint256 marketingFees;
        uint256 burnFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 2,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                uint256 tokensFromFees=contractTokenBalance;
                uint256 totalMarketingFees = sellMarketingFees+buyMarketingFees;
                uint256 totalDevFees = sellDevFee + buyDevFee;
                uint256 totalFee = totalMarketingFees+totalDevFees;
                uint256 partMarketing = (totalMarketingFees*100).div(totalFee); //*100 because uint256
                uint256 partDev = (totalDevFees*100).div(totalFee); //*100 because uint256

                uint256 marketingPayout = (tokensFromFees * partMarketing).div(100);
                uint256 devPayout = (tokensFromFees * partDev).div(100);

                if (marketingPayout > 0) {
                    swapTokensForUSD(marketingPayout, marketingWallet);
                }
                
                if (devPayout > 0) {
                    swapTokensForUSD(devPayout, devWallet);

                }
             
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);

            amount = amount.sub(fees + burntokens);

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }
           
        }
        super._transfer(from, to, amount); 
    }


    function swapTokensForUSD(uint256 tokenAmount, address destAddr) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USD;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForTokens(
            tokenAmount,
            0, // accept any amount of USD
            path,
            destAddr,
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        payWallets(tokens);
    }

    // in this function, the contract sells his tokens and send USD to marketing and dev wallets
    function payWallets(uint256 tokensFromFees) private {

        uint256 totalMarketingFees = sellMarketingFees+buyMarketingFees;
        uint256 totalDevFees = sellDevFee + buyDevFee;
        uint256 totalFees = totalMarketingFees+totalDevFees;
        uint256 partMarketing = (totalMarketingFees*100).div(totalFees); //*100 because uint256
        uint256 partDev = (totalDevFees*100).div(totalFees); //*100 because uint256

        uint256 marketingPayout = (tokensFromFees * partMarketing).div(100);
        uint256 devPayout = (tokensFromFees * partDev).div(100);

        if (marketingPayout > 0) {
            swapTokensForUSD(marketingPayout, marketingWallet);
        }
        
        if (devPayout > 0) {
            swapTokensForUSD(devPayout, devWallet);
        }

    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"blackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountUSD","type":"uint256"}],"name":"transferUSD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"unblackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SendUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"USD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","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":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","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":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960146101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff021916908315150217905550640ba43b7400601c5560006021553480156200010857600080fd5b506040518060400160405280600781526020017f4361697368656e000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f436169736800000000000000000000000000000000000000000000000000000081525081600390805190602001906200018d92919062000abc565b508060049080519060200190620001a692919062000abc565b5050506000620001bb620007d360201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3507360fd5a50733fee4d30a2833b0f34f32967232cbf600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360fd5a50733fee4d30a2833b0f34f32967232cbf600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506004601381905550600460118190555060006014819055506000601281905550600060158190555060006016819055506200036b601554601354620007db60201b62002d2d1790919060201c565b600b819055506200038f601654601154620007db60201b62002d2d1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046a919062000bd6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620004c892919062000c19565b6020604051808303816000875af1158015620004e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050e919062000bd6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000583600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083e60201b60201c565b6001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006901695d556204b1e800009050620006dd620006d0620008df60201b60201c565b826200090960201b60201c565b6032600254620006ee919062000cae565b600e819055506103e860025462000706919062000cae565b6010819055506001601a600062000722620008df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000eca565b600033905090565b6000808284620007ec919062000ce6565b90508381101562000834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082b9062000da4565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200097b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009729062000e16565b60405180910390fd5b6200098f6000838362000ab760201b60201c565b620009ab81600254620007db60201b62002d2d1790919060201c565b60028190555062000a09816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007db60201b62002d2d1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aab919062000e49565b60405180910390a35050565b505050565b82805462000aca9062000e95565b90600052602060002090601f01602090048101928262000aee576000855562000b3a565b82601f1062000b0957805160ff191683800117855562000b3a565b8280016001018555821562000b3a579182015b8281111562000b3957825182559160200191906001019062000b1c565b5b50905062000b49919062000b4d565b5090565b5b8082111562000b6857600081600090555060010162000b4e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b9e8262000b71565b9050919050565b62000bb08162000b91565b811462000bbc57600080fd5b50565b60008151905062000bd08162000ba5565b92915050565b60006020828403121562000bef5762000bee62000b6c565b5b600062000bff8482850162000bbf565b91505092915050565b62000c138162000b91565b82525050565b600060408201905062000c30600083018562000c08565b62000c3f602083018462000c08565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cbb8262000c46565b915062000cc88362000c46565b92508262000cdb5762000cda62000c50565b5b828204905092915050565b600062000cf38262000c46565b915062000d008362000c46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d385762000d3762000c7f565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000d8c601b8362000d43565b915062000d998262000d54565b602082019050919050565b6000602082019050818103600083015262000dbf8162000d7d565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000dfe601f8362000d43565b915062000e0b8262000dc6565b602082019050919050565b6000602082019050818103600083015262000e318162000def565b9050919050565b62000e438162000c46565b82525050565b600060208201905062000e60600083018462000e38565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000eae57607f821691505b60208210810362000ec45762000ec362000e66565b5b50919050565b615a158062000eda6000396000f3fe60806040526004361061036f5760003560e01c806375f0a874116101c6578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c7f578063f8b45b0514610ca8578063fc6b151c14610cd3578063ffecf51614610cfc57610376565b8063dd62ed3e14610bec578063e2f4560514610c29578063e71dc3f514610c5457610376565b8063b4942988116100d1578063b494298814610b30578063b62496f514610b5b578063b74e3b1114610b98578063d045a32914610bc157610376565b8063a614ff7514610a9f578063a9059cbb14610ac8578063adb873bd14610b0557610376565b806395d89b41116101645780639a7a23d61161013e5780639a7a23d6146109e35780639c3b4fdc14610a0c578063a0d82dc514610a37578063a457c2d714610a6257610376565b806395d89b4114610978578063964365f1146109a3578063992c58e4146109ba57610376565b80638c3c82b2116101a05780638c3c82b2146108cc5780638da5cb5b146108f75780638ea5220f1461092257806395451c291461094d57610376565b806375f0a874146108615780637fdde05c1461088c5780638a8c523c146108b557610376565b80633bbac579116102a05780635eee4bae1161023e5780637088fb7f116102185780637088fb7f146107cd57806370a08231146107e4578063715018a61461082157806375829def1461083857610376565b80635eee4bae146107525780635fecd9261461077b578063679ca6e9146107a457610376565b80634ada218b1161027a5780634ada218b146106965780634fbee193146106c15780635124f874146106fe5780635d098b381461072957610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631bf6c21b1161030d5780632307b441116102e75780632307b4411461053557806323b872dd1461055e578063313ce5671461059b57806339509351146105c657610376565b80631bf6c21b146104b65780631d7b1fb4146104e15780631f53ac021461050c57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806303fd2a451461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d25565b60405161039d9190614197565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fc565b610d4b565b005b3480156103db57600080fd5b506103e4610dee565b6040516103f191906142c2565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614348565b610e80565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614388565b610fc0565b60405161045791906143d7565b60405180910390f35b34801561046c57600080fd5b50610475610fde565b6040516104829190614451565b60405180910390f35b34801561049757600080fd5b506104a0611004565b6040516104ad919061447b565b60405180910390f35b3480156104c257600080fd5b506104cb61100e565b6040516104d89190614197565b60405180910390f35b3480156104ed57600080fd5b506104f6611034565b604051610503919061447b565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614496565b61103a565b005b34801561054157600080fd5b5061055c600480360381019061055791906146ce565b6111a4565b005b34801561056a57600080fd5b5061058560048036038101906105809190614746565b611346565b60405161059291906143d7565b60405180910390f35b3480156105a757600080fd5b506105b061141f565b6040516105bd91906147b5565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190614388565b611428565b6040516105fa91906143d7565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614496565b6114db565b60405161063791906143d7565b60405180910390f35b34801561064c57600080fd5b50610655611531565b6040516106629190614197565b60405180910390f35b34801561067757600080fd5b50610680611557565b60405161068d91906143d7565b60405180910390f35b3480156106a257600080fd5b506106ab61156a565b6040516106b891906143d7565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190614496565b61157d565b6040516106f591906143d7565b60405180910390f35b34801561070a57600080fd5b506107136115d3565b604051610720919061447b565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190614496565b6115d9565b005b34801561075e57600080fd5b50610779600480360381019061077491906141fc565b611743565b005b34801561078757600080fd5b506107a2600480360381019061079d9190614496565b6117f7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906147d0565b611920565b005b3480156107d957600080fd5b506107e26119d4565b005b3480156107f057600080fd5b5061080b60048036038101906108069190614496565b611aba565b604051610818919061447b565b60405180910390f35b34801561082d57600080fd5b50610836611b02565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614496565b611c5a565b005b34801561086d57600080fd5b50610876611dad565b604051610883919061481e565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614348565b611dd3565b005b3480156108c157600080fd5b506108ca611ec5565b005b3480156108d857600080fd5b506108e1611fcd565b6040516108ee919061447b565b60405180910390f35b34801561090357600080fd5b5061090c611fd3565b6040516109199190614197565b60405180910390f35b34801561092e57600080fd5b50610937611ffd565b604051610944919061481e565b60405180910390f35b34801561095957600080fd5b50610962612023565b60405161096f919061447b565b60405180910390f35b34801561098457600080fd5b5061098d612029565b60405161099a91906142c2565b60405180910390f35b3480156109af57600080fd5b506109b86120bb565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190614839565b612383565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190614348565b612528565b005b348015610a1857600080fd5b50610a216125cd565b604051610a2e919061447b565b60405180910390f35b348015610a4357600080fd5b50610a4c6125d3565b604051610a59919061447b565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190614388565b6125d9565b604051610a9691906143d7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147d0565b6126a6565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614388565b61275a565b604051610afc91906143d7565b60405180910390f35b348015610b1157600080fd5b50610b1a612778565b604051610b27919061447b565b60405180910390f35b348015610b3c57600080fd5b50610b4561277e565b604051610b52919061447b565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190614496565b612784565b604051610b8f91906143d7565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba91906141fc565b6127a4565b005b348015610bcd57600080fd5b50610bd661288a565b604051610be391906143d7565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906148c6565b61289d565b604051610c20919061447b565b60405180910390f35b348015610c3557600080fd5b50610c3e612924565b604051610c4b919061447b565b60405180910390f35b348015610c6057600080fd5b50610c6961292a565b604051610c76919061447b565b60405180910390f35b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614496565b612930565b005b348015610cb457600080fd5b50610cbd612af6565b604051610cca919061447b565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906141fc565b612afc565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190614496565b612c04565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d53612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614952565b60405180910390fd5b610deb81612d93565b50565b606060038054610dfd906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906149a1565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b610e88612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614952565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fb491906143d7565b60405180910390a25050565b6000610fd4610fcd612d8b565b8484612ecd565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b611042612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111999190614197565b60405180910390a150565b6111ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614952565b60405180910390fd5b805182511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614a1e565b60405180910390fd5b60c8825111156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614ab0565b60405180910390fd5b60005b82518110156113415760008382815181106112e5576112e4614ad0565b5b602002602001015190506000670de0b6b3a764000084848151811061130d5761130c614ad0565b5b602002602001015161131f9190614b2e565b905061132c338383613096565b5050808061133990614b88565b9150506112c7565b505050565b6000611353848484613329565b6114148461135f612d8b565b61140f8560405180606001604052806028815260200161596d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113c5612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b600190509392505050565b60006012905090565b60006114d1611435612d8b565b846114cc8560016000611446612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b612ecd565b6001905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6115e1612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516117389190614197565b60405180910390a150565b61174b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190614952565b60405180910390fd5b670de0b6b3a7640000816117ee9190614b2e565b60108190555050565b6117ff612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614952565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119159190614197565b60405180910390a150565b611928612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90614952565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6119dc612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614952565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab6573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b0a612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c62612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611daa81612930565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ddb612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614952565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ecd612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614952565b60405180910390fd5b600960149054906101000a900460ff1615611f7657600080fd5b6001600960146101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054612038906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612064906149a1565b80156120b15780601f10612086576101008083540402835291602001916120b1565b820191906000526020600020905b81548152906001019060200180831161209457829003601f168201915b5050505050905090565b6120c3612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614952565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121af9190614197565b602060405180830381865afa1580156121cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f09190614be5565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612245600a85613d5290919063ffffffff16565b6040518363ffffffff1660e01b8152600401612262929190614c12565b6020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614c50565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161230593929190614c7d565b6020604051808303816000875af1158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190614c50565b507fc74e7a098395443390fac907684a14a51fd706a5c157ef4fbd6a08e2748e166681604051612378919061447b565b60405180910390a150565b61238b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614952565b60405180910390fd5b85601381905550836014819055508460118190555082601281905550816015819055508060168190555061245b601654601154612d2d90919063ffffffff16565b600a81905550612478601554601354612d2d90919063ffffffff16565b600b819055506063600a541115801561249457506063600b5411155b6124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614d00565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161251896959493929190614d20565b60405180910390a1505050505050565b612530612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614952565b60405180910390fd5b6125c98282613dcc565b5050565b60155481565b60165481565b600061269c6125e6612d8b565b84612697856040518060600160405280602581526020016159bb6025913960016000612610612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b6001905092915050565b6126ae612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490614952565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061276e612767612d8b565b8484613329565b6001905092915050565b60125481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6127ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614952565b60405180910390fd5b61012c811115612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790614df3565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612938612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614e85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612b04612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614952565b60405180910390fd5b670de0b6b3a764000081612ba79190614b2e565b90506064600254612bb89190614ed4565b811015612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614f77565b60405180910390fd5b80600e8190555050565b612c0c612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614952565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612d229190614197565b60405180910390a150565b6000808284612d3c9190614f97565b905083811015612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890615039565b60405180910390fd5b8091505092915050565b600033905090565b6000601354601154612da59190614f97565b90506000601554601654612db99190614f97565b905060008183612dc99190614f97565b90506000612dec82606486612dde9190614b2e565b613e6d90919063ffffffff16565b90506000612e0f83606486612e019190614b2e565b613e6d90919063ffffffff16565b90506000612e3260648489612e249190614b2e565b613e6d90919063ffffffff16565b90506000612e556064848a612e479190614b2e565b613e6d90919063ffffffff16565b90506000821115612e8d57612e8c82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115612ec357612ec281600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f33906150cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa29061515d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613089919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc906151ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b90615281565b60405180910390fd5b61317f8383836140a4565b6131ea81604051806060016040528060268152602001615995602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161331c919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90615313565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fe906153a5565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ab5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6134b457600080fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355a57600960149054906101000a900460ff16613559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355090615411565b60405180910390fd5b5b600084036135765761356e86866000613096565b505050613ce9565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cda576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561377357601154935060125492506016549150601b60009054906101000a900460ff161561376e57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e79190614f97565b421015613729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137209061547d565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613a3a565b601354935060145492506015549150601b60009054906101000a900460ff16156139c5576002601f546137a69190614f97565b43116137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de906154e9565b60405180910390fd5b601c543a111561382c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382390615555565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036138ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a4906155c1565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138fa9190614f97565b42101561393c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139339061547d565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615613a395760006139e587611aba565b9050600e5486826139f69190614f97565b1115613a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2e90615653565b60405180910390fd5b505b5b6000613a4f8386612d2d90919063ffffffff16565b90506000613a5c30611aba565b905060006010548210159050808015613abf5750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c025760008290506000601354601154613adb9190614f97565b90506000601554601654613aef9190614f97565b905060008183613aff9190614f97565b90506000613b2282606486613b149190614b2e565b613e6d90919063ffffffff16565b90506000613b4583606486613b379190614b2e565b613e6d90919063ffffffff16565b90506000613b6860648489613b5a9190614b2e565b613e6d90919063ffffffff16565b90506000613b8b6064848a613b7d9190614b2e565b613e6d90919063ffffffff16565b90506000821115613bc357613bc282600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115613bf957613bf881600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b50505050505050505b6000613c2a6064613c1c868c613d5290919063ffffffff16565b613e6d90919063ffffffff16565b90506000613c546064613c468a8d613d5290919063ffffffff16565b613e6d90919063ffffffff16565b9050613c748183613c659190614f97565b8b6140a990919063ffffffff16565b9950613c818c3084613096565b6000811115613cd357613cb78c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613096565b613ccc816002546140a990919063ffffffff16565b6002819055505b5050505050505b613ce5868686613096565b5050505b505050565b6000838311158290613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2d91906142c2565b60405180910390fd5b5060008385613d459190615673565b9050809150509392505050565b6000808303613d645760009050613dc6565b60008284613d729190614b2e565b9050828482613d819190614ed4565b14613dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db890615719565b60405180910390fd5b809150505b92915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613eaf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140f3565b905092915050565b6000600267ffffffffffffffff811115613ed457613ed36144c8565b5b604051908082528060200260200182016040528015613f025781602001602082028036833780820191505090505b5090503081600081518110613f1a57613f19614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613f8b57613f8a614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ff230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612ecd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398460008486426040518663ffffffff1660e01b8152600401614056959493929190615832565b6000604051808303816000875af1158015614075573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061409e9190615923565b50505050565b505050565b60006140eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cee565b905092915050565b6000808311829061413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413191906142c2565b60405180910390fd5b50600083856141499190614ed4565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418182614156565b9050919050565b61419181614176565b82525050565b60006020820190506141ac6000830184614188565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141d9816141c6565b81146141e457600080fd5b50565b6000813590506141f6816141d0565b92915050565b600060208284031215614212576142116141bc565b5b6000614220848285016141e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614263578082015181840152602081019050614248565b83811115614272576000848401525b50505050565b6000601f19601f8301169050919050565b600061429482614229565b61429e8185614234565b93506142ae818560208601614245565b6142b781614278565b840191505092915050565b600060208201905081810360008301526142dc8184614289565b905092915050565b6142ed81614176565b81146142f857600080fd5b50565b60008135905061430a816142e4565b92915050565b60008115159050919050565b61432581614310565b811461433057600080fd5b50565b6000813590506143428161431c565b92915050565b6000806040838503121561435f5761435e6141bc565b5b600061436d858286016142fb565b925050602061437e85828601614333565b9150509250929050565b6000806040838503121561439f5761439e6141bc565b5b60006143ad858286016142fb565b92505060206143be858286016141e7565b9150509250929050565b6143d181614310565b82525050565b60006020820190506143ec60008301846143c8565b92915050565b6000819050919050565b600061441761441261440d84614156565b6143f2565b614156565b9050919050565b6000614429826143fc565b9050919050565b600061443b8261441e565b9050919050565b61444b81614430565b82525050565b60006020820190506144666000830184614442565b92915050565b614475816141c6565b82525050565b6000602082019050614490600083018461446c565b92915050565b6000602082840312156144ac576144ab6141bc565b5b60006144ba848285016142fb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61450082614278565b810181811067ffffffffffffffff8211171561451f5761451e6144c8565b5b80604052505050565b60006145326141b2565b905061453e82826144f7565b919050565b600067ffffffffffffffff82111561455e5761455d6144c8565b5b602082029050602081019050919050565b600080fd5b600061458761458284614543565b614528565b905080838252602082019050602084028301858111156145aa576145a961456f565b5b835b818110156145d357806145bf88826142fb565b8452602084019350506020810190506145ac565b5050509392505050565b600082601f8301126145f2576145f16144c3565b5b8135614602848260208601614574565b91505092915050565b600067ffffffffffffffff821115614626576146256144c8565b5b602082029050602081019050919050565b600061464a6146458461460b565b614528565b9050808382526020820190506020840283018581111561466d5761466c61456f565b5b835b81811015614696578061468288826141e7565b84526020840193505060208101905061466f565b5050509392505050565b600082601f8301126146b5576146b46144c3565b5b81356146c5848260208601614637565b91505092915050565b600080604083850312156146e5576146e46141bc565b5b600083013567ffffffffffffffff811115614703576147026141c1565b5b61470f858286016145dd565b925050602083013567ffffffffffffffff8111156147305761472f6141c1565b5b61473c858286016146a0565b9150509250929050565b60008060006060848603121561475f5761475e6141bc565b5b600061476d868287016142fb565b935050602061477e868287016142fb565b925050604061478f868287016141e7565b9150509250925092565b600060ff82169050919050565b6147af81614799565b82525050565b60006020820190506147ca60008301846147a6565b92915050565b6000602082840312156147e6576147e56141bc565b5b60006147f484828501614333565b91505092915050565b600061480882614156565b9050919050565b614818816147fd565b82525050565b6000602082019050614833600083018461480f565b92915050565b60008060008060008060c08789031215614856576148556141bc565b5b600061486489828a016141e7565b965050602061487589828a016141e7565b955050604061488689828a016141e7565b945050606061489789828a016141e7565b93505060806148a889828a016141e7565b92505060a06148b989828a016141e7565b9150509295509295509295565b600080604083850312156148dd576148dc6141bc565b5b60006148eb858286016142fb565b92505060206148fc858286016142fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061493c602083614234565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b957607f821691505b6020821081036149cc576149cb614972565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a08601e83614234565b9150614a13826149d2565b602082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602283614234565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b39826141c6565b9150614b44836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7d57614b7c614aff565b5b828202905092915050565b6000614b93826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc557614bc4614aff565b5b600182019050919050565b600081519050614bdf816141d0565b92915050565b600060208284031215614bfb57614bfa6141bc565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185614188565b614c34602083018461446c565b9392505050565b600081519050614c4a8161431c565b92915050565b600060208284031215614c6657614c656141bc565b5b6000614c7484828501614c3b565b91505092915050565b6000606082019050614c926000830186614188565b614c9f6020830185614188565b614cac604083018461446c565b949350505050565b7f2500000000000000000000000000000000000000000000000000000000000000600082015250565b6000614cea600183614234565b9150614cf582614cb4565b602082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b600060c082019050614d35600083018961446c565b614d42602083018861446c565b614d4f604083018761446c565b614d5c606083018661446c565b614d69608083018561446c565b614d7660a083018461446c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614ddd602683614234565b9150614de882614d81565b604082019050919050565b60006020820190508181036000830152614e0c81614dd0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e6f602683614234565b9150614e7a82614e13565b604082019050919050565b60006020820190508181036000830152614e9e81614e62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614edf826141c6565b9150614eea836141c6565b925082614efa57614ef9614ea5565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614f61602883614234565b9150614f6c82614f05565b604082019050919050565b60006020820190508181036000830152614f9081614f54565b9050919050565b6000614fa2826141c6565b9150614fad836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fe257614fe1614aff565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615023601b83614234565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150b5602483614234565b91506150c082615059565b604082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615147602283614234565b9150615152826150eb565b604082019050919050565b600060208201905081810360008301526151768161513a565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151d9602583614234565b91506151e48261517d565b604082019050919050565b60006020820190508181036000830152615208816151cc565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061526b602383614234565b91506152768261520f565b604082019050919050565b6000602082019050818103600083015261529a8161525e565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152fd602683614234565b9150615308826152a1565b604082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061538f602483614234565b915061539a82615333565b604082019050919050565b600060208201905081810360008301526153be81615382565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b60006153fb602083614234565b9150615406826153c5565b602082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b6000615467601683614234565b915061547282615431565b602082019050919050565b600060208201905081810360008301526154968161545a565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154d3601283614234565b91506154de8261549d565b602082019050919050565b60006020820190508181036000830152615502816154c6565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b600061553f601883614234565b915061554a82615509565b602082019050919050565b6000602082019050818103600083015261556e81615532565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155ab601483614234565b91506155b682615575565b602082019050919050565b600060208201905081810360008301526155da8161559e565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061563d602483614234565b9150615648826155e1565b604082019050919050565b6000602082019050818103600083015261566c81615630565b9050919050565b600061567e826141c6565b9150615689836141c6565b92508282101561569c5761569b614aff565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615703602183614234565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000819050919050565b600061575e61575961575484615739565b6143f2565b6141c6565b9050919050565b61576e81615743565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157a981614176565b82525050565b60006157bb83836157a0565b60208301905092915050565b6000602082019050919050565b60006157df82615774565b6157e9818561577f565b93506157f483615790565b8060005b8381101561582557815161580c88826157af565b9750615817836157c7565b9250506001810190506157f8565b5085935050505092915050565b600060a082019050615847600083018861446c565b6158546020830187615765565b818103604083015261586681866157d4565b90506158756060830185614188565b615882608083018461446c565b9695505050505050565b600061589f61589a8461460b565b614528565b905080838252602082019050602084028301858111156158c2576158c161456f565b5b835b818110156158eb57806158d78882614bd0565b8452602084019350506020810190506158c4565b5050509392505050565b600082601f83011261590a576159096144c3565b5b815161591a84826020860161588c565b91505092915050565b600060208284031215615939576159386141bc565b5b600082015167ffffffffffffffff811115615957576159566141c1565b5b615963848285016158f5565b9150509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205bdfaabffb9e32713affdad86a16241ceb06b245648eb3a2b5278e5affcc860764736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806375f0a874116101c6578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c7f578063f8b45b0514610ca8578063fc6b151c14610cd3578063ffecf51614610cfc57610376565b8063dd62ed3e14610bec578063e2f4560514610c29578063e71dc3f514610c5457610376565b8063b4942988116100d1578063b494298814610b30578063b62496f514610b5b578063b74e3b1114610b98578063d045a32914610bc157610376565b8063a614ff7514610a9f578063a9059cbb14610ac8578063adb873bd14610b0557610376565b806395d89b41116101645780639a7a23d61161013e5780639a7a23d6146109e35780639c3b4fdc14610a0c578063a0d82dc514610a37578063a457c2d714610a6257610376565b806395d89b4114610978578063964365f1146109a3578063992c58e4146109ba57610376565b80638c3c82b2116101a05780638c3c82b2146108cc5780638da5cb5b146108f75780638ea5220f1461092257806395451c291461094d57610376565b806375f0a874146108615780637fdde05c1461088c5780638a8c523c146108b557610376565b80633bbac579116102a05780635eee4bae1161023e5780637088fb7f116102185780637088fb7f146107cd57806370a08231146107e4578063715018a61461082157806375829def1461083857610376565b80635eee4bae146107525780635fecd9261461077b578063679ca6e9146107a457610376565b80634ada218b1161027a5780634ada218b146106965780634fbee193146106c15780635124f874146106fe5780635d098b381461072957610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631bf6c21b1161030d5780632307b441116102e75780632307b4411461053557806323b872dd1461055e578063313ce5671461059b57806339509351146105c657610376565b80631bf6c21b146104b65780631d7b1fb4146104e15780631f53ac021461050c57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806303fd2a451461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d25565b60405161039d9190614197565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fc565b610d4b565b005b3480156103db57600080fd5b506103e4610dee565b6040516103f191906142c2565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614348565b610e80565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614388565b610fc0565b60405161045791906143d7565b60405180910390f35b34801561046c57600080fd5b50610475610fde565b6040516104829190614451565b60405180910390f35b34801561049757600080fd5b506104a0611004565b6040516104ad919061447b565b60405180910390f35b3480156104c257600080fd5b506104cb61100e565b6040516104d89190614197565b60405180910390f35b3480156104ed57600080fd5b506104f6611034565b604051610503919061447b565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614496565b61103a565b005b34801561054157600080fd5b5061055c600480360381019061055791906146ce565b6111a4565b005b34801561056a57600080fd5b5061058560048036038101906105809190614746565b611346565b60405161059291906143d7565b60405180910390f35b3480156105a757600080fd5b506105b061141f565b6040516105bd91906147b5565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190614388565b611428565b6040516105fa91906143d7565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614496565b6114db565b60405161063791906143d7565b60405180910390f35b34801561064c57600080fd5b50610655611531565b6040516106629190614197565b60405180910390f35b34801561067757600080fd5b50610680611557565b60405161068d91906143d7565b60405180910390f35b3480156106a257600080fd5b506106ab61156a565b6040516106b891906143d7565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190614496565b61157d565b6040516106f591906143d7565b60405180910390f35b34801561070a57600080fd5b506107136115d3565b604051610720919061447b565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190614496565b6115d9565b005b34801561075e57600080fd5b50610779600480360381019061077491906141fc565b611743565b005b34801561078757600080fd5b506107a2600480360381019061079d9190614496565b6117f7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906147d0565b611920565b005b3480156107d957600080fd5b506107e26119d4565b005b3480156107f057600080fd5b5061080b60048036038101906108069190614496565b611aba565b604051610818919061447b565b60405180910390f35b34801561082d57600080fd5b50610836611b02565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614496565b611c5a565b005b34801561086d57600080fd5b50610876611dad565b604051610883919061481e565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614348565b611dd3565b005b3480156108c157600080fd5b506108ca611ec5565b005b3480156108d857600080fd5b506108e1611fcd565b6040516108ee919061447b565b60405180910390f35b34801561090357600080fd5b5061090c611fd3565b6040516109199190614197565b60405180910390f35b34801561092e57600080fd5b50610937611ffd565b604051610944919061481e565b60405180910390f35b34801561095957600080fd5b50610962612023565b60405161096f919061447b565b60405180910390f35b34801561098457600080fd5b5061098d612029565b60405161099a91906142c2565b60405180910390f35b3480156109af57600080fd5b506109b86120bb565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190614839565b612383565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190614348565b612528565b005b348015610a1857600080fd5b50610a216125cd565b604051610a2e919061447b565b60405180910390f35b348015610a4357600080fd5b50610a4c6125d3565b604051610a59919061447b565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190614388565b6125d9565b604051610a9691906143d7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147d0565b6126a6565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614388565b61275a565b604051610afc91906143d7565b60405180910390f35b348015610b1157600080fd5b50610b1a612778565b604051610b27919061447b565b60405180910390f35b348015610b3c57600080fd5b50610b4561277e565b604051610b52919061447b565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190614496565b612784565b604051610b8f91906143d7565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba91906141fc565b6127a4565b005b348015610bcd57600080fd5b50610bd661288a565b604051610be391906143d7565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906148c6565b61289d565b604051610c20919061447b565b60405180910390f35b348015610c3557600080fd5b50610c3e612924565b604051610c4b919061447b565b60405180910390f35b348015610c6057600080fd5b50610c6961292a565b604051610c76919061447b565b60405180910390f35b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614496565b612930565b005b348015610cb457600080fd5b50610cbd612af6565b604051610cca919061447b565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906141fc565b612afc565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190614496565b612c04565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d53612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614952565b60405180910390fd5b610deb81612d93565b50565b606060038054610dfd906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906149a1565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b610e88612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614952565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fb491906143d7565b60405180910390a25050565b6000610fd4610fcd612d8b565b8484612ecd565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b611042612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111999190614197565b60405180910390a150565b6111ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614952565b60405180910390fd5b805182511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614a1e565b60405180910390fd5b60c8825111156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614ab0565b60405180910390fd5b60005b82518110156113415760008382815181106112e5576112e4614ad0565b5b602002602001015190506000670de0b6b3a764000084848151811061130d5761130c614ad0565b5b602002602001015161131f9190614b2e565b905061132c338383613096565b5050808061133990614b88565b9150506112c7565b505050565b6000611353848484613329565b6114148461135f612d8b565b61140f8560405180606001604052806028815260200161596d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113c5612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b600190509392505050565b60006012905090565b60006114d1611435612d8b565b846114cc8560016000611446612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b612ecd565b6001905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6115e1612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516117389190614197565b60405180910390a150565b61174b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190614952565b60405180910390fd5b670de0b6b3a7640000816117ee9190614b2e565b60108190555050565b6117ff612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614952565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119159190614197565b60405180910390a150565b611928612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90614952565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6119dc612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614952565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab6573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b0a612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c62612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611daa81612930565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ddb612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614952565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ecd612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614952565b60405180910390fd5b600960149054906101000a900460ff1615611f7657600080fd5b6001600960146101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054612038906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612064906149a1565b80156120b15780601f10612086576101008083540402835291602001916120b1565b820191906000526020600020905b81548152906001019060200180831161209457829003601f168201915b5050505050905090565b6120c3612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614952565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121af9190614197565b602060405180830381865afa1580156121cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f09190614be5565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612245600a85613d5290919063ffffffff16565b6040518363ffffffff1660e01b8152600401612262929190614c12565b6020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614c50565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161230593929190614c7d565b6020604051808303816000875af1158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190614c50565b507fc74e7a098395443390fac907684a14a51fd706a5c157ef4fbd6a08e2748e166681604051612378919061447b565b60405180910390a150565b61238b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614952565b60405180910390fd5b85601381905550836014819055508460118190555082601281905550816015819055508060168190555061245b601654601154612d2d90919063ffffffff16565b600a81905550612478601554601354612d2d90919063ffffffff16565b600b819055506063600a541115801561249457506063600b5411155b6124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614d00565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161251896959493929190614d20565b60405180910390a1505050505050565b612530612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614952565b60405180910390fd5b6125c98282613dcc565b5050565b60155481565b60165481565b600061269c6125e6612d8b565b84612697856040518060600160405280602581526020016159bb6025913960016000612610612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b6001905092915050565b6126ae612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490614952565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061276e612767612d8b565b8484613329565b6001905092915050565b60125481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6127ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614952565b60405180910390fd5b61012c811115612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790614df3565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612938612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614e85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612b04612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614952565b60405180910390fd5b670de0b6b3a764000081612ba79190614b2e565b90506064600254612bb89190614ed4565b811015612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614f77565b60405180910390fd5b80600e8190555050565b612c0c612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614952565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612d229190614197565b60405180910390a150565b6000808284612d3c9190614f97565b905083811015612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890615039565b60405180910390fd5b8091505092915050565b600033905090565b6000601354601154612da59190614f97565b90506000601554601654612db99190614f97565b905060008183612dc99190614f97565b90506000612dec82606486612dde9190614b2e565b613e6d90919063ffffffff16565b90506000612e0f83606486612e019190614b2e565b613e6d90919063ffffffff16565b90506000612e3260648489612e249190614b2e565b613e6d90919063ffffffff16565b90506000612e556064848a612e479190614b2e565b613e6d90919063ffffffff16565b90506000821115612e8d57612e8c82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115612ec357612ec281600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f33906150cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa29061515d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613089919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc906151ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b90615281565b60405180910390fd5b61317f8383836140a4565b6131ea81604051806060016040528060268152602001615995602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161331c919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90615313565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fe906153a5565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ab5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6134b457600080fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355a57600960149054906101000a900460ff16613559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355090615411565b60405180910390fd5b5b600084036135765761356e86866000613096565b505050613ce9565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cda576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561377357601154935060125492506016549150601b60009054906101000a900460ff161561376e57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e79190614f97565b421015613729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137209061547d565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613a3a565b601354935060145492506015549150601b60009054906101000a900460ff16156139c5576002601f546137a69190614f97565b43116137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de906154e9565b60405180910390fd5b601c543a111561382c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382390615555565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036138ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a4906155c1565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138fa9190614f97565b42101561393c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139339061547d565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615613a395760006139e587611aba565b9050600e5486826139f69190614f97565b1115613a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2e90615653565b60405180910390fd5b505b5b6000613a4f8386612d2d90919063ffffffff16565b90506000613a5c30611aba565b905060006010548210159050808015613abf5750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c025760008290506000601354601154613adb9190614f97565b90506000601554601654613aef9190614f97565b905060008183613aff9190614f97565b90506000613b2282606486613b149190614b2e565b613e6d90919063ffffffff16565b90506000613b4583606486613b379190614b2e565b613e6d90919063ffffffff16565b90506000613b6860648489613b5a9190614b2e565b613e6d90919063ffffffff16565b90506000613b8b6064848a613b7d9190614b2e565b613e6d90919063ffffffff16565b90506000821115613bc357613bc282600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115613bf957613bf881600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b50505050505050505b6000613c2a6064613c1c868c613d5290919063ffffffff16565b613e6d90919063ffffffff16565b90506000613c546064613c468a8d613d5290919063ffffffff16565b613e6d90919063ffffffff16565b9050613c748183613c659190614f97565b8b6140a990919063ffffffff16565b9950613c818c3084613096565b6000811115613cd357613cb78c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613096565b613ccc816002546140a990919063ffffffff16565b6002819055505b5050505050505b613ce5868686613096565b5050505b505050565b6000838311158290613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2d91906142c2565b60405180910390fd5b5060008385613d459190615673565b9050809150509392505050565b6000808303613d645760009050613dc6565b60008284613d729190614b2e565b9050828482613d819190614ed4565b14613dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db890615719565b60405180910390fd5b809150505b92915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613eaf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140f3565b905092915050565b6000600267ffffffffffffffff811115613ed457613ed36144c8565b5b604051908082528060200260200182016040528015613f025781602001602082028036833780820191505090505b5090503081600081518110613f1a57613f19614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613f8b57613f8a614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ff230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612ecd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398460008486426040518663ffffffff1660e01b8152600401614056959493929190615832565b6000604051808303816000875af1158015614075573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061409e9190615923565b50505050565b505050565b60006140eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cee565b905092915050565b6000808311829061413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413191906142c2565b60405180910390fd5b50600083856141499190614ed4565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418182614156565b9050919050565b61419181614176565b82525050565b60006020820190506141ac6000830184614188565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141d9816141c6565b81146141e457600080fd5b50565b6000813590506141f6816141d0565b92915050565b600060208284031215614212576142116141bc565b5b6000614220848285016141e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614263578082015181840152602081019050614248565b83811115614272576000848401525b50505050565b6000601f19601f8301169050919050565b600061429482614229565b61429e8185614234565b93506142ae818560208601614245565b6142b781614278565b840191505092915050565b600060208201905081810360008301526142dc8184614289565b905092915050565b6142ed81614176565b81146142f857600080fd5b50565b60008135905061430a816142e4565b92915050565b60008115159050919050565b61432581614310565b811461433057600080fd5b50565b6000813590506143428161431c565b92915050565b6000806040838503121561435f5761435e6141bc565b5b600061436d858286016142fb565b925050602061437e85828601614333565b9150509250929050565b6000806040838503121561439f5761439e6141bc565b5b60006143ad858286016142fb565b92505060206143be858286016141e7565b9150509250929050565b6143d181614310565b82525050565b60006020820190506143ec60008301846143c8565b92915050565b6000819050919050565b600061441761441261440d84614156565b6143f2565b614156565b9050919050565b6000614429826143fc565b9050919050565b600061443b8261441e565b9050919050565b61444b81614430565b82525050565b60006020820190506144666000830184614442565b92915050565b614475816141c6565b82525050565b6000602082019050614490600083018461446c565b92915050565b6000602082840312156144ac576144ab6141bc565b5b60006144ba848285016142fb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61450082614278565b810181811067ffffffffffffffff8211171561451f5761451e6144c8565b5b80604052505050565b60006145326141b2565b905061453e82826144f7565b919050565b600067ffffffffffffffff82111561455e5761455d6144c8565b5b602082029050602081019050919050565b600080fd5b600061458761458284614543565b614528565b905080838252602082019050602084028301858111156145aa576145a961456f565b5b835b818110156145d357806145bf88826142fb565b8452602084019350506020810190506145ac565b5050509392505050565b600082601f8301126145f2576145f16144c3565b5b8135614602848260208601614574565b91505092915050565b600067ffffffffffffffff821115614626576146256144c8565b5b602082029050602081019050919050565b600061464a6146458461460b565b614528565b9050808382526020820190506020840283018581111561466d5761466c61456f565b5b835b81811015614696578061468288826141e7565b84526020840193505060208101905061466f565b5050509392505050565b600082601f8301126146b5576146b46144c3565b5b81356146c5848260208601614637565b91505092915050565b600080604083850312156146e5576146e46141bc565b5b600083013567ffffffffffffffff811115614703576147026141c1565b5b61470f858286016145dd565b925050602083013567ffffffffffffffff8111156147305761472f6141c1565b5b61473c858286016146a0565b9150509250929050565b60008060006060848603121561475f5761475e6141bc565b5b600061476d868287016142fb565b935050602061477e868287016142fb565b925050604061478f868287016141e7565b9150509250925092565b600060ff82169050919050565b6147af81614799565b82525050565b60006020820190506147ca60008301846147a6565b92915050565b6000602082840312156147e6576147e56141bc565b5b60006147f484828501614333565b91505092915050565b600061480882614156565b9050919050565b614818816147fd565b82525050565b6000602082019050614833600083018461480f565b92915050565b60008060008060008060c08789031215614856576148556141bc565b5b600061486489828a016141e7565b965050602061487589828a016141e7565b955050604061488689828a016141e7565b945050606061489789828a016141e7565b93505060806148a889828a016141e7565b92505060a06148b989828a016141e7565b9150509295509295509295565b600080604083850312156148dd576148dc6141bc565b5b60006148eb858286016142fb565b92505060206148fc858286016142fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061493c602083614234565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b957607f821691505b6020821081036149cc576149cb614972565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a08601e83614234565b9150614a13826149d2565b602082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602283614234565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b39826141c6565b9150614b44836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7d57614b7c614aff565b5b828202905092915050565b6000614b93826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc557614bc4614aff565b5b600182019050919050565b600081519050614bdf816141d0565b92915050565b600060208284031215614bfb57614bfa6141bc565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185614188565b614c34602083018461446c565b9392505050565b600081519050614c4a8161431c565b92915050565b600060208284031215614c6657614c656141bc565b5b6000614c7484828501614c3b565b91505092915050565b6000606082019050614c926000830186614188565b614c9f6020830185614188565b614cac604083018461446c565b949350505050565b7f2500000000000000000000000000000000000000000000000000000000000000600082015250565b6000614cea600183614234565b9150614cf582614cb4565b602082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b600060c082019050614d35600083018961446c565b614d42602083018861446c565b614d4f604083018761446c565b614d5c606083018661446c565b614d69608083018561446c565b614d7660a083018461446c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614ddd602683614234565b9150614de882614d81565b604082019050919050565b60006020820190508181036000830152614e0c81614dd0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e6f602683614234565b9150614e7a82614e13565b604082019050919050565b60006020820190508181036000830152614e9e81614e62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614edf826141c6565b9150614eea836141c6565b925082614efa57614ef9614ea5565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614f61602883614234565b9150614f6c82614f05565b604082019050919050565b60006020820190508181036000830152614f9081614f54565b9050919050565b6000614fa2826141c6565b9150614fad836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fe257614fe1614aff565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615023601b83614234565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150b5602483614234565b91506150c082615059565b604082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615147602283614234565b9150615152826150eb565b604082019050919050565b600060208201905081810360008301526151768161513a565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151d9602583614234565b91506151e48261517d565b604082019050919050565b60006020820190508181036000830152615208816151cc565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061526b602383614234565b91506152768261520f565b604082019050919050565b6000602082019050818103600083015261529a8161525e565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152fd602683614234565b9150615308826152a1565b604082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061538f602483614234565b915061539a82615333565b604082019050919050565b600060208201905081810360008301526153be81615382565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b60006153fb602083614234565b9150615406826153c5565b602082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b6000615467601683614234565b915061547282615431565b602082019050919050565b600060208201905081810360008301526154968161545a565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154d3601283614234565b91506154de8261549d565b602082019050919050565b60006020820190508181036000830152615502816154c6565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b600061553f601883614234565b915061554a82615509565b602082019050919050565b6000602082019050818103600083015261556e81615532565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155ab601483614234565b91506155b682615575565b602082019050919050565b600060208201905081810360008301526155da8161559e565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061563d602483614234565b9150615648826155e1565b604082019050919050565b6000602082019050818103600083015261566c81615630565b9050919050565b600061567e826141c6565b9150615689836141c6565b92508282101561569c5761569b614aff565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615703602183614234565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000819050919050565b600061575e61575961575484615739565b6143f2565b6141c6565b9050919050565b61576e81615743565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157a981614176565b82525050565b60006157bb83836157a0565b60208301905092915050565b6000602082019050919050565b60006157df82615774565b6157e9818561577f565b93506157f483615790565b8060005b8381101561582557815161580c88826157af565b9750615817836157c7565b9250506001810190506157f8565b5085935050505092915050565b600060a082019050615847600083018861446c565b6158546020830187615765565b818103604083015261586681866157d4565b90506158756060830185614188565b615882608083018461446c565b9695505050505050565b600061589f61589a8461460b565b614528565b905080838252602082019050602084028301858111156158c2576158c161456f565b5b835b818110156158eb57806158d78882614bd0565b8452602084019350506020810190506158c4565b5050509392505050565b600082601f83011261590a576159096144c3565b5b815161591a84826020860161588c565b91505092915050565b600060208284031215615939576159386141bc565b5b600082015167ffffffffffffffff811115615957576159566141c1565b5b615963848285016158f5565b9150509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205bdfaabffb9e32713affdad86a16241ceb06b245648eb3a2b5278e5affcc860764736f6c634300080d0033

Deployed Bytecode Sourcemap

15404:14239:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15570:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28058:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3287:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20019:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4201:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15485:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3608:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15641:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16959:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19820:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29079:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4378:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19225:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4731:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23452:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15535:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16567:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15714;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23318:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16188:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19607:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21795:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20341:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20635:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21347:146;;;;;;;;;;;;;:::i;:::-;;3724:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7179:148;;;;;;;;;;;;;:::i;:::-;;22330:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15911:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20480:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19363:232;;;;;;;;;;;;;:::i;:::-;;16897:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6965:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15959:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3395:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21501:286;;;;;;;;;;;;;:::i;:::-;;22550:760;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21923:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16258:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16289:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4957:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20742:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3859:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16155:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16846;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16428:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20853:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16034:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4042:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16076:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16226:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7335:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16003:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21039:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20208:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15570:64;;;;;;;;;;;;;:::o;28058:105::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28137:18:::1;28148:6;28137:10;:18::i;:::-;28058:105:::0;:::o;3287:100::-;3341:13;3374:5;3367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3287:100;:::o;20019:181::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20134:8:::1;20103:19;:28;20123:7;20103:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20174:7;20158:34;;;20183:8;20158:34;;;;;;:::i;:::-;;;;;;;;20019:181:::0;;:::o;4201:169::-;4284:4;4301:39;4310:12;:10;:12::i;:::-;4324:7;4333:6;4301:8;:39::i;:::-;4358:4;4351:11;;4201:169;;;;:::o;15485:41::-;;;;;;;;;;;;;:::o;3608:108::-;3669:7;3696:12;;3689:19;;3608:108;:::o;15641:63::-;;;;;;;;;;;;;:::o;16959:32::-;;;;:::o;19820:187::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19918:4:::1;19888:19;:27;19908:6;19888:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19953:6;19933:9;;:27;;;;;;;;;;;;;;;;;;19976:23;19992:6;19976:23;;;;;;:::i;:::-;;;;;;;;19820:187:::0;:::o;29079:561::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29251:6:::1;:13;29226:14;:21;:38;29218:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29343:3;29318:14;:21;:28;;29310:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29401:9;29396:237;29420:14;:21;29416:1;:25;29396:237;;;29463:14;29480;29495:1;29480:17;;;;;;;;:::i;:::-;;;;;;;;29463:34;;29512:21;29549:6;29536;29543:1;29536:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;29512:44;;29571:50;29587:10;29599:6;29607:13;29571:15;:50::i;:::-;29448:185;;29443:3;;;;;:::i;:::-;;;;29396:237;;;;29079:561:::0;;:::o;4378:345::-;4491:4;4508:36;4518:6;4526:9;4537:6;4508:9;:36::i;:::-;4555:138;4564:6;4572:12;:10;:12::i;:::-;4586:106;4624:6;4586:106;;;;;;;;;;;;;;;;;:11;:19;4598:6;4586:19;;;;;;;;;;;;;;;:33;4606:12;:10;:12::i;:::-;4586:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4555:8;:138::i;:::-;4711:4;4704:11;;4378:345;;;;;:::o;19225:93::-;19283:5;19308:2;19301:9;;19225:93;:::o;4731:218::-;4819:4;4836:83;4845:12;:10;:12::i;:::-;4859:7;4868:50;4907:10;4868:11;:25;4880:12;:10;:12::i;:::-;4868:25;;;;;;;;;;;;;;;:34;4894:7;4868:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4836:8;:83::i;:::-;4937:4;4930:11;;4731:218;;;;:::o;23452:100::-;23505:4;23529:6;:15;23536:7;23529:15;;;;;;;;;;;;;;;;;;;;;;;;;23522:22;;23452:100;;;:::o;15535:28::-;;;;;;;;;;;;;:::o;16567:34::-;;;;;;;;;;;;;:::o;15714:::-;;;;;;;;;;;;;:::o;23318:126::-;23384:4;23408:19;:28;23428:7;23408:28;;;;;;;;;;;;;;;;;;;;;;;;;23401:35;;23318:126;;;:::o;16188:31::-;;;;:::o;19607:205::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19711:4:::1;19681:19;:27;19701:6;19681:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19752:6;19726:15;;:33;;;;;;;;;;;;;;;;;;19775:29;19797:6;19775:29;;;;;;:::i;:::-;;;;;;;;19607:205:::0;:::o;21795:120::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21900:6:::1;21890;:17;;;;:::i;:::-;21869:18;:38;;;;21795:120:::0;:::o;20341:131::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20423:5:::1;20405:6;:15;20412:7;20405:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;20444:20;20456:7;20444:20;;;;;;:::i;:::-;;;;;;;;20341:131:::0;:::o;20635:99::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20721:5:::1;20704:14;;:22;;;;;;;;;;;;;;;;;;20635:99:::0;:::o;21347:146::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21394:17:::1;21414:21;21394:41;;21454:10;21446:28;;:39;21475:9;21446:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21383:110;21347:146::o:0;3724:127::-;3798:7;3825:9;:18;3835:7;3825:18;;;;;;;;;;;;;;;;3818:25;;3724:127;;;:::o;7179:148::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7286:1:::1;7249:40;;7270:6;;;;;;;;;;;7249:40;;;;;;;;;;;;7317:1;7300:6;;:19;;;;;;;;;;;;;;;;;;7179:148::o:0;22330:212::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22431:4:::1;22399:19;:29;22419:8;22399:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22492:4;22446:33;:43;22480:8;22446:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22507:27;22525:8;22507:17;:27::i;:::-;22330:212:::0;:::o;15911:38::-;;;;;;;;;;;;;:::o;20480:147::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20613:6:::1;20569:33;:41;20603:6;20569:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20480:147:::0;;:::o;19363:232::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19427:14:::1;;;;;;;;;;;19426:15;19418:24;;;::::0;::::1;;19470:4;19453:14;;:21;;;;;;;;;;;;;;;;;;19499:12;19485:11;:26;;;;19540:15;19522;:33;;;;19571:16;;;;;;;;;;19363:232::o:0;16897:30::-;;;;:::o;6965:79::-;7003:7;7030:6;;;;;;;;;;;7023:13;;6965:79;:::o;15959:32::-;;;;;;;;;;;;;:::o;16116:::-;;;;:::o;3395:104::-;3451:13;3484:7;3477:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3395:104;:::o;21501:286::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21550:17:::1;21577:3;;;;;;;;;;;21570:21;;;21600:4;21570:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21550:56;;21624:3;;;;;;;;;;;21617:19;;;21645:4;21652:17;21666:2;21652:9;:13;;:17;;;;:::i;:::-;21617:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21688:3;;;;;;;;;;;21681:24;;;21714:4;21720:10;21731:9;21681:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21757:22;21769:9;21757:22;;;;;;:::i;:::-;;;;;;;;21539:248;21501:286::o:0;22550:760::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22757:12:::1;22738:16;:31;;;;22793:7;22780:10;:20;;;;22831:13;22811:17;:33;;;;22869:8;22855:11;:22;;;;22900:6;22888:9;:18;;;;22930:7;22917:10;:20;;;;22966:33;22988:10;;22966:17;;:21;;:33;;;;:::i;:::-;22950:13;:49;;;;23025:31;23046:9;;23025:16;;:20;;:31;;;;:::i;:::-;23010:12;:46;;;;23134:2;23117:13;;:19;;:41;;;;;23156:2;23140:12;;:18;;23117:41;23109:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23182:120;23193:17;;23212:11;;23225:10;;23237:16;;23280:10;;23292:9;;23182:120;;;;;;;;;;;:::i;:::-;;;;;;;;22550:760:::0;;;;;;:::o;21923:140::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22014:41:::1;22043:4;22049:5;22014:28;:41::i;:::-;21923:140:::0;;:::o;16258:24::-;;;;:::o;16289:25::-;;;;:::o;4957:286::-;5050:4;5067:146;5076:12;:10;:12::i;:::-;5090:7;5099:113;5138:15;5099:113;;;;;;;;;;;;;;;;;:11;:25;5111:12;:10;:12::i;:::-;5099:25;;;;;;;;;;;;;;;:34;5125:7;5099:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5067:8;:146::i;:::-;5231:4;5224:11;;4957:286;;;;:::o;20742:103::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20832:5:::1;20813:16;;:24;;;;;;;;;;;;;;;;;;20742:103:::0;:::o;3859:175::-;3945:4;3962:42;3972:12;:10;:12::i;:::-;3986:9;3997:6;3962:9;:42::i;:::-;4022:4;4015:11;;3859:175;;;;:::o;16155:26::-;;;;:::o;16846:::-;;;;:::o;16428:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20853:174::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20941:3:::1;20932:5;:12;;20924:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21014:5;20998:13;:21;;;;20853:174:::0;:::o;16034:35::-;;;;;;;;;;;;;:::o;4042:151::-;4131:7;4158:11;:18;4170:5;4158:18;;;;;;;;;;;;;;;:27;4177:7;4158:27;;;;;;;;;;;;;;;;4151:34;;4042:151;;;;:::o;16076:33::-;;;;:::o;16226:25::-;;;;:::o;7335:244::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7444:1:::1;7424:22;;:8;:22;;::::0;7416:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7534:8;7505:38;;7526:6;;;;;;;;;;;7505:38;;;;;;;;;;;;7563:8;7554:6;;:17;;;;;;;;;;;;;;;;;;7335:244:::0;:::o;16003:24::-;;;;:::o;21039:218::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21123:6:::1;21114:5;:16;;;;:::i;:::-;21106:24;;21173:3;21158:12;;:18;;;;:::i;:::-;21149:5;:27;;21141:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21244:5;21232:9;:17;;;;21039:218:::0;:::o;20208:125::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20287:4:::1;20269:6;:15;20276:7;20269:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;20307:18;20317:7;20307:18;;;;;;:::i;:::-;;;;;;;;20208:125:::0;:::o;521:179::-;579:7;599:9;615:1;611;:5;;;;:::i;:::-;599:17;;640:1;635;:6;;627:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;691:1;684:8;;;521:179;;;;:::o;145:98::-;198:7;225:10;218:17;;145:98;:::o;28269:802::-;28334:26;28381:16;;28363:17;;:34;;;;:::i;:::-;28334:63;;28408:20;28444:9;;28431:10;;:22;;;;:::i;:::-;28408:45;;28464:17;28503:12;28484:18;:31;;;;:::i;:::-;28464:51;;28526:21;28550:39;28579:9;28570:3;28551:18;:22;;;;:::i;:::-;28550:28;;:39;;;;:::i;:::-;28526:63;;28623:15;28641:33;28664:9;28655:3;28642:12;:16;;;;:::i;:::-;28641:22;;:33;;;;:::i;:::-;28623:51;;28710:23;28736:41;28773:3;28754:13;28737:14;:30;;;;:::i;:::-;28736:36;;:41;;;;:::i;:::-;28710:67;;28788:17;28808:35;28839:3;28826:7;28809:14;:24;;;;:::i;:::-;28808:30;;:35;;;;:::i;:::-;28788:55;;28878:1;28860:15;:19;28856:102;;;28896:50;28913:15;28930;;;;;;;;;;;28896:16;:50::i;:::-;28856:102;28994:1;28982:9;:13;28978:84;;;29012:38;29029:9;29040;;;;;;;;;;;29012:16;:38::i;:::-;28978:84;28321:750;;;;;;;28269:802;:::o;6183:346::-;6302:1;6285:19;;:5;:19;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6383:1;6364:21;;:7;:21;;;6356:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6467:6;6437:11;:18;6449:5;6437:18;;;;;;;;;;;;;;;:27;6456:7;6437:27;;;;;;;;;;;;;;;:36;;;;6505:7;6489:32;;6498:5;6489:32;;;6514:6;6489:32;;;;;;:::i;:::-;;;;;;;;6183:346;;;:::o;5251:538::-;5375:1;5357:20;;:6;:20;;;5349:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5459:1;5438:23;;:9;:23;;;5430:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5514:47;5535:6;5543:9;5554:6;5514:20;:47::i;:::-;5594:70;5616:6;5594:70;;;;;;;;;;;;;;;;;:9;:17;5604:6;5594:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5574:9;:17;5584:6;5574:17;;;;;;;;;;;;;;;:90;;;;5698:32;5723:6;5698:9;:20;5708:9;5698:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5675:9;:20;5685:9;5675:20;;;;;;;;;;;;;;;:55;;;;5763:9;5746:35;;5755:6;5746:35;;;5774:6;5746:35;;;;;;:::i;:::-;;;;;;;;5251:538;;;:::o;23560:4013::-;23676:1;23660:18;;:4;:18;;;23652:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23754:1;23740:16;;:2;:16;;;23732:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23817:6;:12;23824:4;23817:12;;;;;;;;;;;;;;;;;;;;;;;;;23816:13;:28;;;;;23834:6;:10;23841:2;23834:10;;;;;;;;;;;;;;;;;;;;;;;;;23833:11;23816:28;23808:37;;;;;;23858:21;23890:15;23916:14;23948:33;:39;23982:4;23948:39;;;;;;;;;;;;;;;;;;;;;;;;;23943:142;;24012:14;;;;;;;;;;;24004:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23943:142;24111:1;24101:6;:11;24097:3424;;24129:28;24145:4;24151:2;24155:1;24129:15;:28::i;:::-;24172:7;;;;;24097:3424;24235:19;:25;24255:4;24235:25;;;;;;;;;;;;;;;;;;;;;;;;;24234:26;:54;;;;;24265:19;:23;24285:2;24265:23;;;;;;;;;;;;;;;;;;;;;;;;;24264:24;24234:54;24216:3305;;;24315:14;24332:25;:29;24358:2;24332:29;;;;;;;;;;;;;;;;;;;;;;;;;24315:46;;24380:9;24376:1494;;;24426:17;;24410:33;;24472:11;;24462:21;;24511:10;;24502:19;;24546:14;;;;;;;;;;;24542:269;;;24650:13;;24608:28;:39;24637:9;24608:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24589:15;:74;;24581:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24776:15;24734:28;:39;24763:9;24734:39;;;;;;;;;;;;;;;:57;;;;24542:269;24376:1494;;;24895:16;;24879:32;;24940:10;;24930:20;;24978:9;;24969:18;;25012:14;;;;;;;;;;;25008:598;;;25084:1;25070:11;;:15;;;;:::i;:::-;25055:12;:30;25047:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25149:13;;25134:11;:28;;25126:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25256:12;25217:24;:35;25242:9;25217:35;;;;;;;;;;;;;;;;:51;25209:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:13;;25338:28;:39;25367:9;25338:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25319:15;:74;;25311:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25502:12;25464:24;:35;25489:9;25464:35;;;;;;;;;;;;;;;:50;;;;25575:15;25533:28;:39;25562:9;25533:39;;;;;;;;;;;;;;;:57;;;;25008:598;25626:16;;;;;;;;;;;25622:233;;;25659:32;25694:13;25704:2;25694:9;:13::i;:::-;25659:48;;25767:9;;25757:6;25730:24;:33;;;;:::i;:::-;:46;;25722:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25644:211;25622:233;24376:1494;25886:17;25906:25;25924:6;25906:13;:17;;:25;;;;:::i;:::-;25886:45;;25948:28;25979:24;25997:4;25979:9;:24::i;:::-;25948:55;;26020:12;26059:18;;26035:20;:42;;26020:57;;26098:7;:43;;;;;26110:25;:31;26136:4;26110:31;;;;;;;;;;;;;;;;;;;;;;;;;26109:32;26098:43;26094:991;;;26162:22;26185:20;26162:43;;26224:26;26271:16;;26253:17;;:34;;;;:::i;:::-;26224:63;;26306:20;26342:9;;26329:10;;:22;;;;:::i;:::-;26306:45;;26370:16;26408:12;26389:18;:31;;;;:::i;:::-;26370:50;;26439:21;26463:38;26492:8;26483:3;26464:18;:22;;;;:::i;:::-;26463:28;;:38;;;;:::i;:::-;26439:62;;26543:15;26561:32;26584:8;26575:3;26562:12;:16;;;;:::i;:::-;26561:22;;:32;;;;:::i;:::-;26543:50;;26637:23;26663:41;26700:3;26681:13;26664:14;:30;;;;:::i;:::-;26663:36;;:41;;;;:::i;:::-;26637:67;;26723:17;26743:35;26774:3;26761:7;26744:14;:24;;;;:::i;:::-;26743:30;;:35;;;;:::i;:::-;26723:55;;26821:1;26803:15;:19;26799:118;;;26847:50;26864:15;26881;;;;;;;;;;;26847:16;:50::i;:::-;26799:118;26969:1;26957:9;:13;26953:102;;;26995:38;27012:9;27023;;;;;;;;;;;26995:16;:38::i;:::-;26953:102;26143:942;;;;;;;;26094:991;27101:12;27116:30;27142:3;27116:21;27127:9;27116:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27101:45;;27161:18;27182:28;27206:3;27182:19;27193:7;27182:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27161:49;;27236:29;27254:10;27247:4;:17;;;;:::i;:::-;27236:6;:10;;:29;;;;:::i;:::-;27227:38;;27282:42;27298:4;27312;27319;27282:15;:42::i;:::-;27358:1;27345:10;:14;27341:156;;;27380:39;27396:4;27402;;;;;;;;;;;27408:10;27380:15;:39::i;:::-;27453:28;27470:10;27453:12;;:16;;:28;;;;:::i;:::-;27438:12;:43;;;;27341:156;24300:3221;;;;;;24216:3305;27531:33;27547:4;27553:2;27557:6;27531:15;:33::i;:::-;23639:3934;;;23560:4013;;;;:::o;852:190::-;938:7;971:1;966;:6;;974:12;958:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;998:9;1014:1;1010;:5;;;;:::i;:::-;998:17;;1033:1;1026:8;;;852:190;;;;;:::o;1050:248::-;1108:7;1137:1;1132;:6;1128:47;;1162:1;1155:8;;;;1128:47;1187:9;1203:1;1199;:5;;;;:::i;:::-;1187:17;;1232:1;1227;1223;:5;;;;:::i;:::-;:10;1215:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1289:1;1282:8;;;1050:248;;;;;:::o;22071:188::-;22188:5;22154:25;:31;22180:4;22154:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22245:5;22211:40;;22239:4;22211:40;;;;;;;;;;;;22071:188;;:::o;1306:132::-;1364:7;1391:39;1395:1;1398;1391:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1384:46;;1306:132;;;;:::o;27583:467::-;27667:21;27705:1;27691:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27667:40;;27736:4;27718;27723:1;27718:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27762:3;;;;;;;;;;;27752:4;27757:1;27752:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;27776:62;27793:4;27808:15;;;;;;;;;;;27826:11;27776:8;:62::i;:::-;27849:15;;;;;;;;;;;:40;;;27904:11;27930:1;27974:4;27993:8;28016:15;27849:193;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27656:394;27583:467;;:::o;6537:91::-;;;;:::o;708:136::-;766:7;793:43;797:1;800;793:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;786:50;;708:136;;;;:::o;1446:189::-;1532:7;1564:1;1560;:5;1567:12;1552:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1591:9;1607:1;1603;:5;;;;:::i;:::-;1591:17;;1626:1;1619:8;;;1446:189;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:75::-;626:6;659:2;653:9;643:19;;593:75;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:307::-;1959:1;1969:113;1983:6;1980:1;1977:13;1969:113;;;2068:1;2063:3;2059:11;2053:18;2049:1;2044:3;2040:11;2033:39;2005:2;2002:1;1998:10;1993:15;;1969:113;;;2100:6;2097:1;2094:13;2091:101;;;2180:1;2171:6;2166:3;2162:16;2155:27;2091:101;1940:258;1891:307;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:364::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:52;2608:6;2603:3;2596:4;2589:5;2585:16;2563:52;:::i;:::-;2640:29;2662:6;2640:29;:::i;:::-;2635:3;2631:39;2624:46;;2404:272;2312:364;;;;:::o;2682:313::-;2795:4;2833:2;2822:9;2818:18;2810:26;;2882:9;2876:4;2872:20;2868:1;2857:9;2853:17;2846:47;2910:78;2983:4;2974:6;2910:78;:::i;:::-;2902:86;;2682:313;;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:90::-;3308:7;3351:5;3344:13;3337:21;3326:32;;3274:90;;;:::o;3370:116::-;3440:21;3455:5;3440:21;:::i;:::-;3433:5;3430:32;3420:60;;3476:1;3473;3466:12;3420:60;3370:116;:::o;3492:133::-;3535:5;3573:6;3560:20;3551:29;;3589:30;3613:5;3589:30;:::i;:::-;3492:133;;;;:::o;3631:468::-;3696:6;3704;3753:2;3741:9;3732:7;3728:23;3724:32;3721:119;;;3759:79;;:::i;:::-;3721:119;3879:1;3904:53;3949:7;3940:6;3929:9;3925:22;3904:53;:::i;:::-;3894:63;;3850:117;4006:2;4032:50;4074:7;4065:6;4054:9;4050:22;4032:50;:::i;:::-;4022:60;;3977:115;3631:468;;;;;:::o;4105:474::-;4173:6;4181;4230:2;4218:9;4209:7;4205:23;4201:32;4198:119;;;4236:79;;:::i;:::-;4198:119;4356:1;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4327:117;4483:2;4509:53;4554:7;4545:6;4534:9;4530:22;4509:53;:::i;:::-;4499:63;;4454:118;4105:474;;;;;:::o;4585:109::-;4666:21;4681:5;4666:21;:::i;:::-;4661:3;4654:34;4585:109;;:::o;4700:210::-;4787:4;4825:2;4814:9;4810:18;4802:26;;4838:65;4900:1;4889:9;4885:17;4876:6;4838:65;:::i;:::-;4700:210;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:153::-;5339:9;5372:37;5403:5;5372:37;:::i;:::-;5359:50;;5262:153;;;:::o;5421:185::-;5535:64;5593:5;5535:64;:::i;:::-;5530:3;5523:77;5421:185;;:::o;5612:276::-;5732:4;5770:2;5759:9;5755:18;5747:26;;5783:98;5878:1;5867:9;5863:17;5854:6;5783:98;:::i;:::-;5612:276;;;;:::o;5894:118::-;5981:24;5999:5;5981:24;:::i;:::-;5976:3;5969:37;5894:118;;:::o;6018:222::-;6111:4;6149:2;6138:9;6134:18;6126:26;;6162:71;6230:1;6219:9;6215:17;6206:6;6162:71;:::i;:::-;6018:222;;;;:::o;6246:329::-;6305:6;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6246:329;;;;:::o;6581:117::-;6690:1;6687;6680:12;6704:180;6752:77;6749:1;6742:88;6849:4;6846:1;6839:15;6873:4;6870:1;6863:15;6890:281;6973:27;6995:4;6973:27;:::i;:::-;6965:6;6961:40;7103:6;7091:10;7088:22;7067:18;7055:10;7052:34;7049:62;7046:88;;;7114:18;;:::i;:::-;7046:88;7154:10;7150:2;7143:22;6933:238;6890:281;;:::o;7177:129::-;7211:6;7238:20;;:::i;:::-;7228:30;;7267:33;7295:4;7287:6;7267:33;:::i;:::-;7177:129;;;:::o;7312:311::-;7389:4;7479:18;7471:6;7468:30;7465:56;;;7501:18;;:::i;:::-;7465:56;7551:4;7543:6;7539:17;7531:25;;7611:4;7605;7601:15;7593:23;;7312:311;;;:::o;7629:117::-;7738:1;7735;7728:12;7769:710;7865:5;7890:81;7906:64;7963:6;7906:64;:::i;:::-;7890:81;:::i;:::-;7881:90;;7991:5;8020:6;8013:5;8006:21;8054:4;8047:5;8043:16;8036:23;;8107:4;8099:6;8095:17;8087:6;8083:30;8136:3;8128:6;8125:15;8122:122;;;8155:79;;:::i;:::-;8122:122;8270:6;8253:220;8287:6;8282:3;8279:15;8253:220;;;8362:3;8391:37;8424:3;8412:10;8391:37;:::i;:::-;8386:3;8379:50;8458:4;8453:3;8449:14;8442:21;;8329:144;8313:4;8308:3;8304:14;8297:21;;8253:220;;;8257:21;7871:608;;7769:710;;;;;:::o;8502:370::-;8573:5;8622:3;8615:4;8607:6;8603:17;8599:27;8589:122;;8630:79;;:::i;:::-;8589:122;8747:6;8734:20;8772:94;8862:3;8854:6;8847:4;8839:6;8835:17;8772:94;:::i;:::-;8763:103;;8579:293;8502:370;;;;:::o;8878:311::-;8955:4;9045:18;9037:6;9034:30;9031:56;;;9067:18;;:::i;:::-;9031:56;9117:4;9109:6;9105:17;9097:25;;9177:4;9171;9167:15;9159:23;;8878:311;;;:::o;9212:710::-;9308:5;9333:81;9349:64;9406:6;9349:64;:::i;:::-;9333:81;:::i;:::-;9324:90;;9434:5;9463:6;9456:5;9449:21;9497:4;9490:5;9486:16;9479:23;;9550:4;9542:6;9538:17;9530:6;9526:30;9579:3;9571:6;9568:15;9565:122;;;9598:79;;:::i;:::-;9565:122;9713:6;9696:220;9730:6;9725:3;9722:15;9696:220;;;9805:3;9834:37;9867:3;9855:10;9834:37;:::i;:::-;9829:3;9822:50;9901:4;9896:3;9892:14;9885:21;;9772:144;9756:4;9751:3;9747:14;9740:21;;9696:220;;;9700:21;9314:608;;9212:710;;;;;:::o;9945:370::-;10016:5;10065:3;10058:4;10050:6;10046:17;10042:27;10032:122;;10073:79;;:::i;:::-;10032:122;10190:6;10177:20;10215:94;10305:3;10297:6;10290:4;10282:6;10278:17;10215:94;:::i;:::-;10206:103;;10022:293;9945:370;;;;:::o;10321:894::-;10439:6;10447;10496:2;10484:9;10475:7;10471:23;10467:32;10464:119;;;10502:79;;:::i;:::-;10464:119;10650:1;10639:9;10635:17;10622:31;10680:18;10672:6;10669:30;10666:117;;;10702:79;;:::i;:::-;10666:117;10807:78;10877:7;10868:6;10857:9;10853:22;10807:78;:::i;:::-;10797:88;;10593:302;10962:2;10951:9;10947:18;10934:32;10993:18;10985:6;10982:30;10979:117;;;11015:79;;:::i;:::-;10979:117;11120:78;11190:7;11181:6;11170:9;11166:22;11120:78;:::i;:::-;11110:88;;10905:303;10321:894;;;;;:::o;11221:619::-;11298:6;11306;11314;11363:2;11351:9;11342:7;11338:23;11334:32;11331:119;;;11369:79;;:::i;:::-;11331:119;11489:1;11514:53;11559:7;11550:6;11539:9;11535:22;11514:53;:::i;:::-;11504:63;;11460:117;11616:2;11642:53;11687:7;11678:6;11667:9;11663:22;11642:53;:::i;:::-;11632:63;;11587:118;11744:2;11770:53;11815:7;11806:6;11795:9;11791:22;11770:53;:::i;:::-;11760:63;;11715:118;11221:619;;;;;:::o;11846:86::-;11881:7;11921:4;11914:5;11910:16;11899:27;;11846:86;;;:::o;11938:112::-;12021:22;12037:5;12021:22;:::i;:::-;12016:3;12009:35;11938:112;;:::o;12056:214::-;12145:4;12183:2;12172:9;12168:18;12160:26;;12196:67;12260:1;12249:9;12245:17;12236:6;12196:67;:::i;:::-;12056:214;;;;:::o;12276:323::-;12332:6;12381:2;12369:9;12360:7;12356:23;12352:32;12349:119;;;12387:79;;:::i;:::-;12349:119;12507:1;12532:50;12574:7;12565:6;12554:9;12550:22;12532:50;:::i;:::-;12522:60;;12478:114;12276:323;;;;:::o;12605:104::-;12650:7;12679:24;12697:5;12679:24;:::i;:::-;12668:35;;12605:104;;;:::o;12715:142::-;12818:32;12844:5;12818:32;:::i;:::-;12813:3;12806:45;12715:142;;:::o;12863:254::-;12972:4;13010:2;12999:9;12995:18;12987:26;;13023:87;13107:1;13096:9;13092:17;13083:6;13023:87;:::i;:::-;12863:254;;;;:::o;13123:1057::-;13227:6;13235;13243;13251;13259;13267;13316:3;13304:9;13295:7;13291:23;13287:33;13284:120;;;13323:79;;:::i;:::-;13284:120;13443:1;13468:53;13513:7;13504:6;13493:9;13489:22;13468:53;:::i;:::-;13458:63;;13414:117;13570:2;13596:53;13641:7;13632:6;13621:9;13617:22;13596:53;:::i;:::-;13586:63;;13541:118;13698:2;13724:53;13769:7;13760:6;13749:9;13745:22;13724:53;:::i;:::-;13714:63;;13669:118;13826:2;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13797:118;13954:3;13981:53;14026:7;14017:6;14006:9;14002:22;13981:53;:::i;:::-;13971:63;;13925:119;14083:3;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14054:119;13123:1057;;;;;;;;:::o;14186:474::-;14254:6;14262;14311:2;14299:9;14290:7;14286:23;14282:32;14279:119;;;14317:79;;:::i;:::-;14279:119;14437:1;14462:53;14507:7;14498:6;14487:9;14483:22;14462:53;:::i;:::-;14452:63;;14408:117;14564:2;14590:53;14635:7;14626:6;14615:9;14611:22;14590:53;:::i;:::-;14580:63;;14535:118;14186:474;;;;;:::o;14666:182::-;14806:34;14802:1;14794:6;14790:14;14783:58;14666:182;:::o;14854:366::-;14996:3;15017:67;15081:2;15076:3;15017:67;:::i;:::-;15010:74;;15093:93;15182:3;15093:93;:::i;:::-;15211:2;15206:3;15202:12;15195:19;;14854:366;;;:::o;15226:419::-;15392:4;15430:2;15419:9;15415:18;15407:26;;15479:9;15473:4;15469:20;15465:1;15454:9;15450:17;15443:47;15507:131;15633:4;15507:131;:::i;:::-;15499:139;;15226:419;;;:::o;15651:180::-;15699:77;15696:1;15689:88;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15837:320;15881:6;15918:1;15912:4;15908:12;15898:22;;15965:1;15959:4;15955:12;15986:18;15976:81;;16042:4;16034:6;16030:17;16020:27;;15976:81;16104:2;16096:6;16093:14;16073:18;16070:38;16067:84;;16123:18;;:::i;:::-;16067:84;15888:269;15837:320;;;:::o;16163:180::-;16303:32;16299:1;16291:6;16287:14;16280:56;16163:180;:::o;16349:366::-;16491:3;16512:67;16576:2;16571:3;16512:67;:::i;:::-;16505:74;;16588:93;16677:3;16588:93;:::i;:::-;16706:2;16701:3;16697:12;16690:19;;16349:366;;;:::o;16721:419::-;16887:4;16925:2;16914:9;16910:18;16902:26;;16974:9;16968:4;16964:20;16960:1;16949:9;16945:17;16938:47;17002:131;17128:4;17002:131;:::i;:::-;16994:139;;16721:419;;;:::o;17146:221::-;17286:34;17282:1;17274:6;17270:14;17263:58;17355:4;17350:2;17342:6;17338:15;17331:29;17146:221;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:180::-;18218:77;18215:1;18208:88;18315:4;18312:1;18305:15;18339:4;18336:1;18329:15;18356:180;18404:77;18401:1;18394:88;18501:4;18498:1;18491:15;18525:4;18522:1;18515:15;18542:348;18582:7;18605:20;18623:1;18605:20;:::i;:::-;18600:25;;18639:20;18657:1;18639:20;:::i;:::-;18634:25;;18827:1;18759:66;18755:74;18752:1;18749:81;18744:1;18737:9;18730:17;18726:105;18723:131;;;18834:18;;:::i;:::-;18723:131;18882:1;18879;18875:9;18864:20;;18542:348;;;;:::o;18896:233::-;18935:3;18958:24;18976:5;18958:24;:::i;:::-;18949:33;;19004:66;18997:5;18994:77;18991:103;;19074:18;;:::i;:::-;18991:103;19121:1;19114:5;19110:13;19103:20;;18896:233;;;:::o;19135:143::-;19192:5;19223:6;19217:13;19208:22;;19239:33;19266:5;19239:33;:::i;:::-;19135:143;;;;:::o;19284:351::-;19354:6;19403:2;19391:9;19382:7;19378:23;19374:32;19371:119;;;19409:79;;:::i;:::-;19371:119;19529:1;19554:64;19610:7;19601:6;19590:9;19586:22;19554:64;:::i;:::-;19544:74;;19500:128;19284:351;;;;:::o;19641:332::-;19762:4;19800:2;19789:9;19785:18;19777:26;;19813:71;19881:1;19870:9;19866:17;19857:6;19813:71;:::i;:::-;19894:72;19962:2;19951:9;19947:18;19938:6;19894:72;:::i;:::-;19641:332;;;;;:::o;19979:137::-;20033:5;20064:6;20058:13;20049:22;;20080:30;20104:5;20080:30;:::i;:::-;19979:137;;;;:::o;20122:345::-;20189:6;20238:2;20226:9;20217:7;20213:23;20209:32;20206:119;;;20244:79;;:::i;:::-;20206:119;20364:1;20389:61;20442:7;20433:6;20422:9;20418:22;20389:61;:::i;:::-;20379:71;;20335:125;20122:345;;;;:::o;20473:442::-;20622:4;20660:2;20649:9;20645:18;20637:26;;20673:71;20741:1;20730:9;20726:17;20717:6;20673:71;:::i;:::-;20754:72;20822:2;20811:9;20807:18;20798:6;20754:72;:::i;:::-;20836;20904:2;20893:9;20889:18;20880:6;20836:72;:::i;:::-;20473:442;;;;;;:::o;20921:151::-;21061:3;21057:1;21049:6;21045:14;21038:27;20921:151;:::o;21078:365::-;21220:3;21241:66;21305:1;21300:3;21241:66;:::i;:::-;21234:73;;21316:93;21405:3;21316:93;:::i;:::-;21434:2;21429:3;21425:12;21418:19;;21078:365;;;:::o;21449:419::-;21615:4;21653:2;21642:9;21638:18;21630:26;;21702:9;21696:4;21692:20;21688:1;21677:9;21673:17;21666:47;21730:131;21856:4;21730:131;:::i;:::-;21722:139;;21449:419;;;:::o;21874:775::-;22107:4;22145:3;22134:9;22130:19;22122:27;;22159:71;22227:1;22216:9;22212:17;22203:6;22159:71;:::i;:::-;22240:72;22308:2;22297:9;22293:18;22284:6;22240:72;:::i;:::-;22322;22390:2;22379:9;22375:18;22366:6;22322:72;:::i;:::-;22404;22472:2;22461:9;22457:18;22448:6;22404:72;:::i;:::-;22486:73;22554:3;22543:9;22539:19;22530:6;22486:73;:::i;:::-;22569;22637:3;22626:9;22622:19;22613:6;22569:73;:::i;:::-;21874:775;;;;;;;;;:::o;22655:225::-;22795:34;22791:1;22783:6;22779:14;22772:58;22864:8;22859:2;22851:6;22847:15;22840:33;22655:225;:::o;22886:366::-;23028:3;23049:67;23113:2;23108:3;23049:67;:::i;:::-;23042:74;;23125:93;23214:3;23125:93;:::i;:::-;23243:2;23238:3;23234:12;23227:19;;22886:366;;;:::o;23258:419::-;23424:4;23462:2;23451:9;23447:18;23439:26;;23511:9;23505:4;23501:20;23497:1;23486:9;23482:17;23475:47;23539:131;23665:4;23539:131;:::i;:::-;23531:139;;23258:419;;;:::o;23683:225::-;23823:34;23819:1;23811:6;23807:14;23800:58;23892:8;23887:2;23879:6;23875:15;23868:33;23683:225;:::o;23914:366::-;24056:3;24077:67;24141:2;24136:3;24077:67;:::i;:::-;24070:74;;24153:93;24242:3;24153:93;:::i;:::-;24271:2;24266:3;24262:12;24255:19;;23914:366;;;:::o;24286:419::-;24452:4;24490:2;24479:9;24475:18;24467:26;;24539:9;24533:4;24529:20;24525:1;24514:9;24510:17;24503:47;24567:131;24693:4;24567:131;:::i;:::-;24559:139;;24286:419;;;:::o;24711:180::-;24759:77;24756:1;24749:88;24856:4;24853:1;24846:15;24880:4;24877:1;24870:15;24897:185;24937:1;24954:20;24972:1;24954:20;:::i;:::-;24949:25;;24988:20;25006:1;24988:20;:::i;:::-;24983:25;;25027:1;25017:35;;25032:18;;:::i;:::-;25017:35;25074:1;25071;25067:9;25062:14;;24897:185;;;;:::o;25088:227::-;25228:34;25224:1;25216:6;25212:14;25205:58;25297:10;25292:2;25284:6;25280:15;25273:35;25088:227;:::o;25321:366::-;25463:3;25484:67;25548:2;25543:3;25484:67;:::i;:::-;25477:74;;25560:93;25649:3;25560:93;:::i;:::-;25678:2;25673:3;25669:12;25662:19;;25321:366;;;:::o;25693:419::-;25859:4;25897:2;25886:9;25882:18;25874:26;;25946:9;25940:4;25936:20;25932:1;25921:9;25917:17;25910:47;25974:131;26100:4;25974:131;:::i;:::-;25966:139;;25693:419;;;:::o;26118:305::-;26158:3;26177:20;26195:1;26177:20;:::i;:::-;26172:25;;26211:20;26229:1;26211:20;:::i;:::-;26206:25;;26365:1;26297:66;26293:74;26290:1;26287:81;26284:107;;;26371:18;;:::i;:::-;26284:107;26415:1;26412;26408:9;26401:16;;26118:305;;;;:::o;26429:177::-;26569:29;26565:1;26557:6;26553:14;26546:53;26429:177;:::o;26612:366::-;26754:3;26775:67;26839:2;26834:3;26775:67;:::i;:::-;26768:74;;26851:93;26940:3;26851:93;:::i;:::-;26969:2;26964:3;26960:12;26953:19;;26612:366;;;:::o;26984:419::-;27150:4;27188:2;27177:9;27173:18;27165:26;;27237:9;27231:4;27227:20;27223:1;27212:9;27208:17;27201:47;27265:131;27391:4;27265:131;:::i;:::-;27257:139;;26984:419;;;:::o;27409:223::-;27549:34;27545:1;27537:6;27533:14;27526:58;27618:6;27613:2;27605:6;27601:15;27594:31;27409:223;:::o;27638:366::-;27780:3;27801:67;27865:2;27860:3;27801:67;:::i;:::-;27794:74;;27877:93;27966:3;27877:93;:::i;:::-;27995:2;27990:3;27986:12;27979:19;;27638:366;;;:::o;28010:419::-;28176:4;28214:2;28203:9;28199:18;28191:26;;28263:9;28257:4;28253:20;28249:1;28238:9;28234:17;28227:47;28291:131;28417:4;28291:131;:::i;:::-;28283:139;;28010:419;;;:::o;28435:221::-;28575:34;28571:1;28563:6;28559:14;28552:58;28644:4;28639:2;28631:6;28627:15;28620:29;28435:221;:::o;28662:366::-;28804:3;28825:67;28889:2;28884:3;28825:67;:::i;:::-;28818:74;;28901:93;28990:3;28901:93;:::i;:::-;29019:2;29014:3;29010:12;29003:19;;28662:366;;;:::o;29034:419::-;29200:4;29238:2;29227:9;29223:18;29215:26;;29287:9;29281:4;29277:20;29273:1;29262:9;29258:17;29251:47;29315:131;29441:4;29315:131;:::i;:::-;29307:139;;29034:419;;;:::o;29459:224::-;29599:34;29595:1;29587:6;29583:14;29576:58;29668:7;29663:2;29655:6;29651:15;29644:32;29459:224;:::o;29689:366::-;29831:3;29852:67;29916:2;29911:3;29852:67;:::i;:::-;29845:74;;29928:93;30017:3;29928:93;:::i;:::-;30046:2;30041:3;30037:12;30030:19;;29689:366;;;:::o;30061:419::-;30227:4;30265:2;30254:9;30250:18;30242:26;;30314:9;30308:4;30304:20;30300:1;30289:9;30285:17;30278:47;30342:131;30468:4;30342:131;:::i;:::-;30334:139;;30061:419;;;:::o;30486:222::-;30626:34;30622:1;30614:6;30610:14;30603:58;30695:5;30690:2;30682:6;30678:15;30671:30;30486:222;:::o;30714:366::-;30856:3;30877:67;30941:2;30936:3;30877:67;:::i;:::-;30870:74;;30953:93;31042:3;30953:93;:::i;:::-;31071:2;31066:3;31062:12;31055:19;;30714:366;;;:::o;31086:419::-;31252:4;31290:2;31279:9;31275:18;31267:26;;31339:9;31333:4;31329:20;31325:1;31314:9;31310:17;31303:47;31367:131;31493:4;31367:131;:::i;:::-;31359:139;;31086:419;;;:::o;31511:225::-;31651:34;31647:1;31639:6;31635:14;31628:58;31720:8;31715:2;31707:6;31703:15;31696:33;31511:225;:::o;31742:366::-;31884:3;31905:67;31969:2;31964:3;31905:67;:::i;:::-;31898:74;;31981:93;32070:3;31981:93;:::i;:::-;32099:2;32094:3;32090:12;32083:19;;31742:366;;;:::o;32114:419::-;32280:4;32318:2;32307:9;32303:18;32295:26;;32367:9;32361:4;32357:20;32353:1;32342:9;32338:17;32331:47;32395:131;32521:4;32395:131;:::i;:::-;32387:139;;32114:419;;;:::o;32539:223::-;32679:34;32675:1;32667:6;32663:14;32656:58;32748:6;32743:2;32735:6;32731:15;32724:31;32539:223;:::o;32768:366::-;32910:3;32931:67;32995:2;32990:3;32931:67;:::i;:::-;32924:74;;33007:93;33096:3;33007:93;:::i;:::-;33125:2;33120:3;33116:12;33109:19;;32768:366;;;:::o;33140:419::-;33306:4;33344:2;33333:9;33329:18;33321:26;;33393:9;33387:4;33383:20;33379:1;33368:9;33364:17;33357:47;33421:131;33547:4;33421:131;:::i;:::-;33413:139;;33140:419;;;:::o;33565:182::-;33705:34;33701:1;33693:6;33689:14;33682:58;33565:182;:::o;33753:366::-;33895:3;33916:67;33980:2;33975:3;33916:67;:::i;:::-;33909:74;;33992:93;34081:3;33992:93;:::i;:::-;34110:2;34105:3;34101:12;34094:19;;33753:366;;;:::o;34125:419::-;34291:4;34329:2;34318:9;34314:18;34306:26;;34378:9;34372:4;34368:20;34364:1;34353:9;34349:17;34342:47;34406:131;34532:4;34406:131;:::i;:::-;34398:139;;34125:419;;;:::o;34550:172::-;34690:24;34686:1;34678:6;34674:14;34667:48;34550:172;:::o;34728:366::-;34870:3;34891:67;34955:2;34950:3;34891:67;:::i;:::-;34884:74;;34967:93;35056:3;34967:93;:::i;:::-;35085:2;35080:3;35076:12;35069:19;;34728:366;;;:::o;35100:419::-;35266:4;35304:2;35293:9;35289:18;35281:26;;35353:9;35347:4;35343:20;35339:1;35328:9;35324:17;35317:47;35381:131;35507:4;35381:131;:::i;:::-;35373:139;;35100:419;;;:::o;35525:168::-;35665:20;35661:1;35653:6;35649:14;35642:44;35525:168;:::o;35699:366::-;35841:3;35862:67;35926:2;35921:3;35862:67;:::i;:::-;35855:74;;35938:93;36027:3;35938:93;:::i;:::-;36056:2;36051:3;36047:12;36040:19;;35699:366;;;:::o;36071:419::-;36237:4;36275:2;36264:9;36260:18;36252:26;;36324:9;36318:4;36314:20;36310:1;36299:9;36295:17;36288:47;36352:131;36478:4;36352:131;:::i;:::-;36344:139;;36071:419;;;:::o;36496:174::-;36636:26;36632:1;36624:6;36620:14;36613:50;36496:174;:::o;36676:366::-;36818:3;36839:67;36903:2;36898:3;36839:67;:::i;:::-;36832:74;;36915:93;37004:3;36915:93;:::i;:::-;37033:2;37028:3;37024:12;37017:19;;36676:366;;;:::o;37048:419::-;37214:4;37252:2;37241:9;37237:18;37229:26;;37301:9;37295:4;37291:20;37287:1;37276:9;37272:17;37265:47;37329:131;37455:4;37329:131;:::i;:::-;37321:139;;37048:419;;;:::o;37473:170::-;37613:22;37609:1;37601:6;37597:14;37590:46;37473:170;:::o;37649:366::-;37791:3;37812:67;37876:2;37871:3;37812:67;:::i;:::-;37805:74;;37888:93;37977:3;37888:93;:::i;:::-;38006:2;38001:3;37997:12;37990:19;;37649:366;;;:::o;38021:419::-;38187:4;38225:2;38214:9;38210:18;38202:26;;38274:9;38268:4;38264:20;38260:1;38249:9;38245:17;38238:47;38302:131;38428:4;38302:131;:::i;:::-;38294:139;;38021:419;;;:::o;38446:223::-;38586:34;38582:1;38574:6;38570:14;38563:58;38655:6;38650:2;38642:6;38638:15;38631:31;38446:223;:::o;38675:366::-;38817:3;38838:67;38902:2;38897:3;38838:67;:::i;:::-;38831:74;;38914:93;39003:3;38914:93;:::i;:::-;39032:2;39027:3;39023:12;39016:19;;38675:366;;;:::o;39047:419::-;39213:4;39251:2;39240:9;39236:18;39228:26;;39300:9;39294:4;39290:20;39286:1;39275:9;39271:17;39264:47;39328:131;39454:4;39328:131;:::i;:::-;39320:139;;39047:419;;;:::o;39472:191::-;39512:4;39532:20;39550:1;39532:20;:::i;:::-;39527:25;;39566:20;39584:1;39566:20;:::i;:::-;39561:25;;39605:1;39602;39599:8;39596:34;;;39610:18;;:::i;:::-;39596:34;39655:1;39652;39648:9;39640:17;;39472:191;;;;:::o;39669:220::-;39809:34;39805:1;39797:6;39793:14;39786:58;39878:3;39873:2;39865:6;39861:15;39854:28;39669:220;:::o;39895:366::-;40037:3;40058:67;40122:2;40117:3;40058:67;:::i;:::-;40051:74;;40134:93;40223:3;40134:93;:::i;:::-;40252:2;40247:3;40243:12;40236:19;;39895:366;;;:::o;40267:419::-;40433:4;40471:2;40460:9;40456:18;40448:26;;40520:9;40514:4;40510:20;40506:1;40495:9;40491:17;40484:47;40548:131;40674:4;40548:131;:::i;:::-;40540:139;;40267:419;;;:::o;40692:85::-;40737:7;40766:5;40755:16;;40692:85;;;:::o;40783:158::-;40841:9;40874:61;40892:42;40901:32;40927:5;40901:32;:::i;:::-;40892:42;:::i;:::-;40874:61;:::i;:::-;40861:74;;40783:158;;;:::o;40947:147::-;41042:45;41081:5;41042:45;:::i;:::-;41037:3;41030:58;40947:147;;:::o;41100:114::-;41167:6;41201:5;41195:12;41185:22;;41100:114;;;:::o;41220:184::-;41319:11;41353:6;41348:3;41341:19;41393:4;41388:3;41384:14;41369:29;;41220:184;;;;:::o;41410:132::-;41477:4;41500:3;41492:11;;41530:4;41525:3;41521:14;41513:22;;41410:132;;;:::o;41548:108::-;41625:24;41643:5;41625:24;:::i;:::-;41620:3;41613:37;41548:108;;:::o;41662:179::-;41731:10;41752:46;41794:3;41786:6;41752:46;:::i;:::-;41830:4;41825:3;41821:14;41807:28;;41662:179;;;;:::o;41847:113::-;41917:4;41949;41944:3;41940:14;41932:22;;41847:113;;;:::o;41996:732::-;42115:3;42144:54;42192:5;42144:54;:::i;:::-;42214:86;42293:6;42288:3;42214:86;:::i;:::-;42207:93;;42324:56;42374:5;42324:56;:::i;:::-;42403:7;42434:1;42419:284;42444:6;42441:1;42438:13;42419:284;;;42520:6;42514:13;42547:63;42606:3;42591:13;42547:63;:::i;:::-;42540:70;;42633:60;42686:6;42633:60;:::i;:::-;42623:70;;42479:224;42466:1;42463;42459:9;42454:14;;42419:284;;;42423:14;42719:3;42712:10;;42120:608;;;41996:732;;;;:::o;42734:831::-;42997:4;43035:3;43024:9;43020:19;43012:27;;43049:71;43117:1;43106:9;43102:17;43093:6;43049:71;:::i;:::-;43130:80;43206:2;43195:9;43191:18;43182:6;43130:80;:::i;:::-;43257:9;43251:4;43247:20;43242:2;43231:9;43227:18;43220:48;43285:108;43388:4;43379:6;43285:108;:::i;:::-;43277:116;;43403:72;43471:2;43460:9;43456:18;43447:6;43403:72;:::i;:::-;43485:73;43553:3;43542:9;43538:19;43529:6;43485:73;:::i;:::-;42734:831;;;;;;;;:::o;43588:732::-;43695:5;43720:81;43736:64;43793:6;43736:64;:::i;:::-;43720:81;:::i;:::-;43711:90;;43821:5;43850:6;43843:5;43836:21;43884:4;43877:5;43873:16;43866:23;;43937:4;43929:6;43925:17;43917:6;43913:30;43966:3;43958:6;43955:15;43952:122;;;43985:79;;:::i;:::-;43952:122;44100:6;44083:231;44117:6;44112:3;44109:15;44083:231;;;44192:3;44221:48;44265:3;44253:10;44221:48;:::i;:::-;44216:3;44209:61;44299:4;44294:3;44290:14;44283:21;;44159:155;44143:4;44138:3;44134:14;44127:21;;44083:231;;;44087:21;43701:619;;43588:732;;;;;:::o;44343:385::-;44425:5;44474:3;44467:4;44459:6;44455:17;44451:27;44441:122;;44482:79;;:::i;:::-;44441:122;44592:6;44586:13;44617:105;44718:3;44710:6;44703:4;44695:6;44691:17;44617:105;:::i;:::-;44608:114;;44431:297;44343:385;;;;:::o;44734:554::-;44829:6;44878:2;44866:9;44857:7;44853:23;44849:32;44846:119;;;44884:79;;:::i;:::-;44846:119;45025:1;45014:9;45010:17;45004:24;45055:18;45047:6;45044:30;45041:117;;;45077:79;;:::i;:::-;45041:117;45182:89;45263:7;45254:6;45243:9;45239:22;45182:89;:::i;:::-;45172:99;;44975:306;44734:554;;;;:::o

Swarm Source

ipfs://5bdfaabffb9e32713affdad86a16241ceb06b245648eb3a2b5278e5affcc8607
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.