false
true
0

Contract Address Details

0x1Ce712b990F0Eb66e274057bea5365aCB597F038

Token
Prime Ape (PrimeApe)
Creator
0x7740cd–b98918 at 0x4d2990–af6e5c
Balance
22,774,981.83967818787323264 PLS ( )
Tokens
Fetching tokens...
Transactions
1,473 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25903859
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
PrimeApe




Optimization enabled
false
Compiler version
v0.8.19+commit.7dd6d404




EVM Version
default




Verified at
2023-11-02T00:41:17.349197Z

Contract source code

// SPDX-License-Identifier: MIT
// Prime Ape Token

pragma solidity 0.8.19;


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

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

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

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

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

/**
 * BEP20 standard interface.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IERC20 RWRD = IERC20(0xb17D901469B9208B17d916112988A3FeD19b5cA1);
    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

    // minDistribution is the minimum amount that can be distributed in a single transaction.
    uint256 public minDistribution = 1 * (10 ** 5);

    uint256 currentIndex;

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

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

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        _token = msg.sender;
    }

    function setDistributionCriteria(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){
            distributeDividend(shareholder);
        }

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

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

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

        address[] memory path = new address[](2);
        path[0] = WPLS;
        path[1] = address(RWRD);

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

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

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

    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])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

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

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RWRD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        distributeDividend(msg.sender);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

contract PrimeApe is IERC20, Auth {
    using SafeMath for uint256;

    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Prime Ape";
    string constant _symbol = "PrimeApe";
    uint8 constant _decimals = 10;

    uint256 _totalSupply = 200_000_000_000 * (10**_decimals);

    uint256 public _maxTxAmount = _totalSupply.div(10);

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

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

    uint256 public marketingFee    = 100;
    uint256 public liquidityFee    = 100; 
    uint256 public burnFee         = 100; 
    uint256 public reflectionFee   = 400; 
    uint256 public totalFee        = burnFee + liquidityFee + reflectionFee + marketingFee;
    uint256 public feeDenominator  = 10000; // Using larger denominator for lower fees

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    IDEXRouter public router2;
    address public pair2;

    DividendDistributor public distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = 1000000 * 10**_decimals; // 1000000

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

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        router2 = IDEXRouter(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
        pair2 = IDEXFactory(router2.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router2)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;

        marketingFeeReceiver = msg.sender;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

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

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

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

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

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

        return _transferFrom(sender, recipient, amount);
    }

    

      function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 10000000000000);
        _maxTxAmount = amount;
    }



    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        // Checks max transaction limit
        checkTxLimit(sender, amount);
        uint256 amountReceived;
        address routerAddress = address(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        address routerAddress2 = address(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
        if(sender == pair || recipient == pair || sender == address(router) || recipient == address(router) || 
        recipient == routerAddress || sender == routerAddress ||
         recipient == routerAddress2 || sender == routerAddress2 || sender == address(router2) || recipient == address(router2) || 
         sender == pair2 || recipient == pair2 ){
                if(shouldSwapBack()){ swapBack(); }
                
                //Exchange tokens
            
                _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

                amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
                _balances[recipient] = _balances[recipient].add(amountReceived);
        }else{
                
                //Exchange tokens
            
                _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

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

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

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

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(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 checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = amount.mul(totalFee.sub(burnFee)).div(feeDenominator);
        uint256 burnAmount = amount.mul(burnFee).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        _balances[DEAD] = _balances[DEAD].add(burnAmount);
        emit Transfer(sender, address(this), feeAmount);
        emit Transfer(sender, DEAD, burnAmount);

        return amount.sub(feeAmount.add(burnAmount));
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WPLS;

        uint256 balanceBefore = address(this).balance;

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

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

        uint256 totalPLSFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountPLSMarketing = amountPLS.mul(marketingFee).div( totalPLSFee );
        uint256 amountPLSLiquidity = amountPLS.mul(dynamicLiquidityFee).div(totalPLSFee).div(2);
        uint256 amountPLSReflection = amountPLS.mul(reflectionFee).div(totalPLSFee);

        try distributor.deposit{value: amountPLSReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountPLSMarketing);

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

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

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

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee,uint256 _marketingFee,  uint256 _reflectionFee, uint256 _burnFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        burnFee = _burnFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_burnFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(totalFee <=  _feeDenominator /4 );

       
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

   
    
    
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

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

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

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

event AutoLiquify(uint256 amountPLS, uint256 amountBOG);

}        
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountPLS","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"burnFee","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingFeeReceiver","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router2","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"},{"type":"address","name":"_marketingFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_burnFee","internalType":"uint256"},{"type":"uint256","name":"_feeDenominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTimelockExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTxLimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a80620000ed919062000edb565b642e90edd000620000ff919062000f2c565b6005556200011a600a60055462000c7960201b90919060201c565b6006556064600d556064600e556064600f55610190601055600d54601054600e54600f546200014a919062000f77565b62000156919062000f77565b62000162919062000f77565b601155612710601255601460155560646016556207a120601c556001601d60006101000a81548160ff021916908315150217905550600a80620001a6919062000edb565b620f4240620001b6919062000f2c565b601e55348015620001c657600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505073165c3410fc91ef562c50559f7d2289febed552d9601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034991906200101c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620003a79291906200105f565b6020604051808303816000875af1158015620003c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ed91906200101c565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d991906200101c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620006379291906200105f565b6020604051808303816000875af115801562000657573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200067d91906200101c565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620007b19062000d33565b620007bd91906200108c565b604051809103906000f080158015620007da573d6000803e3d6000fd5b50601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600554600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055460405162000c6b9190620010ba565b60405180910390a3620011fc565b600062000cc383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ccb60201b60201c565b905092915050565b6000808311829062000d15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0c919062001171565b60405180910390fd5b506000838562000d269190620011c4565b9050809150509392505050565b611fde806200547083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dcf5780860481111562000da75762000da662000d41565b5b600185161562000db75780820291505b808102905062000dc78562000d70565b945062000d87565b94509492505050565b60008262000dea576001905062000ebd565b8162000dfa576000905062000ebd565b816001811462000e13576002811462000e1e5762000e54565b600191505062000ebd565b60ff84111562000e335762000e3262000d41565b5b8360020a91508482111562000e4d5762000e4c62000d41565b5b5062000ebd565b5060208310610133831016604e8410600b841016171562000e8e5782820a90508381111562000e885762000e8762000d41565b5b62000ebd565b62000e9d848484600162000d7d565b9250905081840481111562000eb75762000eb662000d41565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ee88262000ec4565b915062000ef58362000ece565b925062000f247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dd8565b905092915050565b600062000f398262000ec4565b915062000f468362000ec4565b925082820262000f568162000ec4565b9150828204841483151762000f705762000f6f62000d41565b5b5092915050565b600062000f848262000ec4565b915062000f918362000ec4565b925082820190508082111562000fac5762000fab62000d41565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fe48262000fb7565b9050919050565b62000ff68162000fd7565b81146200100257600080fd5b50565b600081519050620010168162000feb565b92915050565b60006020828403121562001035576200103462000fb2565b5b6000620010458482850162001005565b91505092915050565b620010598162000fd7565b82525050565b60006040820190506200107660008301856200104e565b6200108560208301846200104e565b9392505050565b6000602082019050620010a360008301846200104e565b92915050565b620010b48162000ec4565b82525050565b6000602082019050620010d16000830184620010a9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562001113578082015181840152602081019050620010f6565b60008484015250505050565b6000601f19601f8301169050919050565b60006200113d82620010d7565b620011498185620010e2565b93506200115b818560208601620010f3565b62001166816200111f565b840191505092915050565b600060208201905081810360008301526200118d818462001130565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011d18262000ec4565b9150620011de8362000ec4565b925082620011f157620011f062001195565b5b828204905092915050565b614264806200120c6000396000f3fe6080604052600436106102815760003560e01c80637d1db4a51161014f578063ca33e64c116100c1578063f2fde38b1161007a578063f2fde38b146109d1578063f708a64f146109fa578063f84ba65d14610a23578063f887ea4014610a4c578063fce589d814610a77578063fe9fbb8014610aa257610288565b8063ca33e64c146108af578063d51ed1c8146108da578063dd62ed3e14610917578063df20fd4914610954578063e96fada21461097d578063f0b37c04146109a857610288565b80639d1944f5116101135780639d1944f5146107a1578063a4b45c00146107ca578063a8aa1b31146107f3578063a9059cbb1461081e578063b6a5d7de1461085b578063bfe109281461088457610288565b80637d1db4a5146106ca57806383ad7994146106f5578063893d20e81461072057806395d89b411461074b57806398118cb41461077657610288565b80632d48e896116101f3578063658d4b7f116101ac578063658d4b7f146105b85780636b67c4df146105e15780636ddd17131461060c57806370a0823114610637578063762816d614610674578063763014c71461069f57610288565b80632d48e896146104985780632f54bf6e146104c1578063313ce567146104fe57806350db71fb14610529578063571ac8b0146105525780635c85974f1461058f57610288565b8063180b0d7e11610245578063180b0d7e1461038657806318160ddd146103b15780631df4ccfc146103dc578063201e79911461040757806323b872dd146104305780632b112e491461046d57610288565b80630445b6671461028d57806304a66b48146102b857806306fdde03146102e1578063095ea7b31461030c5780631161ae391461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610adf565b6040516102af91906135da565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613626565b610ae5565b005b3480156102ed57600080fd5b506102f6610baf565b6040516103039190613731565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e91906137b1565b610bec565b604051610340919061380c565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613827565b610cde565b60405161037d919061380c565b60405180910390f35b34801561039257600080fd5b5061039b610cf3565b6040516103a891906135da565b60405180910390f35b3480156103bd57600080fd5b506103c6610cf9565b6040516103d391906135da565b60405180910390f35b3480156103e857600080fd5b506103f1610d03565b6040516103fe91906135da565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190613827565b610d09565b005b34801561043c57600080fd5b5061045760048036038101906104529190613867565b610d63565b604051610464919061380c565b60405180910390f35b34801561047957600080fd5b50610482610f63565b60405161048f91906135da565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613827565b610fe5565b005b3480156104cd57600080fd5b506104e860048036038101906104e391906138ba565b6110c0565b6040516104f5919061380c565b60405180910390f35b34801561050a57600080fd5b50610513611119565b6040516105209190613903565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b919061394a565b611122565b005b34801561055e57600080fd5b50610579600480360381019061057491906138ba565b6111c5565b604051610586919061380c565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061398a565b6111f8565b005b3480156105c457600080fd5b506105df60048036038101906105da919061394a565b61126a565b005b3480156105ed57600080fd5b506105f661130d565b60405161060391906135da565b60405180910390f35b34801561061857600080fd5b50610621611313565b60405161062e919061380c565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906138ba565b611326565b60405161066b91906135da565b60405180910390f35b34801561068057600080fd5b5061068961136f565b6040516106969190613a16565b60405180910390f35b3480156106ab57600080fd5b506106b4611395565b6040516106c19190613a40565b60405180910390f35b3480156106d657600080fd5b506106df6113bb565b6040516106ec91906135da565b60405180910390f35b34801561070157600080fd5b5061070a6113c1565b60405161071791906135da565b60405180910390f35b34801561072c57600080fd5b506107356113c7565b6040516107429190613a40565b60405180910390f35b34801561075757600080fd5b506107606113f0565b60405161076d9190613731565b60405180910390f35b34801561078257600080fd5b5061078b61142d565b60405161079891906135da565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c3919061398a565b611433565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613a5b565b611494565b005b3480156107ff57600080fd5b50610808611562565b6040516108159190613a40565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906137b1565b611588565b604051610852919061380c565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d91906138ba565b61159d565b005b34801561089057600080fd5b5061089961163f565b6040516108a69190613abc565b60405180910390f35b3480156108bb57600080fd5b506108c4611665565b6040516108d19190613a40565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc919061398a565b61168b565b60405161090e91906135da565b60405180910390f35b34801561092357600080fd5b5061093e60048036038101906109399190613a5b565b6116fd565b60405161094b91906135da565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190613ad7565b611784565b005b34801561098957600080fd5b506109926117f1565b60405161099f9190613a40565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca91906138ba565b611817565b005b3480156109dd57600080fd5b506109f860048036038101906109f39190613b55565b6118ba565b005b348015610a0657600080fd5b50610a216004803603810190610a1c919061394a565b6119d3565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a45919061394a565b611c73565b005b348015610a5857600080fd5b50610a61611d16565b604051610a6e9190613a16565b60405180910390f35b348015610a8357600080fd5b50610a8c611d3c565b604051610a9991906135da565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac491906138ba565b611d42565b604051610ad6919061380c565b60405180910390f35b601e5481565b610aee33611d42565b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613bce565b60405180910390fd5b84600e819055508260108190555083600d8190555081600f81905550610b8084610b7284610b64878a611d9890919063ffffffff16565b611d9890919063ffffffff16565b611d9890919063ffffffff16565b60118190555080601281905550600481610b9a9190613c4c565b6011541115610ba857600080fd5b5050505050565b60606040518060400160405280600981526020017f5072696d65204170650000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ccc91906135da565b60405180910390a36001905092915050565b600082610cea8361168b565b11905092915050565b60125481565b6000600554905090565b60115481565b610d1233611d42565b610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890613bce565b60405180910390fd5b81601581905550806016819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f4f57610ece826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f5a848484611e5a565b90509392505050565b6000610fe0610f93600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611326565b610fd2610fc1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611326565b60055461288890919063ffffffff16565b61288890919063ffffffff16565b905090565b610fee33611d42565b61102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613bce565b60405180910390fd5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161108a929190613c7d565b600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600a905090565b61112b33611d42565b61116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613bce565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111f1827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bec565b9050919050565b61120133611d42565b611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613bce565b60405180910390fd5b6509184e72a0006005546112549190613c4c565b81101561126057600080fd5b8060068190555050565b61127333611d42565b6112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990613bce565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b601d60009054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f5072696d65417065000000000000000000000000000000000000000000000000815250905090565b600e5481565b61143c33611d42565b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290613bce565b60405180910390fd5b620b71b0811061148a57600080fd5b80601c8190555050565b61149d33611d42565b6114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390613bce565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611595338484611e5a565b905092915050565b6115a6336110c0565b6115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90613cf2565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f6611698610f63565b6116e86116d960026116cb601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611326565b6128d290919063ffffffff16565b856128d290919063ffffffff16565b61294c90919063ffffffff16565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61178d33611d42565b6117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c390613bce565b60405180910390fd5b81601d60006101000a81548160ff02191690831515021790555080601e819055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611820336110c0565b61185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613cf2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118c3336110c0565b611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990613cf2565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516119c89190613d33565b60405180910390a150565b6119dc33611d42565b611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1290613bce565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611aa55750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611aae57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611ba057601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611b69929190613d89565b600060405180830381600087803b158015611b8357600080fd5b505af1158015611b97573d6000803e3d6000fd5b50505050611c6f565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c3c929190613db2565b600060405180830381600087803b158015611c5657600080fd5b505af1158015611c6a573d6000803e3d6000fd5b505050505b5050565b611c7c33611d42565b611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613bce565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808284611da79190613ddb565b905083811015611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390613e5b565b60405180910390fd5b8091505092915050565b6000838311158290611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e359190613731565b60405180910390fd5b5060008385611e4d9190613e7b565b9050809150509392505050565b6000601f60009054906101000a900460ff1615611e8357611e7c848484612996565b9050612881565b611e8d8483612b69565b60008073165c3410fc91ef562c50559f7d2289febed552d9905060007398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611f695750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611fc15750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120195750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061204f57508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061208557508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120bb57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806120f157508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121495750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121a15750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806121f95750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806122515750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156123f25761225e612c06565b1561226c5761226b612cdd565b5b6122f5856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123418761320f565b61234b5784612356565b6123558786613266565b5b92506123aa83600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612557565b61247b856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084925061251383600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267157601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612644929190613db2565b600060405180830381600087803b15801561265e57600080fd5b505af192505050801561266f575060015b505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661278b57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161275e929190613db2565b600060405180830381600087803b15801561277857600080fd5b505af1925050508015612789575060015b505b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b81526004016127e891906135da565b600060405180830381600087803b15801561280257600080fd5b505af1925050508015612813575060015b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161287191906135da565b60405180910390a3600193505050505b9392505050565b60006128ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df6565b905092915050565b60008083036128e45760009050612946565b600082846128f29190613eaf565b90508284826129019190613c4c565b14612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890613f63565b60405180910390fd5b809150505b92915050565b600061298e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061355e565b905092915050565b6000612a21826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ab682600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b5691906135da565b60405180910390a3600190509392505050565b60065481111580612bc35750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf990613fcf565b60405180910390fd5b5050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612c735750601f60009054906101000a900460ff16155b8015612c8b5750601d60009054906101000a900460ff165b8015612cd85750601e54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601f60006101000a81548160ff0219169083151502179055506000612d08601554601654610cde565b612d1457600e54612d17565b60005b90506000612d576002612d49601154612d3b86601e546128d290919063ffffffff16565b61294c90919063ffffffff16565b61294c90919063ffffffff16565b90506000612d7082601e5461288890919063ffffffff16565b90506000600267ffffffffffffffff811115612d8f57612d8e613fef565b5b604051908082528060200260200182016040528015612dbd5781602001602082028036833780820191505090505b5090503081600081518110612dd557612dd461401e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612e4657612e4561401e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612ee995949392919061410b565b600060405180830381600087803b158015612f0357600080fd5b505af1158015612f17573d6000803e3d6000fd5b505050506000612f30824761288890919063ffffffff16565b90506000612f5c612f4b60028961294c90919063ffffffff16565b60115461288890919063ffffffff16565b90506000612f8782612f79600d54866128d290919063ffffffff16565b61294c90919063ffffffff16565b90506000612fc36002612fb585612fa78d896128d290919063ffffffff16565b61294c90919063ffffffff16565b61294c90919063ffffffff16565b90506000612fee84612fe0601054886128d290919063ffffffff16565b61294c90919063ffffffff16565b9050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561305a57600080fd5b505af19350505050801561306c575060015b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156130d5573d6000803e3d6000fd5b5060008911156131e857601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308c600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161316896959493929190614165565b60606040518083038185885af1158015613186573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131ab91906141db565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506828a6040516131df929190613c7d565b60405180910390a15b505050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806132a6601254613298613289600f5460115461288890919063ffffffff16565b866128d290919063ffffffff16565b61294c90919063ffffffff16565b905060006132d36012546132c5600f54876128d290919063ffffffff16565b61294c90919063ffffffff16565b905061332782600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133de8160076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134a091906135da565b60405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161352791906135da565b60405180910390a36135546135458284611d9890919063ffffffff16565b8561288890919063ffffffff16565b9250505092915050565b600080831182906135a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359c9190613731565b60405180910390fd5b50600083856135b49190613c4c565b9050809150509392505050565b6000819050919050565b6135d4816135c1565b82525050565b60006020820190506135ef60008301846135cb565b92915050565b600080fd5b613603816135c1565b811461360e57600080fd5b50565b600081359050613620816135fa565b92915050565b600080600080600060a08688031215613642576136416135f5565b5b600061365088828901613611565b955050602061366188828901613611565b945050604061367288828901613611565b935050606061368388828901613611565b925050608061369488828901613611565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156136db5780820151818401526020810190506136c0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613703826136a1565b61370d81856136ac565b935061371d8185602086016136bd565b613726816136e7565b840191505092915050565b6000602082019050818103600083015261374b81846136f8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061377e82613753565b9050919050565b61378e81613773565b811461379957600080fd5b50565b6000813590506137ab81613785565b92915050565b600080604083850312156137c8576137c76135f5565b5b60006137d68582860161379c565b92505060206137e785828601613611565b9150509250929050565b60008115159050919050565b613806816137f1565b82525050565b600060208201905061382160008301846137fd565b92915050565b6000806040838503121561383e5761383d6135f5565b5b600061384c85828601613611565b925050602061385d85828601613611565b9150509250929050565b6000806000606084860312156138805761387f6135f5565b5b600061388e8682870161379c565b935050602061389f8682870161379c565b92505060406138b086828701613611565b9150509250925092565b6000602082840312156138d0576138cf6135f5565b5b60006138de8482850161379c565b91505092915050565b600060ff82169050919050565b6138fd816138e7565b82525050565b600060208201905061391860008301846138f4565b92915050565b613927816137f1565b811461393257600080fd5b50565b6000813590506139448161391e565b92915050565b60008060408385031215613961576139606135f5565b5b600061396f8582860161379c565b925050602061398085828601613935565b9150509250929050565b6000602082840312156139a05761399f6135f5565b5b60006139ae84828501613611565b91505092915050565b6000819050919050565b60006139dc6139d76139d284613753565b6139b7565b613753565b9050919050565b60006139ee826139c1565b9050919050565b6000613a00826139e3565b9050919050565b613a10816139f5565b82525050565b6000602082019050613a2b6000830184613a07565b92915050565b613a3a81613773565b82525050565b6000602082019050613a556000830184613a31565b92915050565b60008060408385031215613a7257613a716135f5565b5b6000613a808582860161379c565b9250506020613a918582860161379c565b9150509250929050565b6000613aa6826139e3565b9050919050565b613ab681613a9b565b82525050565b6000602082019050613ad16000830184613aad565b92915050565b60008060408385031215613aee57613aed6135f5565b5b6000613afc85828601613935565b9250506020613b0d85828601613611565b9150509250929050565b6000613b2282613753565b9050919050565b613b3281613b17565b8114613b3d57600080fd5b50565b600081359050613b4f81613b29565b92915050565b600060208284031215613b6b57613b6a6135f5565b5b6000613b7984828501613b40565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613bb8600b836136ac565b9150613bc382613b82565b602082019050919050565b60006020820190508181036000830152613be781613bab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c57826135c1565b9150613c62836135c1565b925082613c7257613c71613bee565b5b828204905092915050565b6000604082019050613c9260008301856135cb565b613c9f60208301846135cb565b9392505050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613cdc6006836136ac565b9150613ce782613ca6565b602082019050919050565b60006020820190508181036000830152613d0b81613ccf565b9050919050565b6000613d1d826139e3565b9050919050565b613d2d81613d12565b82525050565b6000602082019050613d486000830184613d24565b92915050565b6000819050919050565b6000613d73613d6e613d6984613d4e565b6139b7565b6135c1565b9050919050565b613d8381613d58565b82525050565b6000604082019050613d9e6000830185613a31565b613dab6020830184613d7a565b9392505050565b6000604082019050613dc76000830185613a31565b613dd460208301846135cb565b9392505050565b6000613de6826135c1565b9150613df1836135c1565b9250828201905080821115613e0957613e08613c1d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e45601b836136ac565b9150613e5082613e0f565b602082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b6000613e86826135c1565b9150613e91836135c1565b9250828203905081811115613ea957613ea8613c1d565b5b92915050565b6000613eba826135c1565b9150613ec5836135c1565b9250828202613ed3816135c1565b91508282048414831517613eea57613ee9613c1d565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4d6021836136ac565b9150613f5882613ef1565b604082019050919050565b60006020820190508181036000830152613f7c81613f40565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613fb96011836136ac565b9150613fc482613f83565b602082019050919050565b60006020820190508181036000830152613fe881613fac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61408281613773565b82525050565b60006140948383614079565b60208301905092915050565b6000602082019050919050565b60006140b88261404d565b6140c28185614058565b93506140cd83614069565b8060005b838110156140fe5781516140e58882614088565b97506140f0836140a0565b9250506001810190506140d1565b5085935050505092915050565b600060a08201905061412060008301886135cb565b61412d6020830187613d7a565b818103604083015261413f81866140ad565b905061414e6060830185613a31565b61415b60808301846135cb565b9695505050505050565b600060c08201905061417a6000830189613a31565b61418760208301886135cb565b6141946040830187613d7a565b6141a16060830186613d7a565b6141ae6080830185613a31565b6141bb60a08301846135cb565b979650505050505050565b6000815190506141d5816135fa565b92915050565b6000806000606084860312156141f4576141f36135f5565b5b6000614202868287016141c6565b9350506020614213868287016141c6565b9250506040614224868287016141c6565b915050925092509256fea2646970667358221220bbbbc58f02cda24017a2c2368e13e56c76c070ee3c4fecb7f92e2d0d387bd38164736f6c63430008130033608060405273b17d901469b9208b17d916112988a3fed19b5ca1600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55603c600d55620186a0600e55348015620000da57600080fd5b5060405162001fde38038062001fde833981810160405281019062000100919062000243565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001505773165c3410fc91ef562c50559f7d2289febed552d962000152565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000275565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020b82620001de565b9050919050565b6200021d81620001fe565b81146200022957600080fd5b50565b6000815190506200023d8162000212565b92915050565b6000602082840312156200025c576200025b620001d9565b5b60006200026c848285016200022c565b91505092915050565b611d5980620002856000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b6040516101049190611561565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f919061160b565b61032d565b005b34801561014257600080fd5b5061015d6004803603810190610158919061164b565b6105ec565b60405161016a9190611561565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611678565b610705565b005b3480156101a857600080fd5b506101b161076f565b6040516101be9190611561565b60405180910390f35b3480156101d357600080fd5b506101dc610775565b6040516101e99190611561565b60405180910390f35b3480156101fe57600080fd5b5061020761077b565b6040516102149190611561565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f919061164b565b610781565b604051610253939291906116b8565b60405180910390f35b6102646107ab565b005b34801561027257600080fd5b5061027b610b7d565b6040516102889190611561565b60405180910390f35b34801561029d57600080fd5b506102a6610b83565b6040516102b39190611561565b60405180910390f35b3480156102c857600080fd5b506102d1610b89565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906116ef565b610b94565b005b34801561030857600080fd5b50610311610d27565b60405161031e9190611561565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d2d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610fc0565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261106f565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461127690919063ffffffff16565b6112c090919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb818361127690919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075d57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610860919061172b565b602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a1919061175b565b90506000600267ffffffffffffffff8111156108c0576108bf611788565b5b6040519080825280602002602001820160405280156108ee5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610928576109276117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610999576109986117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a3694939291906118e9565b6000604051808303818588803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b50505050506000610b1883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac9919061172b565b602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a919061175b565b61127690919063ffffffff16565b9050610b2f816009546112c090919063ffffffff16565b600981905550610b72610b61600854610b5384600c5461135090919063ffffffff16565b6113ca90919063ffffffff16565b600b546112c090919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b9233610d2d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bec57600080fd5b6000600480549050905060008103610c045750610d24565b6000805a905060005b8483108015610c1b57508381105b15610d1f5783600f5410610c32576000600f819055505b610c7b6004600f5481548110610c4b57610c4a6117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611414565b15610cca57610cc96004600f5481548110610c9957610c986117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2d565b5b610cef610ce05a8461127690919063ffffffff16565b846112c090919063ffffffff16565b92505a9150600f6000815480929190610d0790611964565b91905055508080610d1790611964565b915050610c0d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610fbd576000610d83826105ec565b90506000811115610fbb57610da381600a546112c090919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e069291906119ac565b6020604051808303816000875af1158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190611a0d565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ee381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112c090919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f74600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110839190611a3a565b81548110611094576110936117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611112576111116117b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111b29190611a3a565b815481106111c3576111c26117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061123e5761123d611a6e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60006112b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611481565b905092915050565b60008082846112cf9190611a9d565b905083811015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90611b2e565b60405180910390fd5b8091505092915050565b6000611349600c5461133b600b548561135090919063ffffffff16565b6113ca90919063ffffffff16565b9050919050565b600080830361136257600090506113c4565b600082846113709190611b4e565b905082848261137f9190611bbf565b146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690611c62565b60405180910390fd5b809150505b92915050565b600061140c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114e5565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114649190611a9d565b10801561147a5750600e54611478836105ec565b115b9050919050565b60008383111582906114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c09190611d01565b60405180910390fd5b50600083856114d89190611a3a565b9050809150509392505050565b6000808311829061152c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239190611d01565b60405180910390fd5b506000838561153b9190611bbf565b9050809150509392505050565b6000819050919050565b61155b81611548565b82525050565b60006020820190506115766000830184611552565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115ac82611581565b9050919050565b6115bc816115a1565b81146115c757600080fd5b50565b6000813590506115d9816115b3565b92915050565b6115e881611548565b81146115f357600080fd5b50565b600081359050611605816115df565b92915050565b600080604083850312156116225761162161157c565b5b6000611630858286016115ca565b9250506020611641858286016115f6565b9150509250929050565b6000602082840312156116615761166061157c565b5b600061166f848285016115ca565b91505092915050565b6000806040838503121561168f5761168e61157c565b5b600061169d858286016115f6565b92505060206116ae858286016115f6565b9150509250929050565b60006060820190506116cd6000830186611552565b6116da6020830185611552565b6116e76040830184611552565b949350505050565b6000602082840312156117055761170461157c565b5b6000611713848285016115f6565b91505092915050565b611725816115a1565b82525050565b6000602082019050611740600083018461171c565b92915050565b600081519050611755816115df565b92915050565b6000602082840312156117715761177061157c565b5b600061177f84828501611746565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061181561181061180b846117e6565b6117f0565b611548565b9050919050565b611825816117fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611860816115a1565b82525050565b60006118728383611857565b60208301905092915050565b6000602082019050919050565b60006118968261182b565b6118a08185611836565b93506118ab83611847565b8060005b838110156118dc5781516118c38882611866565b97506118ce8361187e565b9250506001810190506118af565b5085935050505092915050565b60006080820190506118fe600083018761181c565b8181036020830152611910818661188b565b905061191f604083018561171c565b61192c6060830184611552565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061196f82611548565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119a1576119a0611935565b5b600182019050919050565b60006040820190506119c1600083018561171c565b6119ce6020830184611552565b9392505050565b60008115159050919050565b6119ea816119d5565b81146119f557600080fd5b50565b600081519050611a07816119e1565b92915050565b600060208284031215611a2357611a2261157c565b5b6000611a31848285016119f8565b91505092915050565b6000611a4582611548565b9150611a5083611548565b9250828203905081811115611a6857611a67611935565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611aa882611548565b9150611ab383611548565b9250828201905080821115611acb57611aca611935565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611b18601b83611ad1565b9150611b2382611ae2565b602082019050919050565b60006020820190508181036000830152611b4781611b0b565b9050919050565b6000611b5982611548565b9150611b6483611548565b9250828202611b7281611548565b91508282048414831517611b8957611b88611935565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bca82611548565b9150611bd583611548565b925082611be557611be4611b90565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c4c602183611ad1565b9150611c5782611bf0565b604082019050919050565b60006020820190508181036000830152611c7b81611c3f565b9050919050565b600081519050919050565b60005b83811015611cab578082015181840152602081019050611c90565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cd382611c82565b611cdd8185611ad1565b9350611ced818560208601611c8d565b611cf681611cb7565b840191505092915050565b60006020820190508181036000830152611d1b8184611cc8565b90509291505056fea264697066735822122003313c723dca2769126764db87d851a863b00bf4ca39800c0e562493d289aca564736f6c63430008130033

Deployed ByteCode

0x6080604052600436106102815760003560e01c80637d1db4a51161014f578063ca33e64c116100c1578063f2fde38b1161007a578063f2fde38b146109d1578063f708a64f146109fa578063f84ba65d14610a23578063f887ea4014610a4c578063fce589d814610a77578063fe9fbb8014610aa257610288565b8063ca33e64c146108af578063d51ed1c8146108da578063dd62ed3e14610917578063df20fd4914610954578063e96fada21461097d578063f0b37c04146109a857610288565b80639d1944f5116101135780639d1944f5146107a1578063a4b45c00146107ca578063a8aa1b31146107f3578063a9059cbb1461081e578063b6a5d7de1461085b578063bfe109281461088457610288565b80637d1db4a5146106ca57806383ad7994146106f5578063893d20e81461072057806395d89b411461074b57806398118cb41461077657610288565b80632d48e896116101f3578063658d4b7f116101ac578063658d4b7f146105b85780636b67c4df146105e15780636ddd17131461060c57806370a0823114610637578063762816d614610674578063763014c71461069f57610288565b80632d48e896146104985780632f54bf6e146104c1578063313ce567146104fe57806350db71fb14610529578063571ac8b0146105525780635c85974f1461058f57610288565b8063180b0d7e11610245578063180b0d7e1461038657806318160ddd146103b15780631df4ccfc146103dc578063201e79911461040757806323b872dd146104305780632b112e491461046d57610288565b80630445b6671461028d57806304a66b48146102b857806306fdde03146102e1578063095ea7b31461030c5780631161ae391461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610adf565b6040516102af91906135da565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613626565b610ae5565b005b3480156102ed57600080fd5b506102f6610baf565b6040516103039190613731565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e91906137b1565b610bec565b604051610340919061380c565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613827565b610cde565b60405161037d919061380c565b60405180910390f35b34801561039257600080fd5b5061039b610cf3565b6040516103a891906135da565b60405180910390f35b3480156103bd57600080fd5b506103c6610cf9565b6040516103d391906135da565b60405180910390f35b3480156103e857600080fd5b506103f1610d03565b6040516103fe91906135da565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190613827565b610d09565b005b34801561043c57600080fd5b5061045760048036038101906104529190613867565b610d63565b604051610464919061380c565b60405180910390f35b34801561047957600080fd5b50610482610f63565b60405161048f91906135da565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613827565b610fe5565b005b3480156104cd57600080fd5b506104e860048036038101906104e391906138ba565b6110c0565b6040516104f5919061380c565b60405180910390f35b34801561050a57600080fd5b50610513611119565b6040516105209190613903565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b919061394a565b611122565b005b34801561055e57600080fd5b50610579600480360381019061057491906138ba565b6111c5565b604051610586919061380c565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061398a565b6111f8565b005b3480156105c457600080fd5b506105df60048036038101906105da919061394a565b61126a565b005b3480156105ed57600080fd5b506105f661130d565b60405161060391906135da565b60405180910390f35b34801561061857600080fd5b50610621611313565b60405161062e919061380c565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906138ba565b611326565b60405161066b91906135da565b60405180910390f35b34801561068057600080fd5b5061068961136f565b6040516106969190613a16565b60405180910390f35b3480156106ab57600080fd5b506106b4611395565b6040516106c19190613a40565b60405180910390f35b3480156106d657600080fd5b506106df6113bb565b6040516106ec91906135da565b60405180910390f35b34801561070157600080fd5b5061070a6113c1565b60405161071791906135da565b60405180910390f35b34801561072c57600080fd5b506107356113c7565b6040516107429190613a40565b60405180910390f35b34801561075757600080fd5b506107606113f0565b60405161076d9190613731565b60405180910390f35b34801561078257600080fd5b5061078b61142d565b60405161079891906135da565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c3919061398a565b611433565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613a5b565b611494565b005b3480156107ff57600080fd5b50610808611562565b6040516108159190613a40565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906137b1565b611588565b604051610852919061380c565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d91906138ba565b61159d565b005b34801561089057600080fd5b5061089961163f565b6040516108a69190613abc565b60405180910390f35b3480156108bb57600080fd5b506108c4611665565b6040516108d19190613a40565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc919061398a565b61168b565b60405161090e91906135da565b60405180910390f35b34801561092357600080fd5b5061093e60048036038101906109399190613a5b565b6116fd565b60405161094b91906135da565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190613ad7565b611784565b005b34801561098957600080fd5b506109926117f1565b60405161099f9190613a40565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca91906138ba565b611817565b005b3480156109dd57600080fd5b506109f860048036038101906109f39190613b55565b6118ba565b005b348015610a0657600080fd5b50610a216004803603810190610a1c919061394a565b6119d3565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a45919061394a565b611c73565b005b348015610a5857600080fd5b50610a61611d16565b604051610a6e9190613a16565b60405180910390f35b348015610a8357600080fd5b50610a8c611d3c565b604051610a9991906135da565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac491906138ba565b611d42565b604051610ad6919061380c565b60405180910390f35b601e5481565b610aee33611d42565b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613bce565b60405180910390fd5b84600e819055508260108190555083600d8190555081600f81905550610b8084610b7284610b64878a611d9890919063ffffffff16565b611d9890919063ffffffff16565b611d9890919063ffffffff16565b60118190555080601281905550600481610b9a9190613c4c565b6011541115610ba857600080fd5b5050505050565b60606040518060400160405280600981526020017f5072696d65204170650000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ccc91906135da565b60405180910390a36001905092915050565b600082610cea8361168b565b11905092915050565b60125481565b6000600554905090565b60115481565b610d1233611d42565b610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4890613bce565b60405180910390fd5b81601581905550806016819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f4f57610ece826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f5a848484611e5a565b90509392505050565b6000610fe0610f93600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611326565b610fd2610fc1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611326565b60055461288890919063ffffffff16565b61288890919063ffffffff16565b905090565b610fee33611d42565b61102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613bce565b60405180910390fd5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161108a929190613c7d565b600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600a905090565b61112b33611d42565b61116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613bce565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111f1827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bec565b9050919050565b61120133611d42565b611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613bce565b60405180910390fd5b6509184e72a0006005546112549190613c4c565b81101561126057600080fd5b8060068190555050565b61127333611d42565b6112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990613bce565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b601d60009054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f5072696d65417065000000000000000000000000000000000000000000000000815250905090565b600e5481565b61143c33611d42565b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290613bce565b60405180910390fd5b620b71b0811061148a57600080fd5b80601c8190555050565b61149d33611d42565b6114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390613bce565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611595338484611e5a565b905092915050565b6115a6336110c0565b6115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90613cf2565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f6611698610f63565b6116e86116d960026116cb601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611326565b6128d290919063ffffffff16565b856128d290919063ffffffff16565b61294c90919063ffffffff16565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61178d33611d42565b6117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c390613bce565b60405180910390fd5b81601d60006101000a81548160ff02191690831515021790555080601e819055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611820336110c0565b61185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613cf2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118c3336110c0565b611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990613cf2565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516119c89190613d33565b60405180910390a150565b6119dc33611d42565b611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1290613bce565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611aa55750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611aae57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611ba057601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611b69929190613d89565b600060405180830381600087803b158015611b8357600080fd5b505af1158015611b97573d6000803e3d6000fd5b50505050611c6f565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c3c929190613db2565b600060405180830381600087803b158015611c5657600080fd5b505af1158015611c6a573d6000803e3d6000fd5b505050505b5050565b611c7c33611d42565b611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613bce565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808284611da79190613ddb565b905083811015611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390613e5b565b60405180910390fd5b8091505092915050565b6000838311158290611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e359190613731565b60405180910390fd5b5060008385611e4d9190613e7b565b9050809150509392505050565b6000601f60009054906101000a900460ff1615611e8357611e7c848484612996565b9050612881565b611e8d8483612b69565b60008073165c3410fc91ef562c50559f7d2289febed552d9905060007398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611f695750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611fc15750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120195750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061204f57508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061208557508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120bb57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806120f157508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121495750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121a15750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806121f95750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806122515750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156123f25761225e612c06565b1561226c5761226b612cdd565b5b6122f5856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123418761320f565b61234b5784612356565b6123558786613266565b5b92506123aa83600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612557565b61247b856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084925061251383600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661267157601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612644929190613db2565b600060405180830381600087803b15801561265e57600080fd5b505af192505050801561266f575060015b505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661278b57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161275e929190613db2565b600060405180830381600087803b15801561277857600080fd5b505af1925050508015612789575060015b505b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b81526004016127e891906135da565b600060405180830381600087803b15801561280257600080fd5b505af1925050508015612813575060015b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161287191906135da565b60405180910390a3600193505050505b9392505050565b60006128ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df6565b905092915050565b60008083036128e45760009050612946565b600082846128f29190613eaf565b90508284826129019190613c4c565b14612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890613f63565b60405180910390fd5b809150505b92915050565b600061298e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061355e565b905092915050565b6000612a21826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df69092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ab682600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b5691906135da565b60405180910390a3600190509392505050565b60065481111580612bc35750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf990613fcf565b60405180910390fd5b5050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612c735750601f60009054906101000a900460ff16155b8015612c8b5750601d60009054906101000a900460ff165b8015612cd85750601e54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601f60006101000a81548160ff0219169083151502179055506000612d08601554601654610cde565b612d1457600e54612d17565b60005b90506000612d576002612d49601154612d3b86601e546128d290919063ffffffff16565b61294c90919063ffffffff16565b61294c90919063ffffffff16565b90506000612d7082601e5461288890919063ffffffff16565b90506000600267ffffffffffffffff811115612d8f57612d8e613fef565b5b604051908082528060200260200182016040528015612dbd5781602001602082028036833780820191505090505b5090503081600081518110612dd557612dd461401e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612e4657612e4561401e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612ee995949392919061410b565b600060405180830381600087803b158015612f0357600080fd5b505af1158015612f17573d6000803e3d6000fd5b505050506000612f30824761288890919063ffffffff16565b90506000612f5c612f4b60028961294c90919063ffffffff16565b60115461288890919063ffffffff16565b90506000612f8782612f79600d54866128d290919063ffffffff16565b61294c90919063ffffffff16565b90506000612fc36002612fb585612fa78d896128d290919063ffffffff16565b61294c90919063ffffffff16565b61294c90919063ffffffff16565b90506000612fee84612fe0601054886128d290919063ffffffff16565b61294c90919063ffffffff16565b9050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561305a57600080fd5b505af19350505050801561306c575060015b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156130d5573d6000803e3d6000fd5b5060008911156131e857601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308c600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161316896959493929190614165565b60606040518083038185885af1158015613186573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131ab91906141db565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506828a6040516131df929190613c7d565b60405180910390a15b505050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806132a6601254613298613289600f5460115461288890919063ffffffff16565b866128d290919063ffffffff16565b61294c90919063ffffffff16565b905060006132d36012546132c5600f54876128d290919063ffffffff16565b61294c90919063ffffffff16565b905061332782600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133de8160076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9890919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134a091906135da565b60405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161352791906135da565b60405180910390a36135546135458284611d9890919063ffffffff16565b8561288890919063ffffffff16565b9250505092915050565b600080831182906135a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359c9190613731565b60405180910390fd5b50600083856135b49190613c4c565b9050809150509392505050565b6000819050919050565b6135d4816135c1565b82525050565b60006020820190506135ef60008301846135cb565b92915050565b600080fd5b613603816135c1565b811461360e57600080fd5b50565b600081359050613620816135fa565b92915050565b600080600080600060a08688031215613642576136416135f5565b5b600061365088828901613611565b955050602061366188828901613611565b945050604061367288828901613611565b935050606061368388828901613611565b925050608061369488828901613611565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156136db5780820151818401526020810190506136c0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613703826136a1565b61370d81856136ac565b935061371d8185602086016136bd565b613726816136e7565b840191505092915050565b6000602082019050818103600083015261374b81846136f8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061377e82613753565b9050919050565b61378e81613773565b811461379957600080fd5b50565b6000813590506137ab81613785565b92915050565b600080604083850312156137c8576137c76135f5565b5b60006137d68582860161379c565b92505060206137e785828601613611565b9150509250929050565b60008115159050919050565b613806816137f1565b82525050565b600060208201905061382160008301846137fd565b92915050565b6000806040838503121561383e5761383d6135f5565b5b600061384c85828601613611565b925050602061385d85828601613611565b9150509250929050565b6000806000606084860312156138805761387f6135f5565b5b600061388e8682870161379c565b935050602061389f8682870161379c565b92505060406138b086828701613611565b9150509250925092565b6000602082840312156138d0576138cf6135f5565b5b60006138de8482850161379c565b91505092915050565b600060ff82169050919050565b6138fd816138e7565b82525050565b600060208201905061391860008301846138f4565b92915050565b613927816137f1565b811461393257600080fd5b50565b6000813590506139448161391e565b92915050565b60008060408385031215613961576139606135f5565b5b600061396f8582860161379c565b925050602061398085828601613935565b9150509250929050565b6000602082840312156139a05761399f6135f5565b5b60006139ae84828501613611565b91505092915050565b6000819050919050565b60006139dc6139d76139d284613753565b6139b7565b613753565b9050919050565b60006139ee826139c1565b9050919050565b6000613a00826139e3565b9050919050565b613a10816139f5565b82525050565b6000602082019050613a2b6000830184613a07565b92915050565b613a3a81613773565b82525050565b6000602082019050613a556000830184613a31565b92915050565b60008060408385031215613a7257613a716135f5565b5b6000613a808582860161379c565b9250506020613a918582860161379c565b9150509250929050565b6000613aa6826139e3565b9050919050565b613ab681613a9b565b82525050565b6000602082019050613ad16000830184613aad565b92915050565b60008060408385031215613aee57613aed6135f5565b5b6000613afc85828601613935565b9250506020613b0d85828601613611565b9150509250929050565b6000613b2282613753565b9050919050565b613b3281613b17565b8114613b3d57600080fd5b50565b600081359050613b4f81613b29565b92915050565b600060208284031215613b6b57613b6a6135f5565b5b6000613b7984828501613b40565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613bb8600b836136ac565b9150613bc382613b82565b602082019050919050565b60006020820190508181036000830152613be781613bab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c57826135c1565b9150613c62836135c1565b925082613c7257613c71613bee565b5b828204905092915050565b6000604082019050613c9260008301856135cb565b613c9f60208301846135cb565b9392505050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613cdc6006836136ac565b9150613ce782613ca6565b602082019050919050565b60006020820190508181036000830152613d0b81613ccf565b9050919050565b6000613d1d826139e3565b9050919050565b613d2d81613d12565b82525050565b6000602082019050613d486000830184613d24565b92915050565b6000819050919050565b6000613d73613d6e613d6984613d4e565b6139b7565b6135c1565b9050919050565b613d8381613d58565b82525050565b6000604082019050613d9e6000830185613a31565b613dab6020830184613d7a565b9392505050565b6000604082019050613dc76000830185613a31565b613dd460208301846135cb565b9392505050565b6000613de6826135c1565b9150613df1836135c1565b9250828201905080821115613e0957613e08613c1d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e45601b836136ac565b9150613e5082613e0f565b602082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b6000613e86826135c1565b9150613e91836135c1565b9250828203905081811115613ea957613ea8613c1d565b5b92915050565b6000613eba826135c1565b9150613ec5836135c1565b9250828202613ed3816135c1565b91508282048414831517613eea57613ee9613c1d565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4d6021836136ac565b9150613f5882613ef1565b604082019050919050565b60006020820190508181036000830152613f7c81613f40565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613fb96011836136ac565b9150613fc482613f83565b602082019050919050565b60006020820190508181036000830152613fe881613fac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61408281613773565b82525050565b60006140948383614079565b60208301905092915050565b6000602082019050919050565b60006140b88261404d565b6140c28185614058565b93506140cd83614069565b8060005b838110156140fe5781516140e58882614088565b97506140f0836140a0565b9250506001810190506140d1565b5085935050505092915050565b600060a08201905061412060008301886135cb565b61412d6020830187613d7a565b818103604083015261413f81866140ad565b905061414e6060830185613a31565b61415b60808301846135cb565b9695505050505050565b600060c08201905061417a6000830189613a31565b61418760208301886135cb565b6141946040830187613d7a565b6141a16060830186613d7a565b6141ae6080830185613a31565b6141bb60a08301846135cb565b979650505050505050565b6000815190506141d5816135fa565b92915050565b6000806000606084860312156141f4576141f36135f5565b5b6000614202868287016141c6565b9350506020614213868287016141c6565b9250506040614224868287016141c6565b915050925092509256fea2646970667358221220bbbbc58f02cda24017a2c2368e13e56c76c070ee3c4fecb7f92e2d0d387bd38164736f6c63430008130033