ETH Price: $2,295.37 (-5.21%)

Token

Pink Banana (PinkB)
 

Overview

Max Total Supply

1,000,000,000 PinkB

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000031445315 PinkB

Value
$0.00
0x1e3d1e391a85435073780a2f4c4ae417419705c2
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:
PinkBanana

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

  _____ _       _      ____                                 
 |  __ (_)     | |    |  _ \                                
 | |__) _ _ __ | | __ | |_) | __ _ _ __   __ _ _ __   __ _  
 |  ___| | '_ \| |/ / |  _ < / _` | '_ \ / _` | '_ \ / _` | 
 | |   | | | | |   <  | |_) | (_| | | | | (_| | | | | (_| | 
 |_|   |_|_| |_|_|\_\ |____/ \__,_|_| |_|\__,_|_| |_|\__,_| 
                                                            

More information at PinkBananaToken.io 
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17; // latest version
abstract contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

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

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        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 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;
}

pragma solidity ^0.8.13;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

contract DividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 USDTReward = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); // Rewards in USDT
    address wETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //Uses the wETH token.
 
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 45 * 60;
    uint256 public minDistribution = 1 * (10 ** 8);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = IDEXRouter(_router);
        _token = msg.sender;
    }

    function setNewRouter(address newRouter) external onlyToken {
        require(newRouter != address(router));
        router = IDEXRouter(newRouter);
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable onlyToken {
        uint256 balanceBefore = USDTReward.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = wETH;
        path[1] = address(USDTReward);

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

        uint256 amount = USDTReward.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            USDTReward.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

/**
    Tradable.sol

    A contract designed to simplify creating a DEX-tradable token,
    with an adjustable max wallet and max transaction amount.
*/

abstract contract Tradable is IERC20, Owned {
    using SafeMath for uint256;

    struct TokenDistribution {
        uint256 totalSupply;
        uint8 decimals;
        uint256 maxBalance;
        uint256 maxTx;
    }

    uint256 public _totalSupply;
    uint8 public _decimals;
    string public _symbol;
    string public _name;
    uint256 public _maxBalance;
    uint256 public _maxTx;
    //
    IDEXRouter public router;
    address public pair;
    //
    DividendDistributor public distributor;
    uint256 distributorGas = 500000;
    //
    mapping (address => uint256) public _balances;
    //
    mapping (address => mapping (address => uint256)) public _allowances;
    //
    mapping (address => bool) public _isDividendExempt;
    //
    mapping (address => bool) public _isExcludedFromMaxBalance;
    //
    mapping (address => bool) public _isExcludedFromMaxTx;

    constructor(string memory tokenSymbol, string memory tokenName, TokenDistribution memory tokenDistribution) {
        _totalSupply = tokenDistribution.totalSupply;
        _decimals = tokenDistribution.decimals;
        _symbol = tokenSymbol;
        _name = tokenName;
        _maxBalance = tokenDistribution.maxBalance;
        _maxTx = tokenDistribution.maxTx;

        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this)); // Create a uniswap pair for this new token

        distributor = new DividendDistributor(address(router));

        _isDividendExempt[pair] = true;
        _isDividendExempt[address(this)] = true;

        _isExcludedFromMaxBalance[owner] = true;
        _isExcludedFromMaxBalance[address(this)] = true;
        _isExcludedFromMaxBalance[pair] = true;

        _isExcludedFromMaxTx[owner] = true;
        _isExcludedFromMaxTx[address(this)] = true;
    }

    // To recieve wETH from anyone, including the router when swapping
    receive() external payable {}

    // If you need to withdraw eth, tokens, or anything else that's been sent to the contract
    function withdrawToken(address _tokenContract, uint256 _amount) external onlyOwner {
        IERC20 tokenContract = IERC20(_tokenContract);

        // transfer the token from address of this contract
        // to address of the user (executing the withdrawToken() function)
        tokenContract.transfer(msg.sender, _amount);
    }

    // If PancakeSwap sets a new iteration on their router and we need to migrate where LP
    // goes, change it here!
    function setNewPair(address newPairAddress) external onlyOwner {
        require(newPairAddress != pair);
        pair = newPairAddress;
        _isExcludedFromMaxBalance[pair] = true;
    }

    // If PancakeSwap sets a new iteration on their router, change it here!
    function setNewRouter(address newAddress) external onlyOwner {
        require(newAddress != address(router));
        router = IDEXRouter(newAddress);
        distributor.setNewRouter(newAddress);
    }

    function setMaxBalancePercentage(uint256 newMaxBalancePercentage) external onlyOwner() {
        uint256 newMaxBalance = _totalSupply.mul(newMaxBalancePercentage).div(100);

        require(newMaxBalance != _maxBalance, "Cannot set new max balance to the same value as current max balance");
        require(newMaxBalance >= _totalSupply.mul(2).div(200), "Cannot set max balance lower than 1 percent");

        _maxBalance = newMaxBalance;
    }

    function setMaxTxPercentage(uint256 newMaxTxPercentage) external onlyOwner {
        uint256 newMaxTx = _totalSupply.mul(newMaxTxPercentage).div(1000);

        require(newMaxTx != _maxTx, "Cannot set new max transaction to the same value as current max transaction");
        require(newMaxTx >= _totalSupply.mul(5).div(2500), "Cannot set max transaction lower than 0.2 percent");

        _maxTx = newMaxTx;
    }

    function excludeFromMaxBalance(address account, bool exempt) public onlyOwner {
        _isExcludedFromMaxBalance[account] = exempt;
    }

    function excludeFromMaxTx(address account, bool exempt) public onlyOwner {
        _isExcludedFromMaxTx[account] = exempt;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && holder != pair);
        _isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 900000);
        distributorGas = gas;
    }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _symbol; }
    function name() external view returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; }

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

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

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

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

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

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

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

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

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

        if(!(_isExcludedFromMaxTx[from] || _isExcludedFromMaxTx[to])) {
            require(amount < _maxTx, "Transfer amount exceeds limit");
        }

        if(
            from != owner &&              // Not from Owner
            to != owner &&                // Not to Owner
            !_isExcludedFromMaxBalance[to]  // is excludedFromMaxBalance
        ) {
            require(balanceOf(to).add(amount) <= _maxBalance, "Tx would cause recipient to exceed max balance");
        }

        _balances[from] = _balances[from].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[to] = _balances[to].add(amount);

        // Dividend tracker
        if(!_isDividendExempt[from]) {
            try distributor.setShare(from, balanceOf(from)) {} catch {}
        }

        if(!_isDividendExempt[to]) {
            try distributor.setShare(to, balanceOf(to)) {} catch {}
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(from, to, amount);
    }
}

/**
    Taxable.sol

    A contract designed to make a Tradable token that also has
    taxes, which go to Treasury, marketing, and liquidity.
    These taxes are adjustable, and can be split differently
    for buys and sells.

    The constructor requires the instantiator to set a max dev
    fee and a max tax limit, which will enable the developer
    to inform their community that there is a limit to how
    high the token can be taxed.
*/

abstract contract Taxable is Owned, Tradable {
    using SafeMath for uint256;

    struct Taxes {
        uint8 TreasuryFee;
        uint8 rewardsFee;
        uint8 marketingFee;
        uint8 BuybackBurnFee;
        uint8 liqFee;
    }

    uint8 constant BUYTX = 1;
    uint8 constant SELLTX = 2;
    //
    address payable public _TreasuryAddress;
    address payable public _marketingAddress;
    address payable public _BuybackBurnAddress;
    //
    uint256 public _liquifyThreshhold;
    bool inSwapAndLiquify;
    //
    uint8 public _maxFees;
    uint8 public _maxTreasuryFee;
    //
    Taxes public _buyTaxes;
    uint8 public _totalBuyTaxes;
    Taxes public _sellTaxes;
    uint8 public _totalSellTaxes;
    //
    uint256 private _TreasuryTokensCollected;
    uint256 private _rewardsTokensCollected;
    uint256 private _marketingTokensCollected;
    uint256 private _BuybackBurnTokensCollected;
    uint256 private _liqTokensCollected;
    //
    mapping (address => bool) private _isExcludedFromFees;

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(string memory symbol,
                string memory name,
                TokenDistribution memory tokenDistribution,
                address payable TreasuryAddress,
                address payable marketingAddress,
                address payable BuybackBurnAddress,
                Taxes memory buyTaxes,
                Taxes memory sellTaxes,
                uint8 maxFees,
                uint8 maxTreasuryFee,
                uint256 liquifyThreshhold)
    Tradable(symbol, name, tokenDistribution) {
        _TreasuryAddress = TreasuryAddress;
        _marketingAddress = marketingAddress;
        _BuybackBurnAddress = BuybackBurnAddress;
        _buyTaxes = buyTaxes;
        _sellTaxes = sellTaxes;
        _totalBuyTaxes = buyTaxes.TreasuryFee + buyTaxes.rewardsFee + buyTaxes.marketingFee + buyTaxes.BuybackBurnFee + buyTaxes.liqFee;
        _totalSellTaxes = sellTaxes.TreasuryFee + sellTaxes.rewardsFee + sellTaxes.marketingFee + sellTaxes.BuybackBurnFee + sellTaxes.liqFee;
        _maxFees = maxFees;
        _maxTreasuryFee = maxTreasuryFee;
        _liquifyThreshhold = liquifyThreshhold;

        _isExcludedFromFees[owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingAddress] = true;
        _isExcludedFromFees[TreasuryAddress] = true;
        _isExcludedFromFees[BuybackBurnAddress] = true;
    }

    function setMarketingAddress(address payable newMarketingAddress) external onlyOwner() {
        require(newMarketingAddress != _marketingAddress);
        _marketingAddress = newMarketingAddress;
    }

    function setTreasuryAddress(address payable newTreasuryAddress) external onlyOwner() {
        require(newTreasuryAddress != _TreasuryAddress);
        _TreasuryAddress = newTreasuryAddress;
    }

    function setBuybackBurnAddress(address payable newBuybackBurnAddress) external onlyOwner() {
        require(newBuybackBurnAddress != _BuybackBurnAddress);
        _BuybackBurnAddress = newBuybackBurnAddress;
    }

    function includeInFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = false;
    }

    function excludeFromFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = true;
    }

    function setBuyFees(uint8 newTreasuryBuyFee, uint8 newRewardsBuyFee, uint8 newMarketingBuyFee, uint8 newBuybackBurnBuyFee, uint8 newLiqBuyFee) external onlyOwner {
        uint8 newTotalBuyFees = newTreasuryBuyFee + newRewardsBuyFee + newMarketingBuyFee + newBuybackBurnBuyFee + newLiqBuyFee;
        require(!inSwapAndLiquify, "inSwapAndLiquify");
        require(newTreasuryBuyFee <= _maxTreasuryFee, "Cannot set Treasury fee higher than max");
        require(newTotalBuyFees <= _maxFees, "Cannot set total buy fees higher than max");

        _buyTaxes = Taxes({ TreasuryFee: newTreasuryBuyFee, rewardsFee: newRewardsBuyFee, marketingFee: newMarketingBuyFee,
            BuybackBurnFee: newBuybackBurnBuyFee, liqFee: newLiqBuyFee });
        _totalBuyTaxes = newTotalBuyFees;
    }

    function setSellFees(uint8 newTreasurySellFee, uint8 newRewardsSellFee, uint8 newMarketingSellFee, uint8 newBuybackBurnSellFee, uint8 newLiqSellFee) external onlyOwner {
        uint8 newTotalSellFees = newTreasurySellFee + newRewardsSellFee + newMarketingSellFee + newBuybackBurnSellFee + newLiqSellFee;
        require(!inSwapAndLiquify, "inSwapAndLiquify");
        require(newTreasurySellFee <= _maxTreasuryFee, "Cannot set Treasury fee higher than max");
        require(newTotalSellFees <= _maxFees, "Cannot set total sell fees higher than max");

        _sellTaxes = Taxes({ TreasuryFee: newTreasurySellFee, rewardsFee: newRewardsSellFee, marketingFee: newMarketingSellFee,
            BuybackBurnFee: newBuybackBurnSellFee, liqFee: newLiqSellFee });
        _totalSellTaxes = newTotalSellFees;
    }

    function setLiquifyThreshhold(uint256 newLiquifyThreshhold) external onlyOwner {
        _liquifyThreshhold = newLiquifyThreshhold;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transferWithTaxes(msg.sender, recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transferWithTaxes(sender, recipient, amount);
        approveFromOwner(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

        if(
            from != owner &&              // Not from Owner
            to != owner &&                // Not to Owner
            !_isExcludedFromMaxBalance[to]  // is excludedFromMaxBalance
        ) {
            require(balanceOf(to).add(amount) <= _maxBalance, "Tx would cause wallet to exceed max balance");
        }

        // Sell tokens for funding
        if(
            !inSwapAndLiquify &&                                // Swap is not locked
            balanceOf(address(this)) >= _liquifyThreshhold &&   // liquifyThreshhold is reached
            from != pair                                        // Not from liq pool (can't sell during a buy)
        ) {
            swapCollectedFeesForFunding();
        }

        // Send fees to contract if necessary
        uint8 txType = 0;
        if (from == pair) txType = BUYTX;
        if (to == pair) txType = SELLTX;
        if(
            txType != 0 &&
            !(_isExcludedFromFees[from] || _isExcludedFromFees[to])
            && ((txType == BUYTX && _totalBuyTaxes > 0)
            || (txType == SELLTX && _totalSellTaxes > 0))
        ) {
            uint256 feesToContract = calculateTotalFees(amount, txType);

            if (feesToContract > 0) {
                amount = amount.sub(feesToContract);
                _transfer(from, address(this), feesToContract);
            }
        }

        _transfer(from, to, amount);
    }

    function calculateTotalFees(uint256 amount, uint8 txType) private returns (uint256) {
        uint256 TreasuryTokens = (txType == BUYTX) ? amount.mul(_buyTaxes.TreasuryFee).div(100) : amount.mul(_sellTaxes.TreasuryFee).div(100);
        uint256 rewardsTokens = (txType == BUYTX) ? amount.mul(_buyTaxes.rewardsFee).div(100) : amount.mul(_sellTaxes.rewardsFee).div(100);
        uint256 marketingTokens = (txType == BUYTX) ? amount.mul(_buyTaxes.marketingFee).div(100) : amount.mul(_sellTaxes.marketingFee).div(100);
        uint256 BuybackBurnTokens = (txType == BUYTX) ? amount.mul(_buyTaxes.BuybackBurnFee).div(100) : amount.mul(_sellTaxes.BuybackBurnFee).div(100);
        uint256 liqTokens = (txType == BUYTX) ? amount.mul(_buyTaxes.liqFee).div(100) : amount.mul(_sellTaxes.liqFee).div(100);

        _TreasuryTokensCollected = _TreasuryTokensCollected.add(TreasuryTokens);
        _rewardsTokensCollected = _rewardsTokensCollected.add(rewardsTokens);
        _marketingTokensCollected = _marketingTokensCollected.add(marketingTokens);
        _BuybackBurnTokensCollected = _BuybackBurnTokensCollected.add(BuybackBurnTokens);
        _liqTokensCollected = _liqTokensCollected.add(liqTokens);

        return TreasuryTokens.add(rewardsTokens).add(marketingTokens).add(BuybackBurnTokens).add(liqTokens);
    }

    function swapCollectedFeesForFunding() private lockTheSwap {
        uint256 totalCollected = _TreasuryTokensCollected.add(_marketingTokensCollected).add(_liqTokensCollected)
            .add(_BuybackBurnTokensCollected).add(_liqTokensCollected);
        require(totalCollected > 0, "No tokens available to swap");

        uint256 initialFunds = address(this).balance;

        uint256 halfLiq = _liqTokensCollected.div(2);
        uint256 otherHalfLiq = _liqTokensCollected.sub(halfLiq);

        uint256 totalAmountToSwap = _TreasuryTokensCollected.add(_rewardsTokensCollected).add(_marketingTokensCollected)
            .add(_BuybackBurnTokensCollected).add(halfLiq);

        swapTokensForNative(totalAmountToSwap);

        uint256 newFunds = address(this).balance.sub(initialFunds);

        uint256 liqFunds = newFunds.mul(halfLiq).div(totalAmountToSwap);
        uint256 marketingFunds = newFunds.mul(_marketingTokensCollected).div(totalAmountToSwap);
        uint256 rewardsFunds = newFunds.mul(_rewardsTokensCollected).div(totalAmountToSwap);
        uint256 BuybackBurnFunds = newFunds.mul(_BuybackBurnTokensCollected).div(totalAmountToSwap);
        uint256 TreasuryFunds = newFunds.sub(liqFunds).sub(marketingFunds).sub(rewardsFunds).sub(BuybackBurnFunds);

        addLiquidity(otherHalfLiq, liqFunds);
        (bool sent, bytes memory data) = _TreasuryAddress.call{value: TreasuryFunds}("");
        (bool sent1, bytes memory data1) = _marketingAddress.call{value: marketingFunds}("");
        (bool sent2, bytes memory data2) = _BuybackBurnAddress.call{value: BuybackBurnFunds}("");
        require(sent && sent1 && sent2, "Failed to send ETH");
        try distributor.deposit{value: rewardsFunds}() {} catch {}

        _TreasuryTokensCollected = 0;
        _marketingTokensCollected = 0;
        _liqTokensCollected = 0;
        _rewardsTokensCollected = 0;
        _BuybackBurnTokensCollected = 0;
    }

    function swapTokensForNative(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        approveFromOwner(address(this), address(router), tokenAmount);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        approveFromOwner(address(this), address(router), tokenAmount);

        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0),
            block.timestamp
        );
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract PinkBanana is Context, Owned, Taxable {
	using SafeMath for uint256;
	using Address for address;

    string private _Bname = "Pink Banana";
    string private _Bsymbol = "PinkB";
    // 18 Decimals
    uint8 private _Bdecimals = 18;
    // 1B Supply
    uint256 private _BtotalSupply = 1_000_000_000 * 10**_Bdecimals;
    // 2.5% Max Wallet
    uint256 private _BmaxBalance = _BtotalSupply.mul(5).div(200);
    // 0.2% Max Transaction
    uint256 private _BmaxTx = _BtotalSupply.mul(10).div(5000);
    // 20% Max Fees
    uint8 private _BmaxFees = 20;
    // 5% Max Treasury Fee
    uint8 private _BmaxTreasuryFee = 5;
    // Contract sell at 0.01% tokens
    uint256 private _BliquifyThreshhold = 1 * 10**6 * 10**_Bdecimals;
    TokenDistribution private _BtokenDistribution =
        TokenDistribution({ totalSupply: _BtotalSupply, decimals: _Bdecimals, maxBalance: _BmaxBalance, maxTx: _BmaxTx });

    address payable _BTreasuryAddress = payable(address(0x342474817c35ce76a9f0Fa98f4d99fB094bA4DC2));
    address payable _BmarketingAddress = payable(address(0xad5557F85c64607518b1e2750034475cA26F8bAA));
    address payable _BBuybackBurnAddress = payable(address(0xc9aA5eaaf07Ac9701105a423f3B89edec3aeb3A7));

    // Buy and sell fees will start at 99% to prevent bots/snipers at launch,
    // but will not be allowed to be set this high ever again.
    constructor ()
    Owned(_msgSender())
    Taxable(_Bsymbol, _Bname, _BtokenDistribution, _BTreasuryAddress, _BmarketingAddress, _BBuybackBurnAddress,
            Taxes({ TreasuryFee: 1, rewardsFee: 2, marketingFee: 32, BuybackBurnFee: 3, liqFee: 61 }),
            Taxes({ TreasuryFee: 1, rewardsFee: 2, marketingFee: 32, BuybackBurnFee: 3, liqFee: 61 }),
            _BmaxFees, _BmaxTreasuryFee, _BliquifyThreshhold) {
        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_BuybackBurnAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TreasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint8","name":"TreasuryFee","type":"uint8"},{"internalType":"uint8","name":"rewardsFee","type":"uint8"},{"internalType":"uint8","name":"marketingFee","type":"uint8"},{"internalType":"uint8","name":"BuybackBurnFee","type":"uint8"},{"internalType":"uint8","name":"liqFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquifyThreshhold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTreasuryFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint8","name":"TreasuryFee","type":"uint8"},{"internalType":"uint8","name":"rewardsFee","type":"uint8"},{"internalType":"uint8","name":"marketingFee","type":"uint8"},{"internalType":"uint8","name":"BuybackBurnFee","type":"uint8"},{"internalType":"uint8","name":"liqFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuyTaxes","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSellTaxes","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveFromOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"excludeFromMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"newTreasuryBuyFee","type":"uint8"},{"internalType":"uint8","name":"newRewardsBuyFee","type":"uint8"},{"internalType":"uint8","name":"newMarketingBuyFee","type":"uint8"},{"internalType":"uint8","name":"newBuybackBurnBuyFee","type":"uint8"},{"internalType":"uint8","name":"newLiqBuyFee","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newBuybackBurnAddress","type":"address"}],"name":"setBuybackBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquifyThreshhold","type":"uint256"}],"name":"setLiquifyThreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBalancePercentage","type":"uint256"}],"name":"setMaxBalancePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxPercentage","type":"uint256"}],"name":"setMaxTxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"name":"setNewPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newTreasurySellFee","type":"uint8"},{"internalType":"uint8","name":"newRewardsSellFee","type":"uint8"},{"internalType":"uint8","name":"newMarketingSellFee","type":"uint8"},{"internalType":"uint8","name":"newBuybackBurnSellFee","type":"uint8"},{"internalType":"uint8","name":"newLiqSellFee","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newTreasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526207a120600b556040518060400160405280600b81526020017f50696e6b2042616e616e610000000000000000000000000000000000000000008152506020908162000051919062001582565b506040518060400160405280600581526020017f50696e6b420000000000000000000000000000000000000000000000000000008152506021908162000098919062001582565b506012602260006101000a81548160ff021916908360ff160217905550602260009054906101000a900460ff16600a620000d39190620017f9565b633b9aca00620000e491906200184a565b6023556200011e60c86200010a6005602354620012c260201b6200289c1790919060201c565b620012da60201b620028b21790919060201c565b6024556200015961138862000145600a602354620012c260201b6200289c1790919060201c565b620012da60201b620028b21790919060201c565b6025556014602660006101000a81548160ff021916908360ff1602179055506005602660016101000a81548160ff021916908360ff160217905550602260009054906101000a900460ff16600a620001b29190620017f9565b620f4240620001c291906200184a565b60275560405180608001604052806023548152602001602260009054906101000a900460ff1660ff168152602001602454815260200160255481525060286000820151816000015560208201518160010160006101000a81548160ff021916908360ff1602179055506040820151816002015560608201518160030155505073342474817c35ce76a9f0fa98f4d99fb094ba4dc2602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ad5557f85c64607518b1e2750034475ca26f8baa602d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c9aa5eaaf07ac9701105a423f3b89edec3aeb3a7602e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200034d57600080fd5b50602180546200035d9062001371565b80601f01602080910402602001604051908101604052809291908181526020018280546200038b9062001371565b8015620003dc5780601f10620003b057610100808354040283529160200191620003dc565b820191906000526020600020905b815481529060010190602001808311620003be57829003601f168201915b505050505060208054620003f09062001371565b80601f01602080910402602001604051908101604052809291908181526020018280546200041e9062001371565b80156200046f5780601f1062000443576101008083540402835291602001916200046f565b820191906000526020600020905b8154815290600101906020018083116200045157829003601f168201915b50505050506028604051806080016040529081600082015481526020016001820160009054906101000a900460ff1660ff1660ff16815260200160028201548152602001600382015481525050602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060a00160405280600160ff168152602001600260ff168152602001602060ff168152602001600360ff168152602001603d60ff168152506040518060a00160405280600160ff168152602001600260ff168152602001602060ff168152602001600360ff168152602001603d60ff16815250602660009054906101000a900460ff16602660019054906101000a900460ff166027548a8a8a620005d1620012f260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000643576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063a90620018f6565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c600082604051620006b79291906200195d565b60405180910390a15080600001516002819055508060200151600360006101000a81548160ff021916908360ff1602179055508260049081620006fb919062001582565b5081600590816200070d919062001582565b5080604001516006819055508060600151600781905550737a250d5630b4cf539739df2c5dacb4c659f2488d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080d9190620019c0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000896573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bc9190620019c0565b306040518363ffffffff1660e01b8152600401620008dc9291906200195d565b6020604051808303816000875af1158015620008fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009229190620019c0565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200099390620012fa565b6200099f9190620019f2565b604051809103906000f080158015620009bc573d6000803e3d6000fd5b50600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505087601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601660008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555090505083601860008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff1602179055509050508460800151856060015186604001518760200151886000015162000f2c919062001a0f565b62000f38919062001a0f565b62000f44919062001a0f565b62000f50919062001a0f565b601760006101000a81548160ff021916908360ff1602179055508360800151846060015185604001518660200151876000015162000f8f919062001a0f565b62000f9b919062001a0f565b62000fa7919062001a0f565b62000fb3919062001a0f565b601960006101000a81548160ff021916908360ff16021790555082601560016101000a81548160ff021916908360ff16021790555081601560026101000a81548160ff021916908360ff160217905550806014819055506001601f60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050505050505050600254600c600062001205620012f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001253620012f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600254604051620012b4919062001a5c565b60405180910390a362001ae0565b60008183620012d291906200184a565b905092915050565b60008183620012ea919062001aa8565b905092915050565b600033905090565b611d2e80620076cc83390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200138a57607f821691505b602082108103620013a0576200139f62001342565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200140a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620013cb565b620014168683620013cb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620014636200145d62001457846200142e565b62001438565b6200142e565b9050919050565b6000819050919050565b6200147f8362001442565b620014976200148e826200146a565b848454620013d8565b825550505050565b600090565b620014ae6200149f565b620014bb81848462001474565b505050565b5b81811015620014e357620014d7600082620014a4565b600181019050620014c1565b5050565b601f8211156200153257620014fc81620013a6565b6200150784620013bb565b8101602085101562001517578190505b6200152f6200152685620013bb565b830182620014c0565b50505b505050565b600082821c905092915050565b6000620015576000198460080262001537565b1980831691505092915050565b600062001572838362001544565b9150826002028217905092915050565b6200158d8262001308565b67ffffffffffffffff811115620015a957620015a862001313565b5b620015b5825462001371565b620015c2828285620014e7565b600060209050601f831160018114620015fa5760008415620015e5578287015190505b620015f1858262001564565b86555062001661565b601f1984166200160a86620013a6565b60005b8281101562001634578489015182556001820191506020850194506020810190506200160d565b8683101562001654578489015162001650601f89168262001544565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620016f757808604811115620016cf57620016ce62001669565b5b6001851615620016df5780820291505b8081029050620016ef8562001698565b9450620016af565b94509492505050565b600082620017125760019050620017e5565b81620017225760009050620017e5565b81600181146200173b576002811462001746576200177c565b6001915050620017e5565b60ff8411156200175b576200175a62001669565b5b8360020a91508482111562001775576200177462001669565b5b50620017e5565b5060208310610133831016604e8410600b8410161715620017b65782820a905083811115620017b057620017af62001669565b5b620017e5565b620017c58484846001620016a5565b92509050818404811115620017df57620017de62001669565b5b81810290505b9392505050565b600060ff82169050919050565b600062001806826200142e565b91506200181383620017ec565b9250620018427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001700565b905092915050565b600062001857826200142e565b915062001864836200142e565b925082820262001874816200142e565b915082820484148315176200188e576200188d62001669565b5b5092915050565b600082825260208201905092915050565b7f4f776e657220616464726573732063616e6e6f74206265203000000000000000600082015250565b6000620018de60198362001895565b9150620018eb82620018a6565b602082019050919050565b600060208201905081810360008301526200191181620018cf565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019458262001918565b9050919050565b620019578162001938565b82525050565b60006040820190506200197460008301856200194c565b6200198360208301846200194c565b9392505050565b600080fd5b6200199a8162001938565b8114620019a657600080fd5b50565b600081519050620019ba816200198f565b92915050565b600060208284031215620019d957620019d86200198a565b5b6000620019e984828501620019a9565b91505092915050565b600060208201905062001a0960008301846200194c565b92915050565b600062001a1c82620017ec565b915062001a2983620017ec565b9250828201905060ff81111562001a455762001a4462001669565b5b92915050565b62001a56816200142e565b82525050565b600060208201905062001a73600083018462001a4b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062001ab5826200142e565b915062001ac2836200142e565b92508262001ad55762001ad462001a79565b5b828204905092915050565b615bdc8062001af06000396000f3fe6080604052600436106103855760003560e01c806379ba5097116101d1578063bfe1092811610102578063dd35b943116100a0578063ee6b26881161006f578063ee6b268814610d5f578063efaadf6614610d88578063f708a64f14610db3578063f887ea4014610ddc5761038c565b8063dd35b94314610ca5578063dd62ed3e14610cd0578063e57f14e114610d0d578063eafb5a3c14610d365761038c565b8063cc4c2e79116100dc578063cc4c2e7914610beb578063cfdf764314610c28578063d28d885214610c51578063d4c989d314610c7c5761038c565b8063bfe1092814610b66578063c6831cd814610b91578063caac793414610bc05761038c565b80639d1944f51161016f578063a8aa1b3111610149578063a8aa1b3114610aa8578063a9059cbb14610ad3578063ac4b68ba14610b10578063b09f126614610b3b5761038c565b80639d1944f514610a195780639e281a9814610a42578063a457c2d714610a6b5761038c565b8063906e9dd0116101ab578063906e9dd01461097157806395d89b411461099a57806396344eea146109c55780639b491076146109ee5761038c565b806379ba5097146109005780637b45d431146109175780638da5cb5b146109465761038c565b806332424aa3116102b65780635c3b6b53116102545780636f5a7745116102235780636f5a774514610844578063709fdc4a1461086f57806370a08231146108985780637830b072146108d55761038c565b80635c3b6b5314610778578063644dbe07146107b55780636605bfda146107de5780636ebcf607146108075761038c565b80633eaaf86b116102905780633eaaf86b146106ce578063410424cc146106f957806353a47bb7146107245780635af0e8441461074f5761038c565b806332424aa31461063b57806336b324af1461066657806339509351146106915761038c565b80631e8382de1161032357806328c61f41116102fd57806328c61f41146105815780632b9a9ca3146105be5780632d48e896146105e7578063313ce567146106105761038c565b80631e8382de146104f057806323b872dd1461051b57806328141d5b146105585761038c565b8063095ea7b31161035f578063095ea7b3146104365780631627540c1461047357806316a2f82a1461049c57806318160ddd146104c55761038c565b8063024c2ddd1461039157806306fdde03146103ce57806307866291146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061449a565b610e07565b6040516103c591906144f3565b60405180910390f35b3480156103da57600080fd5b506103e3610e2c565b6040516103f0919061459e565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906145c0565b610ebe565b60405161042d9190614608565b60405180910390f35b34801561044257600080fd5b5061045d6004803603810190610458919061464f565b610ede565b60405161046a9190614608565b60405180910390f35b34801561047f57600080fd5b5061049a600480360381019061049591906145c0565b610ef5565b005b3480156104a857600080fd5b506104c360048036038101906104be91906145c0565b610f78565b005b3480156104d157600080fd5b506104da610fdb565b6040516104e791906144f3565b60405180910390f35b3480156104fc57600080fd5b50610505610fe5565b60405161051291906146b0565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906146cb565b61100b565b60405161054f9190614608565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a919061471e565b6110d7565b005b34801561058d57600080fd5b506105a860048036038101906105a391906145c0565b6111c7565b6040516105b59190614608565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e0919061471e565b6111e7565b005b3480156105f357600080fd5b5061060e6004803603810190610609919061474b565b6111f9565b005b34801561061c57600080fd5b50610625611294565b60405161063291906147a7565b60405180910390f35b34801561064757600080fd5b506106506112ab565b60405161065d91906147a7565b60405180910390f35b34801561067257600080fd5b5061067b6112be565b60405161068891906147a7565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b3919061464f565b6112d1565b6040516106c59190614608565b60405180910390f35b3480156106da57600080fd5b506106e3611376565b6040516106f091906144f3565b60405180910390f35b34801561070557600080fd5b5061070e61137c565b60405161071b91906144f3565b60405180910390f35b34801561073057600080fd5b50610739611382565b60405161074691906147d1565b60405180910390f35b34801561075b57600080fd5b506107766004803603810190610771919061471e565b6113a8565b005b34801561078457600080fd5b5061079f600480360381019061079a91906146cb565b611495565b6040516107ac9190614608565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614818565b6114ad565b005b3480156107ea57600080fd5b5061080560048036038101906108009190614818565b611553565b005b34801561081357600080fd5b5061082e600480360381019061082991906145c0565b6115f9565b60405161083b91906144f3565b60405180910390f35b34801561085057600080fd5b50610859611611565b60405161086691906147a7565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190614871565b611624565b005b3480156108a457600080fd5b506108bf60048036038101906108ba91906145c0565b611687565b6040516108cc91906144f3565b60405180910390f35b3480156108e157600080fd5b506108ea6116d0565b6040516108f791906144f3565b60405180910390f35b34801561090c57600080fd5b506109156116d6565b005b34801561092357600080fd5b5061092c611887565b60405161093d9594939291906148b1565b60405180910390f35b34801561095257600080fd5b5061095b6118ec565b60405161096891906147d1565b60405180910390f35b34801561097d57600080fd5b5061099860048036038101906109939190614818565b611910565b005b3480156109a657600080fd5b506109af6119b6565b6040516109bc919061459e565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614930565b611a48565b005b3480156109fa57600080fd5b50610a03611c84565b604051610a1091906147a7565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b919061471e565b611c97565b005b348015610a4e57600080fd5b50610a696004803603810190610a64919061464f565b611cb8565b005b348015610a7757600080fd5b50610a926004803603810190610a8d919061464f565b611d49565b604051610a9f9190614608565b60405180910390f35b348015610ab457600080fd5b50610abd611e08565b604051610aca91906147d1565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af5919061464f565b611e2e565b604051610b079190614608565b60405180910390f35b348015610b1c57600080fd5b50610b25611e45565b604051610b3291906146b0565b60405180910390f35b348015610b4757600080fd5b50610b50611e6b565b604051610b5d919061459e565b60405180910390f35b348015610b7257600080fd5b50610b7b611ef9565b604051610b889190614a0a565b60405180910390f35b348015610b9d57600080fd5b50610ba6611f1f565b604051610bb79594939291906148b1565b60405180910390f35b348015610bcc57600080fd5b50610bd5611f84565b604051610be291906146b0565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d91906145c0565b611faa565b604051610c1f9190614608565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a91906145c0565b611fca565b005b348015610c5d57600080fd5b50610c666120ea565b604051610c73919061459e565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e9190614871565b612178565b005b348015610cb157600080fd5b50610cba6121db565b604051610cc791906144f3565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061449a565b6121e1565b604051610d0491906144f3565b60405180910390f35b348015610d1957600080fd5b50610d346004803603810190610d2f91906145c0565b612268565b005b348015610d4257600080fd5b50610d5d6004803603810190610d5891906145c0565b6122cb565b005b348015610d6b57600080fd5b50610d866004803603810190610d819190614930565b6123fe565b005b348015610d9457600080fd5b50610d9d61263a565b604051610daa91906147a7565b60405180910390f35b348015610dbf57600080fd5b50610dda6004803603810190610dd59190614871565b61264d565b005b348015610de857600080fd5b50610df1612876565b604051610dfe9190614a46565b60405180910390f35b600d602052816000526040600020602052806000526040600020600091509150505481565b606060058054610e3b90614a90565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6790614a90565b8015610eb45780601f10610e8957610100808354040283529160200191610eb4565b820191906000526020600020905b815481529060010190602001808311610e9757829003601f168201915b5050505050905090565b60106020528060005260406000206000915054906101000a900460ff1681565b6000610eeb3384846128c8565b6001905092915050565b610efd612a91565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2281604051610f6d91906147d1565b60405180910390a150565b610f80612a91565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611018848484612b21565b6110cb84336110c685604051806060016040528060288152602001615b5a60289139600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461304b9092919063ffffffff16565b611495565b50600190509392505050565b6110df612a91565b600061110a6103e86110fc8460025461289c90919063ffffffff16565b6128b290919063ffffffff16565b90506007548103611150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114790614b59565b60405180910390fd5b61117a6109c461116c600560025461289c90919063ffffffff16565b6128b290919063ffffffff16565b8110156111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390614beb565b60405180910390fd5b806007819055505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6111ef612a91565b8060148190555050565b611201612a91565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161125e929190614c0b565b600060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b505050505050565b6000600360009054906101000a900460ff16905090565b600360009054906101000a900460ff1681565b601560029054906101000a900460ff1681565b600061136c338461136785600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a090919063ffffffff16565b6128c8565b6001905092915050565b60025481565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113b0612a91565b60006113da60646113cc8460025461289c90919063ffffffff16565b6128b290919063ffffffff16565b90506006548103611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790614ccc565b60405180910390fd5b61144860c861143a6002805461289c90919063ffffffff16565b6128b290919063ffffffff16565b81101561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190614d5e565b60405180910390fd5b806006819055505050565b60006114a28484846128c8565b600190509392505050565b6114b5612a91565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150f57600080fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61155b612a91565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b557600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915090505481565b601560019054906101000a900460ff1681565b61162c612a91565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90614df0565b60405180910390fd5b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516117d9929190614e10565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60168060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16905085565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611918612a91565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361197257600080fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600480546119c590614a90565b80601f01602080910402602001604051908101604052809291908181526020018280546119f190614a90565b8015611a3e5780601f10611a1357610100808354040283529160200191611a3e565b820191906000526020600020905b815481529060010190602001808311611a2157829003601f168201915b5050505050905090565b611a50612a91565b60008183858789611a619190614e68565b611a6b9190614e68565b611a759190614e68565b611a7f9190614e68565b9050601560009054906101000a900460ff1615611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890614ee9565b60405180910390fd5b601560029054906101000a900460ff1660ff168660ff161115611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614f7b565b60405180910390fd5b601560019054906101000a900460ff1660ff168160ff161115611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b789061500d565b60405180910390fd5b6040518060a001604052808760ff1681526020018660ff1681526020018560ff1681526020018460ff1681526020018360ff16815250601660008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555090505080601760006101000a81548160ff021916908360ff160217905550505050505050565b601960009054906101000a900460ff1681565b611c9f612a91565b620dbba08110611cae57600080fd5b80600b8190555050565b611cc0612a91565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611d0092919061502d565b6020604051808303816000875af1158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d43919061506b565b50505050565b6000611dfe3384611df985604051806060016040528060258152602001615b8260259139600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461304b9092919063ffffffff16565b6128c8565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e3b338484612b21565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054611e7890614a90565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea490614a90565b8015611ef15780601f10611ec657610100808354040283529160200191611ef1565b820191906000526020600020905b815481529060010190602001808311611ed457829003601f168201915b505050505081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60188060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16905085565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b611fd2612a91565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361202c57600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600580546120f790614a90565b80601f016020809104026020016040519081016040528092919081815260200182805461212390614a90565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b505050505081565b612180612a91565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612270612a91565b6001601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122d3612a91565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361232d57600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eafb5a3c826040518263ffffffff1660e01b81526004016123c991906147d1565b600060405180830381600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b5050505050565b612406612a91565b600081838587896124179190614e68565b6124219190614e68565b61242b9190614e68565b6124359190614e68565b9050601560009054906101000a900460ff1615612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614ee9565b60405180910390fd5b601560029054906101000a900460ff1660ff168660ff1611156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614f7b565b60405180910390fd5b601560019054906101000a900460ff1660ff168160ff161115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e9061510a565b60405180910390fd5b6040518060a001604052808760ff1681526020018660ff1681526020018560ff1681526020018460ff1681526020018360ff16815250601860008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555090505080601960006101000a81548160ff021916908360ff160217905550505050505050565b601760009054906101000a900460ff1681565b612655612a91565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126df5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6126e857600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156127da57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016127a3929190615165565b600060405180830381600087803b1580156127bd57600080fd5b505af11580156127d1573d6000803e3d6000fd5b50505050612872565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968361282285611687565b6040518363ffffffff1660e01b815260040161283f92919061502d565b600060405180830381600087803b15801561285957600080fd5b505af115801561286d573d6000803e3d6000fd5b505050505b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836128aa919061518e565b905092915050565b600081836128c091906151ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292e906152a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90615334565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a8491906144f3565b60405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b16906153c6565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8790615458565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf6906154ea565b60405180910390fd5b60008111612c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c399061557c565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cea575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d405750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612da557600654612d6382612d5585611687565b6130a090919063ffffffff16565b1115612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b9061560e565b60405180910390fd5b5b601560009054906101000a900460ff16158015612dcc5750601454612dc930611687565b10155b8015612e265750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612e3457612e336130b6565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612e9057600190505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eea57600290505b60008160ff1614158015612f9c5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9a5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b8015612ffb5750600160ff168160ff16148015612fcb57506000601760009054906101000a900460ff1660ff16115b80612ffa5750600260ff168160ff16148015612ff957506000601960009054906101000a900460ff1660ff16115b5b5b1561303a57600061300c83836135ee565b905060008111156130385761302a818461399290919063ffffffff16565b92506130378530836139a8565b5b505b6130458484846139a8565b50505050565b6000838311158290613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a919061459e565b60405180910390fd5b5082840390509392505050565b600081836130ae919061562e565b905092915050565b6001601560006101000a81548160ff0219169083151502179055506000613126601e54613118601d5461310a601e546130fc601c54601a546130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b90506000811161316b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613162906156ae565b60405180910390fd5b600047905060006131886002601e546128b290919063ffffffff16565b905060006131a182601e5461399290919063ffffffff16565b905060006131f6836131e8601d546131da601c546131cc601b54601a546130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b905061320181614113565b6000613216854761399290919063ffffffff16565b9050600061323f83613231878561289c90919063ffffffff16565b6128b290919063ffffffff16565b9050600061326a8461325c601c548661289c90919063ffffffff16565b6128b290919063ffffffff16565b9050600061329585613287601b548761289c90919063ffffffff16565b6128b290919063ffffffff16565b905060006132c0866132b2601d548861289c90919063ffffffff16565b6128b290919063ffffffff16565b9050600061330d826132ff856132f1886132e38b8d61399290919063ffffffff16565b61399290919063ffffffff16565b61399290919063ffffffff16565b61399290919063ffffffff16565b90506133198886614357565b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613362906156ff565b60006040518083038185875af1925050503d806000811461339f576040519150601f19603f3d011682016040523d82523d6000602084013e6133a4565b606091505b5091509150600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16886040516133f2906156ff565b60006040518083038185875af1925050503d806000811461342f576040519150601f19603f3d011682016040523d82523d6000602084013e613434565b606091505b5091509150600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1688604051613482906156ff565b60006040518083038185875af1925050503d80600081146134bf576040519150601f19603f3d011682016040523d82523d6000602084013e6134c4565b606091505b50915091508580156134d35750835b80156134dc5750815b61351b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351290615760565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561358557600080fd5b505af193505050508015613597575060015b506000601a819055506000601c819055506000601e819055506000601b819055506000601d8190555050505050505050505050505050505050506000601560006101000a81548160ff021916908315150217905550565b600080600160ff168360ff161461363f5761363a606461362c601860000160009054906101000a900460ff1660ff168761289c90919063ffffffff16565b6128b290919063ffffffff16565b61367b565b61367a606461366c601660000160009054906101000a900460ff1660ff168761289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168460ff16146136cd576136c860646136ba601860000160019054906101000a900460ff1660ff168861289c90919063ffffffff16565b6128b290919063ffffffff16565b613709565b61370860646136fa601660000160019054906101000a900460ff1660ff168861289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168560ff161461375b576137566064613748601860000160029054906101000a900460ff1660ff168961289c90919063ffffffff16565b6128b290919063ffffffff16565b613797565b6137966064613788601660000160029054906101000a900460ff1660ff168961289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168660ff16146137e9576137e460646137d6601860000160039054906101000a900460ff1660ff168a61289c90919063ffffffff16565b6128b290919063ffffffff16565b613825565b6138246064613816601660000160039054906101000a900460ff1660ff168a61289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168760ff1614613877576138726064613864601860000160049054906101000a900460ff1660ff168b61289c90919063ffffffff16565b6128b290919063ffffffff16565b6138b3565b6138b260646138a4601660000160049054906101000a900460ff1660ff168b61289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506138ca85601a546130a090919063ffffffff16565b601a819055506138e584601b546130a090919063ffffffff16565b601b8190555061390083601c546130a090919063ffffffff16565b601c8190555061391b82601d546130a090919063ffffffff16565b601d8190555061393681601e546130a090919063ffffffff16565b601e8190555061398581613977846139698761395b8a8c6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b9550505050505092915050565b600081836139a09190615780565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0e90615458565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7d906154ea565b60405180910390fd5b60008111613ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac09061557c565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b6a5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613bb3576007548110613bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba990615800565b60405180910390fd5b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613c5b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613cb15750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d1657600654613cd482613cc685611687565b6130a090919063ffffffff16565b1115613d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0c90615892565b60405180910390fd5b5b613d8281604051806060016040528060268152602001615b3460269139600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461304b9092919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1781600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a090919063ffffffff16565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613f3d57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9684613ef386611687565b6040518363ffffffff1660e01b8152600401613f1092919061502d565b600060405180830381600087803b158015613f2a57600080fd5b505af1925050508015613f3b575060015b505b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661402057600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683613fd685611687565b6040518363ffffffff1660e01b8152600401613ff392919061502d565b600060405180830381600087803b15801561400d57600080fd5b505af192505050801561401e575060015b505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479600b546040518263ffffffff1660e01b815260040161407d91906144f3565b600060405180830381600087803b15801561409757600080fd5b505af19250505080156140a8575060015b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161410691906144f3565b60405180910390a3505050565b6000600267ffffffffffffffff8111156141305761412f6158b2565b5b60405190808252806020026020018201604052801561415e5781602001602082028036833780820191505090505b5090503081600081518110614176576141756158e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561421d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142419190615925565b81600181518110614255576142546158e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142bc30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611495565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614321959493929190615a10565b600060405180830381600087803b15801561433b57600080fd5b505af115801561434f573d6000803e3d6000fd5b505050505050565b61438430600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611495565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806000426040518863ffffffff1660e01b81526004016143ed96959493929190615a6a565b60606040518083038185885af115801561440b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144309190615ae0565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144678261443c565b9050919050565b6144778161445c565b811461448257600080fd5b50565b6000813590506144948161446e565b92915050565b600080604083850312156144b1576144b0614437565b5b60006144bf85828601614485565b92505060206144d085828601614485565b9150509250929050565b6000819050919050565b6144ed816144da565b82525050565b600060208201905061450860008301846144e4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561454857808201518184015260208101905061452d565b60008484015250505050565b6000601f19601f8301169050919050565b60006145708261450e565b61457a8185614519565b935061458a81856020860161452a565b61459381614554565b840191505092915050565b600060208201905081810360008301526145b88184614565565b905092915050565b6000602082840312156145d6576145d5614437565b5b60006145e484828501614485565b91505092915050565b60008115159050919050565b614602816145ed565b82525050565b600060208201905061461d60008301846145f9565b92915050565b61462c816144da565b811461463757600080fd5b50565b60008135905061464981614623565b92915050565b6000806040838503121561466657614665614437565b5b600061467485828601614485565b92505060206146858582860161463a565b9150509250929050565b600061469a8261443c565b9050919050565b6146aa8161468f565b82525050565b60006020820190506146c560008301846146a1565b92915050565b6000806000606084860312156146e4576146e3614437565b5b60006146f286828701614485565b935050602061470386828701614485565b92505060406147148682870161463a565b9150509250925092565b60006020828403121561473457614733614437565b5b60006147428482850161463a565b91505092915050565b6000806040838503121561476257614761614437565b5b60006147708582860161463a565b92505060206147818582860161463a565b9150509250929050565b600060ff82169050919050565b6147a18161478b565b82525050565b60006020820190506147bc6000830184614798565b92915050565b6147cb8161445c565b82525050565b60006020820190506147e660008301846147c2565b92915050565b6147f58161468f565b811461480057600080fd5b50565b600081359050614812816147ec565b92915050565b60006020828403121561482e5761482d614437565b5b600061483c84828501614803565b91505092915050565b61484e816145ed565b811461485957600080fd5b50565b60008135905061486b81614845565b92915050565b6000806040838503121561488857614887614437565b5b600061489685828601614485565b92505060206148a78582860161485c565b9150509250929050565b600060a0820190506148c66000830188614798565b6148d36020830187614798565b6148e06040830186614798565b6148ed6060830185614798565b6148fa6080830184614798565b9695505050505050565b61490d8161478b565b811461491857600080fd5b50565b60008135905061492a81614904565b92915050565b600080600080600060a0868803121561494c5761494b614437565b5b600061495a8882890161491b565b955050602061496b8882890161491b565b945050604061497c8882890161491b565b935050606061498d8882890161491b565b925050608061499e8882890161491b565b9150509295509295909350565b6000819050919050565b60006149d06149cb6149c68461443c565b6149ab565b61443c565b9050919050565b60006149e2826149b5565b9050919050565b60006149f4826149d7565b9050919050565b614a04816149e9565b82525050565b6000602082019050614a1f60008301846149fb565b92915050565b6000614a30826149d7565b9050919050565b614a4081614a25565b82525050565b6000602082019050614a5b6000830184614a37565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614aa857607f821691505b602082108103614abb57614aba614a61565b5b50919050565b7f43616e6e6f7420736574206e6577206d6178207472616e73616374696f6e207460008201527f6f207468652073616d652076616c75652061732063757272656e74206d61782060208201527f7472616e73616374696f6e000000000000000000000000000000000000000000604082015250565b6000614b43604b83614519565b9150614b4e82614ac1565b606082019050919050565b60006020820190508181036000830152614b7281614b36565b9050919050565b7f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f77657260008201527f207468616e20302e322070657263656e74000000000000000000000000000000602082015250565b6000614bd5603183614519565b9150614be082614b79565b604082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b6000604082019050614c2060008301856144e4565b614c2d60208301846144e4565b9392505050565b7f43616e6e6f7420736574206e6577206d61782062616c616e636520746f20746860008201527f652073616d652076616c75652061732063757272656e74206d61782062616c6160208201527f6e63650000000000000000000000000000000000000000000000000000000000604082015250565b6000614cb6604383614519565b9150614cc182614c34565b606082019050919050565b60006020820190508181036000830152614ce581614ca9565b9050919050565b7f43616e6e6f7420736574206d61782062616c616e6365206c6f7765722074686160008201527f6e20312070657263656e74000000000000000000000000000000000000000000602082015250565b6000614d48602b83614519565b9150614d5382614cec565b604082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560008201527f2063616e20616363657074206f776e6572736869700000000000000000000000602082015250565b6000614dda603583614519565b9150614de582614d7e565b604082019050919050565b60006020820190508181036000830152614e0981614dcd565b9050919050565b6000604082019050614e2560008301856147c2565b614e3260208301846147c2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e738261478b565b9150614e7e8361478b565b9250828201905060ff811115614e9757614e96614e39565b5b92915050565b7f696e53776170416e644c69717569667900000000000000000000000000000000600082015250565b6000614ed3601083614519565b9150614ede82614e9d565b602082019050919050565b60006020820190508181036000830152614f0281614ec6565b9050919050565b7f43616e6e6f74207365742054726561737572792066656520686967686572207460008201527f68616e206d617800000000000000000000000000000000000000000000000000602082015250565b6000614f65602783614519565b9150614f7082614f09565b604082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b7f43616e6e6f742073657420746f74616c2062757920666565732068696768657260008201527f207468616e206d61780000000000000000000000000000000000000000000000602082015250565b6000614ff7602983614519565b915061500282614f9b565b604082019050919050565b6000602082019050818103600083015261502681614fea565b9050919050565b600060408201905061504260008301856147c2565b61504f60208301846144e4565b9392505050565b60008151905061506581614845565b92915050565b60006020828403121561508157615080614437565b5b600061508f84828501615056565b91505092915050565b7f43616e6e6f742073657420746f74616c2073656c6c206665657320686967686560008201527f72207468616e206d617800000000000000000000000000000000000000000000602082015250565b60006150f4602a83614519565b91506150ff82615098565b604082019050919050565b60006020820190508181036000830152615123816150e7565b9050919050565b6000819050919050565b600061514f61514a6151458461512a565b6149ab565b6144da565b9050919050565b61515f81615134565b82525050565b600060408201905061517a60008301856147c2565b6151876020830184615156565b9392505050565b6000615199826144da565b91506151a4836144da565b92508282026151b2816144da565b915082820484148315176151c9576151c8614e39565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061520a826144da565b9150615215836144da565b925082615225576152246151d0565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528c602483614519565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531e602283614519565b9150615329826152c2565b604082019050919050565b6000602082019050818103600083015261534d81615311565b9050919050565b7f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660008201527f6f726d207468697320616374696f6e0000000000000000000000000000000000602082015250565b60006153b0602f83614519565b91506153bb82615354565b604082019050919050565b600060208201905081810360008301526153df816153a3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615442602583614519565b915061544d826153e6565b604082019050919050565b6000602082019050818103600083015261547181615435565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154d4602383614519565b91506154df82615478565b604082019050919050565b60006020820190508181036000830152615503816154c7565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615566602983614519565b91506155718261550a565b604082019050919050565b6000602082019050818103600083015261559581615559565b9050919050565b7f547820776f756c642063617573652077616c6c657420746f206578636565642060008201527f6d61782062616c616e6365000000000000000000000000000000000000000000602082015250565b60006155f8602b83614519565b91506156038261559c565b604082019050919050565b60006020820190508181036000830152615627816155eb565b9050919050565b6000615639826144da565b9150615644836144da565b925082820190508082111561565c5761565b614e39565b5b92915050565b7f4e6f20746f6b656e7320617661696c61626c6520746f20737761700000000000600082015250565b6000615698601b83614519565b91506156a382615662565b602082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b600081905092915050565b50565b60006156e96000836156ce565b91506156f4826156d9565b600082019050919050565b600061570a826156dc565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061574a601283614519565b915061575582615714565b602082019050919050565b600060208201905081810360008301526157798161573d565b9050919050565b600061578b826144da565b9150615796836144da565b92508282039050818111156157ae576157ad614e39565b5b92915050565b7f5472616e7366657220616d6f756e742065786365656473206c696d6974000000600082015250565b60006157ea601d83614519565b91506157f5826157b4565b602082019050919050565b60006020820190508181036000830152615819816157dd565b9050919050565b7f547820776f756c6420636175736520726563697069656e7420746f206578636560008201527f6564206d61782062616c616e6365000000000000000000000000000000000000602082015250565b600061587c602e83614519565b915061588782615820565b604082019050919050565b600060208201905081810360008301526158ab8161586f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061591f8161446e565b92915050565b60006020828403121561593b5761593a614437565b5b600061594984828501615910565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159878161445c565b82525050565b6000615999838361597e565b60208301905092915050565b6000602082019050919050565b60006159bd82615952565b6159c7818561595d565b93506159d28361596e565b8060005b83811015615a035781516159ea888261598d565b97506159f5836159a5565b9250506001810190506159d6565b5085935050505092915050565b600060a082019050615a2560008301886144e4565b615a326020830187615156565b8181036040830152615a4481866159b2565b9050615a5360608301856147c2565b615a6060808301846144e4565b9695505050505050565b600060c082019050615a7f60008301896147c2565b615a8c60208301886144e4565b615a996040830187615156565b615aa66060830186615156565b615ab360808301856147c2565b615ac060a08301846144e4565b979650505050505050565b600081519050615ada81614623565b92915050565b600080600060608486031215615af957615af8614437565b5b6000615b0786828701615acb565b9350506020615b1886828701615acb565b9250506040615b2986828701615acb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122022e6f6de9b87811d3f62affb7f4daa3d30749ca1461b2957c8296f0e848b886564736f6c63430008110033608060405273dac17f958d2ee523a2206206994597c13d831ec7600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610a8c600d556305f5e100600e55348015620000dc57600080fd5b5060405162001d2e38038062001d2e8339818101604052810190620001029190620001f4565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000226565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001bc826200018f565b9050919050565b620001ce81620001af565b8114620001da57600080fd5b50565b600081519050620001ee81620001c3565b92915050565b6000602082840312156200020d576200020c6200018a565b5b60006200021d84828501620001dd565b91505092915050565b611af880620002366000396000f3fe6080604052600436106100e85760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed146102c5578063f0fc6bca146102f0578063ffb2c47914610307578063ffd49c8414610330576100e8565b8063ce7c2ac214610228578063d0e30db014610267578063e2d2e21914610271578063eafb5a3c1461029c576100e8565b80632d48e896116100c65780632d48e8961461017e5780633a98ef39146101a75780634fab0ae8146101d2578063997664d7146101fd576100e8565b806311ce023d146100ed57806314b6ca961461011857806328fd319814610141575b600080fd5b3480156100f957600080fd5b5061010261035b565b60405161010f91906114b0565b60405180910390f35b34801561012457600080fd5b5061013f600480360381019061013a919061155a565b610361565b005b34801561014d57600080fd5b506101686004803603810190610163919061159a565b610620565b60405161017591906114b0565b60405180910390f35b34801561018a57600080fd5b506101a560048036038101906101a091906115c7565b610739565b005b3480156101b357600080fd5b506101bc6107a3565b6040516101c991906114b0565b60405180910390f35b3480156101de57600080fd5b506101e76107a9565b6040516101f491906114b0565b60405180910390f35b34801561020957600080fd5b506102126107af565b60405161021f91906114b0565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a919061159a565b6107b5565b60405161025e93929190611607565b60405180910390f35b61026f6107df565b005b34801561027d57600080fd5b50610286610bb1565b60405161029391906114b0565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be919061159a565b610bb7565b005b3480156102d157600080fd5b506102da610cad565b6040516102e791906114b0565b60405180910390f35b3480156102fc57600080fd5b50610305610cb3565b005b34801561031357600080fd5b5061032e6004803603810190610329919061163e565b610cbe565b005b34801561033c57600080fd5b50610345610e51565b60405161035291906114b0565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b957600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561040e5761040d82610e57565b5b60008111801561046057506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104735761046e826110ea565b6104d5565b6000811480156104c557506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104d4576104d382611199565b5b5b61053e81610530600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546113a090919063ffffffff16565b6113b690919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105d6600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113cc565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106745760009050610734565b60006106c1600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113cc565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161071c57600092505050610734565b61072f81836113a090919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079157600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461083757600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610894919061167a565b602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d591906116aa565b90506000600267ffffffffffffffff8111156108f4576108f36116d7565b5b6040519080825280602002602001820160405280156109225781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061095c5761095b611706565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106109cd576109cc611706565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a6a9493929190611838565b6000604051808303818588803b158015610a8357600080fd5b505af1158015610a97573d6000803e3d6000fd5b50505050506000610b4c83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610afd919061167a565b602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e91906116aa565b6113a090919063ffffffff16565b9050610b63816009546113b690919063ffffffff16565b600981905550610ba6610b95600854610b8784600c546113fe90919063ffffffff16565b61141490919063ffffffff16565b600b546113b690919063ffffffff16565b600b81905550505050565b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0f57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6957600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b610cbc33610e57565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d1657600080fd5b6000600480549050905060008103610d2e5750610e4e565b6000805a905060005b8483108015610d4557508381105b15610e495783600f5410610d5c576000600f819055505b610da56004600f5481548110610d7557610d74611706565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661142a565b15610df457610df36004600f5481548110610dc357610dc2611706565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e57565b5b610e19610e0a5a846113a090919063ffffffff16565b846113b690919063ffffffff16565b92505a9150600f6000815480929190610e31906118b3565b91905055508080610e41906118b3565b915050610d37565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403156110e7576000610ead82610620565b905060008111156110e557610ecd81600a546113b690919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610f309291906118fb565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061195c565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061100d81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113b690919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061109e600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113cc565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506111ad9190611989565b815481106111be576111bd611706565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061123c5761123b611706565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506112dc9190611989565b815481106112ed576112ec611706565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004805480611368576113676119bd565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836113ae9190611989565b905092915050565b600081836113c491906119ec565b905092915050565b60006113f7600c546113e9600b54856113fe90919063ffffffff16565b61141490919063ffffffff16565b9050919050565b6000818361140c9190611a20565b905092915050565b600081836114229190611a91565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461147a91906119ec565b1080156114905750600e5461148e83610620565b115b9050919050565b6000819050919050565b6114aa81611497565b82525050565b60006020820190506114c560008301846114a1565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114fb826114d0565b9050919050565b61150b816114f0565b811461151657600080fd5b50565b60008135905061152881611502565b92915050565b61153781611497565b811461154257600080fd5b50565b6000813590506115548161152e565b92915050565b60008060408385031215611571576115706114cb565b5b600061157f85828601611519565b925050602061159085828601611545565b9150509250929050565b6000602082840312156115b0576115af6114cb565b5b60006115be84828501611519565b91505092915050565b600080604083850312156115de576115dd6114cb565b5b60006115ec85828601611545565b92505060206115fd85828601611545565b9150509250929050565b600060608201905061161c60008301866114a1565b61162960208301856114a1565b61163660408301846114a1565b949350505050565b600060208284031215611654576116536114cb565b5b600061166284828501611545565b91505092915050565b611674816114f0565b82525050565b600060208201905061168f600083018461166b565b92915050565b6000815190506116a48161152e565b92915050565b6000602082840312156116c0576116bf6114cb565b5b60006116ce84828501611695565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061176461175f61175a84611735565b61173f565b611497565b9050919050565b61177481611749565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6117af816114f0565b82525050565b60006117c183836117a6565b60208301905092915050565b6000602082019050919050565b60006117e58261177a565b6117ef8185611785565b93506117fa83611796565b8060005b8381101561182b57815161181288826117b5565b975061181d836117cd565b9250506001810190506117fe565b5085935050505092915050565b600060808201905061184d600083018761176b565b818103602083015261185f81866117da565b905061186e604083018561166b565b61187b60608301846114a1565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118be82611497565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118f0576118ef611884565b5b600182019050919050565b6000604082019050611910600083018561166b565b61191d60208301846114a1565b9392505050565b60008115159050919050565b61193981611924565b811461194457600080fd5b50565b60008151905061195681611930565b92915050565b600060208284031215611972576119716114cb565b5b600061198084828501611947565b91505092915050565b600061199482611497565b915061199f83611497565b92508282039050818111156119b7576119b6611884565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006119f782611497565b9150611a0283611497565b9250828201905080821115611a1a57611a19611884565b5b92915050565b6000611a2b82611497565b9150611a3683611497565b9250828202611a4481611497565b91508282048414831517611a5b57611a5a611884565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a9c82611497565b9150611aa783611497565b925082611ab757611ab6611a62565b5b82820490509291505056fea2646970667358221220fe9c06116aa8588f368f55f3a16b5abc73f603b2d5c47520ddba7714ea46a42e64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806379ba5097116101d1578063bfe1092811610102578063dd35b943116100a0578063ee6b26881161006f578063ee6b268814610d5f578063efaadf6614610d88578063f708a64f14610db3578063f887ea4014610ddc5761038c565b8063dd35b94314610ca5578063dd62ed3e14610cd0578063e57f14e114610d0d578063eafb5a3c14610d365761038c565b8063cc4c2e79116100dc578063cc4c2e7914610beb578063cfdf764314610c28578063d28d885214610c51578063d4c989d314610c7c5761038c565b8063bfe1092814610b66578063c6831cd814610b91578063caac793414610bc05761038c565b80639d1944f51161016f578063a8aa1b3111610149578063a8aa1b3114610aa8578063a9059cbb14610ad3578063ac4b68ba14610b10578063b09f126614610b3b5761038c565b80639d1944f514610a195780639e281a9814610a42578063a457c2d714610a6b5761038c565b8063906e9dd0116101ab578063906e9dd01461097157806395d89b411461099a57806396344eea146109c55780639b491076146109ee5761038c565b806379ba5097146109005780637b45d431146109175780638da5cb5b146109465761038c565b806332424aa3116102b65780635c3b6b53116102545780636f5a7745116102235780636f5a774514610844578063709fdc4a1461086f57806370a08231146108985780637830b072146108d55761038c565b80635c3b6b5314610778578063644dbe07146107b55780636605bfda146107de5780636ebcf607146108075761038c565b80633eaaf86b116102905780633eaaf86b146106ce578063410424cc146106f957806353a47bb7146107245780635af0e8441461074f5761038c565b806332424aa31461063b57806336b324af1461066657806339509351146106915761038c565b80631e8382de1161032357806328c61f41116102fd57806328c61f41146105815780632b9a9ca3146105be5780632d48e896146105e7578063313ce567146106105761038c565b80631e8382de146104f057806323b872dd1461051b57806328141d5b146105585761038c565b8063095ea7b31161035f578063095ea7b3146104365780631627540c1461047357806316a2f82a1461049c57806318160ddd146104c55761038c565b8063024c2ddd1461039157806306fdde03146103ce57806307866291146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061449a565b610e07565b6040516103c591906144f3565b60405180910390f35b3480156103da57600080fd5b506103e3610e2c565b6040516103f0919061459e565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906145c0565b610ebe565b60405161042d9190614608565b60405180910390f35b34801561044257600080fd5b5061045d6004803603810190610458919061464f565b610ede565b60405161046a9190614608565b60405180910390f35b34801561047f57600080fd5b5061049a600480360381019061049591906145c0565b610ef5565b005b3480156104a857600080fd5b506104c360048036038101906104be91906145c0565b610f78565b005b3480156104d157600080fd5b506104da610fdb565b6040516104e791906144f3565b60405180910390f35b3480156104fc57600080fd5b50610505610fe5565b60405161051291906146b0565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d91906146cb565b61100b565b60405161054f9190614608565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a919061471e565b6110d7565b005b34801561058d57600080fd5b506105a860048036038101906105a391906145c0565b6111c7565b6040516105b59190614608565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e0919061471e565b6111e7565b005b3480156105f357600080fd5b5061060e6004803603810190610609919061474b565b6111f9565b005b34801561061c57600080fd5b50610625611294565b60405161063291906147a7565b60405180910390f35b34801561064757600080fd5b506106506112ab565b60405161065d91906147a7565b60405180910390f35b34801561067257600080fd5b5061067b6112be565b60405161068891906147a7565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b3919061464f565b6112d1565b6040516106c59190614608565b60405180910390f35b3480156106da57600080fd5b506106e3611376565b6040516106f091906144f3565b60405180910390f35b34801561070557600080fd5b5061070e61137c565b60405161071b91906144f3565b60405180910390f35b34801561073057600080fd5b50610739611382565b60405161074691906147d1565b60405180910390f35b34801561075b57600080fd5b506107766004803603810190610771919061471e565b6113a8565b005b34801561078457600080fd5b5061079f600480360381019061079a91906146cb565b611495565b6040516107ac9190614608565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614818565b6114ad565b005b3480156107ea57600080fd5b5061080560048036038101906108009190614818565b611553565b005b34801561081357600080fd5b5061082e600480360381019061082991906145c0565b6115f9565b60405161083b91906144f3565b60405180910390f35b34801561085057600080fd5b50610859611611565b60405161086691906147a7565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190614871565b611624565b005b3480156108a457600080fd5b506108bf60048036038101906108ba91906145c0565b611687565b6040516108cc91906144f3565b60405180910390f35b3480156108e157600080fd5b506108ea6116d0565b6040516108f791906144f3565b60405180910390f35b34801561090c57600080fd5b506109156116d6565b005b34801561092357600080fd5b5061092c611887565b60405161093d9594939291906148b1565b60405180910390f35b34801561095257600080fd5b5061095b6118ec565b60405161096891906147d1565b60405180910390f35b34801561097d57600080fd5b5061099860048036038101906109939190614818565b611910565b005b3480156109a657600080fd5b506109af6119b6565b6040516109bc919061459e565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614930565b611a48565b005b3480156109fa57600080fd5b50610a03611c84565b604051610a1091906147a7565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b919061471e565b611c97565b005b348015610a4e57600080fd5b50610a696004803603810190610a64919061464f565b611cb8565b005b348015610a7757600080fd5b50610a926004803603810190610a8d919061464f565b611d49565b604051610a9f9190614608565b60405180910390f35b348015610ab457600080fd5b50610abd611e08565b604051610aca91906147d1565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af5919061464f565b611e2e565b604051610b079190614608565b60405180910390f35b348015610b1c57600080fd5b50610b25611e45565b604051610b3291906146b0565b60405180910390f35b348015610b4757600080fd5b50610b50611e6b565b604051610b5d919061459e565b60405180910390f35b348015610b7257600080fd5b50610b7b611ef9565b604051610b889190614a0a565b60405180910390f35b348015610b9d57600080fd5b50610ba6611f1f565b604051610bb79594939291906148b1565b60405180910390f35b348015610bcc57600080fd5b50610bd5611f84565b604051610be291906146b0565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d91906145c0565b611faa565b604051610c1f9190614608565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a91906145c0565b611fca565b005b348015610c5d57600080fd5b50610c666120ea565b604051610c73919061459e565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e9190614871565b612178565b005b348015610cb157600080fd5b50610cba6121db565b604051610cc791906144f3565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061449a565b6121e1565b604051610d0491906144f3565b60405180910390f35b348015610d1957600080fd5b50610d346004803603810190610d2f91906145c0565b612268565b005b348015610d4257600080fd5b50610d5d6004803603810190610d5891906145c0565b6122cb565b005b348015610d6b57600080fd5b50610d866004803603810190610d819190614930565b6123fe565b005b348015610d9457600080fd5b50610d9d61263a565b604051610daa91906147a7565b60405180910390f35b348015610dbf57600080fd5b50610dda6004803603810190610dd59190614871565b61264d565b005b348015610de857600080fd5b50610df1612876565b604051610dfe9190614a46565b60405180910390f35b600d602052816000526040600020602052806000526040600020600091509150505481565b606060058054610e3b90614a90565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6790614a90565b8015610eb45780601f10610e8957610100808354040283529160200191610eb4565b820191906000526020600020905b815481529060010190602001808311610e9757829003601f168201915b5050505050905090565b60106020528060005260406000206000915054906101000a900460ff1681565b6000610eeb3384846128c8565b6001905092915050565b610efd612a91565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2281604051610f6d91906147d1565b60405180910390a150565b610f80612a91565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611018848484612b21565b6110cb84336110c685604051806060016040528060288152602001615b5a60289139600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461304b9092919063ffffffff16565b611495565b50600190509392505050565b6110df612a91565b600061110a6103e86110fc8460025461289c90919063ffffffff16565b6128b290919063ffffffff16565b90506007548103611150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114790614b59565b60405180910390fd5b61117a6109c461116c600560025461289c90919063ffffffff16565b6128b290919063ffffffff16565b8110156111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390614beb565b60405180910390fd5b806007819055505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6111ef612a91565b8060148190555050565b611201612a91565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161125e929190614c0b565b600060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b505050505050565b6000600360009054906101000a900460ff16905090565b600360009054906101000a900460ff1681565b601560029054906101000a900460ff1681565b600061136c338461136785600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a090919063ffffffff16565b6128c8565b6001905092915050565b60025481565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113b0612a91565b60006113da60646113cc8460025461289c90919063ffffffff16565b6128b290919063ffffffff16565b90506006548103611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790614ccc565b60405180910390fd5b61144860c861143a6002805461289c90919063ffffffff16565b6128b290919063ffffffff16565b81101561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190614d5e565b60405180910390fd5b806006819055505050565b60006114a28484846128c8565b600190509392505050565b6114b5612a91565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150f57600080fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61155b612a91565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b557600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915090505481565b601560019054906101000a900460ff1681565b61162c612a91565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90614df0565b60405180910390fd5b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516117d9929190614e10565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60168060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16905085565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611918612a91565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361197257600080fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600480546119c590614a90565b80601f01602080910402602001604051908101604052809291908181526020018280546119f190614a90565b8015611a3e5780601f10611a1357610100808354040283529160200191611a3e565b820191906000526020600020905b815481529060010190602001808311611a2157829003601f168201915b5050505050905090565b611a50612a91565b60008183858789611a619190614e68565b611a6b9190614e68565b611a759190614e68565b611a7f9190614e68565b9050601560009054906101000a900460ff1615611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890614ee9565b60405180910390fd5b601560029054906101000a900460ff1660ff168660ff161115611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614f7b565b60405180910390fd5b601560019054906101000a900460ff1660ff168160ff161115611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b789061500d565b60405180910390fd5b6040518060a001604052808760ff1681526020018660ff1681526020018560ff1681526020018460ff1681526020018360ff16815250601660008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555090505080601760006101000a81548160ff021916908360ff160217905550505050505050565b601960009054906101000a900460ff1681565b611c9f612a91565b620dbba08110611cae57600080fd5b80600b8190555050565b611cc0612a91565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611d0092919061502d565b6020604051808303816000875af1158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d43919061506b565b50505050565b6000611dfe3384611df985604051806060016040528060258152602001615b8260259139600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461304b9092919063ffffffff16565b6128c8565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e3b338484612b21565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054611e7890614a90565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea490614a90565b8015611ef15780601f10611ec657610100808354040283529160200191611ef1565b820191906000526020600020905b815481529060010190602001808311611ed457829003601f168201915b505050505081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60188060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16905085565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b611fd2612a91565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361202c57600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600580546120f790614a90565b80601f016020809104026020016040519081016040528092919081815260200182805461212390614a90565b80156121705780601f1061214557610100808354040283529160200191612170565b820191906000526020600020905b81548152906001019060200180831161215357829003601f168201915b505050505081565b612180612a91565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612270612a91565b6001601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122d3612a91565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361232d57600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eafb5a3c826040518263ffffffff1660e01b81526004016123c991906147d1565b600060405180830381600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b5050505050565b612406612a91565b600081838587896124179190614e68565b6124219190614e68565b61242b9190614e68565b6124359190614e68565b9050601560009054906101000a900460ff1615612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614ee9565b60405180910390fd5b601560029054906101000a900460ff1660ff168660ff1611156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614f7b565b60405180910390fd5b601560019054906101000a900460ff1660ff168160ff161115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e9061510a565b60405180910390fd5b6040518060a001604052808760ff1681526020018660ff1681526020018560ff1681526020018460ff1681526020018360ff16815250601860008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555090505080601960006101000a81548160ff021916908360ff160217905550505050505050565b601760009054906101000a900460ff1681565b612655612a91565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126df5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6126e857600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156127da57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016127a3929190615165565b600060405180830381600087803b1580156127bd57600080fd5b505af11580156127d1573d6000803e3d6000fd5b50505050612872565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968361282285611687565b6040518363ffffffff1660e01b815260040161283f92919061502d565b600060405180830381600087803b15801561285957600080fd5b505af115801561286d573d6000803e3d6000fd5b505050505b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836128aa919061518e565b905092915050565b600081836128c091906151ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292e906152a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90615334565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a8491906144f3565b60405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b16906153c6565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8790615458565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf6906154ea565b60405180910390fd5b60008111612c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c399061557c565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cea575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d405750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612da557600654612d6382612d5585611687565b6130a090919063ffffffff16565b1115612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b9061560e565b60405180910390fd5b5b601560009054906101000a900460ff16158015612dcc5750601454612dc930611687565b10155b8015612e265750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612e3457612e336130b6565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612e9057600190505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eea57600290505b60008160ff1614158015612f9c5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9a5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b8015612ffb5750600160ff168160ff16148015612fcb57506000601760009054906101000a900460ff1660ff16115b80612ffa5750600260ff168160ff16148015612ff957506000601960009054906101000a900460ff1660ff16115b5b5b1561303a57600061300c83836135ee565b905060008111156130385761302a818461399290919063ffffffff16565b92506130378530836139a8565b5b505b6130458484846139a8565b50505050565b6000838311158290613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a919061459e565b60405180910390fd5b5082840390509392505050565b600081836130ae919061562e565b905092915050565b6001601560006101000a81548160ff0219169083151502179055506000613126601e54613118601d5461310a601e546130fc601c54601a546130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b90506000811161316b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613162906156ae565b60405180910390fd5b600047905060006131886002601e546128b290919063ffffffff16565b905060006131a182601e5461399290919063ffffffff16565b905060006131f6836131e8601d546131da601c546131cc601b54601a546130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b905061320181614113565b6000613216854761399290919063ffffffff16565b9050600061323f83613231878561289c90919063ffffffff16565b6128b290919063ffffffff16565b9050600061326a8461325c601c548661289c90919063ffffffff16565b6128b290919063ffffffff16565b9050600061329585613287601b548761289c90919063ffffffff16565b6128b290919063ffffffff16565b905060006132c0866132b2601d548861289c90919063ffffffff16565b6128b290919063ffffffff16565b9050600061330d826132ff856132f1886132e38b8d61399290919063ffffffff16565b61399290919063ffffffff16565b61399290919063ffffffff16565b61399290919063ffffffff16565b90506133198886614357565b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613362906156ff565b60006040518083038185875af1925050503d806000811461339f576040519150601f19603f3d011682016040523d82523d6000602084013e6133a4565b606091505b5091509150600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16886040516133f2906156ff565b60006040518083038185875af1925050503d806000811461342f576040519150601f19603f3d011682016040523d82523d6000602084013e613434565b606091505b5091509150600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1688604051613482906156ff565b60006040518083038185875af1925050503d80600081146134bf576040519150601f19603f3d011682016040523d82523d6000602084013e6134c4565b606091505b50915091508580156134d35750835b80156134dc5750815b61351b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351290615760565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561358557600080fd5b505af193505050508015613597575060015b506000601a819055506000601c819055506000601e819055506000601b819055506000601d8190555050505050505050505050505050505050506000601560006101000a81548160ff021916908315150217905550565b600080600160ff168360ff161461363f5761363a606461362c601860000160009054906101000a900460ff1660ff168761289c90919063ffffffff16565b6128b290919063ffffffff16565b61367b565b61367a606461366c601660000160009054906101000a900460ff1660ff168761289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168460ff16146136cd576136c860646136ba601860000160019054906101000a900460ff1660ff168861289c90919063ffffffff16565b6128b290919063ffffffff16565b613709565b61370860646136fa601660000160019054906101000a900460ff1660ff168861289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168560ff161461375b576137566064613748601860000160029054906101000a900460ff1660ff168961289c90919063ffffffff16565b6128b290919063ffffffff16565b613797565b6137966064613788601660000160029054906101000a900460ff1660ff168961289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168660ff16146137e9576137e460646137d6601860000160039054906101000a900460ff1660ff168a61289c90919063ffffffff16565b6128b290919063ffffffff16565b613825565b6138246064613816601660000160039054906101000a900460ff1660ff168a61289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506000600160ff168760ff1614613877576138726064613864601860000160049054906101000a900460ff1660ff168b61289c90919063ffffffff16565b6128b290919063ffffffff16565b6138b3565b6138b260646138a4601660000160049054906101000a900460ff1660ff168b61289c90919063ffffffff16565b6128b290919063ffffffff16565b5b90506138ca85601a546130a090919063ffffffff16565b601a819055506138e584601b546130a090919063ffffffff16565b601b8190555061390083601c546130a090919063ffffffff16565b601c8190555061391b82601d546130a090919063ffffffff16565b601d8190555061393681601e546130a090919063ffffffff16565b601e8190555061398581613977846139698761395b8a8c6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b6130a090919063ffffffff16565b9550505050505092915050565b600081836139a09190615780565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0e90615458565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7d906154ea565b60405180910390fd5b60008111613ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac09061557c565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b6a5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613bb3576007548110613bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba990615800565b60405180910390fd5b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613c5b575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613cb15750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d1657600654613cd482613cc685611687565b6130a090919063ffffffff16565b1115613d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0c90615892565b60405180910390fd5b5b613d8281604051806060016040528060268152602001615b3460269139600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461304b9092919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1781600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a090919063ffffffff16565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613f3d57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9684613ef386611687565b6040518363ffffffff1660e01b8152600401613f1092919061502d565b600060405180830381600087803b158015613f2a57600080fd5b505af1925050508015613f3b575060015b505b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661402057600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683613fd685611687565b6040518363ffffffff1660e01b8152600401613ff392919061502d565b600060405180830381600087803b15801561400d57600080fd5b505af192505050801561401e575060015b505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479600b546040518263ffffffff1660e01b815260040161407d91906144f3565b600060405180830381600087803b15801561409757600080fd5b505af19250505080156140a8575060015b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161410691906144f3565b60405180910390a3505050565b6000600267ffffffffffffffff8111156141305761412f6158b2565b5b60405190808252806020026020018201604052801561415e5781602001602082028036833780820191505090505b5090503081600081518110614176576141756158e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561421d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142419190615925565b81600181518110614255576142546158e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142bc30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611495565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614321959493929190615a10565b600060405180830381600087803b15801561433b57600080fd5b505af115801561434f573d6000803e3d6000fd5b505050505050565b61438430600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611495565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806000426040518863ffffffff1660e01b81526004016143ed96959493929190615a6a565b60606040518083038185885af115801561440b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144309190615ae0565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144678261443c565b9050919050565b6144778161445c565b811461448257600080fd5b50565b6000813590506144948161446e565b92915050565b600080604083850312156144b1576144b0614437565b5b60006144bf85828601614485565b92505060206144d085828601614485565b9150509250929050565b6000819050919050565b6144ed816144da565b82525050565b600060208201905061450860008301846144e4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561454857808201518184015260208101905061452d565b60008484015250505050565b6000601f19601f8301169050919050565b60006145708261450e565b61457a8185614519565b935061458a81856020860161452a565b61459381614554565b840191505092915050565b600060208201905081810360008301526145b88184614565565b905092915050565b6000602082840312156145d6576145d5614437565b5b60006145e484828501614485565b91505092915050565b60008115159050919050565b614602816145ed565b82525050565b600060208201905061461d60008301846145f9565b92915050565b61462c816144da565b811461463757600080fd5b50565b60008135905061464981614623565b92915050565b6000806040838503121561466657614665614437565b5b600061467485828601614485565b92505060206146858582860161463a565b9150509250929050565b600061469a8261443c565b9050919050565b6146aa8161468f565b82525050565b60006020820190506146c560008301846146a1565b92915050565b6000806000606084860312156146e4576146e3614437565b5b60006146f286828701614485565b935050602061470386828701614485565b92505060406147148682870161463a565b9150509250925092565b60006020828403121561473457614733614437565b5b60006147428482850161463a565b91505092915050565b6000806040838503121561476257614761614437565b5b60006147708582860161463a565b92505060206147818582860161463a565b9150509250929050565b600060ff82169050919050565b6147a18161478b565b82525050565b60006020820190506147bc6000830184614798565b92915050565b6147cb8161445c565b82525050565b60006020820190506147e660008301846147c2565b92915050565b6147f58161468f565b811461480057600080fd5b50565b600081359050614812816147ec565b92915050565b60006020828403121561482e5761482d614437565b5b600061483c84828501614803565b91505092915050565b61484e816145ed565b811461485957600080fd5b50565b60008135905061486b81614845565b92915050565b6000806040838503121561488857614887614437565b5b600061489685828601614485565b92505060206148a78582860161485c565b9150509250929050565b600060a0820190506148c66000830188614798565b6148d36020830187614798565b6148e06040830186614798565b6148ed6060830185614798565b6148fa6080830184614798565b9695505050505050565b61490d8161478b565b811461491857600080fd5b50565b60008135905061492a81614904565b92915050565b600080600080600060a0868803121561494c5761494b614437565b5b600061495a8882890161491b565b955050602061496b8882890161491b565b945050604061497c8882890161491b565b935050606061498d8882890161491b565b925050608061499e8882890161491b565b9150509295509295909350565b6000819050919050565b60006149d06149cb6149c68461443c565b6149ab565b61443c565b9050919050565b60006149e2826149b5565b9050919050565b60006149f4826149d7565b9050919050565b614a04816149e9565b82525050565b6000602082019050614a1f60008301846149fb565b92915050565b6000614a30826149d7565b9050919050565b614a4081614a25565b82525050565b6000602082019050614a5b6000830184614a37565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614aa857607f821691505b602082108103614abb57614aba614a61565b5b50919050565b7f43616e6e6f7420736574206e6577206d6178207472616e73616374696f6e207460008201527f6f207468652073616d652076616c75652061732063757272656e74206d61782060208201527f7472616e73616374696f6e000000000000000000000000000000000000000000604082015250565b6000614b43604b83614519565b9150614b4e82614ac1565b606082019050919050565b60006020820190508181036000830152614b7281614b36565b9050919050565b7f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f77657260008201527f207468616e20302e322070657263656e74000000000000000000000000000000602082015250565b6000614bd5603183614519565b9150614be082614b79565b604082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b6000604082019050614c2060008301856144e4565b614c2d60208301846144e4565b9392505050565b7f43616e6e6f7420736574206e6577206d61782062616c616e636520746f20746860008201527f652073616d652076616c75652061732063757272656e74206d61782062616c6160208201527f6e63650000000000000000000000000000000000000000000000000000000000604082015250565b6000614cb6604383614519565b9150614cc182614c34565b606082019050919050565b60006020820190508181036000830152614ce581614ca9565b9050919050565b7f43616e6e6f7420736574206d61782062616c616e6365206c6f7765722074686160008201527f6e20312070657263656e74000000000000000000000000000000000000000000602082015250565b6000614d48602b83614519565b9150614d5382614cec565b604082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560008201527f2063616e20616363657074206f776e6572736869700000000000000000000000602082015250565b6000614dda603583614519565b9150614de582614d7e565b604082019050919050565b60006020820190508181036000830152614e0981614dcd565b9050919050565b6000604082019050614e2560008301856147c2565b614e3260208301846147c2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e738261478b565b9150614e7e8361478b565b9250828201905060ff811115614e9757614e96614e39565b5b92915050565b7f696e53776170416e644c69717569667900000000000000000000000000000000600082015250565b6000614ed3601083614519565b9150614ede82614e9d565b602082019050919050565b60006020820190508181036000830152614f0281614ec6565b9050919050565b7f43616e6e6f74207365742054726561737572792066656520686967686572207460008201527f68616e206d617800000000000000000000000000000000000000000000000000602082015250565b6000614f65602783614519565b9150614f7082614f09565b604082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b7f43616e6e6f742073657420746f74616c2062757920666565732068696768657260008201527f207468616e206d61780000000000000000000000000000000000000000000000602082015250565b6000614ff7602983614519565b915061500282614f9b565b604082019050919050565b6000602082019050818103600083015261502681614fea565b9050919050565b600060408201905061504260008301856147c2565b61504f60208301846144e4565b9392505050565b60008151905061506581614845565b92915050565b60006020828403121561508157615080614437565b5b600061508f84828501615056565b91505092915050565b7f43616e6e6f742073657420746f74616c2073656c6c206665657320686967686560008201527f72207468616e206d617800000000000000000000000000000000000000000000602082015250565b60006150f4602a83614519565b91506150ff82615098565b604082019050919050565b60006020820190508181036000830152615123816150e7565b9050919050565b6000819050919050565b600061514f61514a6151458461512a565b6149ab565b6144da565b9050919050565b61515f81615134565b82525050565b600060408201905061517a60008301856147c2565b6151876020830184615156565b9392505050565b6000615199826144da565b91506151a4836144da565b92508282026151b2816144da565b915082820484148315176151c9576151c8614e39565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061520a826144da565b9150615215836144da565b925082615225576152246151d0565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528c602483614519565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531e602283614519565b9150615329826152c2565b604082019050919050565b6000602082019050818103600083015261534d81615311565b9050919050565b7f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660008201527f6f726d207468697320616374696f6e0000000000000000000000000000000000602082015250565b60006153b0602f83614519565b91506153bb82615354565b604082019050919050565b600060208201905081810360008301526153df816153a3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615442602583614519565b915061544d826153e6565b604082019050919050565b6000602082019050818103600083015261547181615435565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154d4602383614519565b91506154df82615478565b604082019050919050565b60006020820190508181036000830152615503816154c7565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615566602983614519565b91506155718261550a565b604082019050919050565b6000602082019050818103600083015261559581615559565b9050919050565b7f547820776f756c642063617573652077616c6c657420746f206578636565642060008201527f6d61782062616c616e6365000000000000000000000000000000000000000000602082015250565b60006155f8602b83614519565b91506156038261559c565b604082019050919050565b60006020820190508181036000830152615627816155eb565b9050919050565b6000615639826144da565b9150615644836144da565b925082820190508082111561565c5761565b614e39565b5b92915050565b7f4e6f20746f6b656e7320617661696c61626c6520746f20737761700000000000600082015250565b6000615698601b83614519565b91506156a382615662565b602082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b600081905092915050565b50565b60006156e96000836156ce565b91506156f4826156d9565b600082019050919050565b600061570a826156dc565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061574a601283614519565b915061575582615714565b602082019050919050565b600060208201905081810360008301526157798161573d565b9050919050565b600061578b826144da565b9150615796836144da565b92508282039050818111156157ae576157ad614e39565b5b92915050565b7f5472616e7366657220616d6f756e742065786365656473206c696d6974000000600082015250565b60006157ea601d83614519565b91506157f5826157b4565b602082019050919050565b60006020820190508181036000830152615819816157dd565b9050919050565b7f547820776f756c6420636175736520726563697069656e7420746f206578636560008201527f6564206d61782062616c616e6365000000000000000000000000000000000000602082015250565b600061587c602e83614519565b915061588782615820565b604082019050919050565b600060208201905081810360008301526158ab8161586f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061591f8161446e565b92915050565b60006020828403121561593b5761593a614437565b5b600061594984828501615910565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159878161445c565b82525050565b6000615999838361597e565b60208301905092915050565b6000602082019050919050565b60006159bd82615952565b6159c7818561595d565b93506159d28361596e565b8060005b83811015615a035781516159ea888261598d565b97506159f5836159a5565b9250506001810190506159d6565b5085935050505092915050565b600060a082019050615a2560008301886144e4565b615a326020830187615156565b8181036040830152615a4481866159b2565b9050615a5360608301856147c2565b615a6060808301846144e4565b9695505050505050565b600060c082019050615a7f60008301896147c2565b615a8c60208301886144e4565b615a996040830187615156565b615aa66060830186615156565b615ab360808301856147c2565b615ac060a08301846144e4565b979650505050505050565b600081519050615ada81614623565b92915050565b600080600060608486031215615af957615af8614437565b5b6000615b0786828701615acb565b9350506020615b1886828701615acb565b9250506040615b2986828701615acb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122022e6f6de9b87811d3f62affb7f4daa3d30749ca1461b2957c8296f0e848b886564736f6c63430008110033

Deployed Bytecode Sourcemap

36951:1945:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13053:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17642:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13274:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17969:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;848:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24722:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17390:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21804:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26919:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15986:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13201:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26590:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17057:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17484:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12685:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22058:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18819:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12651:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12768:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;624:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15525:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18136:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24497:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24290:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12993:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22030:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16416:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17719:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12801:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;997:271;;;;;;;;;;;;;:::i;:::-;;22101:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;597:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24077:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17561:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963:794;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22194:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17247:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14561:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19041:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12868:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26737:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21897:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12714:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12902:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22164:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;21850:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13136:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15031:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12742:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16564:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21954:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17830:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24842:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15310:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25765:817;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22130:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16702:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12837:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13053:68;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17642:71::-;17681:13;17705:5;17698:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17642:71;:::o;13274:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;17969:159::-;18044:4;18061:37;18070:10;18082:7;18091:6;18061:8;:37::i;:::-;18116:4;18109:11;;17969:159;;;;:::o;848:141::-;1306:12;:10;:12::i;:::-;937:6:::1;920:14;;:23;;;;;;;;;;;;;;;;;;959:22;974:6;959:22;;;;;;:::i;:::-;;;;;;;;848:141:::0;:::o;24722:112::-;1306:12;:10;:12::i;:::-;24821:5:::1;24790:19;:28;24810:7;24790:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24722:112:::0;:::o;17390:88::-;17445:7;17463:12;;17456:19;;17390:88;:::o;21804:39::-;;;;;;;;;;;;;:::o;26919:326::-;27017:4;27034:45;27053:6;27061:9;27072:6;27034:18;:45::i;:::-;27090:125;27107:6;27115:10;27127:87;27163:6;27127:87;;;;;;;;;;;;;;;;;:11;:19;27139:6;27127:19;;;;;;;;;;;;;;;:31;27147:10;27127:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;27090:16;:125::i;:::-;;27233:4;27226:11;;26919:326;;;;;:::o;15986:422::-;1306:12;:10;:12::i;:::-;16072:16:::1;16091:46;16132:4;16091:36;16108:18;16091:12;;:16;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;16072:65;;16170:6;;16158:8;:18:::0;16150:106:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16287:29;16311:4;16287:19;16304:1;16287:12;;:16;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;16275:8;:41;;16267:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16392:8;16383:6;:17;;;;16061:347;15986:422:::0;:::o;13201:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;26590:139::-;1306:12;:10;:12::i;:::-;26701:20:::1;26680:18;:41;;;;26590:139:::0;:::o;17057:182::-;1306:12;:10;:12::i;:::-;17166:11:::1;;;;;;;;;;;:35;;;17202:10;17214:16;17166:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17057:182:::0;;:::o;17484:71::-;17527:5;17543:9;;;;;;;;;;;17536:16;;17484:71;:::o;12685:22::-;;;;;;;;;;;;;:::o;22058:28::-;;;;;;;;;;;;;:::o;18819:214::-;18907:4;18924:79;18933:10;18945:7;18954:48;18991:10;18954:11;:23;18966:10;18954:23;;;;;;;;;;;;;;;:32;18978:7;18954:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;18924:8;:79::i;:::-;19021:4;19014:11;;18819:214;;;;:::o;12651:27::-;;;;:::o;12768:26::-;;;;:::o;624:29::-;;;;;;;;;;;;;:::o;15525:453::-;1306:12;:10;:12::i;:::-;15623:21:::1;15647:50;15693:3;15647:41;15664:23;15647:12;;:16;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;15623:74;;15735:11;;15718:13;:28:::0;15710:108:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15854:28;15878:3;15854:19;15871:1;15854:12:::0;::::1;:16;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;15837:13;:45;;15829:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;15957:13;15943:11;:27;;;;15612:366;15525:453:::0;:::o;18136:169::-;18226:4;18243:32;18252:5;18259:7;18268:6;18243:8;:32::i;:::-;18293:4;18286:11;;18136:169;;;;;:::o;24497:217::-;1306:12;:10;:12::i;:::-;24632:19:::1;;;;;;;;;;;24607:44;;:21;:44;;::::0;24599:53:::1;;;::::0;::::1;;24685:21;24663:19;;:43;;;;;;;;;;;;;;;;;;24497:217:::0;:::o;24290:199::-;1306:12;:10;:12::i;:::-;24416:16:::1;;;;;;;;;;;24394:38;;:18;:38;;::::0;24386:47:::1;;;::::0;::::1;;24463:18;24444:16;;:37;;;;;;;;;;;;;;;;;;24290:199:::0;:::o;12993:45::-;;;;;;;;;;;;;;;;;:::o;22030:21::-;;;;;;;;;;;;;:::o;16416:140::-;1306:12;:10;:12::i;:::-;16542:6:::1;16505:25;:34;16531:7;16505:34;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;16416:140:::0;;:::o;17719:105::-;17785:7;17803:9;:18;17813:7;17803:18;;;;;;;;;;;;;;;;17796:25;;17719:105;;;:::o;12801:21::-;;;;:::o;997:271::-;1066:14;;;;;;;;;;;1052:28;;:10;:28;;;1044:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;1154:35;1167:5;;;;;;;;;;1174:14;;;;;;;;;;;1154:35;;;;;;;:::i;:::-;;;;;;;;1208:14;;;;;;;;;;;1200:5;;:22;;;;;;;;;;;;;;;;;;1258:1;1233:14;;:27;;;;;;;;;;;;;;;;;;997:271::o;22101:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;597:20::-;;;;;;;;;;;;:::o;24077:205::-;1306:12;:10;:12::i;:::-;24206:17:::1;;;;;;;;;;;24183:40;;:19;:40;;::::0;24175:49:::1;;;::::0;::::1;;24255:19;24235:17;;:39;;;;;;;;;;;;;;;;;;24077:205:::0;:::o;17561:75::-;17602:13;17626:7;17619:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:75;:::o;24963:794::-;1306:12;:10;:12::i;:::-;25136:21:::1;25243:12;25220:20;25199:18;25180:16;25160:17;:36;;;;:::i;:::-;:57;;;;:::i;:::-;:80;;;;:::i;:::-;:95;;;;:::i;:::-;25136:119;;25275:16;;;;;;;;;;;25274:17;25266:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;25352:15;;;;;;;;;;;25331:36;;:17;:36;;;;25323:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;25449:8;;;;;;;;;;;25430:27;;:15;:27;;;;25422:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25528:178;;;;;;;;25549:17;25528:178;;;;;;25580:16;25528:178;;;;;;25612:18;25528:178;;;;;;25661:20;25528:178;;;;;;25691:12;25528:178;;;;::::0;25516:9:::1;:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25734:15;25717:14;;:32;;;;;;;;;;;;;;;;;;25125:632;24963:794:::0;;;;;:::o;22194:28::-;;;;;;;;;;;;;:::o;17247:135::-;1306:12;:10;:12::i;:::-;17336:6:::1;17330:3;:12;17322:21;;;::::0;::::1;;17371:3;17354:14;:20;;;;17247:135:::0;:::o;14561:340::-;1306:12;:10;:12::i;:::-;14655:20:::1;14685:14;14655:45;;14850:13;:22;;;14873:10;14885:7;14850:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14644:257;14561:340:::0;;:::o;19041:265::-;19134:4;19151:125;19160:10;19172:7;19181:94;19218:15;19181:94;;;;;;;;;;;;;;;;;:11;:23;19193:10;19181:23;;;;;;;;;;;;;;;:32;19205:7;19181:32;;;;;;;;;;;;;;;;:36;;:94;;;;;:::i;:::-;19151:8;:125::i;:::-;19294:4;19287:11;;19041:265;;;;:::o;12868:19::-;;;;;;;;;;;;;:::o;26737:174::-;26815:4;26832:49;26851:10;26863:9;26874:6;26832:18;:49::i;:::-;26899:4;26892:11;;26737:174;;;;:::o;21897:42::-;;;;;;;;;;;;;:::o;12714:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12902:38::-;;;;;;;;;;;;;:::o;22164:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21850:40::-;;;;;;;;;;;;;:::o;13136:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15031:194::-;1306:12;:10;:12::i;:::-;15131:4:::1;;;;;;;;;;;15113:22;;:14;:22;;::::0;15105:31:::1;;;::::0;::::1;;15154:14;15147:4;;:21;;;;;;;;;;;;;;;;;;15213:4;15179:25;:31;15205:4;;;;;;;;;;;15179:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;15031:194:::0;:::o;12742:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16564:130::-;1306:12;:10;:12::i;:::-;16680:6:::1;16648:20;:29;16669:7;16648:29;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;16564:130:::0;;:::o;21954:33::-;;;;:::o;17830:131::-;17913:7;17931:11;:18;17943:5;17931:18;;;;;;;;;;;;;;;:27;17950:7;17931:27;;;;;;;;;;;;;;;;17924:34;;17830:131;;;;:::o;24842:113::-;1306:12;:10;:12::i;:::-;24943:4:::1;24912:19;:28;24932:7;24912:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24842:113:::0;:::o;15310:207::-;1306:12;:10;:12::i;:::-;15412:6:::1;;;;;;;;;;;15390:29;;:10;:29;;::::0;15382:38:::1;;;::::0;::::1;;15451:10;15431:6;;:31;;;;;;;;;;;;;;;;;;15473:11;;;;;;;;;;;:24;;;15498:10;15473:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15310:207:::0;:::o;25765:817::-;1306:12;:10;:12::i;:::-;25944:22:::1;26056:13;26032:21;26010:19;25990:17;25969:18;:38;;;;:::i;:::-;:60;;;;:::i;:::-;:84;;;;:::i;:::-;:100;;;;:::i;:::-;25944:125;;26089:16;;;;;;;;;;;26088:17;26080:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;26167:15;;;;;;;;;;;26145:37;;:18;:37;;;;26137:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;26265:8;;;;;;;;;;;26245:28;;:16;:28;;;;26237:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26346:183;;;;;;;;26367:18;26346:183;;;;;;26399:17;26346:183;;;;;;26432:19;26346:183;;;;;;26482:21;26346:183;;;;;;26513:13;26346:183;;;;::::0;26333:10:::1;:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26558:16;26540:15;;:34;;;;;;;;;;;;;;;;;;25933:649;25765:817:::0;;;;;:::o;22130:27::-;;;;;;;;;;;;;:::o;16702:347::-;1306:12;:10;:12::i;:::-;16816:4:::1;16798:23;;:6;:23;;;;:41;;;;;16835:4;;;;;;;;;;;16825:14;;:6;:14;;;;16798:41;16790:50;;;::::0;::::1;;16879:6;16851:17;:25;16869:6;16851:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;16899:6;16896:146;;;16921:11;;;;;;;;;;;:20;;;16942:6;16950:1;16921:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16896:146;;;16983:11;;;;;;;;;;;:20;;;17004:6;17012:17;17022:6;17012:9;:17::i;:::-;16983:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16896:146;16702:347:::0;;:::o;12837:24::-;;;;;;;;;;;;;:::o;5398:98::-;5456:7;5487:1;5483;:5;;;;:::i;:::-;5476:12;;5398:98;;;;:::o;5504:::-;5562:7;5593:1;5589;:5;;;;:::i;:::-;5582:12;;5504:98;;;;:::o;19314:341::-;19426:1;19408:20;;:6;:20;;;19400:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;19507:1;19488:21;;:7;:21;;;19480:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19592:6;19561:11;:19;19573:6;19561:19;;;;;;;;;;;;;;;:28;19581:7;19561:28;;;;;;;;;;;;;;;:37;;;;19631:7;19614:33;;19623:6;19614:33;;;19640:6;19614:33;;;;;;:::i;:::-;;;;;;;;19314:341;;;:::o;1346:133::-;1414:5;;;;;;;;;;1400:19;;:10;:19;;;1392:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;1346:133::o;27253:1774::-;27366:1;27350:18;;:4;:18;;;27342:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27443:1;27429:16;;:2;:16;;;27421:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27513:1;27504:6;:10;27496:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27598:5;;;;;;;;;;27590:13;;:4;:13;;;;:72;;;;;27657:5;;;;;;;;;;27651:11;;:2;:11;;;;27590:72;:150;;;;;27711:25;:29;27737:2;27711:29;;;;;;;;;;;;;;;;;;;;;;;;;27710:30;27590:150;27573:332;;;27834:11;;27805:25;27823:6;27805:13;27815:2;27805:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:40;;27797:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27573:332;27971:16;;;;;;;;;;;27970:17;:133;;;;;28085:18;;28057:24;28075:4;28057:9;:24::i;:::-;:46;;27970:133;:196;;;;;28162:4;;;;;;;;;;;28154:12;;:4;:12;;;;27970:196;27953:367;;;28279:29;:27;:29::i;:::-;27953:367;28379:12;28418:4;;;;;;;;;;;28410:12;;:4;:12;;;28406:32;;21756:1;28424:14;;28406:32;28459:4;;;;;;;;;;;28453:10;;:2;:10;;;28449:31;;21788:1;28465:15;;28449:31;28518:1;28508:6;:11;;;;:83;;;;;28538:19;:25;28558:4;28538:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28567:19;:23;28587:2;28567:23;;;;;;;;;;;;;;;;;;;;;;;;;28538:52;28536:55;28508:83;:199;;;;;21756:1;28610:15;;:6;:15;;;:37;;;;;28646:1;28629:14;;;;;;;;;;;:18;;;28610:37;28609:97;;;;21788:1;28666:16;;:6;:16;;;:39;;;;;28704:1;28686:15;;;;;;;;;;;:19;;;28666:39;28609:97;28508:199;28491:489;;;28734:22;28759:34;28778:6;28786;28759:18;:34::i;:::-;28734:59;;28831:1;28814:14;:18;28810:159;;;28862:26;28873:14;28862:6;:10;;:26;;;;:::i;:::-;28853:35;;28907:46;28917:4;28931;28938:14;28907:9;:46::i;:::-;28810:159;28719:261;28491:489;28992:27;29002:4;29008:2;29012:6;28992:9;:27::i;:::-;27331:1696;27253:1774;;;:::o;5716:240::-;5836:7;5894:1;5889;:6;;5897:12;5881:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5936:1;5932;:5;5925:12;;5716:240;;;;;:::o;5186:98::-;5244:7;5275:1;5271;:5;;;;:::i;:::-;5264:12;;5186:98;;;;:::o;30367:1959::-;22591:4;22572:16;;:23;;;;;;;;;;;;;;;;;;30437:22:::1;30462:152;30594:19;;30462:127;30561:27;;30462:80;30522:19;;30462:55;30491:25;;30462:24;;:28;;:55;;;;:::i;:::-;:59;;:80;;;;:::i;:::-;:98;;:127;;;;:::i;:::-;:131;;:152;;;;:::i;:::-;30437:177;;30650:1;30633:14;:18;30625:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30696:20;30719:21;30696:44;;30753:15;30771:26;30795:1;30771:19;;:23;;:26;;;;:::i;:::-;30753:44;;30808:20;30831:32;30855:7;30831:19;;:23;;:32;;;;:::i;:::-;30808:55;;30876:25;30904:144;31040:7;30904:131;31007:27;;30904:84;30962:25;;30904:53;30933:23;;30904:24;;:28;;:53;;;;:::i;:::-;:57;;:84;;;;:::i;:::-;:102;;:131;;;;:::i;:::-;:135;;:144;;;;:::i;:::-;30876:172;;31061:38;31081:17;31061:19;:38::i;:::-;31112:16;31131:39;31157:12;31131:21;:25;;:39;;;;:::i;:::-;31112:58;;31183:16;31202:44;31228:17;31202:21;31215:7;31202:8;:12;;:21;;;;:::i;:::-;:25;;:44;;;;:::i;:::-;31183:63;;31257:22;31282:62;31326:17;31282:39;31295:25;;31282:8;:12;;:39;;;;:::i;:::-;:43;;:62;;;;:::i;:::-;31257:87;;31355:20;31378:60;31420:17;31378:37;31391:23;;31378:8;:12;;:37;;;;:::i;:::-;:41;;:60;;;;:::i;:::-;31355:83;;31449:24;31476:64;31522:17;31476:41;31489:27;;31476:8;:12;;:41;;;;:::i;:::-;:45;;:64;;;;:::i;:::-;31449:91;;31551:21;31575:82;31640:16;31575:60;31622:12;31575:42;31602:14;31575:22;31588:8;31575;:12;;:22;;;;:::i;:::-;:26;;:42;;;;:::i;:::-;:46;;:60;;;;:::i;:::-;:64;;:82;;;;:::i;:::-;31551:106;;31670:36;31683:12;31697:8;31670:12;:36::i;:::-;31718:9;31729:17:::0;31750:16:::1;;;;;;;;;;;:21;;31779:13;31750:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31717:80;;;;31809:10;31821:18:::0;31843:17:::1;;;;;;;;;;;:22;;31873:14;31843:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31808:84;;;;31904:10;31916:18:::0;31938:19:::1;;;;;;;;;;;:24;;31970:16;31938:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31903:88;;;;32010:4;:13;;;;;32018:5;32010:13;:22;;;;;32027:5;32010:22;32002:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32070:11;;;;;;;;;;;:19;;;32097:12;32070:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;32066:58:::0;32163:1:::1;32136:24;:28;;;;32203:1;32175:25;:29;;;;32237:1;32215:19;:23;;;;32275:1;32249:23;:27;;;;32317:1;32287:27;:31;;;;30426:1900;;;;;;;;;;;;;;;;;22637:5:::0;22618:16;;:24;;;;;;;;;;;;;;;;;;30367:1959::o;29035:1324::-;29110:7;29130:22;21756:1;29156:15;;:6;:15;;;29155:108;;29220:43;29259:3;29220:34;29231:10;:22;;;;;;;;;;;;29220:34;;:6;:10;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;29155:108;;;29175:42;29213:3;29175:33;29186:9;:21;;;;;;;;;;;;29175:33;;:6;:10;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;29155:108;29130:133;;29274:21;21756:1;29299:15;;:6;:15;;;29298:106;;29362:42;29400:3;29362:33;29373:10;:21;;;;;;;;;;;;29362:33;;:6;:10;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;29298:106;;;29318:41;29355:3;29318:32;29329:9;:20;;;;;;;;;;;;29318:32;;:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;29298:106;29274:130;;29415:23;21756:1;29442:15;;:6;:15;;;29441:110;;29507:44;29547:3;29507:35;29518:10;:23;;;;;;;;;;;;29507:35;;:6;:10;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;29441:110;;;29461:43;29500:3;29461:34;29472:9;:22;;;;;;;;;;;;29461:34;;:6;:10;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;29441:110;29415:136;;29562:25;21756:1;29591:15;;:6;:15;;;29590:114;;29658:46;29700:3;29658:37;29669:10;:25;;;;;;;;;;;;29658:37;;:6;:10;;:37;;;;:::i;:::-;:41;;:46;;;;:::i;:::-;29590:114;;;29610:45;29651:3;29610:36;29621:9;:24;;;;;;;;;;;;29610:36;;:6;:10;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;29590:114;29562:142;;29715:17;21756:1;29736:15;;:6;:15;;;29735:98;;29795:38;29829:3;29795:29;29806:10;:17;;;;;;;;;;;;29795:29;;:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;29735:98;;;29755:37;29788:3;29755:28;29766:9;:16;;;;;;;;;;;;29755:28;;:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;29735:98;29715:118;;29873:44;29902:14;29873:24;;:28;;:44;;;;:::i;:::-;29846:24;:71;;;;29954:42;29982:13;29954:23;;:27;;:42;;;;:::i;:::-;29928:23;:68;;;;30035:46;30065:15;30035:25;;:29;;:46;;;;:::i;:::-;30007:25;:74;;;;30122:50;30154:17;30122:27;;:31;;:50;;;;:::i;:::-;30092:27;:80;;;;30205:34;30229:9;30205:19;;:23;;:34;;;;:::i;:::-;30183:19;:56;;;;30259:92;30341:9;30259:77;30318:17;30259:54;30297:15;30259:33;30278:13;30259:14;:18;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;:58;;:77;;;;:::i;:::-;:81;;:92;;;;:::i;:::-;30252:99;;;;;;;29035:1324;;;;:::o;5292:98::-;5350:7;5381:1;5377;:5;;;;:::i;:::-;5370:12;;5292:98;;;;:::o;19663:1346::-;19768:1;19752:18;;:4;:18;;;19744:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19845:1;19831:16;;:2;:16;;;19823:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19915:1;19906:6;:10;19898:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19980:20;:26;20001:4;19980:26;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;20010:20;:24;20031:2;20010:24;;;;;;;;;;;;;;;;;;;;;;;;;19980:54;19975:146;;20069:6;;20060;:15;20052:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19975:146;20158:5;;;;;;;;;;20150:13;;:4;:13;;;;:72;;;;;20217:5;;;;;;;;;;20211:11;;:2;:11;;;;20150:72;:150;;;;;20271:25;:29;20297:2;20271:29;;;;;;;;;;;;;;;;;;;;;;;;;20270:30;20150:150;20133:335;;;20394:11;;20365:25;20383:6;20365:13;20375:2;20365:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:40;;20357:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;20133:335;20498:69;20518:6;20498:69;;;;;;;;;;;;;;;;;:9;:15;20508:4;20498:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;20480:9;:15;20490:4;20480:15;;;;;;;;;;;;;;;:87;;;;20594:25;20612:6;20594:9;:13;20604:2;20594:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;20578:9;:13;20588:2;20578:13;;;;;;;;;;;;;;;:41;;;;20665:17;:23;20683:4;20665:23;;;;;;;;;;;;;;;;;;;;;;;;;20661:114;;20709:11;;;;;;;;;;;:20;;;20730:4;20736:15;20746:4;20736:9;:15::i;:::-;20709:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20705:59;20661:114;20791:17;:21;20809:2;20791:21;;;;;;;;;;;;;;;;;;;;;;;;;20787:108;;20833:11;;;;;;;;;;;:20;;;20854:2;20858:13;20868:2;20858:9;:13::i;:::-;20833:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20829:55;20787:108;20911:11;;;;;;;;;;;:19;;;20931:14;;20911:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20907:51;20990:2;20975:26;;20984:4;20975:26;;;20994:6;20975:26;;;;;;:::i;:::-;;;;;;;;19663:1346;;;:::o;32334:459::-;32403:21;32441:1;32427:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32403:40;;32472:4;32454;32459:1;32454:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32498:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32488:4;32493:1;32488:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32524:61;32549:4;32564:6;;;;;;;;;;;32573:11;32524:16;:61::i;:::-;;32598:6;;;;;;;;;;;:57;;;32670:11;32696:1;32712:4;32739;32759:15;32598:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32392:401;32334:459;:::o;32801:355::-;32882:61;32907:4;32922:6;;;;;;;;;;;32931:11;32882:16;:61::i;:::-;;32956:6;;;;;;;;;;;:22;;;32986:9;33019:4;33039:11;33065:1;33081;33105;33122:15;32956:192;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32801:355;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:99::-;1808:6;1842:5;1836:12;1826:22;;1756:99;;;:::o;1861:169::-;1945:11;1979:6;1974:3;1967:19;2019:4;2014:3;2010:14;1995:29;;1861:169;;;;:::o;2036:246::-;2117:1;2127:113;2141:6;2138:1;2135:13;2127:113;;;2226:1;2221:3;2217:11;2211:18;2207:1;2202:3;2198:11;2191:39;2163:2;2160:1;2156:10;2151:15;;2127:113;;;2274:1;2265:6;2260:3;2256:16;2249:27;2098:184;2036:246;;;:::o;2288:102::-;2329:6;2380:2;2376:7;2371:2;2364:5;2360:14;2356:28;2346:38;;2288:102;;;:::o;2396:377::-;2484:3;2512:39;2545:5;2512:39;:::i;:::-;2567:71;2631:6;2626:3;2567:71;:::i;:::-;2560:78;;2647:65;2705:6;2700:3;2693:4;2686:5;2682:16;2647:65;:::i;:::-;2737:29;2759:6;2737:29;:::i;:::-;2732:3;2728:39;2721:46;;2488:285;2396:377;;;;:::o;2779:313::-;2892:4;2930:2;2919:9;2915:18;2907:26;;2979:9;2973:4;2969:20;2965:1;2954:9;2950:17;2943:47;3007:78;3080:4;3071:6;3007:78;:::i;:::-;2999:86;;2779:313;;;;:::o;3098:329::-;3157:6;3206:2;3194:9;3185:7;3181:23;3177:32;3174:119;;;3212:79;;:::i;:::-;3174:119;3332:1;3357:53;3402:7;3393:6;3382:9;3378:22;3357:53;:::i;:::-;3347:63;;3303:117;3098:329;;;;:::o;3433:90::-;3467:7;3510:5;3503:13;3496:21;3485:32;;3433:90;;;:::o;3529:109::-;3610:21;3625:5;3610:21;:::i;:::-;3605:3;3598:34;3529:109;;:::o;3644:210::-;3731:4;3769:2;3758:9;3754:18;3746:26;;3782:65;3844:1;3833:9;3829:17;3820:6;3782:65;:::i;:::-;3644:210;;;;:::o;3860:122::-;3933:24;3951:5;3933:24;:::i;:::-;3926:5;3923:35;3913:63;;3972:1;3969;3962:12;3913:63;3860:122;:::o;3988:139::-;4034:5;4072:6;4059:20;4050:29;;4088:33;4115:5;4088:33;:::i;:::-;3988:139;;;;:::o;4133:474::-;4201:6;4209;4258:2;4246:9;4237:7;4233:23;4229:32;4226:119;;;4264:79;;:::i;:::-;4226:119;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4511:2;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4482:118;4133:474;;;;;:::o;4613:104::-;4658:7;4687:24;4705:5;4687:24;:::i;:::-;4676:35;;4613:104;;;:::o;4723:142::-;4826:32;4852:5;4826:32;:::i;:::-;4821:3;4814:45;4723:142;;:::o;4871:254::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:87;5115:1;5104:9;5100:17;5091:6;5031:87;:::i;:::-;4871:254;;;;:::o;5131:619::-;5208:6;5216;5224;5273:2;5261:9;5252:7;5248:23;5244:32;5241:119;;;5279:79;;:::i;:::-;5241:119;5399:1;5424:53;5469:7;5460:6;5449:9;5445:22;5424:53;:::i;:::-;5414:63;;5370:117;5526:2;5552:53;5597:7;5588:6;5577:9;5573:22;5552:53;:::i;:::-;5542:63;;5497:118;5654:2;5680:53;5725:7;5716:6;5705:9;5701:22;5680:53;:::i;:::-;5670:63;;5625:118;5131:619;;;;;:::o;5756:329::-;5815:6;5864:2;5852:9;5843:7;5839:23;5835:32;5832:119;;;5870:79;;:::i;:::-;5832:119;5990:1;6015:53;6060:7;6051:6;6040:9;6036:22;6015:53;:::i;:::-;6005:63;;5961:117;5756:329;;;;:::o;6091:474::-;6159:6;6167;6216:2;6204:9;6195:7;6191:23;6187:32;6184:119;;;6222:79;;:::i;:::-;6184:119;6342:1;6367:53;6412:7;6403:6;6392:9;6388:22;6367:53;:::i;:::-;6357:63;;6313:117;6469:2;6495:53;6540:7;6531:6;6520:9;6516:22;6495:53;:::i;:::-;6485:63;;6440:118;6091:474;;;;;:::o;6571:86::-;6606:7;6646:4;6639:5;6635:16;6624:27;;6571:86;;;:::o;6663:112::-;6746:22;6762:5;6746:22;:::i;:::-;6741:3;6734:35;6663:112;;:::o;6781:214::-;6870:4;6908:2;6897:9;6893:18;6885:26;;6921:67;6985:1;6974:9;6970:17;6961:6;6921:67;:::i;:::-;6781:214;;;;:::o;7001:118::-;7088:24;7106:5;7088:24;:::i;:::-;7083:3;7076:37;7001:118;;:::o;7125:222::-;7218:4;7256:2;7245:9;7241:18;7233:26;;7269:71;7337:1;7326:9;7322:17;7313:6;7269:71;:::i;:::-;7125:222;;;;:::o;7353:138::-;7434:32;7460:5;7434:32;:::i;:::-;7427:5;7424:43;7414:71;;7481:1;7478;7471:12;7414:71;7353:138;:::o;7497:155::-;7551:5;7589:6;7576:20;7567:29;;7605:41;7640:5;7605:41;:::i;:::-;7497:155;;;;:::o;7658:345::-;7725:6;7774:2;7762:9;7753:7;7749:23;7745:32;7742:119;;;7780:79;;:::i;:::-;7742:119;7900:1;7925:61;7978:7;7969:6;7958:9;7954:22;7925:61;:::i;:::-;7915:71;;7871:125;7658:345;;;;:::o;8009:116::-;8079:21;8094:5;8079:21;:::i;:::-;8072:5;8069:32;8059:60;;8115:1;8112;8105:12;8059:60;8009:116;:::o;8131:133::-;8174:5;8212:6;8199:20;8190:29;;8228:30;8252:5;8228:30;:::i;:::-;8131:133;;;;:::o;8270:468::-;8335:6;8343;8392:2;8380:9;8371:7;8367:23;8363:32;8360:119;;;8398:79;;:::i;:::-;8360:119;8518:1;8543:53;8588:7;8579:6;8568:9;8564:22;8543:53;:::i;:::-;8533:63;;8489:117;8645:2;8671:50;8713:7;8704:6;8693:9;8689:22;8671:50;:::i;:::-;8661:60;;8616:115;8270:468;;;;;:::o;8744:624::-;8929:4;8967:3;8956:9;8952:19;8944:27;;8981:67;9045:1;9034:9;9030:17;9021:6;8981:67;:::i;:::-;9058:68;9122:2;9111:9;9107:18;9098:6;9058:68;:::i;:::-;9136;9200:2;9189:9;9185:18;9176:6;9136:68;:::i;:::-;9214;9278:2;9267:9;9263:18;9254:6;9214:68;:::i;:::-;9292:69;9356:3;9345:9;9341:19;9332:6;9292:69;:::i;:::-;8744:624;;;;;;;;:::o;9374:118::-;9445:22;9461:5;9445:22;:::i;:::-;9438:5;9435:33;9425:61;;9482:1;9479;9472:12;9425:61;9374:118;:::o;9498:135::-;9542:5;9580:6;9567:20;9558:29;;9596:31;9621:5;9596:31;:::i;:::-;9498:135;;;;:::o;9639:891::-;9724:6;9732;9740;9748;9756;9805:3;9793:9;9784:7;9780:23;9776:33;9773:120;;;9812:79;;:::i;:::-;9773:120;9932:1;9957:51;10000:7;9991:6;9980:9;9976:22;9957:51;:::i;:::-;9947:61;;9903:115;10057:2;10083:51;10126:7;10117:6;10106:9;10102:22;10083:51;:::i;:::-;10073:61;;10028:116;10183:2;10209:51;10252:7;10243:6;10232:9;10228:22;10209:51;:::i;:::-;10199:61;;10154:116;10309:2;10335:51;10378:7;10369:6;10358:9;10354:22;10335:51;:::i;:::-;10325:61;;10280:116;10435:3;10462:51;10505:7;10496:6;10485:9;10481:22;10462:51;:::i;:::-;10452:61;;10406:117;9639:891;;;;;;;;:::o;10536:60::-;10564:3;10585:5;10578:12;;10536:60;;;:::o;10602:142::-;10652:9;10685:53;10703:34;10712:24;10730:5;10712:24;:::i;:::-;10703:34;:::i;:::-;10685:53;:::i;:::-;10672:66;;10602:142;;;:::o;10750:126::-;10800:9;10833:37;10864:5;10833:37;:::i;:::-;10820:50;;10750:126;;;:::o;10882:154::-;10960:9;10993:37;11024:5;10993:37;:::i;:::-;10980:50;;10882:154;;;:::o;11042:187::-;11157:65;11216:5;11157:65;:::i;:::-;11152:3;11145:78;11042:187;;:::o;11235:278::-;11356:4;11394:2;11383:9;11379:18;11371:26;;11407:99;11503:1;11492:9;11488:17;11479:6;11407:99;:::i;:::-;11235:278;;;;:::o;11519:144::-;11587:9;11620:37;11651:5;11620:37;:::i;:::-;11607:50;;11519:144;;;:::o;11669:167::-;11774:55;11823:5;11774:55;:::i;:::-;11769:3;11762:68;11669:167;;:::o;11842:258::-;11953:4;11991:2;11980:9;11976:18;11968:26;;12004:89;12090:1;12079:9;12075:17;12066:6;12004:89;:::i;:::-;11842:258;;;;:::o;12106:180::-;12154:77;12151:1;12144:88;12251:4;12248:1;12241:15;12275:4;12272:1;12265:15;12292:320;12336:6;12373:1;12367:4;12363:12;12353:22;;12420:1;12414:4;12410:12;12441:18;12431:81;;12497:4;12489:6;12485:17;12475:27;;12431:81;12559:2;12551:6;12548:14;12528:18;12525:38;12522:84;;12578:18;;:::i;:::-;12522:84;12343:269;12292:320;;;:::o;12618:299::-;12758:34;12754:1;12746:6;12742:14;12735:58;12827:34;12822:2;12814:6;12810:15;12803:59;12896:13;12891:2;12883:6;12879:15;12872:38;12618:299;:::o;12923:366::-;13065:3;13086:67;13150:2;13145:3;13086:67;:::i;:::-;13079:74;;13162:93;13251:3;13162:93;:::i;:::-;13280:2;13275:3;13271:12;13264:19;;12923:366;;;:::o;13295:419::-;13461:4;13499:2;13488:9;13484:18;13476:26;;13548:9;13542:4;13538:20;13534:1;13523:9;13519:17;13512:47;13576:131;13702:4;13576:131;:::i;:::-;13568:139;;13295:419;;;:::o;13720:236::-;13860:34;13856:1;13848:6;13844:14;13837:58;13929:19;13924:2;13916:6;13912:15;13905:44;13720:236;:::o;13962:366::-;14104:3;14125:67;14189:2;14184:3;14125:67;:::i;:::-;14118:74;;14201:93;14290:3;14201:93;:::i;:::-;14319:2;14314:3;14310:12;14303:19;;13962:366;;;:::o;14334:419::-;14500:4;14538:2;14527:9;14523:18;14515:26;;14587:9;14581:4;14577:20;14573:1;14562:9;14558:17;14551:47;14615:131;14741:4;14615:131;:::i;:::-;14607:139;;14334:419;;;:::o;14759:332::-;14880:4;14918:2;14907:9;14903:18;14895:26;;14931:71;14999:1;14988:9;14984:17;14975:6;14931:71;:::i;:::-;15012:72;15080:2;15069:9;15065:18;15056:6;15012:72;:::i;:::-;14759:332;;;;;:::o;15097:291::-;15237:34;15233:1;15225:6;15221:14;15214:58;15306:34;15301:2;15293:6;15289:15;15282:59;15375:5;15370:2;15362:6;15358:15;15351:30;15097:291;:::o;15394:366::-;15536:3;15557:67;15621:2;15616:3;15557:67;:::i;:::-;15550:74;;15633:93;15722:3;15633:93;:::i;:::-;15751:2;15746:3;15742:12;15735:19;;15394:366;;;:::o;15766:419::-;15932:4;15970:2;15959:9;15955:18;15947:26;;16019:9;16013:4;16009:20;16005:1;15994:9;15990:17;15983:47;16047:131;16173:4;16047:131;:::i;:::-;16039:139;;15766:419;;;:::o;16191:230::-;16331:34;16327:1;16319:6;16315:14;16308:58;16400:13;16395:2;16387:6;16383:15;16376:38;16191:230;:::o;16427:366::-;16569:3;16590:67;16654:2;16649:3;16590:67;:::i;:::-;16583:74;;16666:93;16755:3;16666:93;:::i;:::-;16784:2;16779:3;16775:12;16768:19;;16427:366;;;:::o;16799:419::-;16965:4;17003:2;16992:9;16988:18;16980:26;;17052:9;17046:4;17042:20;17038:1;17027:9;17023:17;17016:47;17080:131;17206:4;17080:131;:::i;:::-;17072:139;;16799:419;;;:::o;17224:240::-;17364:34;17360:1;17352:6;17348:14;17341:58;17433:23;17428:2;17420:6;17416:15;17409:48;17224:240;:::o;17470:366::-;17612:3;17633:67;17697:2;17692:3;17633:67;:::i;:::-;17626:74;;17709:93;17798:3;17709:93;:::i;:::-;17827:2;17822:3;17818:12;17811:19;;17470:366;;;:::o;17842:419::-;18008:4;18046:2;18035:9;18031:18;18023:26;;18095:9;18089:4;18085:20;18081:1;18070:9;18066:17;18059:47;18123:131;18249:4;18123:131;:::i;:::-;18115:139;;17842:419;;;:::o;18267:332::-;18388:4;18426:2;18415:9;18411:18;18403:26;;18439:71;18507:1;18496:9;18492:17;18483:6;18439:71;:::i;:::-;18520:72;18588:2;18577:9;18573:18;18564:6;18520:72;:::i;:::-;18267:332;;;;;:::o;18605:180::-;18653:77;18650:1;18643:88;18750:4;18747:1;18740:15;18774:4;18771:1;18764:15;18791:188;18829:3;18848:18;18864:1;18848:18;:::i;:::-;18843:23;;18880:18;18896:1;18880:18;:::i;:::-;18875:23;;18921:1;18918;18914:9;18907:16;;18944:4;18939:3;18936:13;18933:39;;;18952:18;;:::i;:::-;18933:39;18791:188;;;;:::o;18985:166::-;19125:18;19121:1;19113:6;19109:14;19102:42;18985:166;:::o;19157:366::-;19299:3;19320:67;19384:2;19379:3;19320:67;:::i;:::-;19313:74;;19396:93;19485:3;19396:93;:::i;:::-;19514:2;19509:3;19505:12;19498:19;;19157:366;;;:::o;19529:419::-;19695:4;19733:2;19722:9;19718:18;19710:26;;19782:9;19776:4;19772:20;19768:1;19757:9;19753:17;19746:47;19810:131;19936:4;19810:131;:::i;:::-;19802:139;;19529:419;;;:::o;19954:226::-;20094:34;20090:1;20082:6;20078:14;20071:58;20163:9;20158:2;20150:6;20146:15;20139:34;19954:226;:::o;20186:366::-;20328:3;20349:67;20413:2;20408:3;20349:67;:::i;:::-;20342:74;;20425:93;20514:3;20425:93;:::i;:::-;20543:2;20538:3;20534:12;20527:19;;20186:366;;;:::o;20558:419::-;20724:4;20762:2;20751:9;20747:18;20739:26;;20811:9;20805:4;20801:20;20797:1;20786:9;20782:17;20775:47;20839:131;20965:4;20839:131;:::i;:::-;20831:139;;20558:419;;;:::o;20983:228::-;21123:34;21119:1;21111:6;21107:14;21100:58;21192:11;21187:2;21179:6;21175:15;21168:36;20983:228;:::o;21217:366::-;21359:3;21380:67;21444:2;21439:3;21380:67;:::i;:::-;21373:74;;21456:93;21545:3;21456:93;:::i;:::-;21574:2;21569:3;21565:12;21558:19;;21217:366;;;:::o;21589:419::-;21755:4;21793:2;21782:9;21778:18;21770:26;;21842:9;21836:4;21832:20;21828:1;21817:9;21813:17;21806:47;21870:131;21996:4;21870:131;:::i;:::-;21862:139;;21589:419;;;:::o;22014:332::-;22135:4;22173:2;22162:9;22158:18;22150:26;;22186:71;22254:1;22243:9;22239:17;22230:6;22186:71;:::i;:::-;22267:72;22335:2;22324:9;22320:18;22311:6;22267:72;:::i;:::-;22014:332;;;;;:::o;22352:137::-;22406:5;22437:6;22431:13;22422:22;;22453:30;22477:5;22453:30;:::i;:::-;22352:137;;;;:::o;22495:345::-;22562:6;22611:2;22599:9;22590:7;22586:23;22582:32;22579:119;;;22617:79;;:::i;:::-;22579:119;22737:1;22762:61;22815:7;22806:6;22795:9;22791:22;22762:61;:::i;:::-;22752:71;;22708:125;22495:345;;;;:::o;22846:229::-;22986:34;22982:1;22974:6;22970:14;22963:58;23055:12;23050:2;23042:6;23038:15;23031:37;22846:229;:::o;23081:366::-;23223:3;23244:67;23308:2;23303:3;23244:67;:::i;:::-;23237:74;;23320:93;23409:3;23320:93;:::i;:::-;23438:2;23433:3;23429:12;23422:19;;23081:366;;;:::o;23453:419::-;23619:4;23657:2;23646:9;23642:18;23634:26;;23706:9;23700:4;23696:20;23692:1;23681:9;23677:17;23670:47;23734:131;23860:4;23734:131;:::i;:::-;23726:139;;23453:419;;;:::o;23878:85::-;23923:7;23952:5;23941:16;;23878:85;;;:::o;23969:158::-;24027:9;24060:61;24078:42;24087:32;24113:5;24087:32;:::i;:::-;24078:42;:::i;:::-;24060:61;:::i;:::-;24047:74;;23969:158;;;:::o;24133:147::-;24228:45;24267:5;24228:45;:::i;:::-;24223:3;24216:58;24133:147;;:::o;24286:348::-;24415:4;24453:2;24442:9;24438:18;24430:26;;24466:71;24534:1;24523:9;24519:17;24510:6;24466:71;:::i;:::-;24547:80;24623:2;24612:9;24608:18;24599:6;24547:80;:::i;:::-;24286:348;;;;;:::o;24640:410::-;24680:7;24703:20;24721:1;24703:20;:::i;:::-;24698:25;;24737:20;24755:1;24737:20;:::i;:::-;24732:25;;24792:1;24789;24785:9;24814:30;24832:11;24814:30;:::i;:::-;24803:41;;24993:1;24984:7;24980:15;24977:1;24974:22;24954:1;24947:9;24927:83;24904:139;;25023:18;;:::i;:::-;24904:139;24688:362;24640:410;;;;:::o;25056:180::-;25104:77;25101:1;25094:88;25201:4;25198:1;25191:15;25225:4;25222:1;25215:15;25242:185;25282:1;25299:20;25317:1;25299:20;:::i;:::-;25294:25;;25333:20;25351:1;25333:20;:::i;:::-;25328:25;;25372:1;25362:35;;25377:18;;:::i;:::-;25362:35;25419:1;25416;25412:9;25407:14;;25242:185;;;;:::o;25433:223::-;25573:34;25569:1;25561:6;25557:14;25550:58;25642:6;25637:2;25629:6;25625:15;25618:31;25433:223;:::o;25662:366::-;25804:3;25825:67;25889:2;25884:3;25825:67;:::i;:::-;25818:74;;25901:93;25990:3;25901:93;:::i;:::-;26019:2;26014:3;26010:12;26003:19;;25662:366;;;:::o;26034:419::-;26200:4;26238:2;26227:9;26223:18;26215:26;;26287:9;26281:4;26277:20;26273:1;26262:9;26258:17;26251:47;26315:131;26441:4;26315:131;:::i;:::-;26307:139;;26034:419;;;:::o;26459:221::-;26599:34;26595:1;26587:6;26583:14;26576:58;26668:4;26663:2;26655:6;26651:15;26644:29;26459:221;:::o;26686:366::-;26828:3;26849:67;26913:2;26908:3;26849:67;:::i;:::-;26842:74;;26925:93;27014:3;26925:93;:::i;:::-;27043:2;27038:3;27034:12;27027:19;;26686:366;;;:::o;27058:419::-;27224:4;27262:2;27251:9;27247:18;27239:26;;27311:9;27305:4;27301:20;27297:1;27286:9;27282:17;27275:47;27339:131;27465:4;27339:131;:::i;:::-;27331:139;;27058:419;;;:::o;27483:234::-;27623:34;27619:1;27611:6;27607:14;27600:58;27692:17;27687:2;27679:6;27675:15;27668:42;27483:234;:::o;27723:366::-;27865:3;27886:67;27950:2;27945:3;27886:67;:::i;:::-;27879:74;;27962:93;28051:3;27962:93;:::i;:::-;28080:2;28075:3;28071:12;28064:19;;27723:366;;;:::o;28095:419::-;28261:4;28299:2;28288:9;28284:18;28276:26;;28348:9;28342:4;28338:20;28334:1;28323:9;28319:17;28312:47;28376:131;28502:4;28376:131;:::i;:::-;28368:139;;28095:419;;;:::o;28520:224::-;28660:34;28656:1;28648:6;28644:14;28637:58;28729:7;28724:2;28716:6;28712:15;28705:32;28520:224;:::o;28750:366::-;28892:3;28913:67;28977:2;28972:3;28913:67;:::i;:::-;28906:74;;28989:93;29078:3;28989:93;:::i;:::-;29107:2;29102:3;29098:12;29091:19;;28750:366;;;:::o;29122:419::-;29288:4;29326:2;29315:9;29311:18;29303:26;;29375:9;29369:4;29365:20;29361:1;29350:9;29346:17;29339:47;29403:131;29529:4;29403:131;:::i;:::-;29395:139;;29122:419;;;:::o;29547:222::-;29687:34;29683:1;29675:6;29671:14;29664:58;29756:5;29751:2;29743:6;29739:15;29732:30;29547:222;:::o;29775:366::-;29917:3;29938:67;30002:2;29997:3;29938:67;:::i;:::-;29931:74;;30014:93;30103:3;30014:93;:::i;:::-;30132:2;30127:3;30123:12;30116:19;;29775:366;;;:::o;30147:419::-;30313:4;30351:2;30340:9;30336:18;30328:26;;30400:9;30394:4;30390:20;30386:1;30375:9;30371:17;30364:47;30428:131;30554:4;30428:131;:::i;:::-;30420:139;;30147:419;;;:::o;30572:228::-;30712:34;30708:1;30700:6;30696:14;30689:58;30781:11;30776:2;30768:6;30764:15;30757:36;30572:228;:::o;30806:366::-;30948:3;30969:67;31033:2;31028:3;30969:67;:::i;:::-;30962:74;;31045:93;31134:3;31045:93;:::i;:::-;31163:2;31158:3;31154:12;31147:19;;30806:366;;;:::o;31178:419::-;31344:4;31382:2;31371:9;31367:18;31359:26;;31431:9;31425:4;31421:20;31417:1;31406:9;31402:17;31395:47;31459:131;31585:4;31459:131;:::i;:::-;31451:139;;31178:419;;;:::o;31603:230::-;31743:34;31739:1;31731:6;31727:14;31720:58;31812:13;31807:2;31799:6;31795:15;31788:38;31603:230;:::o;31839:366::-;31981:3;32002:67;32066:2;32061:3;32002:67;:::i;:::-;31995:74;;32078:93;32167:3;32078:93;:::i;:::-;32196:2;32191:3;32187:12;32180:19;;31839:366;;;:::o;32211:419::-;32377:4;32415:2;32404:9;32400:18;32392:26;;32464:9;32458:4;32454:20;32450:1;32439:9;32435:17;32428:47;32492:131;32618:4;32492:131;:::i;:::-;32484:139;;32211:419;;;:::o;32636:191::-;32676:3;32695:20;32713:1;32695:20;:::i;:::-;32690:25;;32729:20;32747:1;32729:20;:::i;:::-;32724:25;;32772:1;32769;32765:9;32758:16;;32793:3;32790:1;32787:10;32784:36;;;32800:18;;:::i;:::-;32784:36;32636:191;;;;:::o;32833:177::-;32973:29;32969:1;32961:6;32957:14;32950:53;32833:177;:::o;33016:366::-;33158:3;33179:67;33243:2;33238:3;33179:67;:::i;:::-;33172:74;;33255:93;33344:3;33255:93;:::i;:::-;33373:2;33368:3;33364:12;33357:19;;33016:366;;;:::o;33388:419::-;33554:4;33592:2;33581:9;33577:18;33569:26;;33641:9;33635:4;33631:20;33627:1;33616:9;33612:17;33605:47;33669:131;33795:4;33669:131;:::i;:::-;33661:139;;33388:419;;;:::o;33813:147::-;33914:11;33951:3;33936:18;;33813:147;;;;:::o;33966:114::-;;:::o;34086:398::-;34245:3;34266:83;34347:1;34342:3;34266:83;:::i;:::-;34259:90;;34358:93;34447:3;34358:93;:::i;:::-;34476:1;34471:3;34467:11;34460:18;;34086:398;;;:::o;34490:379::-;34674:3;34696:147;34839:3;34696:147;:::i;:::-;34689:154;;34860:3;34853:10;;34490:379;;;:::o;34875:168::-;35015:20;35011:1;35003:6;34999:14;34992:44;34875:168;:::o;35049:366::-;35191:3;35212:67;35276:2;35271:3;35212:67;:::i;:::-;35205:74;;35288:93;35377:3;35288:93;:::i;:::-;35406:2;35401:3;35397:12;35390:19;;35049:366;;;:::o;35421:419::-;35587:4;35625:2;35614:9;35610:18;35602:26;;35674:9;35668:4;35664:20;35660:1;35649:9;35645:17;35638:47;35702:131;35828:4;35702:131;:::i;:::-;35694:139;;35421:419;;;:::o;35846:194::-;35886:4;35906:20;35924:1;35906:20;:::i;:::-;35901:25;;35940:20;35958:1;35940:20;:::i;:::-;35935:25;;35984:1;35981;35977:9;35969:17;;36008:1;36002:4;35999:11;35996:37;;;36013:18;;:::i;:::-;35996:37;35846:194;;;;:::o;36046:179::-;36186:31;36182:1;36174:6;36170:14;36163:55;36046:179;:::o;36231:366::-;36373:3;36394:67;36458:2;36453:3;36394:67;:::i;:::-;36387:74;;36470:93;36559:3;36470:93;:::i;:::-;36588:2;36583:3;36579:12;36572:19;;36231:366;;;:::o;36603:419::-;36769:4;36807:2;36796:9;36792:18;36784:26;;36856:9;36850:4;36846:20;36842:1;36831:9;36827:17;36820:47;36884:131;37010:4;36884:131;:::i;:::-;36876:139;;36603:419;;;:::o;37028:233::-;37168:34;37164:1;37156:6;37152:14;37145:58;37237:16;37232:2;37224:6;37220:15;37213:41;37028:233;:::o;37267:366::-;37409:3;37430:67;37494:2;37489:3;37430:67;:::i;:::-;37423:74;;37506:93;37595:3;37506:93;:::i;:::-;37624:2;37619:3;37615:12;37608:19;;37267:366;;;:::o;37639:419::-;37805:4;37843:2;37832:9;37828:18;37820:26;;37892:9;37886:4;37882:20;37878:1;37867:9;37863:17;37856:47;37920:131;38046:4;37920:131;:::i;:::-;37912:139;;37639:419;;;:::o;38064:180::-;38112:77;38109:1;38102:88;38209:4;38206:1;38199:15;38233:4;38230:1;38223:15;38250:180;38298:77;38295:1;38288:88;38395:4;38392:1;38385:15;38419:4;38416:1;38409:15;38436:143;38493:5;38524:6;38518:13;38509:22;;38540:33;38567:5;38540:33;:::i;:::-;38436:143;;;;:::o;38585:351::-;38655:6;38704:2;38692:9;38683:7;38679:23;38675:32;38672:119;;;38710:79;;:::i;:::-;38672:119;38830:1;38855:64;38911:7;38902:6;38891:9;38887:22;38855:64;:::i;:::-;38845:74;;38801:128;38585:351;;;;:::o;38942:114::-;39009:6;39043:5;39037:12;39027:22;;38942:114;;;:::o;39062:184::-;39161:11;39195:6;39190:3;39183:19;39235:4;39230:3;39226:14;39211:29;;39062:184;;;;:::o;39252:132::-;39319:4;39342:3;39334:11;;39372:4;39367:3;39363:14;39355:22;;39252:132;;;:::o;39390:108::-;39467:24;39485:5;39467:24;:::i;:::-;39462:3;39455:37;39390:108;;:::o;39504:179::-;39573:10;39594:46;39636:3;39628:6;39594:46;:::i;:::-;39672:4;39667:3;39663:14;39649:28;;39504:179;;;;:::o;39689:113::-;39759:4;39791;39786:3;39782:14;39774:22;;39689:113;;;:::o;39838:732::-;39957:3;39986:54;40034:5;39986:54;:::i;:::-;40056:86;40135:6;40130:3;40056:86;:::i;:::-;40049:93;;40166:56;40216:5;40166:56;:::i;:::-;40245:7;40276:1;40261:284;40286:6;40283:1;40280:13;40261:284;;;40362:6;40356:13;40389:63;40448:3;40433:13;40389:63;:::i;:::-;40382:70;;40475:60;40528:6;40475:60;:::i;:::-;40465:70;;40321:224;40308:1;40305;40301:9;40296:14;;40261:284;;;40265:14;40561:3;40554:10;;39962:608;;;39838:732;;;;:::o;40576:831::-;40839:4;40877:3;40866:9;40862:19;40854:27;;40891:71;40959:1;40948:9;40944:17;40935:6;40891:71;:::i;:::-;40972:80;41048:2;41037:9;41033:18;41024:6;40972:80;:::i;:::-;41099:9;41093:4;41089:20;41084:2;41073:9;41069:18;41062:48;41127:108;41230:4;41221:6;41127:108;:::i;:::-;41119:116;;41245:72;41313:2;41302:9;41298:18;41289:6;41245:72;:::i;:::-;41327:73;41395:3;41384:9;41380:19;41371:6;41327:73;:::i;:::-;40576:831;;;;;;;;:::o;41413:807::-;41662:4;41700:3;41689:9;41685:19;41677:27;;41714:71;41782:1;41771:9;41767:17;41758:6;41714:71;:::i;:::-;41795:72;41863:2;41852:9;41848:18;41839:6;41795:72;:::i;:::-;41877:80;41953:2;41942:9;41938:18;41929:6;41877:80;:::i;:::-;41967;42043:2;42032:9;42028:18;42019:6;41967:80;:::i;:::-;42057:73;42125:3;42114:9;42110:19;42101:6;42057:73;:::i;:::-;42140;42208:3;42197:9;42193:19;42184:6;42140:73;:::i;:::-;41413:807;;;;;;;;;:::o;42226:143::-;42283:5;42314:6;42308:13;42299:22;;42330:33;42357:5;42330:33;:::i;:::-;42226:143;;;;:::o;42375:663::-;42463:6;42471;42479;42528:2;42516:9;42507:7;42503:23;42499:32;42496:119;;;42534:79;;:::i;:::-;42496:119;42654:1;42679:64;42735:7;42726:6;42715:9;42711:22;42679:64;:::i;:::-;42669:74;;42625:128;42792:2;42818:64;42874:7;42865:6;42854:9;42850:22;42818:64;:::i;:::-;42808:74;;42763:129;42931:2;42957:64;43013:7;43004:6;42993:9;42989:22;42957:64;:::i;:::-;42947:74;;42902:129;42375:663;;;;;:::o

Swarm Source

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