ETH Price: $2,578.85 (-2.22%)

Token

Scrilla (Scrilla)
 

Overview

Max Total Supply

1,000,000,000 Scrilla

Holders

130

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
233,333.3 Scrilla

Value
$0.00
0x5a118e4e854be805e2d4a6c57acea02e453429a2
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:
Scrilla

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-14
*/

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

// SPDX-License-Identifier: MIT

/*
                                                                                            
 .----------------.  .----------------.  .----------------.  .----------------.  .----------------.  .----------------.  .----------------. 
| .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
| |    _______   | || |     ______   | || |  _______     | || |     _____    | || |   _____      | || |   _____      | || |      __      | |
| |   /  ___  |  | || |   .' ___  |  | || | |_   __ \    | || |    |_   _|   | || |  |_   _|     | || |  |_   _|     | || |     /  \     | |
| |  |  (__ \_|  | || |  / .'   \_|  | || |   | |__) |   | || |      | |     | || |    | |       | || |    | |       | || |    / /\ \    | |
| |   '.___`-.   | || |  | |         | || |   |  __ /    | || |      | |     | || |    | |   _   | || |    | |   _   | || |   / ____ \   | |
| |  |`\____) |  | || |  \ `.___.'\  | || |  _| |  \ \_  | || |     _| |_    | || |   _| |__/ |  | || |   _| |__/ |  | || | _/ /    \ \_ | |
| |  |_______.'  | || |   `._____.'  | || | |____| |___| | || |    |_____|   | || |  |________|  | || |  |________|  | || ||____|  |____|| |
| |              | || |              | || |              | || |              | || |              | || |              | || |              | |
| '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
 '----------------'  '----------------'  '----------------'  '----------------'  '----------------'  '----------------'  '----------------'                                                                   
*/

pragma solidity ^0.8.10;

// interface IUniFactory   : Interface of Uniswap Router

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

// interface IUniRouter  : Interface of Uniswap

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

    function WETH() external pure returns (address);

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

    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;
}

// interface IERC20 : IERC20 Token Interface which would be used in calling token contract
interface IERC20 {
    function totalSupply() external view returns (uint256); //Total Supply of Token

    function decimals() external view returns (uint8); // Decimal of TOken

    function symbol() external view returns (string memory); // Symbol of Token

    function name() external view returns (string memory); // Name of Token

    function balanceOf(address account) external view returns (uint256); // Balance of TOken

    //Transfer token from one address to another

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

    // Get allowance to the spacific users

    function allowance(
        address _owner,
        address spender
    ) external view returns (uint256);

    // Give approval to spend token to another addresses

    function approve(address spender, uint256 amount) external returns (bool);

    // Transfer token from one address to another

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

    //Trasfer Event
    event Transfer(address indexed from, address indexed to, uint256 value);

    //Approval Event
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// This contract helps to add Owners
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 
 */
abstract contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(msg.sender);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// Interface IRewardDistributor : Interface that is used by  Reward Distributor

interface IRewardDistributor {
    function setDistributionStandard(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function depositEth() external payable;

    function process(uint256 gas) external;

    function claimReward(address _user) external;

    function getPaidEarnings(
        address shareholder
    ) external view returns (uint256);

    function getUnpaidEarnings(
        address shareholder
    ) external view returns (uint256);

    function totalDistributed() external view returns (uint256);
}

// RewardDistributor : It distributes reward amoung holders

contract RewardDistributor is IRewardDistributor {
    using SafeMath for uint256;

    address public _token;

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

    IERC20 public rewardTok =
        IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    IUniRouter public router;

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

    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalRewards;
    uint256 public totalDistributed;
    uint256 public rewardsPerShare;
    uint256 public rewardsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 minutes;
    uint256 public minDistribution = 1 * (10 ** rewardTok.decimals());

    uint256 currentIndex;

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

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

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

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

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {
        if (shares[shareholder].amount > 0) {
            distributeReward(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 = getCumulativeRewards(
            shares[shareholder].amount
        );
    }

    function depositEth() external payable override onlyToken {
        uint256 balanceBefore = rewardTok.balanceOf(address(this));

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

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

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

        totalRewards = totalRewards.add(amount);
        rewardsPerShare = rewardsPerShare.add(
            rewardsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function _changeRewardToken(address _rewadToken) public onlyToken {
        rewardTok = IERC20(_rewadToken);
    }

    function _withdrawTokenFunds(
        address _tokenAddress,
        uint256 _amount,
        address _reciverAddress
    ) public onlyToken {
        IERC20(_tokenAddress).transfer(_reciverAddress, _amount);
    }

    function process(uint256 gas) external override 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])) {
                distributeReward(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;
    }

    //This function distribute the amounts
    function distributeReward(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

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

    function claimReward(address _user) external {
        distributeReward(_user);
    }

    function getPaidEarnings(
        address shareholder
    ) public view returns (uint256) {
        return shares[shareholder].totalRealised;
    }

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

        uint256 shareholderTotalRewards = getCumulativeRewards(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

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

        return shareholderTotalRewards.sub(shareholderTotalExcluded);
    }

    function getCumulativeRewards(
        uint256 share
    ) internal view returns (uint256) {
        return share.mul(rewardsPerShare).div(rewardsPerShareAccuracyFactor);
    }

    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();
    }
}

// main contract of Token
contract Scrilla is IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "Scrilla"; // Name
    string private constant _symbol = "Scrilla"; // Symbol
    uint8 private constant _decimals = 18;
    uint256 private constant _totalSupply = 1_000_000_000 * 10 ** _decimals; //Token Decimals

    uint256 maxTxnLimit = _totalSupply.div(100);
    uint256 maxHoldLimit = _totalSupply.mul(2).div(100);

    address public rewardTok = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // Reward Token
    address private constant ZERO = address(0); //Zero Address

    IUniRouter public router; //Router
    address public uniPair; //Pair
    address public marketFeeReceiver;
    address public devFeeReceiver;
    address public treasuryFeeReceiver;
    address public liquidityReceiver;

    uint256 public totalBuyFee = 5; //Total Buy Fee
    uint256 public totalSellFee = 5; //Total Sell Fee
    uint256 public feeDivider = 100; // Fee deniminator

    RewardDistributor public distributor;
    uint256 public distributorGas = 500000;

    // 5% on Buying
    uint256 _reflectionBuyFee = 1; // 1% on Buying
    uint256 _marketBuyFee = 2; // 2% on Buying
    uint256 _devBuyFee = 1; // 1% on Buying
    uint256 _treasuryBuyFee = 0; //0% on Buying
    uint256 _liquidityBuyFee = 1; //1% on Buying
    // 5% on Selling
    uint256 _reflectionSellFee = 1; // 1% on Selling
    uint256 _marketSellFee = 2; // 2% on Selling
    uint256 _devSellFee = 1; // 1% on Selling
    uint256 _treasurySellFee = 0; //0% on Selling
    uint256 _liquiditySellFee = 1; //1% on Selling

    uint256 _reflectionFeeCounter;
    uint256 _marketFeeCounter;
    uint256 _devFeeCounter;
    uint256 _treasuryFeeCounter;
    uint256 _liquidityFeeCounter;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isRewardExempt;
    mapping(address => bool) public _isExcludedFromMaxTxn;
    mapping(address => bool) public _isExcludedMaxHolding;

    bool public enableSwap = true;
    uint256 public swapLimit = 500_000 * (10 ** _decimals);
    uint256 public minTokenHoldingForReward;

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    event AutoLiquify(uint256 amountEth, uint256 amountBOG);

    // intializing the addresses

    constructor() {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //mainnet
        marketFeeReceiver = 0x71D911b5a55934C22dD62562CD8CccF313C0c0f8;
        devFeeReceiver = 0xe3b2899572780B4127aBC55b6A24EB1241e3D666;
        treasuryFeeReceiver = 0x71D911b5a55934C22dD62562CD8CccF313C0c0f8;
        liquidityReceiver = 0x71D911b5a55934C22dD62562CD8CccF313C0c0f8;

        minTokenHoldingForReward = 10000000e18;
        router = IUniRouter(_router);
        uniPair = IUniFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        distributor = new RewardDistributor(_router);

        isRewardExempt[uniPair] = true;
        isRewardExempt[address(this)] = true;
        isFeeExempt[marketFeeReceiver] = true;
        isFeeExempt[devFeeReceiver] = true;
        isFeeExempt[treasuryFeeReceiver] = true;
        isFeeExempt[liquidityReceiver] = true;
        isFeeExempt[owner()] = true;

        _isExcludedFromMaxTxn[owner()] = true;
        _isExcludedFromMaxTxn[uniPair] = true;
        _isExcludedFromMaxTxn[treasuryFeeReceiver] = true;
        _isExcludedFromMaxTxn[address(this)] = true;
        _isExcludedFromMaxTxn[liquidityReceiver] = true;
        _isExcludedFromMaxTxn[address(router)] = true;
        _isExcludedFromMaxTxn[marketFeeReceiver] = true;
        _isExcludedFromMaxTxn[devFeeReceiver] = true;

        _isExcludedMaxHolding[address(this)] = true;
        _isExcludedMaxHolding[owner()] = true;
        _isExcludedMaxHolding[uniPair] = true;
        _isExcludedMaxHolding[treasuryFeeReceiver] = true;
        _isExcludedMaxHolding[liquidityReceiver] = true;
        _isExcludedMaxHolding[address(router)] = true;
        _isExcludedMaxHolding[marketFeeReceiver] = true;
        _isExcludedMaxHolding[devFeeReceiver] = true;

        _balances[owner()] = _totalSupply;

        _allowances[address(this)][address(router)] = _totalSupply;
        _allowances[address(this)][address(uniPair)] = _totalSupply;

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

    receive() external payable {}

    // totalSupply() : Shows total Supply of token

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }

    //decimals() : Shows decimals of token

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    // symbol() : Shows symbol of function

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    // name() : Shows name of Token

    function name() external pure override returns (string memory) {
        return _name;
    }

    // balanceOf() : Shows balance of the spacific user

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

    //allowance()  : Shows allowance of the address from another address

    function allowance(
        address holder,
        address spender
    ) external view override returns (uint256) {
        return _allowances[holder][spender];
    }

    // approve() : This function gives allowance of token from one address to another address
    //  ****     : Allowance is checked in TransferFrom() function.

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // approveMax() : approves the token amount to the spender that is maximum amount of token

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    // transfer() : Transfers tokens  to another address

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

    // transferFrom() : Transfers token from one address to another address by utilizing allowance

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }

        return _transfer(sender, recipient, amount);
    }

    // _transfer() :   called by external transfer and transferFrom function

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (!_isExcludedMaxHolding[recipient]) {
            require(
                amount.add(balanceOf(recipient)) <= maxHoldLimit,
                "Max hold limit exceeds"
            );
        }
        if (
            !_isExcludedFromMaxTxn[sender] && !_isExcludedFromMaxTxn[recipient]
        ) {
            require(amount <= maxTxnLimit, "BigBuy: max txn limit exceeds");
        }
        if (inSwap) {
            return _simpleTransfer(sender, recipient, amount);
        }

        if (shouldSwap()) {
            swapBack();
        }

        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        uint256 amountReceived;
        if (
            isFeeExempt[sender] ||
            isFeeExempt[recipient] ||
            (sender != uniPair && recipient != uniPair)
        ) {
            amountReceived = amount;
        } else {
            uint256 feeAmount;
            if (sender == uniPair) {
                feeAmount = amount.mul(totalBuyFee).div(feeDivider);
                amountReceived = amount.sub(feeAmount);
                _takeFee(sender, feeAmount);
                setBuyFeeCount(amount);
            }
            if (recipient == uniPair) {
                feeAmount = amount.mul(totalSellFee).div(feeDivider);
                amountReceived = amount.sub(feeAmount);
                _takeFee(sender, feeAmount);
                setSellFeeCount(amount);
            }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isRewardExempt[sender]) {
            if ((balanceOf(sender)) >= minTokenHoldingForReward) {
                try distributor.setShare(sender, _balances[sender]) {} catch {}
            } else {
                try distributor.setShare(sender, 0) {} catch {}
            }
        }
        if (!isRewardExempt[recipient]) {
            if ((balanceOf(recipient)) >= minTokenHoldingForReward) {
                try
                    distributor.setShare(recipient, _balances[recipient])
                {} catch {}
            } else {
                try distributor.setShare(recipient, 0) {} catch {}
            }
        }

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

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

    // _simpleTransfer() : Transfer basic token account to account

    function _simpleTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function airdrop(
        address[] calldata addresses,
        uint256[] calldata amounts
    ) external onlyOwner {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i].mul(1e18);
            _simpleTransfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }

    // _takeFee() : This function get calls internally to take fee

    function _takeFee(address sender, uint256 feeAmount) internal {
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
    }

    function setBuyFeeCount(uint256 _amount) internal {
        _reflectionFeeCounter = _amount.mul(_reflectionBuyFee).div(feeDivider);
        _marketFeeCounter = _amount.mul(_marketBuyFee).div(feeDivider);
        _devFeeCounter = _amount.mul(_devBuyFee).div(feeDivider);
        _treasuryFeeCounter = _amount.mul(_treasuryBuyFee).div(feeDivider);
        _liquidityFeeCounter = _amount.mul(_liquidityBuyFee).div(feeDivider);
    }

    function setSellFeeCount(uint256 _amount) internal {
        _reflectionFeeCounter = _amount.mul(_reflectionSellFee).div(feeDivider);
        _marketFeeCounter = _amount.mul(_marketSellFee).div(feeDivider);
        _devFeeCounter = _amount.mul(_devSellFee).div(feeDivider);
        _treasuryFeeCounter = _amount.mul(_treasurySellFee).div(feeDivider);
        _liquidityFeeCounter = _amount.mul(_liquiditySellFee).div(feeDivider);
    }

    //shouldSwap() : To check swap should be done or not

    function shouldSwap() internal view returns (bool) {
        return (msg.sender != uniPair &&
            !inSwap &&
            enableSwap &&
            _balances[address(this)] >= swapLimit);
    }

    //Swapback() : To swap and liqufy the token

    function swapBack() internal swapping {
        uint256 totalFee = _reflectionFeeCounter
            .add(_marketFeeCounter)
            .add(_devFeeCounter)
            .add(_treasuryFeeCounter)
            .add(_liquidityFeeCounter);
        if (totalFee > 0) {
            uint256 amountToLiquify = swapLimit
                .mul(_liquidityFeeCounter)
                .div(totalFee)
                .div(2);

            uint256 amountToSwap = swapLimit.sub(amountToLiquify);

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

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

            uint256 amountEth = address(this).balance.sub(balanceBefore);

            uint256 totalEthFee = totalFee.sub(_liquidityFeeCounter.div(2));

            uint256 amountEthForLiqudity = amountEth
                .mul(_liquidityFeeCounter)
                .div(totalEthFee)
                .div(2);

            uint256 amountEthForReflection = amountEth
                .mul(_reflectionFeeCounter)
                .div(totalFee);
            uint256 amountEthForMarket = amountEth.mul(_marketFeeCounter).div(
                totalFee
            );
            uint256 amountEthForDev = amountEth.mul(_devFeeCounter).div(
                totalFee
            );
            uint256 amountEthForTreasury = amountEth
                .mul(_treasuryFeeCounter)
                .div(totalFee);

            try
                distributor.depositEth{value: amountEthForReflection}()
            {} catch {}
            if (amountEthForMarket > 0) {
                payable(marketFeeReceiver).transfer(amountEthForMarket);
            }

            if (amountEthForDev > 0) {
                payable(devFeeReceiver).transfer(amountEthForDev);
            }
            if (amountEthForTreasury > 0) {
                payable(treasuryFeeReceiver).transfer(amountEthForTreasury);
            }

            if (amountToLiquify > 0) {
                router.addLiquidityETH{value: amountEthForLiqudity}(
                    address(this),
                    amountToLiquify,
                    0,
                    0,
                    liquidityReceiver,
                    block.timestamp
                );
                emit AutoLiquify(amountEthForLiqudity, amountToLiquify);
            }

            _reflectionFeeCounter = 0;
            _marketFeeCounter = 0;
            _devFeeCounter = 0;
            _treasuryFeeCounter = 0;
        }
    }

    // claimReward() : Function that claims divident manually

    function claimReward() external {
        distributor.claimReward(msg.sender);
    }

    // getPaidReward() :Function shows paid Rewards of the user

    function getPaidReward(address shareholder) public view returns (uint256) {
        return distributor.getPaidEarnings(shareholder);
    }

    // getUnpaidReward() : Function shows unpaid rewards of the user

    function getUnpaidReward(
        address shareholder
    ) external view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    }

    // getTotalDistributedReward(): Shows total distributed Reward

    function getTotalDistributedReward() external view returns (uint256) {
        return distributor.totalDistributed();
    }

    function withdrawReflectionTokenFunds(
        address _tokenAddress,
        uint256 _amount
    ) public onlyOwner {
        distributor._withdrawTokenFunds(_tokenAddress, _amount, msg.sender);
    }

    function MinTokenHoldingForReward(
        uint256 _minTokenHoldingForReward
    ) public onlyOwner {
        minTokenHoldingForReward = _minTokenHoldingForReward;
    }

    function withdrawEth(uint256 _ethValue) public onlyOwner {
        payable(msg.sender).transfer(_ethValue);
    }

    function changeRewardToken(address _tokenAddress) public onlyOwner {
        distributor._changeRewardToken(_tokenAddress);
    }

    // setFeeExempt() : Function that Set Holders Fee Exempt
    //   ***          : It add user in fee exempt user list
    //   ***          : Owner & Authoized user Can set this

    function setFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    // setRewardExempt() : Set Holders Reward Exempt
    //      ***          : Function that add user in reward exempt user list
    //      ***          : Owner & Authoized user Can set this

    function setRewardExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && holder != uniPair);
        isRewardExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    // includeOrExcludeFromMaxTxn() : Function that set users exclude from fee
    //   ***       : Owner & Authoized user Can set the fees
    function includeOrExcludeFromMaxTxn(
        address account,
        bool value
    ) external onlyOwner {
        _isExcludedFromMaxTxn[account] = value;
    }

    function includeOrExcludeFromMaxHolding(
        address account,
        bool value
    ) external onlyOwner {
        _isExcludedMaxHolding[account] = value;
    }

    function setMaxHoldLimit(uint256 _amount) external onlyOwner {
        maxHoldLimit = _amount * 1e18;
    }

    function setMaxTxnLimit(uint256 _amount) external onlyOwner {
        maxTxnLimit = _amount * 1e18;
    }

    // setBuyFee() : Function that set Buy Fee of token
    //   ***       : Owner & Authoized user Can set the fees

    function setBuyFee(
        uint256 _reflectionFee,
        uint256 _marketFee,
        uint256 _devFee,
        uint256 _treasuryFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        _reflectionBuyFee = _reflectionFee;
        _marketBuyFee = _marketFee;
        _devBuyFee = _devFee;
        _treasuryBuyFee = _treasuryFee;
        _liquidityBuyFee = _liquidityFee;
        totalBuyFee = (_reflectionFee)
            .add(_marketFee)
            .add(_devFee)
            .add(_liquidityFee)
            .add(_treasuryFee);
        require(totalBuyFee <= feeDivider.div(4), "Can't be greater than 25%");
    }

    // setSellFee() : Function that set Sell Fee
    //    ***       : Owner & Authoized user Can set the fees

    function setSellFee(
        uint256 _reflectionFee,
        uint256 _marketFee,
        uint256 _devFee,
        uint256 _treasuryFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        _reflectionSellFee = _reflectionFee;
        _marketSellFee = _marketFee;
        _devSellFee = _devFee;
        _treasurySellFee = _treasuryFee;
        _liquiditySellFee = _liquidityFee;
        totalSellFee = (_reflectionFee)
            .add(_marketFee)
            .add(_liquidityFee)
            .add(_devFee)
            .add(_treasuryFee);
        require(totalSellFee <= feeDivider.div(4), "Can't be greater than 25%");
    }

    // setFeeReceivers() : Function to  set the addresses of Receivers
    //    ***            : Owner & Authoized user Can set the receivers

    function setFeeReceivers(
        address _marketFeeReceiver,
        address _devFeeReceiver,
        address _treasuryFeeReceiver,
        address _liquidityReceiver
    ) external onlyOwner {
        marketFeeReceiver = _marketFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
        liquidityReceiver = _liquidityReceiver;
    }

    // setSwapBack() : Function that enable of disable swapping functionality of token while transfer
    //     ***       : Swap Limit can be changed through this function
    //     ***       : Owner & Authoized user Can set the swapBack

    function setSwapBack(bool _enabled, uint256 _amount) external onlyOwner {
        enableSwap = _enabled;
        swapLimit = _amount;
    }

    // setDistributionStandard() : Function that set distribution standerd on which distributor works
    //      ***                  : Owner & Authoized user Can set the standerd of distributor

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

    //setDistributorSetting() : Function that set changes the distribution gas fee which is used in distributor
    //        ***             : Owner & Authoized user Can set the this amount

    function setDistributorSetting(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }
}

// Library used to perfoem math operations
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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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 Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_minTokenHoldingForReward","type":"uint256"}],"name":"MinTokenHoldingForReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxHolding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"changeRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract RewardDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getPaidReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDistributedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromMaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenHoldingForReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardTok","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionStandard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSetting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_treasuryFeeReceiver","type":"address"},{"internalType":"address","name":"_liquidityReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxHoldLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setRewardExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethValue","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawReflectionTokenFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200003f60646012600a6200001a919062001569565b633b9aca006200002b9190620015ba565b620012a460201b620020961790919060201c565b6001556200009760646200008360026012600a6200005e919062001569565b633b9aca006200006f9190620015ba565b620012bc60201b620020ac1790919060201c565b620012a460201b620020961790919060201c565b60025573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600a556005600b556064600c556207a120600e556001600f556002601055600160115560006012556001601355600160145560026015556001601655600060175560016018556001602460006101000a81548160ff0219169083151502179055506012600a62000162919062001569565b6207a120620001729190620015ba565b6025553480156200018257600080fd5b506200019433620012d460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90507371d911b5a55934c22dd62562cd8cccf313c0c0f8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3b2899572780b4127abc55b6a24eb1241e3d666600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507371d911b5a55934c22dd62562cd8cccf313c0c0f8600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507371d911b5a55934c22dd62562cd8cccf313c0c0f8600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a084595161401484a00000060268190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e8919062001685565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000498919062001685565b6040518363ffffffff1660e01b8152600401620004b7929190620016c8565b6020604051808303816000875af1158015620004d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fd919062001685565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806040516200054c90620013c1565b620005589190620016f5565b604051809103906000f08015801562000575573d6000803e3d6000fd5b50600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160216000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160206000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160206000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160206000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160206000620008866200139860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000620008ed6200139860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160226000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016023600062000ce06200139860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160236000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506012600a6200101d919062001569565b633b9aca006200102e9190620015ba565b601e6000620010426200139860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506012600a62001090919062001569565b633b9aca00620010a19190620015ba565b601f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506012600a62001153919062001569565b633b9aca00620011649190620015ba565b601f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620012166200139860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a62001275919062001569565b633b9aca00620012869190620015ba565b60405162001295919062001723565b60405180910390a350620017a7565b60008183620012b491906200176f565b905092915050565b60008183620012cc9190620015ba565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6125d9806200628883390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200145d57808604811115620014355762001434620013cf565b5b6001851615620014455780820291505b80810290506200145585620013fe565b945062001415565b94509492505050565b6000826200147857600190506200154b565b816200148857600090506200154b565b8160018114620014a15760028114620014ac57620014e2565b60019150506200154b565b60ff841115620014c157620014c0620013cf565b5b8360020a915084821115620014db57620014da620013cf565b5b506200154b565b5060208310610133831016604e8410600b84101617156200151c5782820a905083811115620015165762001515620013cf565b5b6200154b565b6200152b84848460016200140b565b92509050818404811115620015455762001544620013cf565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620015768262001552565b915062001583836200155c565b9250620015b27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001466565b905092915050565b6000620015c78262001552565b9150620015d48362001552565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001610576200160f620013cf565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200164d8262001620565b9050919050565b6200165f8162001640565b81146200166b57600080fd5b50565b6000815190506200167f8162001654565b92915050565b6000602082840312156200169e576200169d6200161b565b5b6000620016ae848285016200166e565b91505092915050565b620016c28162001640565b82525050565b6000604082019050620016df6000830185620016b7565b620016ee6020830184620016b7565b9392505050565b60006020820190506200170c6000830184620016b7565b92915050565b6200171d8162001552565b82525050565b60006020820190506200173a600083018462001712565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200177c8262001552565b9150620017898362001552565b9250826200179c576200179b62001740565b5b828204905092915050565b614ad180620017b76000396000f3fe60806040526004361061031e5760003560e01c806370a08231116101ab5780639db8baef116100f7578063dab84ee711610095578063f0f56b2c1161006f578063f0f56b2c14610be3578063f19665f214610c20578063f2fde38b14610c49578063f887ea4014610c7257610325565b8063dab84ee714610b50578063dd62ed3e14610b7b578063e218383914610bb857610325565b8063a9059cbb116100d1578063a9059cbb14610aa8578063b88a802f14610ae5578063bfe1092814610afc578063c311d04914610b2757610325565b80639db8baef14610a2d578063a71e061814610a56578063a7c29b4014610a7f57610325565b80638da5cb5b1161016457806395d89b411161013e57806395d89b411461098557806397613b28146109b05780639b6a2750146109d95780639d9241ec14610a0257610325565b80638da5cb5b146109065780638ebfc79614610931578063917b546c1461095a57610325565b806370a08231146107e457806370fce9b714610821578063715018a61461084c5780637b9d454d146108635780637d731c3d146108a05780638756aabd146108dd57610325565b8063357767331161026a5780635ea4a8dd1161022357806360e71962116101fd57806360e719621461073a578063672434821461076557806369db09eb1461078e5780636a01f09c146107b957610325565b80635ea4a8dd146106bf5780635f6a079d146106e857806360a834fa1461071157610325565b806335776733146105895780633c8e556d146105b45780633f4218e0146105dd57806356586b8e1461061a578063571ac8b01461065757806359b107b91461069457610325565b8063264d26dd116102d75780632c71ef5d116102b15780632c71ef5d146104cd5780632d1293901461050a578063313ce5671461053357806332972e461461055e57610325565b8063264d26dd1461044c57806329691448146104775780632af10fac146104a257610325565b806306fdde031461032a578063088ab8ce14610355578063095ea7b31461037e5780631445f022146103bb57806318160ddd146103e457806323b872dd1461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c9d565b60405161034c9190613a87565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613b11565b610cda565b005b34801561038a57600080fd5b506103a560048036038101906103a09190613b74565b610d72565b6040516103b29190613bcf565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd9190613b74565b610e64565b005b3480156103f057600080fd5b506103f9610f01565b6040516104069190613bf9565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613c14565b610f25565b6040516104439190613bcf565b60405180910390f35b34801561045857600080fd5b50610461611121565b60405161046e9190613c76565b60405180910390f35b34801561048357600080fd5b5061048c611147565b6040516104999190613bcf565b60405180910390f35b3480156104ae57600080fd5b506104b761115a565b6040516104c49190613c76565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613b11565b611180565b6040516105019190613bcf565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613cbd565b6111a0565b005b34801561053f57600080fd5b50610548611203565b6040516105559190613d19565b60405180910390f35b34801561056a57600080fd5b5061057361120c565b6040516105809190613c76565b60405180910390f35b34801561059557600080fd5b5061059e611232565b6040516105ab9190613c76565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613d34565b611258565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190613b11565b61136a565b6040516106119190613bcf565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613b11565b611389565b60405161064e9190613bf9565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613b11565b61142e565b60405161068b9190613bcf565b60405180910390f35b3480156106a057600080fd5b506106a961145d565b6040516106b69190613bf9565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613d9b565b611463565b005b3480156106f457600080fd5b5061070f600480360381019061070a9190613e16565b61153e565b005b34801561071d57600080fd5b5061073860048036038101906107339190613e56565b6115d9565b005b34801561074657600080fd5b5061074f611630565b60405161075c9190613bf9565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613f3e565b611636565b005b34801561079a57600080fd5b506107a361171b565b6040516107b09190613bf9565b60405180910390f35b3480156107c557600080fd5b506107ce6117b3565b6040516107db9190613bf9565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190613b11565b6117b9565b6040516108189190613bf9565b60405180910390f35b34801561082d57600080fd5b50610836611802565b6040516108439190613c76565b60405180910390f35b34801561085857600080fd5b50610861611828565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613b11565b61183c565b6040516108979190613bcf565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613b11565b61185c565b6040516108d49190613bf9565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613e56565b611901565b005b34801561091257600080fd5b5061091b611926565b6040516109289190613c76565b60405180910390f35b34801561093d57600080fd5b5061095860048036038101906109539190613cbd565b61194f565b005b34801561096657600080fd5b5061096f6119b2565b60405161097c9190613bf9565b60405180910390f35b34801561099157600080fd5b5061099a6119b8565b6040516109a79190613a87565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190613fbf565b6119f5565b005b3480156109e557600080fd5b50610a0060048036038101906109fb9190613e56565b611a22565b005b348015610a0e57600080fd5b50610a17611a47565b604051610a249190613bf9565b60405180910390f35b348015610a3957600080fd5b50610a546004803603810190610a4f9190613cbd565b611a4d565b005b348015610a6257600080fd5b50610a7d6004803603810190610a789190613d9b565b611cad565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa19190613cbd565b611d88565b005b348015610ab457600080fd5b50610acf6004803603810190610aca9190613b74565b611deb565b604051610adc9190613bcf565b60405180910390f35b348015610af157600080fd5b50610afa611e00565b005b348015610b0857600080fd5b50610b11611e8f565b604051610b1e919061405e565b60405180910390f35b348015610b3357600080fd5b50610b4e6004803603810190610b499190613e56565b611eb5565b005b348015610b5c57600080fd5b50610b65611f07565b604051610b729190613c76565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190614079565b611f2d565b604051610baf9190613bf9565b60405180910390f35b348015610bc457600080fd5b50610bcd611fb4565b604051610bda9190613bf9565b60405180910390f35b348015610bef57600080fd5b50610c0a6004803603810190610c059190613b11565b611fba565b604051610c179190613bcf565b60405180910390f35b348015610c2c57600080fd5b50610c476004803603810190610c429190613e56565b611fda565b005b348015610c5557600080fd5b50610c706004803603810190610c6b9190613b11565b611fec565b005b348015610c7e57600080fd5b50610c87612070565b604051610c9491906140da565b60405180910390f35b60606040518060400160405280600781526020017f536372696c6c6100000000000000000000000000000000000000000000000000815250905090565b610ce26120c2565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d9341d7826040518263ffffffff1660e01b8152600401610d3d9190613c76565b600060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b5050505050565b600081601f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e529190613bf9565b60405180910390a36001905092915050565b610e6c6120c2565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663643076608383336040518463ffffffff1660e01b8152600401610ecb939291906140f5565b600060405180830381600087803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b505050505050565b60006012600a610f11919061428e565b633b9aca00610f2091906142d9565b905090565b60006012600a610f35919061428e565b633b9aca00610f4491906142d9565b601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461110d5761108c826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121399092919063ffffffff16565b601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61111884848461218e565b90509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60236020528060005260406000206000915054906101000a900460ff1681565b6111a86120c2565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112606120c2565b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b602080528060005260406000206000915054906101000a900460ff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b81526004016113e69190613c76565b602060405180830381865afa158015611403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114279190614348565b9050919050565b6000611456826012600a611442919061428e565b633b9aca0061145191906142d9565b610d72565b9050919050565b600a5481565b61146b6120c2565b84601481905550836015819055508260168190555081601781905550806018819055506114d7826114c9856114bb856114ad8a8c612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b600b819055506114f36004600c5461209690919063ffffffff16565b600b541115611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e906143c1565b60405180910390fd5b5050505050565b6115466120c2565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f6a079d83836040518363ffffffff1660e01b81526004016115a39291906143e1565b600060405180830381600087803b1580156115bd57600080fd5b505af11580156115d1573d6000803e3d6000fd5b505050505050565b6115e16120c2565b620b71b08110611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614456565b60405180910390fd5b80600e8190555050565b600e5481565b61163e6120c2565b818190508484905014611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906144c2565b60405180910390fd5b60005b848490508110156117145760006116ca670de0b6b3a76400008585858181106116b5576116b46144e2565b5b905060200201356120ac90919063ffffffff16565b90506116fe338787858181106116e3576116e26144e2565b5b90506020020160208101906116f89190613b11565b83612c3d565b5060018261170c9190614511565b915050611689565b5050505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ae9190614348565b905090565b60255481565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118306120c2565b61183a6000612e10565b565b60226020528060005260406000206000915054906101000a900460ff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b81526004016118b99190613c76565b602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190614348565b9050919050565b6119096120c2565b670de0b6b3a76400008161191d91906142d9565b60028190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119576120c2565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b60606040518060400160405280600781526020017f536372696c6c6100000000000000000000000000000000000000000000000000815250905090565b6119fd6120c2565b81602460006101000a81548160ff021916908315150217905550806025819055505050565b611a2a6120c2565b670de0b6b3a764000081611a3e91906142d9565b60018190555050565b600b5481565b611a556120c2565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611adf5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611ae857600080fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bda57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611ba39291906145a2565b600060405180830381600087803b158015611bbd57600080fd5b505af1158015611bd1573d6000803e3d6000fd5b50505050611ca9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c769291906145cb565b600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050505b5050565b611cb56120c2565b84600f8190555083601081905550826011819055508160128190555080601381905550611d2182611d1383611d0587611cf78a8c612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b600a81905550611d3d6004600c5461209690919063ffffffff16565b600a541115611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906143c1565b60405180910390fd5b5050505050565b611d906120c2565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611df833848461218e565b905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d279c191336040518263ffffffff1660e01b8152600401611e5b9190613c76565b600060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ebd6120c2565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f03573d6000803e3d6000fd5b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60265481565b60216020528060005260406000206000915054906101000a900460ff1681565b611fe26120c2565b8060268190555050565b611ff46120c2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614666565b60405180910390fd5b61206d81612e10565b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836120a491906146b5565b905092915050565b600081836120ba91906142d9565b905092915050565b3373ffffffffffffffffffffffffffffffffffffffff166120e1611926565b73ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90614732565b60405180910390fd5b565b6000838311158290612181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121789190613a87565b60405180910390fd5b5082840390509392505050565b6000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612241576002546121ff6121f0856117b9565b84612c2790919063ffffffff16565b1115612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122379061479e565b60405180910390fd5b5b602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122e55750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123305760015482111561232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061480a565b60405180910390fd5b5b602760009054906101000a900460ff161561235757612350848484612c3d565b9050612c20565b61235f612ed4565b1561236d5761236c612fab565b5b6123f6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121399092919063ffffffff16565b601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124dc5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061258f5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561258e5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561259c578290506126f4565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156126485761261d600c5461260f600a54876120ac90919063ffffffff16565b61209690919063ffffffff16565b905061263281856136fe90919063ffffffff16565b915061263e8682613714565b61264784613812565b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156126f2576126c7600c546126b9600b54876120ac90919063ffffffff16565b61209690919063ffffffff16565b90506126dc81856136fe90919063ffffffff16565b91506126e88682613714565b6126f184613900565b5b505b61274681601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2790919063ffffffff16565b601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612956576026546127e6866117b9565b106128c157600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016128879291906145cb565b600060405180830381600087803b1580156128a157600080fd5b505af19250505080156128b2575060015b6128bb576128bc565b5b612955565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660006040518363ffffffff1660e01b815260040161291f9291906145a2565b600060405180830381600087803b15801561293957600080fd5b505af192505050801561294a575060015b61295357612954565b5b5b5b602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b23576026546129b3856117b9565b10612a8e57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a549291906145cb565b600060405180830381600087803b158015612a6e57600080fd5b505af1925050508015612a7f575060015b612a8857612a89565b5b612b22565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560006040518363ffffffff1660e01b8152600401612aec9291906145a2565b600060405180830381600087803b158015612b0657600080fd5b505af1925050508015612b17575060015b612b2057612b21565b5b5b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479600e546040518263ffffffff1660e01b8152600401612b809190613bf9565b600060405180830381600087803b158015612b9a57600080fd5b505af1925050508015612bab575060015b612bb457612bb5565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c129190613bf9565b60405180910390a360019150505b9392505050565b60008183612c359190614511565b905092915050565b6000612cc8826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121399092919063ffffffff16565b601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d5d82601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2790919063ffffffff16565b601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dfd9190613bf9565b60405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612f415750602760009054906101000a900460ff16155b8015612f595750602460009054906101000a900460ff165b8015612fa65750602554601e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602760006101000a81548160ff021916908315150217905550600061301b601d5461300d601c54612fff601b54612ff1601a54601954612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b905060008111156136e0576000613064600261305684613048601d546025546120ac90919063ffffffff16565b61209690919063ffffffff16565b61209690919063ffffffff16565b9050600061307d826025546136fe90919063ffffffff16565b90506000600267ffffffffffffffff81111561309c5761309b61482a565b5b6040519080825280602002602001820160405280156130ca5781602001602082028036833780820191505090505b50905030816000815181106130e2576130e16144e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ad919061486e565b816001815181106131c1576131c06144e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613264959493929190614959565b600060405180830381600087803b15801561327e57600080fd5b505af1158015613292573d6000803e3d6000fd5b5050505060006132ab82476136fe90919063ffffffff16565b905060006132d76132c86002601d5461209690919063ffffffff16565b886136fe90919063ffffffff16565b905060006133156002613307846132f9601d54886120ac90919063ffffffff16565b61209690919063ffffffff16565b61209690919063ffffffff16565b9050600061334089613332601954876120ac90919063ffffffff16565b61209690919063ffffffff16565b9050600061336b8a61335d601a54886120ac90919063ffffffff16565b61209690919063ffffffff16565b905060006133968b613388601b54896120ac90919063ffffffff16565b61209690919063ffffffff16565b905060006133c18c6133b3601c548a6120ac90919063ffffffff16565b61209690919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663439370b1856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561342d57600080fd5b505af19350505050801561343f575060015b61344857613449565b5b60008311156134bc57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156134ba573d6000803e3d6000fd5b505b600082111561352f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561352d573d6000803e3d6000fd5b505b60008111156135a257600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135a0573d6000803e3d6000fd5b505b60008b11156136b457600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613634969594939291906149b3565b60606040518083038185885af1158015613652573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136779190614a14565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c6040516136ab9291906143e1565b60405180910390a15b60006019819055506000601a819055506000601b819055506000601c8190555050505050505050505050505b506000602760006101000a81548160ff021916908315150217905550565b6000818361370c9190614a67565b905092915050565b61376681601e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2790919063ffffffff16565b601e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138069190613bf9565b60405180910390a35050565b61383b600c5461382d600f54846120ac90919063ffffffff16565b61209690919063ffffffff16565b60198190555061386a600c5461385c601054846120ac90919063ffffffff16565b61209690919063ffffffff16565b601a81905550613899600c5461388b601154846120ac90919063ffffffff16565b61209690919063ffffffff16565b601b819055506138c8600c546138ba601254846120ac90919063ffffffff16565b61209690919063ffffffff16565b601c819055506138f7600c546138e9601354846120ac90919063ffffffff16565b61209690919063ffffffff16565b601d8190555050565b613929600c5461391b601454846120ac90919063ffffffff16565b61209690919063ffffffff16565b601981905550613958600c5461394a601554846120ac90919063ffffffff16565b61209690919063ffffffff16565b601a81905550613987600c54613979601654846120ac90919063ffffffff16565b61209690919063ffffffff16565b601b819055506139b6600c546139a8601754846120ac90919063ffffffff16565b61209690919063ffffffff16565b601c819055506139e5600c546139d7601854846120ac90919063ffffffff16565b61209690919063ffffffff16565b601d8190555050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a28578082015181840152602081019050613a0d565b83811115613a37576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a59826139ee565b613a6381856139f9565b9350613a73818560208601613a0a565b613a7c81613a3d565b840191505092915050565b60006020820190508181036000830152613aa18184613a4e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ade82613ab3565b9050919050565b613aee81613ad3565b8114613af957600080fd5b50565b600081359050613b0b81613ae5565b92915050565b600060208284031215613b2757613b26613aa9565b5b6000613b3584828501613afc565b91505092915050565b6000819050919050565b613b5181613b3e565b8114613b5c57600080fd5b50565b600081359050613b6e81613b48565b92915050565b60008060408385031215613b8b57613b8a613aa9565b5b6000613b9985828601613afc565b9250506020613baa85828601613b5f565b9150509250929050565b60008115159050919050565b613bc981613bb4565b82525050565b6000602082019050613be46000830184613bc0565b92915050565b613bf381613b3e565b82525050565b6000602082019050613c0e6000830184613bea565b92915050565b600080600060608486031215613c2d57613c2c613aa9565b5b6000613c3b86828701613afc565b9350506020613c4c86828701613afc565b9250506040613c5d86828701613b5f565b9150509250925092565b613c7081613ad3565b82525050565b6000602082019050613c8b6000830184613c67565b92915050565b613c9a81613bb4565b8114613ca557600080fd5b50565b600081359050613cb781613c91565b92915050565b60008060408385031215613cd457613cd3613aa9565b5b6000613ce285828601613afc565b9250506020613cf385828601613ca8565b9150509250929050565b600060ff82169050919050565b613d1381613cfd565b82525050565b6000602082019050613d2e6000830184613d0a565b92915050565b60008060008060808587031215613d4e57613d4d613aa9565b5b6000613d5c87828801613afc565b9450506020613d6d87828801613afc565b9350506040613d7e87828801613afc565b9250506060613d8f87828801613afc565b91505092959194509250565b600080600080600060a08688031215613db757613db6613aa9565b5b6000613dc588828901613b5f565b9550506020613dd688828901613b5f565b9450506040613de788828901613b5f565b9350506060613df888828901613b5f565b9250506080613e0988828901613b5f565b9150509295509295909350565b60008060408385031215613e2d57613e2c613aa9565b5b6000613e3b85828601613b5f565b9250506020613e4c85828601613b5f565b9150509250929050565b600060208284031215613e6c57613e6b613aa9565b5b6000613e7a84828501613b5f565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ea857613ea7613e83565b5b8235905067ffffffffffffffff811115613ec557613ec4613e88565b5b602083019150836020820283011115613ee157613ee0613e8d565b5b9250929050565b60008083601f840112613efe57613efd613e83565b5b8235905067ffffffffffffffff811115613f1b57613f1a613e88565b5b602083019150836020820283011115613f3757613f36613e8d565b5b9250929050565b60008060008060408587031215613f5857613f57613aa9565b5b600085013567ffffffffffffffff811115613f7657613f75613aae565b5b613f8287828801613e92565b9450945050602085013567ffffffffffffffff811115613fa557613fa4613aae565b5b613fb187828801613ee8565b925092505092959194509250565b60008060408385031215613fd657613fd5613aa9565b5b6000613fe485828601613ca8565b9250506020613ff585828601613b5f565b9150509250929050565b6000819050919050565b600061402461401f61401a84613ab3565b613fff565b613ab3565b9050919050565b600061403682614009565b9050919050565b60006140488261402b565b9050919050565b6140588161403d565b82525050565b6000602082019050614073600083018461404f565b92915050565b600080604083850312156140905761408f613aa9565b5b600061409e85828601613afc565b92505060206140af85828601613afc565b9150509250929050565b60006140c48261402b565b9050919050565b6140d4816140b9565b82525050565b60006020820190506140ef60008301846140cb565b92915050565b600060608201905061410a6000830186613c67565b6141176020830185613bea565b6141246040830184613c67565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156141b25780860481111561418e5761418d61412c565b5b600185161561419d5780820291505b80810290506141ab8561415b565b9450614172565b94509492505050565b6000826141cb5760019050614287565b816141d95760009050614287565b81600181146141ef57600281146141f957614228565b6001915050614287565b60ff84111561420b5761420a61412c565b5b8360020a9150848211156142225761422161412c565b5b50614287565b5060208310610133831016604e8410600b841016171561425d5782820a9050838111156142585761425761412c565b5b614287565b61426a8484846001614168565b925090508184048111156142815761428061412c565b5b81810290505b9392505050565b600061429982613b3e565b91506142a483613cfd565b92506142d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846141bb565b905092915050565b60006142e482613b3e565b91506142ef83613b3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143285761432761412c565b5b828202905092915050565b60008151905061434281613b48565b92915050565b60006020828403121561435e5761435d613aa9565b5b600061436c84828501614333565b91505092915050565b7f43616e27742062652067726561746572207468616e2032352500000000000000600082015250565b60006143ab6019836139f9565b91506143b682614375565b602082019050919050565b600060208201905081810360008301526143da8161439e565b9050919050565b60006040820190506143f66000830185613bea565b6144036020830184613bea565b9392505050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000614440601d836139f9565b915061444b8261440a565b602082019050919050565b6000602082019050818103600083015261446f81614433565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b60006144ac6019836139f9565b91506144b782614476565b602082019050919050565b600060208201905081810360008301526144db8161449f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061451c82613b3e565b915061452783613b3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455c5761455b61412c565b5b828201905092915050565b6000819050919050565b600061458c61458761458284614567565b613fff565b613b3e565b9050919050565b61459c81614571565b82525050565b60006040820190506145b76000830185613c67565b6145c46020830184614593565b9392505050565b60006040820190506145e06000830185613c67565b6145ed6020830184613bea565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146506026836139f9565b915061465b826145f4565b604082019050919050565b6000602082019050818103600083015261467f81614643565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c082613b3e565b91506146cb83613b3e565b9250826146db576146da614686565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061471c6020836139f9565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f4d617820686f6c64206c696d6974206578636565647300000000000000000000600082015250565b60006147886016836139f9565b915061479382614752565b602082019050919050565b600060208201905081810360008301526147b78161477b565b9050919050565b7f4269674275793a206d61782074786e206c696d69742065786365656473000000600082015250565b60006147f4601d836139f9565b91506147ff826147be565b602082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061486881613ae5565b92915050565b60006020828403121561488457614883613aa9565b5b600061489284828501614859565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148d081613ad3565b82525050565b60006148e283836148c7565b60208301905092915050565b6000602082019050919050565b60006149068261489b565b61491081856148a6565b935061491b836148b7565b8060005b8381101561494c57815161493388826148d6565b975061493e836148ee565b92505060018101905061491f565b5085935050505092915050565b600060a08201905061496e6000830188613bea565b61497b6020830187614593565b818103604083015261498d81866148fb565b905061499c6060830185613c67565b6149a96080830184613bea565b9695505050505050565b600060c0820190506149c86000830189613c67565b6149d56020830188613bea565b6149e26040830187614593565b6149ef6060830186614593565b6149fc6080830185613c67565b614a0960a0830184613bea565b979650505050505050565b600080600060608486031215614a2d57614a2c613aa9565b5b6000614a3b86828701614333565b9350506020614a4c86828701614333565b9250506040614a5d86828701614333565b9150509250925092565b6000614a7282613b3e565b9150614a7d83613b3e565b925082821015614a9057614a8f61412c565b5b82820390509291505056fea2646970667358221220faed56e8039e6f83394dc448500b05e6bae1d4fcece7f87a1124a0280bb5f74364736f6c634300080a0033608060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600b55603c600c55600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000105919062000222565b600a620001139190620003e1565b600162000121919062000432565b600d553480156200013157600080fd5b50604051620025d9380380620025d98339818101604052810190620001579190620004f8565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200052a565b600080fd5b600060ff82169050919050565b620001fc81620001e4565b81146200020857600080fd5b50565b6000815190506200021c81620001f1565b92915050565b6000602082840312156200023b576200023a620001df565b5b60006200024b848285016200020b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620002e257808604811115620002ba57620002b962000254565b5b6001851615620002ca5780820291505b8081029050620002da8562000283565b94506200029a565b94509492505050565b600082620002fd5760019050620003d0565b816200030d5760009050620003d0565b8160018114620003265760028114620003315762000367565b6001915050620003d0565b60ff84111562000346576200034562000254565b5b8360020a91508482111562000360576200035f62000254565b5b50620003d0565b5060208310610133831016604e8410600b8410161715620003a15782820a9050838111156200039b576200039a62000254565b5b620003d0565b620003b0848484600162000290565b92509050818404811115620003ca57620003c962000254565b5b81810290505b9392505050565b6000819050919050565b6000620003ee82620003d7565b9150620003fb83620001e4565b92506200042a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620002eb565b905092915050565b60006200043f82620003d7565b91506200044c83620003d7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000488576200048762000254565b5b828202905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004c08262000493565b9050919050565b620004d281620004b3565b8114620004de57600080fd5b50565b600081519050620004f281620004c7565b92915050565b600060208284031215620005115762000510620001df565b5b60006200052184828501620004e1565b91505092915050565b61209f806200053a6000396000f3fe6080604052600436106101405760003560e01c806370fce9b7116100b6578063d4fda1f21161006f578063d4fda1f214610451578063ecd0c0c31461048e578063efca2eed146104b9578063f887ea40146104e4578063ffb2c4791461050f578063ffd49c841461053857610140565b806370fce9b71461032b578063ab377daa14610356578063b5381e5314610393578063c7e1d0b1146103be578063ce7c2ac2146103e9578063d279c1911461042857610140565b8063439370b111610108578063439370b11461022a5780634fab0ae81461023457806352f481581461025f5780635f6a079d1461029c57806364307660146102c557806366817df5146102ee57610140565b80630d9341d7146101455780630e15561a1461016e57806314b6ca961461019957806328fd3198146101c25780633a98ef39146101ff575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190611925565b610563565b005b34801561017a57600080fd5b506101836105ff565b604051610190919061196b565b60405180910390f35b3480156101a557600080fd5b506101c060048036038101906101bb91906119b2565b610605565b005b3480156101ce57600080fd5b506101e960048036038101906101e49190611925565b6108c4565b6040516101f6919061196b565b60405180910390f35b34801561020b57600080fd5b506102146109de565b604051610221919061196b565b60405180910390f35b6102326109e4565b005b34801561024057600080fd5b50610249610e24565b604051610256919061196b565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611925565b610e2a565b604051610293919061196b565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be91906119f2565b610e76565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190611a32565b610ee0565b005b3480156102fa57600080fd5b5061031560048036038101906103109190611925565b610fbc565b604051610322919061196b565b60405180910390f35b34801561033757600080fd5b50610340610fd4565b60405161034d9190611ae4565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190611aff565b610ffa565b60405161038a9190611b3b565b60405180910390f35b34801561039f57600080fd5b506103a8611039565b6040516103b5919061196b565b60405180910390f35b3480156103ca57600080fd5b506103d361103f565b6040516103e0919061196b565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190611925565b611045565b60405161041f93929190611b56565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190611925565b61106f565b005b34801561045d57600080fd5b5061047860048036038101906104739190611925565b61107b565b604051610485919061196b565b60405180910390f35b34801561049a57600080fd5b506104a3611093565b6040516104b09190611b3b565b60405180910390f35b3480156104c557600080fd5b506104ce6110b7565b6040516104db919061196b565b60405180910390f35b3480156104f057600080fd5b506104f96110bd565b6040516105069190611bae565b60405180910390f35b34801561051b57600080fd5b5061053660048036038101906105319190611aff565b6110e3565b005b34801561054457600080fd5b5061054d611277565b60405161055a919061196b565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105bb57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461065d57600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156106b2576106b18261127d565b5b60008111801561070457506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156107175761071282611515565b610779565b60008114801561076957506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561077857610777826115c4565b5b5b6107e2816107d4600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007546117cb90919063ffffffff16565b6117e190919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061087a600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117f7565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561091957600090506109d9565b6000610966600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117f7565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116109c1576000925050506109d9565b6109d481836117cb90919063ffffffff16565b925050505b919050565b60075481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a3c57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a999190611b3b565b602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada9190611bde565b90506000600267ffffffffffffffff811115610af957610af8611c0b565b5b604051908082528060200260200182016040528015610b275781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbb9190611c4f565b81600081518110610bcf57610bce611c7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610c4057610c3f611c7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610cdd9493929190611da4565b6000604051808303818588803b158015610cf657600080fd5b505af1158015610d0a573d6000803e3d6000fd5b50505050506000610dbf83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d709190611b3b565b602060405180830381865afa158015610d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db19190611bde565b6117cb90919063ffffffff16565b9050610dd6816008546117e190919063ffffffff16565b600881905550610e19610e08600754610dfa84600b5461182990919063ffffffff16565b61183f90919063ffffffff16565b600a546117e190919063ffffffff16565b600a81905550505050565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ece57600080fd5b81600c8190555080600d819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401610f73929190611df0565b6020604051808303816000875af1158015610f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb69190611e51565b50505050565b60056020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061100a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600a5481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b6110788161127d565b50565b60046020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461113b57600080fd5b6000600380549050905060008114156111545750611274565b6000805a905060005b848310801561116b57508381105b1561126f5783600e5410611182576000600e819055505b6111cb6003600e548154811061119b5761119a611c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611855565b1561121a576112196003600e54815481106111e9576111e8611c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661127d565b5b61123f6112305a846117cb90919063ffffffff16565b846117e190919063ffffffff16565b92505a9150600e600081548092919061125790611ead565b9190505550808061126790611ead565b91505061115d565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156112cd57611512565b60006112d8826108c4565b90506000811115611510576112f8816009546117e190919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161135b929190611df0565b6020604051808303816000875af115801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e9190611e51565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061143881600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546117e190919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506114c9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117f7565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506115d89190611ef6565b815481106115e9576115e8611c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061166757611666611c7c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506117079190611ef6565b8154811061171857611717611c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061179357611792611f2a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836117d99190611ef6565b905092915050565b600081836117ef9190611f59565b905092915050565b6000611822600b54611814600a548561182990919063ffffffff16565b61183f90919063ffffffff16565b9050919050565b600081836118379190611faf565b905092915050565b6000818361184d9190612038565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118a59190611f59565b1080156118bb5750600d546118b9836108c4565b115b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118f2826118c7565b9050919050565b611902816118e7565b811461190d57600080fd5b50565b60008135905061191f816118f9565b92915050565b60006020828403121561193b5761193a6118c2565b5b600061194984828501611910565b91505092915050565b6000819050919050565b61196581611952565b82525050565b6000602082019050611980600083018461195c565b92915050565b61198f81611952565b811461199a57600080fd5b50565b6000813590506119ac81611986565b92915050565b600080604083850312156119c9576119c86118c2565b5b60006119d785828601611910565b92505060206119e88582860161199d565b9150509250929050565b60008060408385031215611a0957611a086118c2565b5b6000611a178582860161199d565b9250506020611a288582860161199d565b9150509250929050565b600080600060608486031215611a4b57611a4a6118c2565b5b6000611a5986828701611910565b9350506020611a6a8682870161199d565b9250506040611a7b86828701611910565b9150509250925092565b6000819050919050565b6000611aaa611aa5611aa0846118c7565b611a85565b6118c7565b9050919050565b6000611abc82611a8f565b9050919050565b6000611ace82611ab1565b9050919050565b611ade81611ac3565b82525050565b6000602082019050611af96000830184611ad5565b92915050565b600060208284031215611b1557611b146118c2565b5b6000611b238482850161199d565b91505092915050565b611b35816118e7565b82525050565b6000602082019050611b506000830184611b2c565b92915050565b6000606082019050611b6b600083018661195c565b611b78602083018561195c565b611b85604083018461195c565b949350505050565b6000611b9882611ab1565b9050919050565b611ba881611b8d565b82525050565b6000602082019050611bc36000830184611b9f565b92915050565b600081519050611bd881611986565b92915050565b600060208284031215611bf457611bf36118c2565b5b6000611c0284828501611bc9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611c49816118f9565b92915050565b600060208284031215611c6557611c646118c2565b5b6000611c7384828501611c3a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000611cd0611ccb611cc684611cab565b611a85565b611952565b9050919050565b611ce081611cb5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611d1b816118e7565b82525050565b6000611d2d8383611d12565b60208301905092915050565b6000602082019050919050565b6000611d5182611ce6565b611d5b8185611cf1565b9350611d6683611d02565b8060005b83811015611d97578151611d7e8882611d21565b9750611d8983611d39565b925050600181019050611d6a565b5085935050505092915050565b6000608082019050611db96000830187611cd7565b8181036020830152611dcb8186611d46565b9050611dda6040830185611b2c565b611de7606083018461195c565b95945050505050565b6000604082019050611e056000830185611b2c565b611e12602083018461195c565b9392505050565b60008115159050919050565b611e2e81611e19565b8114611e3957600080fd5b50565b600081519050611e4b81611e25565b92915050565b600060208284031215611e6757611e666118c2565b5b6000611e7584828501611e3c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611eb882611952565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611eeb57611eea611e7e565b5b600182019050919050565b6000611f0182611952565b9150611f0c83611952565b925082821015611f1f57611f1e611e7e565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611f6482611952565b9150611f6f83611952565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611fa457611fa3611e7e565b5b828201905092915050565b6000611fba82611952565b9150611fc583611952565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ffe57611ffd611e7e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061204382611952565b915061204e83611952565b92508261205e5761205d612009565b5b82820490509291505056fea26469706673582212209009b0cb05ac60116936b0fd5e3359bd0e8fad97af389bba49c3682aa95b78be64736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806370a08231116101ab5780639db8baef116100f7578063dab84ee711610095578063f0f56b2c1161006f578063f0f56b2c14610be3578063f19665f214610c20578063f2fde38b14610c49578063f887ea4014610c7257610325565b8063dab84ee714610b50578063dd62ed3e14610b7b578063e218383914610bb857610325565b8063a9059cbb116100d1578063a9059cbb14610aa8578063b88a802f14610ae5578063bfe1092814610afc578063c311d04914610b2757610325565b80639db8baef14610a2d578063a71e061814610a56578063a7c29b4014610a7f57610325565b80638da5cb5b1161016457806395d89b411161013e57806395d89b411461098557806397613b28146109b05780639b6a2750146109d95780639d9241ec14610a0257610325565b80638da5cb5b146109065780638ebfc79614610931578063917b546c1461095a57610325565b806370a08231146107e457806370fce9b714610821578063715018a61461084c5780637b9d454d146108635780637d731c3d146108a05780638756aabd146108dd57610325565b8063357767331161026a5780635ea4a8dd1161022357806360e71962116101fd57806360e719621461073a578063672434821461076557806369db09eb1461078e5780636a01f09c146107b957610325565b80635ea4a8dd146106bf5780635f6a079d146106e857806360a834fa1461071157610325565b806335776733146105895780633c8e556d146105b45780633f4218e0146105dd57806356586b8e1461061a578063571ac8b01461065757806359b107b91461069457610325565b8063264d26dd116102d75780632c71ef5d116102b15780632c71ef5d146104cd5780632d1293901461050a578063313ce5671461053357806332972e461461055e57610325565b8063264d26dd1461044c57806329691448146104775780632af10fac146104a257610325565b806306fdde031461032a578063088ab8ce14610355578063095ea7b31461037e5780631445f022146103bb57806318160ddd146103e457806323b872dd1461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c9d565b60405161034c9190613a87565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613b11565b610cda565b005b34801561038a57600080fd5b506103a560048036038101906103a09190613b74565b610d72565b6040516103b29190613bcf565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd9190613b74565b610e64565b005b3480156103f057600080fd5b506103f9610f01565b6040516104069190613bf9565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613c14565b610f25565b6040516104439190613bcf565b60405180910390f35b34801561045857600080fd5b50610461611121565b60405161046e9190613c76565b60405180910390f35b34801561048357600080fd5b5061048c611147565b6040516104999190613bcf565b60405180910390f35b3480156104ae57600080fd5b506104b761115a565b6040516104c49190613c76565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613b11565b611180565b6040516105019190613bcf565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613cbd565b6111a0565b005b34801561053f57600080fd5b50610548611203565b6040516105559190613d19565b60405180910390f35b34801561056a57600080fd5b5061057361120c565b6040516105809190613c76565b60405180910390f35b34801561059557600080fd5b5061059e611232565b6040516105ab9190613c76565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613d34565b611258565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190613b11565b61136a565b6040516106119190613bcf565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613b11565b611389565b60405161064e9190613bf9565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613b11565b61142e565b60405161068b9190613bcf565b60405180910390f35b3480156106a057600080fd5b506106a961145d565b6040516106b69190613bf9565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613d9b565b611463565b005b3480156106f457600080fd5b5061070f600480360381019061070a9190613e16565b61153e565b005b34801561071d57600080fd5b5061073860048036038101906107339190613e56565b6115d9565b005b34801561074657600080fd5b5061074f611630565b60405161075c9190613bf9565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613f3e565b611636565b005b34801561079a57600080fd5b506107a361171b565b6040516107b09190613bf9565b60405180910390f35b3480156107c557600080fd5b506107ce6117b3565b6040516107db9190613bf9565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190613b11565b6117b9565b6040516108189190613bf9565b60405180910390f35b34801561082d57600080fd5b50610836611802565b6040516108439190613c76565b60405180910390f35b34801561085857600080fd5b50610861611828565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613b11565b61183c565b6040516108979190613bcf565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613b11565b61185c565b6040516108d49190613bf9565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613e56565b611901565b005b34801561091257600080fd5b5061091b611926565b6040516109289190613c76565b60405180910390f35b34801561093d57600080fd5b5061095860048036038101906109539190613cbd565b61194f565b005b34801561096657600080fd5b5061096f6119b2565b60405161097c9190613bf9565b60405180910390f35b34801561099157600080fd5b5061099a6119b8565b6040516109a79190613a87565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190613fbf565b6119f5565b005b3480156109e557600080fd5b50610a0060048036038101906109fb9190613e56565b611a22565b005b348015610a0e57600080fd5b50610a17611a47565b604051610a249190613bf9565b60405180910390f35b348015610a3957600080fd5b50610a546004803603810190610a4f9190613cbd565b611a4d565b005b348015610a6257600080fd5b50610a7d6004803603810190610a789190613d9b565b611cad565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa19190613cbd565b611d88565b005b348015610ab457600080fd5b50610acf6004803603810190610aca9190613b74565b611deb565b604051610adc9190613bcf565b60405180910390f35b348015610af157600080fd5b50610afa611e00565b005b348015610b0857600080fd5b50610b11611e8f565b604051610b1e919061405e565b60405180910390f35b348015610b3357600080fd5b50610b4e6004803603810190610b499190613e56565b611eb5565b005b348015610b5c57600080fd5b50610b65611f07565b604051610b729190613c76565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190614079565b611f2d565b604051610baf9190613bf9565b60405180910390f35b348015610bc457600080fd5b50610bcd611fb4565b604051610bda9190613bf9565b60405180910390f35b348015610bef57600080fd5b50610c0a6004803603810190610c059190613b11565b611fba565b604051610c179190613bcf565b60405180910390f35b348015610c2c57600080fd5b50610c476004803603810190610c429190613e56565b611fda565b005b348015610c5557600080fd5b50610c706004803603810190610c6b9190613b11565b611fec565b005b348015610c7e57600080fd5b50610c87612070565b604051610c9491906140da565b60405180910390f35b60606040518060400160405280600781526020017f536372696c6c6100000000000000000000000000000000000000000000000000815250905090565b610ce26120c2565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d9341d7826040518263ffffffff1660e01b8152600401610d3d9190613c76565b600060405180830381600087803b158015610d5757600080fd5b505af1158015610d6b573d6000803e3d6000fd5b5050505050565b600081601f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e529190613bf9565b60405180910390a36001905092915050565b610e6c6120c2565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663643076608383336040518463ffffffff1660e01b8152600401610ecb939291906140f5565b600060405180830381600087803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b505050505050565b60006012600a610f11919061428e565b633b9aca00610f2091906142d9565b905090565b60006012600a610f35919061428e565b633b9aca00610f4491906142d9565b601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461110d5761108c826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121399092919063ffffffff16565b601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61111884848461218e565b90509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60236020528060005260406000206000915054906101000a900460ff1681565b6111a86120c2565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112606120c2565b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b602080528060005260406000206000915054906101000a900460ff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b81526004016113e69190613c76565b602060405180830381865afa158015611403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114279190614348565b9050919050565b6000611456826012600a611442919061428e565b633b9aca0061145191906142d9565b610d72565b9050919050565b600a5481565b61146b6120c2565b84601481905550836015819055508260168190555081601781905550806018819055506114d7826114c9856114bb856114ad8a8c612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b600b819055506114f36004600c5461209690919063ffffffff16565b600b541115611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e906143c1565b60405180910390fd5b5050505050565b6115466120c2565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635f6a079d83836040518363ffffffff1660e01b81526004016115a39291906143e1565b600060405180830381600087803b1580156115bd57600080fd5b505af11580156115d1573d6000803e3d6000fd5b505050505050565b6115e16120c2565b620b71b08110611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614456565b60405180910390fd5b80600e8190555050565b600e5481565b61163e6120c2565b818190508484905014611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906144c2565b60405180910390fd5b60005b848490508110156117145760006116ca670de0b6b3a76400008585858181106116b5576116b46144e2565b5b905060200201356120ac90919063ffffffff16565b90506116fe338787858181106116e3576116e26144e2565b5b90506020020160208101906116f89190613b11565b83612c3d565b5060018261170c9190614511565b915050611689565b5050505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ae9190614348565b905090565b60255481565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118306120c2565b61183a6000612e10565b565b60226020528060005260406000206000915054906101000a900460ff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b81526004016118b99190613c76565b602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190614348565b9050919050565b6119096120c2565b670de0b6b3a76400008161191d91906142d9565b60028190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119576120c2565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b60606040518060400160405280600781526020017f536372696c6c6100000000000000000000000000000000000000000000000000815250905090565b6119fd6120c2565b81602460006101000a81548160ff021916908315150217905550806025819055505050565b611a2a6120c2565b670de0b6b3a764000081611a3e91906142d9565b60018190555050565b600b5481565b611a556120c2565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611adf5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611ae857600080fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bda57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611ba39291906145a2565b600060405180830381600087803b158015611bbd57600080fd5b505af1158015611bd1573d6000803e3d6000fd5b50505050611ca9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c769291906145cb565b600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050505b5050565b611cb56120c2565b84600f8190555083601081905550826011819055508160128190555080601381905550611d2182611d1383611d0587611cf78a8c612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b600a81905550611d3d6004600c5461209690919063ffffffff16565b600a541115611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906143c1565b60405180910390fd5b5050505050565b611d906120c2565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611df833848461218e565b905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d279c191336040518263ffffffff1660e01b8152600401611e5b9190613c76565b600060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ebd6120c2565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f03573d6000803e3d6000fd5b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60265481565b60216020528060005260406000206000915054906101000a900460ff1681565b611fe26120c2565b8060268190555050565b611ff46120c2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614666565b60405180910390fd5b61206d81612e10565b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836120a491906146b5565b905092915050565b600081836120ba91906142d9565b905092915050565b3373ffffffffffffffffffffffffffffffffffffffff166120e1611926565b73ffffffffffffffffffffffffffffffffffffffff1614612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90614732565b60405180910390fd5b565b6000838311158290612181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121789190613a87565b60405180910390fd5b5082840390509392505050565b6000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612241576002546121ff6121f0856117b9565b84612c2790919063ffffffff16565b1115612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122379061479e565b60405180910390fd5b5b602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122e55750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123305760015482111561232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061480a565b60405180910390fd5b5b602760009054906101000a900460ff161561235757612350848484612c3d565b9050612c20565b61235f612ed4565b1561236d5761236c612fab565b5b6123f6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121399092919063ffffffff16565b601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124dc5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061258f5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561258e5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561259c578290506126f4565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156126485761261d600c5461260f600a54876120ac90919063ffffffff16565b61209690919063ffffffff16565b905061263281856136fe90919063ffffffff16565b915061263e8682613714565b61264784613812565b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156126f2576126c7600c546126b9600b54876120ac90919063ffffffff16565b61209690919063ffffffff16565b90506126dc81856136fe90919063ffffffff16565b91506126e88682613714565b6126f184613900565b5b505b61274681601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2790919063ffffffff16565b601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612956576026546127e6866117b9565b106128c157600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016128879291906145cb565b600060405180830381600087803b1580156128a157600080fd5b505af19250505080156128b2575060015b6128bb576128bc565b5b612955565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660006040518363ffffffff1660e01b815260040161291f9291906145a2565b600060405180830381600087803b15801561293957600080fd5b505af192505050801561294a575060015b61295357612954565b5b5b5b602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b23576026546129b3856117b9565b10612a8e57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a549291906145cb565b600060405180830381600087803b158015612a6e57600080fd5b505af1925050508015612a7f575060015b612a8857612a89565b5b612b22565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560006040518363ffffffff1660e01b8152600401612aec9291906145a2565b600060405180830381600087803b158015612b0657600080fd5b505af1925050508015612b17575060015b612b2057612b21565b5b5b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479600e546040518263ffffffff1660e01b8152600401612b809190613bf9565b600060405180830381600087803b158015612b9a57600080fd5b505af1925050508015612bab575060015b612bb457612bb5565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c129190613bf9565b60405180910390a360019150505b9392505050565b60008183612c359190614511565b905092915050565b6000612cc8826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121399092919063ffffffff16565b601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d5d82601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2790919063ffffffff16565b601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dfd9190613bf9565b60405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612f415750602760009054906101000a900460ff16155b8015612f595750602460009054906101000a900460ff165b8015612fa65750602554601e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602760006101000a81548160ff021916908315150217905550600061301b601d5461300d601c54612fff601b54612ff1601a54601954612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b612c2790919063ffffffff16565b905060008111156136e0576000613064600261305684613048601d546025546120ac90919063ffffffff16565b61209690919063ffffffff16565b61209690919063ffffffff16565b9050600061307d826025546136fe90919063ffffffff16565b90506000600267ffffffffffffffff81111561309c5761309b61482a565b5b6040519080825280602002602001820160405280156130ca5781602001602082028036833780820191505090505b50905030816000815181106130e2576130e16144e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ad919061486e565b816001815181106131c1576131c06144e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613264959493929190614959565b600060405180830381600087803b15801561327e57600080fd5b505af1158015613292573d6000803e3d6000fd5b5050505060006132ab82476136fe90919063ffffffff16565b905060006132d76132c86002601d5461209690919063ffffffff16565b886136fe90919063ffffffff16565b905060006133156002613307846132f9601d54886120ac90919063ffffffff16565b61209690919063ffffffff16565b61209690919063ffffffff16565b9050600061334089613332601954876120ac90919063ffffffff16565b61209690919063ffffffff16565b9050600061336b8a61335d601a54886120ac90919063ffffffff16565b61209690919063ffffffff16565b905060006133968b613388601b54896120ac90919063ffffffff16565b61209690919063ffffffff16565b905060006133c18c6133b3601c548a6120ac90919063ffffffff16565b61209690919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663439370b1856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561342d57600080fd5b505af19350505050801561343f575060015b61344857613449565b5b60008311156134bc57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156134ba573d6000803e3d6000fd5b505b600082111561352f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561352d573d6000803e3d6000fd5b505b60008111156135a257600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156135a0573d6000803e3d6000fd5b505b60008b11156136b457600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613634969594939291906149b3565b60606040518083038185885af1158015613652573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136779190614a14565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c6040516136ab9291906143e1565b60405180910390a15b60006019819055506000601a819055506000601b819055506000601c8190555050505050505050505050505b506000602760006101000a81548160ff021916908315150217905550565b6000818361370c9190614a67565b905092915050565b61376681601e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2790919063ffffffff16565b601e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138069190613bf9565b60405180910390a35050565b61383b600c5461382d600f54846120ac90919063ffffffff16565b61209690919063ffffffff16565b60198190555061386a600c5461385c601054846120ac90919063ffffffff16565b61209690919063ffffffff16565b601a81905550613899600c5461388b601154846120ac90919063ffffffff16565b61209690919063ffffffff16565b601b819055506138c8600c546138ba601254846120ac90919063ffffffff16565b61209690919063ffffffff16565b601c819055506138f7600c546138e9601354846120ac90919063ffffffff16565b61209690919063ffffffff16565b601d8190555050565b613929600c5461391b601454846120ac90919063ffffffff16565b61209690919063ffffffff16565b601981905550613958600c5461394a601554846120ac90919063ffffffff16565b61209690919063ffffffff16565b601a81905550613987600c54613979601654846120ac90919063ffffffff16565b61209690919063ffffffff16565b601b819055506139b6600c546139a8601754846120ac90919063ffffffff16565b61209690919063ffffffff16565b601c819055506139e5600c546139d7601854846120ac90919063ffffffff16565b61209690919063ffffffff16565b601d8190555050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a28578082015181840152602081019050613a0d565b83811115613a37576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a59826139ee565b613a6381856139f9565b9350613a73818560208601613a0a565b613a7c81613a3d565b840191505092915050565b60006020820190508181036000830152613aa18184613a4e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ade82613ab3565b9050919050565b613aee81613ad3565b8114613af957600080fd5b50565b600081359050613b0b81613ae5565b92915050565b600060208284031215613b2757613b26613aa9565b5b6000613b3584828501613afc565b91505092915050565b6000819050919050565b613b5181613b3e565b8114613b5c57600080fd5b50565b600081359050613b6e81613b48565b92915050565b60008060408385031215613b8b57613b8a613aa9565b5b6000613b9985828601613afc565b9250506020613baa85828601613b5f565b9150509250929050565b60008115159050919050565b613bc981613bb4565b82525050565b6000602082019050613be46000830184613bc0565b92915050565b613bf381613b3e565b82525050565b6000602082019050613c0e6000830184613bea565b92915050565b600080600060608486031215613c2d57613c2c613aa9565b5b6000613c3b86828701613afc565b9350506020613c4c86828701613afc565b9250506040613c5d86828701613b5f565b9150509250925092565b613c7081613ad3565b82525050565b6000602082019050613c8b6000830184613c67565b92915050565b613c9a81613bb4565b8114613ca557600080fd5b50565b600081359050613cb781613c91565b92915050565b60008060408385031215613cd457613cd3613aa9565b5b6000613ce285828601613afc565b9250506020613cf385828601613ca8565b9150509250929050565b600060ff82169050919050565b613d1381613cfd565b82525050565b6000602082019050613d2e6000830184613d0a565b92915050565b60008060008060808587031215613d4e57613d4d613aa9565b5b6000613d5c87828801613afc565b9450506020613d6d87828801613afc565b9350506040613d7e87828801613afc565b9250506060613d8f87828801613afc565b91505092959194509250565b600080600080600060a08688031215613db757613db6613aa9565b5b6000613dc588828901613b5f565b9550506020613dd688828901613b5f565b9450506040613de788828901613b5f565b9350506060613df888828901613b5f565b9250506080613e0988828901613b5f565b9150509295509295909350565b60008060408385031215613e2d57613e2c613aa9565b5b6000613e3b85828601613b5f565b9250506020613e4c85828601613b5f565b9150509250929050565b600060208284031215613e6c57613e6b613aa9565b5b6000613e7a84828501613b5f565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ea857613ea7613e83565b5b8235905067ffffffffffffffff811115613ec557613ec4613e88565b5b602083019150836020820283011115613ee157613ee0613e8d565b5b9250929050565b60008083601f840112613efe57613efd613e83565b5b8235905067ffffffffffffffff811115613f1b57613f1a613e88565b5b602083019150836020820283011115613f3757613f36613e8d565b5b9250929050565b60008060008060408587031215613f5857613f57613aa9565b5b600085013567ffffffffffffffff811115613f7657613f75613aae565b5b613f8287828801613e92565b9450945050602085013567ffffffffffffffff811115613fa557613fa4613aae565b5b613fb187828801613ee8565b925092505092959194509250565b60008060408385031215613fd657613fd5613aa9565b5b6000613fe485828601613ca8565b9250506020613ff585828601613b5f565b9150509250929050565b6000819050919050565b600061402461401f61401a84613ab3565b613fff565b613ab3565b9050919050565b600061403682614009565b9050919050565b60006140488261402b565b9050919050565b6140588161403d565b82525050565b6000602082019050614073600083018461404f565b92915050565b600080604083850312156140905761408f613aa9565b5b600061409e85828601613afc565b92505060206140af85828601613afc565b9150509250929050565b60006140c48261402b565b9050919050565b6140d4816140b9565b82525050565b60006020820190506140ef60008301846140cb565b92915050565b600060608201905061410a6000830186613c67565b6141176020830185613bea565b6141246040830184613c67565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156141b25780860481111561418e5761418d61412c565b5b600185161561419d5780820291505b80810290506141ab8561415b565b9450614172565b94509492505050565b6000826141cb5760019050614287565b816141d95760009050614287565b81600181146141ef57600281146141f957614228565b6001915050614287565b60ff84111561420b5761420a61412c565b5b8360020a9150848211156142225761422161412c565b5b50614287565b5060208310610133831016604e8410600b841016171561425d5782820a9050838111156142585761425761412c565b5b614287565b61426a8484846001614168565b925090508184048111156142815761428061412c565b5b81810290505b9392505050565b600061429982613b3e565b91506142a483613cfd565b92506142d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846141bb565b905092915050565b60006142e482613b3e565b91506142ef83613b3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143285761432761412c565b5b828202905092915050565b60008151905061434281613b48565b92915050565b60006020828403121561435e5761435d613aa9565b5b600061436c84828501614333565b91505092915050565b7f43616e27742062652067726561746572207468616e2032352500000000000000600082015250565b60006143ab6019836139f9565b91506143b682614375565b602082019050919050565b600060208201905081810360008301526143da8161439e565b9050919050565b60006040820190506143f66000830185613bea565b6144036020830184613bea565b9392505050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000614440601d836139f9565b915061444b8261440a565b602082019050919050565b6000602082019050818103600083015261446f81614433565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b60006144ac6019836139f9565b91506144b782614476565b602082019050919050565b600060208201905081810360008301526144db8161449f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061451c82613b3e565b915061452783613b3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455c5761455b61412c565b5b828201905092915050565b6000819050919050565b600061458c61458761458284614567565b613fff565b613b3e565b9050919050565b61459c81614571565b82525050565b60006040820190506145b76000830185613c67565b6145c46020830184614593565b9392505050565b60006040820190506145e06000830185613c67565b6145ed6020830184613bea565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146506026836139f9565b915061465b826145f4565b604082019050919050565b6000602082019050818103600083015261467f81614643565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146c082613b3e565b91506146cb83613b3e565b9250826146db576146da614686565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061471c6020836139f9565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f4d617820686f6c64206c696d6974206578636565647300000000000000000000600082015250565b60006147886016836139f9565b915061479382614752565b602082019050919050565b600060208201905081810360008301526147b78161477b565b9050919050565b7f4269674275793a206d61782074786e206c696d69742065786365656473000000600082015250565b60006147f4601d836139f9565b91506147ff826147be565b602082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061486881613ae5565b92915050565b60006020828403121561488457614883613aa9565b5b600061489284828501614859565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148d081613ad3565b82525050565b60006148e283836148c7565b60208301905092915050565b6000602082019050919050565b60006149068261489b565b61491081856148a6565b935061491b836148b7565b8060005b8381101561494c57815161493388826148d6565b975061493e836148ee565b92505060018101905061491f565b5085935050505092915050565b600060a08201905061496e6000830188613bea565b61497b6020830187614593565b818103604083015261498d81866148fb565b905061499c6060830185613c67565b6149a96080830184613bea565b9695505050505050565b600060c0820190506149c86000830189613c67565b6149d56020830188613bea565b6149e26040830187614593565b6149ef6060830186614593565b6149fc6080830185613c67565b614a0960a0830184613bea565b979650505050505050565b600080600060608486031215614a2d57614a2c613aa9565b5b6000614a3b86828701614333565b9350506020614a4c86828701614333565b9250506040614a5d86828701614333565b9150509250925092565b6000614a7282613b3e565b9150614a7d83613b3e565b925082821015614a9057614a8f61412c565b5b82820390509291505056fea2646970667358221220faed56e8039e6f83394dc448500b05e6bae1d4fcece7f87a1124a0280bb5f74364736f6c634300080a0033

Deployed Bytecode Sourcemap

14142:21390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19319:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30527:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20029:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30009:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18870:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20848:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14937:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16297:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14896:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16235:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31846:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19026:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14785:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14821:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33949:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16072:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29416:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20376:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14978:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33143:651;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34952:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35362:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15188:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24381:461;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29876:125;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16333:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19480:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14587:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5918:103;;;;;;;;;;;;;:::i;:::-;;16175:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29636:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32024:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5272:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30852:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15086:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19174:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34602:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32141:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15031:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31175:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32377:643;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31672:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20561:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29255:86;;;;;;;;;;;;;:::i;:::-;;15145:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30404:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14860:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19683:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16394:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16122:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30223:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6176:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14745:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19319:94;19367:13;19400:5;;;;;;;;;;;;;;;;;19393:12;;19319:94;:::o;30527:131::-;5158:13;:11;:13::i;:::-;30605:11:::1;;;;;;;;;;;:30;;;30636:13;30605:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30527:131:::0;:::o;20029:241::-;20129:4;20181:6;20146:11;:23;20158:10;20146:23;;;;;;;;;;;;;;;:32;20170:7;20146:32;;;;;;;;;;;;;;;:41;;;;20224:7;20203:37;;20212:10;20203:37;;;20233:6;20203:37;;;;;;:::i;:::-;;;;;;;;20258:4;20251:11;;20029:241;;;;:::o;30009:206::-;5158:13;:11;:13::i;:::-;30140:11:::1;;;;;;;;;;;:31;;;30172:13;30187:7;30196:10;30140:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30009:206:::0;;:::o;18870:102::-;18925:7;14371:2;14436;:15;;;;:::i;:::-;14420:13;:31;;;;:::i;:::-;18945:19;;18870:102;:::o;20848:415::-;20982:4;14371:2;14436;:15;;;;:::i;:::-;14420:13;:31;;;;:::i;:::-;21003:11;:19;21015:6;21003:19;;;;;;;;;;;;;;;:31;21023:10;21003:31;;;;;;;;;;;;;;;;:47;20999:201;;21101:87;21155:6;21101:87;;;;;;;;;;;;;;;;;:11;:19;21113:6;21101:19;;;;;;;;;;;;;;;:31;21121:10;21101:31;;;;;;;;;;;;;;;;:53;;:87;;;;;:::i;:::-;21067:11;:19;21079:6;21067:19;;;;;;;;;;;;;;;:31;21087:10;21067:31;;;;;;;;;;;;;;;:121;;;;20999:201;21219:36;21229:6;21237:9;21248:6;21219:9;:36::i;:::-;21212:43;;20848:415;;;;;:::o;14937:32::-;;;;;;;;;;;;;:::o;16297:29::-;;;;;;;;;;;;;:::o;14896:34::-;;;;;;;;;;;;;:::o;16235:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;31846:170::-;5158:13;:11;:13::i;:::-;32003:5:::1;31970:21;:30;31992:7;31970:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31846:170:::0;;:::o;19026:94::-;19078:5;14371:2;19096:16;;19026:94;:::o;14785:22::-;;;;;;;;;;;;;:::o;14821:32::-;;;;;;;;;;;;;:::o;33949:400::-;5158:13;:11;:13::i;:::-;34178:18:::1;34158:17;;:38;;;;;;;;;;;;;;;;;;34224:15;34207:14;;:32;;;;;;;;;;;;;;;;;;34272:20;34250:19;;:42;;;;;;;;;;;;;;;;;;34323:18;34303:17;;:38;;;;;;;;;;;;;;;;;;33949:400:::0;;;;:::o;16072:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;29416:140::-;29481:7;29508:11;;;;;;;;;;;:27;;;29536:11;29508:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29501:47;;29416:140;;;:::o;20376:117::-;20431:4;20455:30;20463:7;14371:2;14436;:15;;;;:::i;:::-;14420:13;:31;;;;:::i;:::-;20455:7;:30::i;:::-;20448:37;;20376:117;;;:::o;14978:30::-;;;;:::o;33143:651::-;5158:13;:11;:13::i;:::-;33370:14:::1;33349:18;:35;;;;33412:10;33395:14;:27;;;;33447:7;33433:11;:21;;;;33484:12;33465:16;:31;;;;33527:13;33507:17;:33;;;;33566:138;33691:12;33566:106;33664:7;33566:79;33631:13;33566:46;33601:10;33567:14;33566:34;;:46;;;;:::i;:::-;:64;;:79;;;;:::i;:::-;:97;;:106;;;;:::i;:::-;:124;;:138;;;;:::i;:::-;33551:12;:153;;;;33739:17;33754:1;33739:10;;:14;;:17;;;;:::i;:::-;33723:12;;:33;;33715:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33143:651:::0;;;;;:::o;34952:207::-;5158:13;:11;:13::i;:::-;35086:11:::1;;;;;;;;;;;:35;;;35122:10;35134:16;35086:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34952:207:::0;;:::o;35362:167::-;5158:13;:11;:13::i;:::-;35450:6:::1;35444:3;:12;35436:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35518:3;35501:14;:20;;;;35362:167:::0;:::o;15188:38::-;;;;:::o;24381:461::-;5158:13;:11;:13::i;:::-;24553:7:::1;;:14;;24533:9;;:16;;:34;24511:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;24631:9;24655:180;24666:9;;:16;;24662:1;:20;24655:180;;;24699:15;24717:20;24732:4;24717:7;;24725:1;24717:10;;;;;;;:::i;:::-;;;;;;;;:14;;:20;;;;:::i;:::-;24699:38;;24752:50;24768:10;24780:9;;24790:1;24780:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24794:7;24752:15;:50::i;:::-;;24822:1;24817:6;;;;;:::i;:::-;;;24684:151;24655:180;;;24500:342;24381:461:::0;;;;:::o;29876:125::-;29936:7;29963:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29956:37;;29876:125;:::o;16333:54::-;;;;:::o;19480:119::-;19546:7;19573:9;:18;19583:7;19573:18;;;;;;;;;;;;;;;;19566:25;;19480:119;;;:::o;14587:69::-;;;;;;;;;;;;;:::o;5918:103::-;5158:13;:11;:13::i;:::-;5983:30:::1;6010:1;5983:18;:30::i;:::-;5918:103::o:0;16175:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;29636:162::-;29721:7;29748:11;;;;;;;;;;;:29;;;29778:11;29748:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29741:49;;29636:162;;;:::o;32024:109::-;5158:13;:11;:13::i;:::-;32121:4:::1;32111:7;:14;;;;:::i;:::-;32096:12;:29;;;;32024:109:::0;:::o;5272:87::-;5318:7;5345:6;;;;;;;;;;;5338:13;;5272:87;:::o;30852:117::-;5158:13;:11;:13::i;:::-;30955:6:::1;30933:11;:19;30945:6;30933:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30852:117:::0;;:::o;15086:31::-;;;;:::o;19174:98::-;19224:13;19257:7;;;;;;;;;;;;;;;;;19250:14;;19174:98;:::o;34602:142::-;5158:13;:11;:13::i;:::-;34698:8:::1;34685:10;;:21;;;;;;;;;;;;;;;;;;34729:7;34717:9;:19;;;;34602:142:::0;;:::o;32141:107::-;5158:13;:11;:13::i;:::-;32236:4:::1;32226:7;:14;;;;:::i;:::-;32212:11;:28;;;;32141:107:::0;:::o;15031:31::-;;;;:::o;31175:347::-;5158:13;:11;:13::i;:::-;31285:4:::1;31267:23;;:6;:23;;;;:44;;;;;31304:7;;;;;;;;;;;31294:17;;:6;:17;;;;31267:44;31259:53;;;::::0;::::1;;31348:6;31323:14;:22;31338:6;31323:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;31369:6;31365:150;;;31392:11;;;;;;;;;;;:20;;;31413:6;31421:1;31392:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31365:150;;;31456:11;;;;;;;;;;;:20;;;31477:6;31485:9;:17;31495:6;31485:17;;;;;;;;;;;;;;;;31456:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31365:150;31175:347:::0;;:::o;32377:643::-;5158:13;:11;:13::i;:::-;32602:14:::1;32582:17;:34;;;;32643:10;32627:13;:26;;;;32677:7;32664:10;:20;;;;32713:12;32695:15;:30;;;;32755:13;32736:16;:32;;;;32793:138;32918:12;32793:106;32885:13;32793:73;32858:7;32793:46;32828:10;32794:14;32793:34;;:46;;;;:::i;:::-;:64;;:73;;;;:::i;:::-;:91;;:106;;;;:::i;:::-;:124;;:138;;;;:::i;:::-;32779:11;:152;;;;32965:17;32980:1;32965:10;;:14;;:17;;;;:::i;:::-;32950:11;;:32;;32942:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32377:643:::0;;;;;:::o;31672:166::-;5158:13;:11;:13::i;:::-;31825:5:::1;31792:21;:30;31814:7;31792:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31672:166:::0;;:::o;20561:177::-;20666:4;20690:40;20700:10;20712:9;20723:6;20690:9;:40::i;:::-;20683:47;;20561:177;;;;:::o;29255:86::-;29298:11;;;;;;;;;;;:23;;;29322:10;29298:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29255:86::o;15145:36::-;;;;;;;;;;;;;:::o;30404:115::-;5158:13;:11;:13::i;:::-;30480:10:::1;30472:28;;:39;30501:9;30472:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30404:115:::0;:::o;14860:29::-;;;;;;;;;;;;;:::o;19683:172::-;19792:7;19819:11;:19;19831:6;19819:19;;;;;;;;;;;;;;;:28;19839:7;19819:28;;;;;;;;;;;;;;;;19812:35;;19683:172;;;;:::o;16394:39::-;;;;:::o;16122:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;30223:173::-;5158:13;:11;:13::i;:::-;30363:25:::1;30336:24;:52;;;;30223:173:::0;:::o;6176:238::-;5158:13;:11;:13::i;:::-;6299:1:::1;6279:22;;:8;:22;;;;6257:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6378:28;6397:8;6378:18;:28::i;:::-;6176:238:::0;:::o;14745:24::-;;;;;;;;;;;;;:::o;37396:98::-;37454:7;37485:1;37481;:5;;;;:::i;:::-;37474:12;;37396:98;;;;:::o;37290:::-;37348:7;37379:1;37375;:5;;;;:::i;:::-;37368:12;;37290:98;;;;:::o;5437:130::-;5512:10;5501:21;;:7;:5;:7::i;:::-;:21;;;5493:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5437:130::o;37608:240::-;37728:7;37786:1;37781;:6;;37789:12;37773:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;37828:1;37824;:5;37817:12;;37608:240;;;;;:::o;21351:2542::-;21473:4;21495:21;:32;21517:9;21495:32;;;;;;;;;;;;;;;;;;;;;;;;;21490:198;;21606:12;;21570:32;21581:20;21591:9;21581;:20::i;:::-;21570:6;:10;;:32;;;;:::i;:::-;:48;;21544:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;21490:198;21717:21;:29;21739:6;21717:29;;;;;;;;;;;;;;;;;;;;;;;;;21716:30;:67;;;;;21751:21;:32;21773:9;21751:32;;;;;;;;;;;;;;;;;;;;;;;;;21750:33;21716:67;21698:187;;;21828:11;;21818:6;:21;;21810:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21698:187;21899:6;;;;;;;;;;;21895:88;;;21929:42;21945:6;21953:9;21964:6;21929:15;:42::i;:::-;21922:49;;;;21895:88;21999:12;:10;:12::i;:::-;21995:55;;;22028:10;:8;:10::i;:::-;21995:55;22082:90;22118:6;22082:90;;;;;;;;;;;;;;;;;:9;:17;22092:6;22082:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;22062:9;:17;22072:6;22062:17;;;;;;;;;;;;;;;:110;;;;22185:22;22236:11;:19;22248:6;22236:19;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;22272:11;:22;22284:9;22272:22;;;;;;;;;;;;;;;;;;;;;;;;;22236:58;:118;;;;22322:7;;;;;;;;;;;22312:17;;:6;:17;;;;:41;;;;;22346:7;;;;;;;;;;;22333:20;;:9;:20;;;;22312:41;22236:118;22218:787;;;22398:6;22381:23;;22218:787;;;22437:17;22483:7;;;;;;;;;;;22473:17;;:6;:17;;;22469:253;;;22523:39;22551:10;;22523:23;22534:11;;22523:6;:10;;:23;;;;:::i;:::-;:27;;:39;;;;:::i;:::-;22511:51;;22598:21;22609:9;22598:6;:10;;:21;;;;:::i;:::-;22581:38;;22638:27;22647:6;22655:9;22638:8;:27::i;:::-;22684:22;22699:6;22684:14;:22::i;:::-;22469:253;22753:7;;;;;;;;;;;22740:20;;:9;:20;;;22736:258;;;22793:40;22822:10;;22793:24;22804:12;;22793:6;:10;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;22781:52;;22869:21;22880:9;22869:6;:10;;:21;;;;:::i;:::-;22852:38;;22909:27;22918:6;22926:9;22909:8;:27::i;:::-;22955:23;22971:6;22955:15;:23::i;:::-;22736:258;22422:583;22218:787;23040:40;23065:14;23040:9;:20;23050:9;23040:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;23017:9;:20;23027:9;23017:20;;;;;;;;;;;;;;;:63;;;;23098:14;:22;23113:6;23098:22;;;;;;;;;;;;;;;;;;;;;;;;;23093:292;;23164:24;;23142:17;23152:6;23142:9;:17::i;:::-;23141:47;23137:237;;23213:11;;;;;;;;;;;:20;;;23234:6;23242:9;:17;23252:6;23242:17;;;;;;;;;;;;;;;;23213:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23209:63;;;;;;23137:237;;;23316:11;;;;;;;;;;;:20;;;23337:6;23345:1;23316:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23312:47;;;;;;23137:237;23093:292;23400:14;:25;23415:9;23400:25;;;;;;;;;;;;;;;;;;;;;;;;;23395:345;;23472:24;;23447:20;23457:9;23447;:20::i;:::-;23446:50;23442:287;;23542:11;;;;;;;;;;;:20;;;23563:9;23574;:20;23584:9;23574:20;;;;;;;;;;;;;;;;23542:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23517:107;;;;;;23442:287;;;23668:11;;;;;;;;;;;:20;;;23689:9;23700:1;23668:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23664:50;;;;;;23442:287;23395:345;23756:11;;;;;;;;;;;:19;;;23776:14;;23756:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23752:51;;;;;;23837:9;23820:43;;23829:6;23820:43;;;23848:14;23820:43;;;;;;:::i;:::-;;;;;;;;23881:4;23874:11;;;21351:2542;;;;;;:::o;37078:98::-;37136:7;37167:1;37163;:5;;;;:::i;:::-;37156:12;;37078:98;;;;:::o;23971:402::-;24099:4;24136:90;24172:6;24136:90;;;;;;;;;;;;;;;;;:9;:17;24146:6;24136:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;24116:9;:17;24126:6;24116:17;;;;;;;;;;;;;;;:110;;;;24260:32;24285:6;24260:9;:20;24270:9;24260:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24237:9;:20;24247:9;24237:20;;;;;;;;;;;;;;;:55;;;;24325:9;24308:35;;24317:6;24308:35;;;24336:6;24308:35;;;;;;:::i;:::-;;;;;;;;24361:4;24354:11;;23971:402;;;;;:::o;6574:191::-;6648:16;6667:6;;;;;;;;;;;6648:25;;6693:8;6684:6;;:17;;;;;;;;;;;;;;;;;;6748:8;6717:40;;6738:8;6717:40;;;;;;;;;;;;6637:128;6574:191;:::o;26085:205::-;26130:4;26169:7;;;;;;;;;;;26155:21;;:10;:21;;;;:45;;;;;26194:6;;;;;;;;;;;26193:7;26155:45;:72;;;;;26217:10;;;;;;;;;;;26155:72;:126;;;;;26272:9;;26244;:24;26262:4;26244:24;;;;;;;;;;;;;;;;:37;;26155:126;26147:135;;26085:205;:::o;26349:2833::-;16502:4;16493:6;;:13;;;;;;;;;;;;;;;;;;26398:16:::1;26417:171;26567:20;;26417:131;26528:19;;26417:92;26494:14;;26417:58;26457:17;;26417:21;;:39;;:58;;;;:::i;:::-;:76;;:92;;;;:::i;:::-;:110;;:131;;;;:::i;:::-;:149;;:171;;;;:::i;:::-;26398:190;;26614:1;26603:8;:12;26599:2576;;;26632:23;26658:110;26766:1;26658:85;26734:8;26658:53;26690:20;;26658:9;;:31;;:53;;;;:::i;:::-;:75;;:85;;;;:::i;:::-;:107;;:110;;;;:::i;:::-;26632:136;;26785:20;26808:30;26822:15;26808:9;;:13;;:30;;;;:::i;:::-;26785:53;;26855:21;26893:1;26879:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26855:40;;26928:4;26910;26915:1;26910:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26958:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26948:4;26953:1;26948:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26986:21;27010;26986:45;;27048:6;;;;;;;;;;;:57;;;27124:12;27155:1;27175:4;27206;27230:15;27048:212;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27277:17;27297:40;27323:13;27297:21;:25;;:40;;;;:::i;:::-;27277:60;;27354:19;27376:41;27389:27;27414:1;27389:20;;:24;;:27;;;;:::i;:::-;27376:8;:12;;:41;;;;:::i;:::-;27354:63;;27434:28;27465:113;27576:1;27465:88;27541:11;27465:53;27497:20;;27465:9;:31;;:53;;;;:::i;:::-;:75;;:88;;;;:::i;:::-;:110;;:113;;;;:::i;:::-;27434:144;;27595:30;27628:86;27705:8;27628:54;27660:21;;27628:9;:31;;:54;;;;:::i;:::-;:76;;:86;;;;:::i;:::-;27595:119;;27729:26;27758:78;27813:8;27758:32;27772:17;;27758:9;:13;;:32;;;;:::i;:::-;:36;;:78;;;;:::i;:::-;27729:107;;27851:23;27877:75;27929:8;27877:29;27891:14;;27877:9;:13;;:29;;;;:::i;:::-;:33;;:75;;;;:::i;:::-;27851:101;;27967:28;27998:84;28073:8;27998:52;28030:19;;27998:9;:31;;:52;;;;:::i;:::-;:74;;:84;;;;:::i;:::-;27967:115;;28120:11;;;;;;;;;;;:22;;;28150;28120:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28099:101;;;;;;28239:1;28218:18;:22;28214:118;;;28269:17;;;;;;;;;;;28261:35;;:55;28297:18;28261:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28214:118;28370:1;28352:15;:19;28348:109;;;28400:14;;;;;;;;;;;28392:32;;:49;28425:15;28392:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28348:109;28498:1;28475:20;:24;28471:124;;;28528:19;;;;;;;;;;;28520:37;;:59;28558:20;28520:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28471:124;28633:1;28615:15;:19;28611:404;;;28655:6;;;;;;;;;;;:22;;;28685:20;28737:4;28765:15;28803:1;28827::::0;28851:17:::1;;;;;;;;;;;28891:15;28655:270;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28949:50;28961:20;28983:15;28949:50;;;;;;;:::i;:::-;;;;;;;;28611:404;29055:1;29031:21;:25;;;;29091:1;29071:17;:21;;;;29124:1;29107:14;:18;;;;29162:1;29140:19;:23;;;;26617:2558;;;;;;;;;;;26599:2576;26387:2795;16538:5:::0;16529:6;;:14;;;;;;;;;;;;;;;;;;26349:2833::o;37184:98::-;37242:7;37273:1;37269;:5;;;;:::i;:::-;37262:12;;37184:98;;;;:::o;24920:205::-;25020:39;25049:9;25020;:24;25038:4;25020:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;24993:9;:24;25011:4;24993:24;;;;;;;;;;;;;;;:66;;;;25100:4;25075:42;;25084:6;25075:42;;;25107:9;25075:42;;;;;;:::i;:::-;;;;;;;;24920:205;;:::o;25133:435::-;25218:46;25253:10;;25218:30;25230:17;;25218:7;:11;;:30;;;;:::i;:::-;:34;;:46;;;;:::i;:::-;25194:21;:70;;;;25295:42;25326:10;;25295:26;25307:13;;25295:7;:11;;:26;;;;:::i;:::-;:30;;:42;;;;:::i;:::-;25275:17;:62;;;;25365:39;25393:10;;25365:23;25377:10;;25365:7;:11;;:23;;;;:::i;:::-;:27;;:39;;;;:::i;:::-;25348:14;:56;;;;25437:44;25470:10;;25437:28;25449:15;;25437:7;:11;;:28;;;;:::i;:::-;:32;;:44;;;;:::i;:::-;25415:19;:66;;;;25515:45;25549:10;;25515:29;25527:16;;25515:7;:11;;:29;;;;:::i;:::-;:33;;:45;;;;:::i;:::-;25492:20;:68;;;;25133:435;:::o;25576:441::-;25662:47;25698:10;;25662:31;25674:18;;25662:7;:11;;:31;;;;:::i;:::-;:35;;:47;;;;:::i;:::-;25638:21;:71;;;;25740:43;25772:10;;25740:27;25752:14;;25740:7;:11;;:27;;;;:::i;:::-;:31;;:43;;;;:::i;:::-;25720:17;:63;;;;25811:40;25840:10;;25811:24;25823:11;;25811:7;:11;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;25794:14;:57;;;;25884:45;25918:10;;25884:29;25896:16;;25884:7;:11;;:29;;;;:::i;:::-;:33;;:45;;;;:::i;:::-;25862:19;:67;;;;25963:46;25998:10;;25963:30;25975:17;;25963:7;:11;;:30;;;;:::i;:::-;:34;;:46;;;;:::i;:::-;25940:20;:69;;;;25576:441;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:329::-;2290:6;2339:2;2327:9;2318:7;2314:23;2310:32;2307:119;;;2345:79;;:::i;:::-;2307:119;2465:1;2490:53;2535:7;2526:6;2515:9;2511:22;2490:53;:::i;:::-;2480:63;;2436:117;2231:329;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:118::-;4893:24;4911:5;4893:24;:::i;:::-;4888:3;4881:37;4806:118;;:::o;4930:222::-;5023:4;5061:2;5050:9;5046:18;5038:26;;5074:71;5142:1;5131:9;5127:17;5118:6;5074:71;:::i;:::-;4930:222;;;;:::o;5158:116::-;5228:21;5243:5;5228:21;:::i;:::-;5221:5;5218:32;5208:60;;5264:1;5261;5254:12;5208:60;5158:116;:::o;5280:133::-;5323:5;5361:6;5348:20;5339:29;;5377:30;5401:5;5377:30;:::i;:::-;5280:133;;;;:::o;5419:468::-;5484:6;5492;5541:2;5529:9;5520:7;5516:23;5512:32;5509:119;;;5547:79;;:::i;:::-;5509:119;5667:1;5692:53;5737:7;5728:6;5717:9;5713:22;5692:53;:::i;:::-;5682:63;;5638:117;5794:2;5820:50;5862:7;5853:6;5842:9;5838:22;5820:50;:::i;:::-;5810:60;;5765:115;5419:468;;;;;:::o;5893:86::-;5928:7;5968:4;5961:5;5957:16;5946:27;;5893:86;;;:::o;5985:112::-;6068:22;6084:5;6068:22;:::i;:::-;6063:3;6056:35;5985:112;;:::o;6103:214::-;6192:4;6230:2;6219:9;6215:18;6207:26;;6243:67;6307:1;6296:9;6292:17;6283:6;6243:67;:::i;:::-;6103:214;;;;:::o;6323:765::-;6409:6;6417;6425;6433;6482:3;6470:9;6461:7;6457:23;6453:33;6450:120;;;6489:79;;:::i;:::-;6450:120;6609:1;6634:53;6679:7;6670:6;6659:9;6655:22;6634:53;:::i;:::-;6624:63;;6580:117;6736:2;6762:53;6807:7;6798:6;6787:9;6783:22;6762:53;:::i;:::-;6752:63;;6707:118;6864:2;6890:53;6935:7;6926:6;6915:9;6911:22;6890:53;:::i;:::-;6880:63;;6835:118;6992:2;7018:53;7063:7;7054:6;7043:9;7039:22;7018:53;:::i;:::-;7008:63;;6963:118;6323:765;;;;;;;:::o;7094:911::-;7189:6;7197;7205;7213;7221;7270:3;7258:9;7249:7;7245:23;7241:33;7238:120;;;7277:79;;:::i;:::-;7238:120;7397:1;7422:53;7467:7;7458:6;7447:9;7443:22;7422:53;:::i;:::-;7412:63;;7368:117;7524:2;7550:53;7595:7;7586:6;7575:9;7571:22;7550:53;:::i;:::-;7540:63;;7495:118;7652:2;7678:53;7723:7;7714:6;7703:9;7699:22;7678:53;:::i;:::-;7668:63;;7623:118;7780:2;7806:53;7851:7;7842:6;7831:9;7827:22;7806:53;:::i;:::-;7796:63;;7751:118;7908:3;7935:53;7980:7;7971:6;7960:9;7956:22;7935:53;:::i;:::-;7925:63;;7879:119;7094:911;;;;;;;;:::o;8011:474::-;8079:6;8087;8136:2;8124:9;8115:7;8111:23;8107:32;8104:119;;;8142:79;;:::i;:::-;8104:119;8262:1;8287:53;8332:7;8323:6;8312:9;8308:22;8287:53;:::i;:::-;8277:63;;8233:117;8389:2;8415:53;8460:7;8451:6;8440:9;8436:22;8415:53;:::i;:::-;8405:63;;8360:118;8011:474;;;;;:::o;8491:329::-;8550:6;8599:2;8587:9;8578:7;8574:23;8570:32;8567:119;;;8605:79;;:::i;:::-;8567:119;8725:1;8750:53;8795:7;8786:6;8775:9;8771:22;8750:53;:::i;:::-;8740:63;;8696:117;8491:329;;;;:::o;8826:117::-;8935:1;8932;8925:12;8949:117;9058:1;9055;9048:12;9072:117;9181:1;9178;9171:12;9212:568;9285:8;9295:6;9345:3;9338:4;9330:6;9326:17;9322:27;9312:122;;9353:79;;:::i;:::-;9312:122;9466:6;9453:20;9443:30;;9496:18;9488:6;9485:30;9482:117;;;9518:79;;:::i;:::-;9482:117;9632:4;9624:6;9620:17;9608:29;;9686:3;9678:4;9670:6;9666:17;9656:8;9652:32;9649:41;9646:128;;;9693:79;;:::i;:::-;9646:128;9212:568;;;;;:::o;9803:::-;9876:8;9886:6;9936:3;9929:4;9921:6;9917:17;9913:27;9903:122;;9944:79;;:::i;:::-;9903:122;10057:6;10044:20;10034:30;;10087:18;10079:6;10076:30;10073:117;;;10109:79;;:::i;:::-;10073:117;10223:4;10215:6;10211:17;10199:29;;10277:3;10269:4;10261:6;10257:17;10247:8;10243:32;10240:41;10237:128;;;10284:79;;:::i;:::-;10237:128;9803:568;;;;;:::o;10377:934::-;10499:6;10507;10515;10523;10572:2;10560:9;10551:7;10547:23;10543:32;10540:119;;;10578:79;;:::i;:::-;10540:119;10726:1;10715:9;10711:17;10698:31;10756:18;10748:6;10745:30;10742:117;;;10778:79;;:::i;:::-;10742:117;10891:80;10963:7;10954:6;10943:9;10939:22;10891:80;:::i;:::-;10873:98;;;;10669:312;11048:2;11037:9;11033:18;11020:32;11079:18;11071:6;11068:30;11065:117;;;11101:79;;:::i;:::-;11065:117;11214:80;11286:7;11277:6;11266:9;11262:22;11214:80;:::i;:::-;11196:98;;;;10991:313;10377:934;;;;;;;:::o;11317:468::-;11382:6;11390;11439:2;11427:9;11418:7;11414:23;11410:32;11407:119;;;11445:79;;:::i;:::-;11407:119;11565:1;11590:50;11632:7;11623:6;11612:9;11608:22;11590:50;:::i;:::-;11580:60;;11536:114;11689:2;11715:53;11760:7;11751:6;11740:9;11736:22;11715:53;:::i;:::-;11705:63;;11660:118;11317:468;;;;;:::o;11791:60::-;11819:3;11840:5;11833:12;;11791:60;;;:::o;11857:142::-;11907:9;11940:53;11958:34;11967:24;11985:5;11967:24;:::i;:::-;11958:34;:::i;:::-;11940:53;:::i;:::-;11927:66;;11857:142;;;:::o;12005:126::-;12055:9;12088:37;12119:5;12088:37;:::i;:::-;12075:50;;12005:126;;;:::o;12137:151::-;12212:9;12245:37;12276:5;12245:37;:::i;:::-;12232:50;;12137:151;;;:::o;12294:181::-;12406:62;12462:5;12406:62;:::i;:::-;12401:3;12394:75;12294:181;;:::o;12481:272::-;12599:4;12637:2;12626:9;12622:18;12614:26;;12650:96;12743:1;12732:9;12728:17;12719:6;12650:96;:::i;:::-;12481:272;;;;:::o;12759:474::-;12827:6;12835;12884:2;12872:9;12863:7;12859:23;12855:32;12852:119;;;12890:79;;:::i;:::-;12852:119;13010:1;13035:53;13080:7;13071:6;13060:9;13056:22;13035:53;:::i;:::-;13025:63;;12981:117;13137:2;13163:53;13208:7;13199:6;13188:9;13184:22;13163:53;:::i;:::-;13153:63;;13108:118;12759:474;;;;;:::o;13239:143::-;13306:9;13339:37;13370:5;13339:37;:::i;:::-;13326:50;;13239:143;;;:::o;13388:165::-;13492:54;13540:5;13492:54;:::i;:::-;13487:3;13480:67;13388:165;;:::o;13559:256::-;13669:4;13707:2;13696:9;13692:18;13684:26;;13720:88;13805:1;13794:9;13790:17;13781:6;13720:88;:::i;:::-;13559:256;;;;:::o;13821:442::-;13970:4;14008:2;13997:9;13993:18;13985:26;;14021:71;14089:1;14078:9;14074:17;14065:6;14021:71;:::i;:::-;14102:72;14170:2;14159:9;14155:18;14146:6;14102:72;:::i;:::-;14184;14252:2;14241:9;14237:18;14228:6;14184:72;:::i;:::-;13821:442;;;;;;:::o;14269:180::-;14317:77;14314:1;14307:88;14414:4;14411:1;14404:15;14438:4;14435:1;14428:15;14455:102;14497:8;14544:5;14541:1;14537:13;14516:34;;14455:102;;;:::o;14563:848::-;14624:5;14631:4;14655:6;14646:15;;14679:5;14670:14;;14693:712;14714:1;14704:8;14701:15;14693:712;;;14809:4;14804:3;14800:14;14794:4;14791:24;14788:50;;;14818:18;;:::i;:::-;14788:50;14868:1;14858:8;14854:16;14851:451;;;15283:4;15276:5;15272:16;15263:25;;14851:451;15333:4;15327;15323:15;15315:23;;15363:32;15386:8;15363:32;:::i;:::-;15351:44;;14693:712;;;14563:848;;;;;;;:::o;15417:1073::-;15471:5;15662:8;15652:40;;15683:1;15674:10;;15685:5;;15652:40;15711:4;15701:36;;15728:1;15719:10;;15730:5;;15701:36;15797:4;15845:1;15840:27;;;;15881:1;15876:191;;;;15790:277;;15840:27;15858:1;15849:10;;15860:5;;;15876:191;15921:3;15911:8;15908:17;15905:43;;;15928:18;;:::i;:::-;15905:43;15977:8;15974:1;15970:16;15961:25;;16012:3;16005:5;16002:14;15999:40;;;16019:18;;:::i;:::-;15999:40;16052:5;;;15790:277;;16176:2;16166:8;16163:16;16157:3;16151:4;16148:13;16144:36;16126:2;16116:8;16113:16;16108:2;16102:4;16099:12;16095:35;16079:111;16076:246;;;16232:8;16226:4;16222:19;16213:28;;16267:3;16260:5;16257:14;16254:40;;;16274:18;;:::i;:::-;16254:40;16307:5;;16076:246;16347:42;16385:3;16375:8;16369:4;16366:1;16347:42;:::i;:::-;16332:57;;;;16421:4;16416:3;16412:14;16405:5;16402:25;16399:51;;;16430:18;;:::i;:::-;16399:51;16479:4;16472:5;16468:16;16459:25;;15417:1073;;;;;;:::o;16496:281::-;16554:5;16578:23;16596:4;16578:23;:::i;:::-;16570:31;;16622:25;16638:8;16622:25;:::i;:::-;16610:37;;16666:104;16703:66;16693:8;16687:4;16666:104;:::i;:::-;16657:113;;16496:281;;;;:::o;16783:348::-;16823:7;16846:20;16864:1;16846:20;:::i;:::-;16841:25;;16880:20;16898:1;16880:20;:::i;:::-;16875:25;;17068:1;17000:66;16996:74;16993:1;16990:81;16985:1;16978:9;16971:17;16967:105;16964:131;;;17075:18;;:::i;:::-;16964:131;17123:1;17120;17116:9;17105:20;;16783:348;;;;:::o;17137:143::-;17194:5;17225:6;17219:13;17210:22;;17241:33;17268:5;17241:33;:::i;:::-;17137:143;;;;:::o;17286:351::-;17356:6;17405:2;17393:9;17384:7;17380:23;17376:32;17373:119;;;17411:79;;:::i;:::-;17373:119;17531:1;17556:64;17612:7;17603:6;17592:9;17588:22;17556:64;:::i;:::-;17546:74;;17502:128;17286:351;;;;:::o;17643:175::-;17783:27;17779:1;17771:6;17767:14;17760:51;17643:175;:::o;17824:366::-;17966:3;17987:67;18051:2;18046:3;17987:67;:::i;:::-;17980:74;;18063:93;18152:3;18063:93;:::i;:::-;18181:2;18176:3;18172:12;18165:19;;17824:366;;;:::o;18196:419::-;18362:4;18400:2;18389:9;18385:18;18377:26;;18449:9;18443:4;18439:20;18435:1;18424:9;18420:17;18413:47;18477:131;18603:4;18477:131;:::i;:::-;18469:139;;18196:419;;;:::o;18621:332::-;18742:4;18780:2;18769:9;18765:18;18757:26;;18793:71;18861:1;18850:9;18846:17;18837:6;18793:71;:::i;:::-;18874:72;18942:2;18931:9;18927:18;18918:6;18874:72;:::i;:::-;18621:332;;;;;:::o;18959:179::-;19099:31;19095:1;19087:6;19083:14;19076:55;18959:179;:::o;19144:366::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:419::-;19682:4;19720:2;19709:9;19705:18;19697:26;;19769:9;19763:4;19759:20;19755:1;19744:9;19740:17;19733:47;19797:131;19923:4;19797:131;:::i;:::-;19789:139;;19516:419;;;:::o;19941:175::-;20081:27;20077:1;20069:6;20065:14;20058:51;19941:175;:::o;20122:366::-;20264:3;20285:67;20349:2;20344:3;20285:67;:::i;:::-;20278:74;;20361:93;20450:3;20361:93;:::i;:::-;20479:2;20474:3;20470:12;20463:19;;20122:366;;;:::o;20494:419::-;20660:4;20698:2;20687:9;20683:18;20675:26;;20747:9;20741:4;20737:20;20733:1;20722:9;20718:17;20711:47;20775:131;20901:4;20775:131;:::i;:::-;20767:139;;20494:419;;;:::o;20919:180::-;20967:77;20964:1;20957:88;21064:4;21061:1;21054:15;21088:4;21085:1;21078:15;21105:305;21145:3;21164:20;21182:1;21164:20;:::i;:::-;21159:25;;21198:20;21216:1;21198:20;:::i;:::-;21193:25;;21352:1;21284:66;21280:74;21277:1;21274:81;21271:107;;;21358:18;;:::i;:::-;21271:107;21402:1;21399;21395:9;21388:16;;21105:305;;;;:::o;21416:85::-;21461:7;21490:5;21479:16;;21416:85;;;:::o;21507:158::-;21565:9;21598:61;21616:42;21625:32;21651:5;21625:32;:::i;:::-;21616:42;:::i;:::-;21598:61;:::i;:::-;21585:74;;21507:158;;;:::o;21671:147::-;21766:45;21805:5;21766:45;:::i;:::-;21761:3;21754:58;21671:147;;:::o;21824:348::-;21953:4;21991:2;21980:9;21976:18;21968:26;;22004:71;22072:1;22061:9;22057:17;22048:6;22004:71;:::i;:::-;22085:80;22161:2;22150:9;22146:18;22137:6;22085:80;:::i;:::-;21824:348;;;;;:::o;22178:332::-;22299:4;22337:2;22326:9;22322:18;22314:26;;22350:71;22418:1;22407:9;22403:17;22394:6;22350:71;:::i;:::-;22431:72;22499:2;22488:9;22484:18;22475:6;22431:72;:::i;:::-;22178:332;;;;;:::o;22516:225::-;22656:34;22652:1;22644:6;22640:14;22633:58;22725:8;22720:2;22712:6;22708:15;22701:33;22516:225;:::o;22747:366::-;22889:3;22910:67;22974:2;22969:3;22910:67;:::i;:::-;22903:74;;22986:93;23075:3;22986:93;:::i;:::-;23104:2;23099:3;23095:12;23088:19;;22747:366;;;:::o;23119:419::-;23285:4;23323:2;23312:9;23308:18;23300:26;;23372:9;23366:4;23362:20;23358:1;23347:9;23343:17;23336:47;23400:131;23526:4;23400:131;:::i;:::-;23392:139;;23119:419;;;:::o;23544:180::-;23592:77;23589:1;23582:88;23689:4;23686:1;23679:15;23713:4;23710:1;23703:15;23730:185;23770:1;23787:20;23805:1;23787:20;:::i;:::-;23782:25;;23821:20;23839:1;23821:20;:::i;:::-;23816:25;;23860:1;23850:35;;23865:18;;:::i;:::-;23850:35;23907:1;23904;23900:9;23895:14;;23730:185;;;;:::o;23921:182::-;24061:34;24057:1;24049:6;24045:14;24038:58;23921:182;:::o;24109:366::-;24251:3;24272:67;24336:2;24331:3;24272:67;:::i;:::-;24265:74;;24348:93;24437:3;24348:93;:::i;:::-;24466:2;24461:3;24457:12;24450:19;;24109:366;;;:::o;24481:419::-;24647:4;24685:2;24674:9;24670:18;24662:26;;24734:9;24728:4;24724:20;24720:1;24709:9;24705:17;24698:47;24762:131;24888:4;24762:131;:::i;:::-;24754:139;;24481:419;;;:::o;24906:172::-;25046:24;25042:1;25034:6;25030:14;25023:48;24906:172;:::o;25084:366::-;25226:3;25247:67;25311:2;25306:3;25247:67;:::i;:::-;25240:74;;25323:93;25412:3;25323:93;:::i;:::-;25441:2;25436:3;25432:12;25425:19;;25084:366;;;:::o;25456:419::-;25622:4;25660:2;25649:9;25645:18;25637:26;;25709:9;25703:4;25699:20;25695:1;25684:9;25680:17;25673:47;25737:131;25863:4;25737:131;:::i;:::-;25729:139;;25456:419;;;:::o;25881:179::-;26021:31;26017:1;26009:6;26005:14;25998:55;25881:179;:::o;26066:366::-;26208:3;26229:67;26293:2;26288:3;26229:67;:::i;:::-;26222:74;;26305:93;26394:3;26305:93;:::i;:::-;26423:2;26418:3;26414:12;26407:19;;26066:366;;;:::o;26438:419::-;26604:4;26642:2;26631:9;26627:18;26619:26;;26691:9;26685:4;26681:20;26677:1;26666:9;26662:17;26655:47;26719:131;26845:4;26719:131;:::i;:::-;26711:139;;26438:419;;;:::o;26863:180::-;26911:77;26908:1;26901:88;27008:4;27005:1;26998:15;27032:4;27029:1;27022:15;27049:143;27106:5;27137:6;27131:13;27122:22;;27153:33;27180:5;27153:33;:::i;:::-;27049:143;;;;:::o;27198:351::-;27268:6;27317:2;27305:9;27296:7;27292:23;27288:32;27285:119;;;27323:79;;:::i;:::-;27285:119;27443:1;27468:64;27524:7;27515:6;27504:9;27500:22;27468:64;:::i;:::-;27458:74;;27414:128;27198:351;;;;:::o;27555:114::-;27622:6;27656:5;27650:12;27640:22;;27555:114;;;:::o;27675:184::-;27774:11;27808:6;27803:3;27796:19;27848:4;27843:3;27839:14;27824:29;;27675:184;;;;:::o;27865:132::-;27932:4;27955:3;27947:11;;27985:4;27980:3;27976:14;27968:22;;27865:132;;;:::o;28003:108::-;28080:24;28098:5;28080:24;:::i;:::-;28075:3;28068:37;28003:108;;:::o;28117:179::-;28186:10;28207:46;28249:3;28241:6;28207:46;:::i;:::-;28285:4;28280:3;28276:14;28262:28;;28117:179;;;;:::o;28302:113::-;28372:4;28404;28399:3;28395:14;28387:22;;28302:113;;;:::o;28451:732::-;28570:3;28599:54;28647:5;28599:54;:::i;:::-;28669:86;28748:6;28743:3;28669:86;:::i;:::-;28662:93;;28779:56;28829:5;28779:56;:::i;:::-;28858:7;28889:1;28874:284;28899:6;28896:1;28893:13;28874:284;;;28975:6;28969:13;29002:63;29061:3;29046:13;29002:63;:::i;:::-;28995:70;;29088:60;29141:6;29088:60;:::i;:::-;29078:70;;28934:224;28921:1;28918;28914:9;28909:14;;28874:284;;;28878:14;29174:3;29167:10;;28575:608;;;28451:732;;;;:::o;29189:831::-;29452:4;29490:3;29479:9;29475:19;29467:27;;29504:71;29572:1;29561:9;29557:17;29548:6;29504:71;:::i;:::-;29585:80;29661:2;29650:9;29646:18;29637:6;29585:80;:::i;:::-;29712:9;29706:4;29702:20;29697:2;29686:9;29682:18;29675:48;29740:108;29843:4;29834:6;29740:108;:::i;:::-;29732:116;;29858:72;29926:2;29915:9;29911:18;29902:6;29858:72;:::i;:::-;29940:73;30008:3;29997:9;29993:19;29984:6;29940:73;:::i;:::-;29189:831;;;;;;;;:::o;30026:807::-;30275:4;30313:3;30302:9;30298:19;30290:27;;30327:71;30395:1;30384:9;30380:17;30371:6;30327:71;:::i;:::-;30408:72;30476:2;30465:9;30461:18;30452:6;30408:72;:::i;:::-;30490:80;30566:2;30555:9;30551:18;30542:6;30490:80;:::i;:::-;30580;30656:2;30645:9;30641:18;30632:6;30580:80;:::i;:::-;30670:73;30738:3;30727:9;30723:19;30714:6;30670:73;:::i;:::-;30753;30821:3;30810:9;30806:19;30797:6;30753:73;:::i;:::-;30026:807;;;;;;;;;:::o;30839:663::-;30927:6;30935;30943;30992:2;30980:9;30971:7;30967:23;30963:32;30960:119;;;30998:79;;:::i;:::-;30960:119;31118:1;31143:64;31199:7;31190:6;31179:9;31175:22;31143:64;:::i;:::-;31133:74;;31089:128;31256:2;31282:64;31338:7;31329:6;31318:9;31314:22;31282:64;:::i;:::-;31272:74;;31227:129;31395:2;31421:64;31477:7;31468:6;31457:9;31453:22;31421:64;:::i;:::-;31411:74;;31366:129;30839:663;;;;;:::o;31508:191::-;31548:4;31568:20;31586:1;31568:20;:::i;:::-;31563:25;;31602:20;31620:1;31602:20;:::i;:::-;31597:25;;31641:1;31638;31635:8;31632:34;;;31646:18;;:::i;:::-;31632:34;31691:1;31688;31684:9;31676:17;;31508:191;;;;:::o

Swarm Source

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