false
true
0

Contract Address Details

0x6125b1bE99A2241618cD7093FD2c49f918e75795

Token
Osiris Reborn (OSIR)
Creator
0x9176d8–4161ba at 0x89c97c–36760b
Balance
5,000,000.000000000000001522 PLS ( )
Tokens
Fetching tokens...
Transactions
587 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25914135
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
OsirisReborn




Optimization enabled
false
Compiler version
v0.8.20+commit.a1b79de6




EVM Version
shanghai




Verified at
2025-01-29T22:50:39.300194Z

Constructor Arguments

0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000d4f7369726973205265626f726e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f53495200000000000000000000000000000000000000000000000000000000

Arg [0] (string) : Osiris Reborn
Arg [1] (string) : OSIR
Arg [2] (uint8) : 18
Arg [3] (uint256) : 1000000000

              

Contract source code

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

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

/**
 * PRC20 standard interface.
 */
interface IPRC20 {
    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 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 WETH() 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;
    }

    IPRC20 RWRD = IPRC20(0xF18B09A5B358b720F23D736163d328DBA0BdDf41); //$H㉾X
    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 = 0;
    uint256 public minDistribution = 0;

    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 DividendDistributor2 is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IPRC20 RWRD = IPRC20(0xF18B09A5B358b720F23D736163d328DBA0BdDf41); //$H㉾X
    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 = 0;
    uint256 public minDistribution = 0;

    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 OsirisReborn is IPRC20, Auth {
    using SafeMath for uint256;

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

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _totalSupply;

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

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

    bool public notliftoff = true;

    uint256 public liquidityFee    = 10; // 1% OSIR/WPLS lp
    uint256 public rewardFee       = 15; // 1% $H㉾X Rewards, 0.5% $H㉾X Rewards
    uint256 public buyburnFee      = 15; // 1% Buy and Burn $KORD , 0.5% Buy and Burn $ORD
    uint256 public marketingFee    = 0;
    uint256 public burnFee         = 5; // 0.5% burn $OSIR
    uint256 public extraliqFee     = 5; // 0.5% KORD/WPLS Lp
    uint256 public totalFee        = marketingFee + rewardFee + liquidityFee + burnFee + buyburnFee + extraliqFee;
    uint256 public feeDenominator  = 1000;

    uint256 public sellMultiplier  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = false;

    DividendDistributor public distributor;
    DividendDistributor2 public distributor2;
    uint256 distributorGas = 1500000;
    uint256 distributorGas2 = 1500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 10 / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        string memory tokenName, 
        string memory tokenSymbol, 
        uint8 tokenDecimals, 
        uint256 tokenTotalSupply
    ) Auth(msg.sender) {
        _name = tokenName;
        _symbol = tokenSymbol;
        _decimals = tokenDecimals; 
        _totalSupply = tokenTotalSupply.mul(10**uint256(tokenDecimals));
        swapThreshold = _totalSupply * 10 / 10000;
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        distributor2 = new DividendDistributor2(address(router));

        isFeeExempt[msg.sender] = 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 view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function 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 _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }

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

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, amount,(recipient == pair)) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

        try distributor.process(distributorGas) {} catch {}
        try distributor2.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 shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if (isFeeExempt[recipient]){
            return false;
        }
        return !isFeeExempt[sender];
    }

    function buyburn(uint256 amount) internal {
        IPRC20 token1 = IPRC20(0xE7308da032326dE7A2a2b80E1131650E845Ab989); // $KORD
        IPRC20 token2 = IPRC20(0xd4f6Dfd7dA9731D11B8789226F6d692f02fea16F); // $ORD

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

        address[] memory path2 = new address[](2);
        path2[0] = WPLS;
        path2[1] = address(token2);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount.mul(2).div(3)}(
            0,
            path,
            address(this),
            block.timestamp
        );

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount.mul(1).div(3)}(
            0,
            path2,
            address(this),
            block.timestamp
        );

        uint256 amount1 = token1.balanceOf(address(this));
        uint256 amount2 = token2.balanceOf(address(this));

        token1.transfer(address(0x0000000000000000000000000000000000000369), amount1);
        token2.transfer(address(0x0000000000000000000000000000000000000369), amount2);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        
        uint256 multiplier = isSell ? sellMultiplier : 100;
        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        uint256 burnAmount = feeAmount.mul(burnFee).div(totalFee);

        uint256 remainingAmount = feeAmount.sub(burnAmount);

        if (burnAmount > 0){
        _balances[DEAD] = _balances[DEAD].add(burnAmount);
        emit Transfer(sender, DEAD, burnAmount);
        }

        _balances[address(this)] = _balances[address(this)].add(remainingAmount);
        emit Transfer(sender, address(this), remainingAmount);

        return amount.sub(feeAmount);
    }

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

    function clearStuckBalance_sender(uint256 amountPercentage) external authorized {
        uint256 amountPLS = address(this).balance;
        payable(msg.sender).transfer(amountPLS * amountPercentage / 100);
    }

    function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
        sellMultiplier = Multiplier;
    }

    function swapBack() internal swapping {
        uint256 amountToLiquify = swapThreshold.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;

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

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

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

        uint256 totalPLSFee = totalFee.sub(liquidityFee.div(2)).mul(1000);
        
        uint256 amountPLSLiquidity = amountPLS.mul(liquidityFee).div(totalPLSFee.div(1000)).div(2);
        uint256 amountPLSRewards = amountPLS.mul(rewardFee).div(totalPLSFee.div(1000)).add(amountPLSLiquidity);
        uint256 amountPLSBuyburn = amountPLS.mul(buyburnFee).div(totalPLSFee.div(1000));
        uint256 amountPLSMarketing = amountPLS.mul(marketingFee).div(totalPLSFee.div(1000));

        uint256 amountPLSLiquidityExtra = amountPLS.mul(extraliqFee).div(totalPLSFee.div(1000));
        
        try distributor.deposit{value: amountPLSRewards.mul(2).div(3)}() {} catch {}
        try distributor2.deposit{value: amountPLSRewards.div(3)}() {} catch {}

        if (amountPLSLiquidityExtra > 0) {
            IPRC20 Token = IPRC20(0xE7308da032326dE7A2a2b80E1131650E845Ab989);

            uint256 balanceBeforeToken = Token.balanceOf(address(this));

            address[] memory path2 = new address[](2);
            path2[0] = WPLS;
            path2[1] = address(Token);

            router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountPLSLiquidityExtra.div(2)}(
                0,
                path2,
                address(this),
                block.timestamp
            );

            uint256 amount = Token.balanceOf(address(this)).sub(balanceBeforeToken);

            Token.approve(0x165C3410fC91EF562C50559f7d2289fEbed552d9, type(uint256).max);

            router.addLiquidityETH{value: amountPLSLiquidityExtra.div(2)}(
                address(Token),
                amount,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
        }
        
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountPLSMarketing, gas: 30000}("");
        
        // Supress warning msg
        tmpSuccess = false;

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

        uint256 PLSleft = address(this).balance.sub(balanceBefore).sub(amountPLSBuyburn);

        if (amountPLSBuyburn > 0) {
            buyburn(amountPLSBuyburn.add(PLSleft));
        }

    }

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

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

    function setFees(uint256 _liquidityFee, uint256 _rewardFee, uint256 _marketingFee, uint256 _burnFee, uint256 _buyburnFee, uint256 _extraliqFee) external authorized {
        liquidityFee = _liquidityFee;
        rewardFee = _rewardFee;
        marketingFee = _marketingFee;
        burnFee = _burnFee;
        buyburnFee = _buyburnFee;
        extraliqFee = _extraliqFee;
        totalFee = _liquidityFee.add(_rewardFee).add(_marketingFee).add(_burnFee).add(_extraliqFee);
        feeDenominator = 1000;
        require(totalFee < 100, "Fees cannot be more than 10%");
    }

    function liftoff() public onlyOwner {
        require(notliftoff, "Moon mission already a go");
        tradingOpen = true;
        notliftoff = false;
    }

    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 setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
        distributor2.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        distributorGas = gas;
        distributorGas2 = 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());
    }

event AutoLiquify(uint256 amountPLS, uint256 amountBOG);

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokenSymbol","internalType":"string"},{"type":"uint8","name":"tokenDecimals","internalType":"uint8"},{"type":"uint256","name":"tokenTotalSupply","internalType":"uint256"}]},{"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":"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":"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":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"buyburnFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance_sender","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"view","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":"address","name":"","internalType":"contract DividendDistributor2"}],"name":"distributor2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"extraliqFee","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":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"liftoff","inputs":[]},{"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":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"notliftoff","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"rewardFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sellMultiplier","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":"_rewardFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_burnFee","internalType":"uint256"},{"type":"uint256","name":"_buyburnFee","internalType":"uint256"},{"type":"uint256","name":"_extraliqFee","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":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"set_sell_multiplier","inputs":[{"type":"uint256","name":"Multiplier","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":"view","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":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","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":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a2760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061036960045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d5f6101000a81548160ff021916908315150217905550600a600e55600f8055600f6010555f60115560056012556005601355601354601054601254600e54600f546011546200012e919062000a75565b6200013a919062000a75565b62000146919062000a75565b62000152919062000a75565b6200015e919062000a75565b6014556103e860155560646016555f601a60146101000a81548160ff0219169083151502179055506216e360601d556216e360601e556001601f5f6101000a81548160ff021916908315150217905550612710600a600854620001c2919062000aaf565b620001ce919062000b26565b602055348015620001dd575f80fd5b506040516200a0853803806200a085833981810160405281019062000203919062000d4c565b33805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550508360059081620002a9919062001027565b508260069081620002bb919062001027565b508160075f6101000a81548160ff021916908360ff160217905550620002fc8260ff16600a620002ec91906200125b565b82620009a360201b90919060201c565b600881905550612710600a60085462000316919062000aaf565b62000322919062000b26565b60208190555073165c3410fc91ef562c50559f7d2289febed552d960195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200040d91906200130c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200046a9291906200134d565b6020604051808303815f875af115801562000487573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004ad91906200130c565b601a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005da9062000a23565b620005e6919062001378565b604051809103905ff08015801562000600573d5f803e3d5ffd5b50601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006709062000a31565b6200067c919062001378565b604051809103905ff08015801562000696573d5f803e3d5ffd5b50601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620009919190620013a4565b60405180910390a35050505062001463565b5f808303620009b5575f905062000a1d565b5f8284620009c4919062000aaf565b9050828482620009d5919062000b26565b1462000a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0f9062001443565b60405180910390fd5b809150505b92915050565b611ee780620062b783390190565b611ee7806200819e83390190565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000a818262000a3f565b915062000a8e8362000a3f565b925082820190508082111562000aa95762000aa862000a48565b5b92915050565b5f62000abb8262000a3f565b915062000ac88362000a3f565b925082820262000ad88162000a3f565b9150828204841483151762000af25762000af162000a48565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000b328262000a3f565b915062000b3f8362000a3f565b92508262000b525762000b5162000af9565b5b828204905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000bbe8262000b76565b810181811067ffffffffffffffff8211171562000be05762000bdf62000b86565b5b80604052505050565b5f62000bf462000b5d565b905062000c02828262000bb3565b919050565b5f67ffffffffffffffff82111562000c245762000c2362000b86565b5b62000c2f8262000b76565b9050602081019050919050565b5f5b8381101562000c5b57808201518184015260208101905062000c3e565b5f8484015250505050565b5f62000c7c62000c768462000c07565b62000be9565b90508281526020810184848401111562000c9b5762000c9a62000b72565b5b62000ca884828562000c3c565b509392505050565b5f82601f83011262000cc75762000cc662000b6e565b5b815162000cd984826020860162000c66565b91505092915050565b5f60ff82169050919050565b62000cf98162000ce2565b811462000d04575f80fd5b50565b5f8151905062000d178162000cee565b92915050565b62000d288162000a3f565b811462000d33575f80fd5b50565b5f8151905062000d468162000d1d565b92915050565b5f805f806080858703121562000d675762000d6662000b66565b5b5f85015167ffffffffffffffff81111562000d875762000d8662000b6a565b5b62000d958782880162000cb0565b945050602085015167ffffffffffffffff81111562000db95762000db862000b6a565b5b62000dc78782880162000cb0565b935050604062000dda8782880162000d07565b925050606062000ded8782880162000d36565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e4857607f821691505b60208210810362000e5e5762000e5d62000e03565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ec27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e85565b62000ece868362000e85565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000f0f62000f0962000f038462000a3f565b62000ee6565b62000a3f565b9050919050565b5f819050919050565b62000f2a8362000eef565b62000f4262000f398262000f16565b84845462000e91565b825550505050565b5f90565b62000f5862000f4a565b62000f6581848462000f1f565b505050565b5b8181101562000f8c5762000f805f8262000f4e565b60018101905062000f6b565b5050565b601f82111562000fdb5762000fa58162000e64565b62000fb08462000e76565b8101602085101562000fc0578190505b62000fd862000fcf8562000e76565b83018262000f6a565b50505b505050565b5f82821c905092915050565b5f62000ffd5f198460080262000fe0565b1980831691505092915050565b5f62001017838362000fec565b9150826002028217905092915050565b620010328262000df9565b67ffffffffffffffff8111156200104e576200104d62000b86565b5b6200105a825462000e30565b6200106782828562000f90565b5f60209050601f8311600181146200109d575f841562001088578287015190505b6200109485826200100a565b86555062001103565b601f198416620010ad8662000e64565b5f5b82811015620010d657848901518255600182019150602085019450602081019050620010af565b86831015620010f65784890151620010f2601f89168262000fec565b8355505b6001600288020188555050505b505050505050565b5f8160011c9050919050565b5f808291508390505b6001851115620011685780860481111562001140576200113f62000a48565b5b6001851615620011505780820291505b808102905062001160856200110b565b945062001120565b94509492505050565b5f8262001182576001905062001254565b8162001191575f905062001254565b8160018114620011aa5760028114620011b557620011eb565b600191505062001254565b60ff841115620011ca57620011c962000a48565b5b8360020a915084821115620011e457620011e362000a48565b5b5062001254565b5060208310610133831016604e8410600b8410161715620012255782820a9050838111156200121f576200121e62000a48565b5b62001254565b62001234848484600162001117565b925090508184048111156200124e576200124d62000a48565b5b81810290505b9392505050565b5f620012678262000a3f565b9150620012748362000a3f565b9250620012a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001171565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620012d682620012ab565b9050919050565b620012e881620012ca565b8114620012f3575f80fd5b50565b5f815190506200130681620012dd565b92915050565b5f6020828403121562001324576200132362000b66565b5b5f6200133384828501620012f6565b91505092915050565b6200134781620012ca565b82525050565b5f604082019050620013625f8301856200133c565b6200137160208301846200133c565b9392505050565b5f6020820190506200138d5f8301846200133c565b92915050565b6200139e8162000a3f565b82525050565b5f602082019050620013b95f83018462001393565b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200142b602183620013bf565b91506200143882620013cf565b604082019050919050565b5f6020820190508181035f8301526200145c816200141d565b9050919050565b614e4680620014715f395ff3fe608060405260043610610275575f3560e01c806395d89b411161014e578063dd62ed3e116100c0578063f887ea4011610079578063f887ea401461094e578063fce589d814610978578063fe634ad0146109a2578063fe9fbb80146109cc578063fed0d2a114610a08578063ffb54a9914610a325761027c565b8063dd62ed3e14610848578063df20fd4914610884578063e96fada2146108ac578063ec72d65f146108d6578063f2fde38b146108fe578063f708a64f146109265761027c565b8063a8aa1b3111610112578063a8aa1b311461073c578063a9059cbb14610766578063bfe10928146107a2578063c191c926146107cc578063ca33e64c146107e2578063d51ed1c81461080c5761027c565b806395d89b411461066e57806398118cb4146106985780639d1944f5146106c2578063a4b45c00146106ea578063a71b2fee146107125761027c565b8063313ce567116101e75780636ddd1713116101ab5780636ddd17131461056257806370a082311461058c57806386f6c3c1146105c857806387d3a14d146105f0578063893d20e81461061a5780638b424267146106445761027c565b8063313ce5671461048257806344a33fd2146104ac578063571ac8b0146104d4578063658d4b7f146105105780636b67c4df146105385761027c565b806318160ddd1161023957806318160ddd146103645780631df4ccfc1461038e57806323b872dd146103b85780632b112e49146103f45780632d48e8961461041e5780632f54bf6e146104465761027c565b80630445b667146102805780630662551d146102aa57806306fdde03146102d4578063095ea7b3146102fe578063180b0d7e1461033a5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a5c565b6040516102a19190613fc7565b60405180910390f35b3480156102b5575f80fd5b506102be610a62565b6040516102cb9190613fc7565b60405180910390f35b3480156102df575f80fd5b506102e8610a68565b6040516102f5919061406a565b60405180910390f35b348015610309575f80fd5b50610324600480360381019061031f9190614112565b610af8565b604051610331919061416a565b60405180910390f35b348015610345575f80fd5b5061034e610be5565b60405161035b9190613fc7565b60405180910390f35b34801561036f575f80fd5b50610378610beb565b6040516103859190613fc7565b60405180910390f35b348015610399575f80fd5b506103a2610bf4565b6040516103af9190613fc7565b60405180910390f35b3480156103c3575f80fd5b506103de60048036038101906103d99190614183565b610bfa565b6040516103eb919061416a565b60405180910390f35b3480156103ff575f80fd5b50610408610ded565b6040516104159190613fc7565b60405180910390f35b348015610429575f80fd5b50610444600480360381019061043f91906141d3565b610e6c565b005b348015610451575f80fd5b5061046c60048036038101906104679190614211565b610fca565b604051610479919061416a565b60405180910390f35b34801561048d575f80fd5b50610496611021565b6040516104a39190614257565b60405180910390f35b3480156104b7575f80fd5b506104d260048036038101906104cd9190614270565b611036565b005b3480156104df575f80fd5b506104fa60048036038101906104f59190614211565b6110e1565b604051610507919061416a565b60405180910390f35b34801561051b575f80fd5b50610536600480360381019061053191906142c5565b611113565b005b348015610543575f80fd5b5061054c6111b3565b6040516105599190613fc7565b60405180910390f35b34801561056d575f80fd5b506105766111b9565b604051610583919061416a565b60405180910390f35b348015610597575f80fd5b506105b260048036038101906105ad9190614211565b6111cb565b6040516105bf9190613fc7565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e99190614303565b611211565b005b3480156105fb575f80fd5b50610604611328565b6040516106119190613fc7565b60405180910390f35b348015610625575f80fd5b5061062e61132e565b60405161063b919061439b565b60405180910390f35b34801561064f575f80fd5b50610658611355565b6040516106659190613fc7565b60405180910390f35b348015610679575f80fd5b5061068261135b565b60405161068f919061406a565b60405180910390f35b3480156106a3575f80fd5b506106ac6113eb565b6040516106b99190613fc7565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e39190614270565b6113f1565b005b3480156106f5575f80fd5b50610710600480360381019061070b91906143b4565b61144a565b005b34801561071d575f80fd5b50610726611516565b604051610733919061444d565b60405180910390f35b348015610747575f80fd5b5061075061153b565b60405161075d919061439b565b60405180910390f35b348015610771575f80fd5b5061078c60048036038101906107879190614112565b611560565b604051610799919061416a565b60405180910390f35b3480156107ad575f80fd5b506107b6611574565b6040516107c39190614486565b60405180910390f35b3480156107d7575f80fd5b506107e0611599565b005b3480156107ed575f80fd5b506107f6611665565b604051610803919061439b565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d9190614270565b61168a565b60405161083f9190613fc7565b60405180910390f35b348015610853575f80fd5b5061086e600480360381019061086991906143b4565b6116fa565b60405161087b9190613fc7565b60405180910390f35b34801561088f575f80fd5b506108aa60048036038101906108a5919061449f565b61177c565b005b3480156108b7575f80fd5b506108c06117e8565b6040516108cd919061439b565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f79190614270565b61180d565b005b348015610909575f80fd5b50610924600480360381019061091f9190614518565b61185f565b005b348015610931575f80fd5b5061094c600480360381019061094791906142c5565b611974565b005b348015610959575f80fd5b50610962611d4f565b60405161096f9190614563565b60405180910390f35b348015610983575f80fd5b5061098c611d74565b6040516109999190613fc7565b60405180910390f35b3480156109ad575f80fd5b506109b6611d7a565b6040516109c3919061416a565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed9190614211565b611d8c565b6040516109ff919061416a565b60405180910390f35b348015610a13575f80fd5b50610a1c611dde565b604051610a299190613fc7565b60405180910390f35b348015610a3d575f80fd5b50610a46611de4565b604051610a53919061416a565b60405180910390f35b60205481565b60135481565b606060058054610a77906145a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906145a9565b8015610aee5780601f10610ac557610100808354040283529160200191610aee565b820191905f5260205f20905b815481529060010190602001808311610ad157829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bd39190613fc7565b60405180910390a36001905092915050565b60155481565b5f600854905090565b60145481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610dd957610d5c826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df79092919063ffffffff16565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610de4848484611e59565b90509392505050565b5f610e67610e1b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111cb565b610e59610e4860035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111cb565b60085461267690919063ffffffff16565b61267690919063ffffffff16565b905090565b610e7533611d8c565b610eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eab90614623565b60405180910390fd5b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f10929190614641565b5f604051808303815f87803b158015610f27575f80fd5b505af1158015610f39573d5f803e3d5ffd5b50505050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f99929190614641565b5f604051808303815f87803b158015610fb0575f80fd5b505af1158015610fc2573d5f803e3d5ffd5b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60075f9054906101000a900460ff16905090565b61103f33611d8c565b61107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614623565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846110aa9190614695565b6110b49190614703565b90811502906040515f60405180830381858888f193505050501580156110dc573d5f803e3d5ffd5b505050565b5f61110c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610af8565b9050919050565b61111c33611d8c565b61115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614623565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60115481565b601f5f9054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61121a33611d8c565b611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614623565b60405180910390fd5b85600e8190555084600f81905550836011819055508260128190555081601081905550806013819055506112cc816112be856112b0886112a28b8d6126bf90919063ffffffff16565b6126bf90919063ffffffff16565b6126bf90919063ffffffff16565b6126bf90919063ffffffff16565b6014819055506103e8601581905550606460145410611320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113179061477d565b60405180910390fd5b505050505050565b60105481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60606006805461136a906145a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906145a9565b80156113e15780601f106113b8576101008083540402835291602001916113e1565b820191905f5260205f20905b8154815290600101906020018083116113c457829003601f168201915b5050505050905090565b600e5481565b6113fa33611d8c565b611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614623565b60405180910390fd5b80601d8190555080601e8190555050565b61145333611d8c565b611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990614623565b60405180910390fd5b8160175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61156c338484611e59565b905092915050565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115a233610fca565b6115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d8906147e5565b60405180910390fd5b600d5f9054906101000a900460ff1661162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061484d565b60405180910390fd5b6001601a60146101000a81548160ff0219169083151502179055505f600d5f6101000a81548160ff021916908315150217905550565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116f3611696610ded565b6116e56116d660026116c8601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111cb565b61271c90919063ffffffff16565b8561271c90919063ffffffff16565b61279390919063ffffffff16565b9050919050565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61178533611d8c565b6117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614623565b60405180910390fd5b81601f5f6101000a81548160ff021916908315150217905550806020819055505050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61181633610fca565b611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c906147e5565b60405180910390fd5b8060168190555050565b61186833610fca565b6118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e906147e5565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611969919061488b565b60405180910390a150565b61197d33611d8c565b6119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390614623565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611a455750601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611a4d575f80fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015611bbe57601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96835f6040518363ffffffff1660e01b8152600401611b039291906148dd565b5f604051808303815f87803b158015611b1a575f80fd5b505af1158015611b2c573d5f803e3d5ffd5b50505050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96835f6040518363ffffffff1660e01b8152600401611b8c9291906148dd565b5f604051808303815f87803b158015611ba3575f80fd5b505af1158015611bb5573d5f803e3d5ffd5b50505050611d4b565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611c57929190614904565b5f604051808303815f87803b158015611c6e575f80fd5b505af1158015611c80573d5f803e3d5ffd5b50505050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611d1d929190614904565b5f604051808303815f87803b158015611d34575f80fd5b505af1158015611d46573d5f803e3d5ffd5b505050505b5050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600d5f9054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60165481565b601a60149054906101000a900460ff1681565b5f838311158290611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35919061406a565b60405180910390fd5b505f8385611e4c919061492b565b9050809150509392505050565b5f60215f9054906101000a900460ff1615611e8057611e798484846127dc565b905061266f565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f1e575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f7357601a60149054906101000a900460ff16611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906149a8565b60405180910390fd5b5b611f7b6129a6565b15611f8957611f88612a77565b5b612010826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df79092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f61205c85856135df565b61206657826120c1565b6120c08584601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461368b565b5b90506121138160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661232757601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b815260040161223b929190614904565b5f604051808303815f87803b158015612252575f80fd5b505af1925050508015612263575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016122fd929190614904565b5f604051808303815f87803b158015612314575f80fd5b505af1925050508015612325575060015b505b600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124fa57601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b815260040161240e929190614904565b5f604051808303815f87803b158015612425575f80fd5b505af1925050508015612436575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016124d0929190614904565b5f604051808303815f87803b1580156124e7575f80fd5b505af19250505080156124f8575060015b505b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601d546040518263ffffffff1660e01b81526004016125569190613fc7565b5f604051808303815f87803b15801561256d575f80fd5b505af192505050801561257e575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601d546040518263ffffffff1660e01b81526004016125db9190613fc7565b5f604051808303815f87803b1580156125f2575f80fd5b505af1925050508015612603575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126619190613fc7565b60405180910390a360019150505b9392505050565b5f6126b783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df7565b905092915050565b5f8082846126cd91906149c6565b905083811015612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614a43565b60405180910390fd5b8091505092915050565b5f80830361272c575f905061278d565b5f82846127399190614695565b90508284826127489190614703565b14612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f90614ad1565b60405180910390fd5b809150505b92915050565b5f6127d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139a3565b905092915050565b5f612864826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df79092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128f58260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129939190613fc7565b60405180910390a3600190509392505050565b5f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612a10575060215f9054906101000a900460ff16155b8015612a275750601f5f9054906101000a900460ff165b8015612a72575060205460095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b600160215f6101000a81548160ff0219169083151502179055505f612ad06002612ac2601454612ab4600e5460205461271c90919063ffffffff16565b61279390919063ffffffff16565b61279390919063ffffffff16565b90505f612ae88260205461267690919063ffffffff16565b90505f4790505f600267ffffffffffffffff811115612b0a57612b09614aef565b5b604051908082528060200260200182016040528015612b385781602001602082028036833780820191505090505b50905030815f81518110612b4f57612b4e614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612bbf57612bbe614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401612c5b959493929190614c00565b5f604051808303815f87803b158015612c72575f80fd5b505af1158015612c84573d5f803e3d5ffd5b505050505f612c9c834761267690919063ffffffff16565b90505f612cdd6103e8612ccf612cbe6002600e5461279390919063ffffffff16565b60145461267690919063ffffffff16565b61271c90919063ffffffff16565b90505f612d2e6002612d20612cfd6103e88661279390919063ffffffff16565b612d12600e548861271c90919063ffffffff16565b61279390919063ffffffff16565b61279390919063ffffffff16565b90505f612d7e82612d70612d4d6103e88761279390919063ffffffff16565b612d62600f548961271c90919063ffffffff16565b61279390919063ffffffff16565b6126bf90919063ffffffff16565b90505f612dbc612d996103e88661279390919063ffffffff16565b612dae6010548861271c90919063ffffffff16565b61279390919063ffffffff16565b90505f612dfa612dd76103e88761279390919063ffffffff16565b612dec6011548961271c90919063ffffffff16565b61279390919063ffffffff16565b90505f612e38612e156103e88861279390919063ffffffff16565b612e2a6013548a61271c90919063ffffffff16565b61279390919063ffffffff16565b9050601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0612e9e6003612e9060028961271c90919063ffffffff16565b61279390919063ffffffff16565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612ec7575f80fd5b505af193505050508015612ed9575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0612f2b60038761279390919063ffffffff16565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612f54575f80fd5b505af193505050508015612f66575060015b505f8111156133ce575f73e7308da032326de7a2a2b80e1131650e845ab98990505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612fc1919061439b565b602060405180830381865afa158015612fdc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130009190614c6c565b90505f600267ffffffffffffffff81111561301e5761301d614aef565b5b60405190808252806020026020018201604052801561304c5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f8151811061308457613083614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816001815181106130d3576130d2614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9561315e60028761279390919063ffffffff16565b5f8430426040518663ffffffff1660e01b81526004016131819493929190614c97565b5f604051808303818588803b158015613198575f80fd5b505af11580156131aa573d5f803e3d5ffd5b50505050505f61323a838573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131ed919061439b565b602060405180830381865afa158015613208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322c9190614c6c565b61267690919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016132ab929190614904565b6020604051808303815f875af11580156132c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132eb9190614cf5565b5060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71961333d60028861279390919063ffffffff16565b86845f8060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161338596959493929190614d20565b60606040518083038185885af11580156133a1573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906133c69190614d7f565b505050505050505b5f60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836175309060405161341890614dfc565b5f60405180830381858888f193505050503d805f8114613453576040519150601f19603f3d011682016040523d82523d5f602084013e613458565b606091505b505090505f90505f8c111561356b5760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71987308f5f8060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134ed96959493929190614d20565b60606040518083038185885af1158015613509573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061352e9190614d7f565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506868d604051613562929190614641565b60405180910390a15b5f613591856135838d4761267690919063ffffffff16565b61267690919063ffffffff16565b90505f8511156135b7576135b66135b182876126bf90919063ffffffff16565b613a04565b5b505050505050505050505050505f60215f6101000a81548160ff021916908315150217905550565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613637575f9050613685565b600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590505b92915050565b5f808261369957606461369d565b6016545b90505f6136e760646015546136b29190614695565b6136d9846136cb6014548a61271c90919063ffffffff16565b61271c90919063ffffffff16565b61279390919063ffffffff16565b90505f6137136014546137056012548561271c90919063ffffffff16565b61279390919063ffffffff16565b90505f613729828461267690919063ffffffff16565b90505f82111561388d576137a48260095f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138849190613fc7565b60405180910390a35b6138dd8160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161397b9190613fc7565b60405180910390a3613996838861267690919063ffffffff16565b9450505050509392505050565b5f80831182906139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e0919061406a565b60405180910390fd5b505f83856139f79190614703565b9050809150509392505050565b5f73e7308da032326de7a2a2b80e1131650e845ab98990505f73d4f6dfd7da9731d11b8789226f6d692f02fea16f90505f600267ffffffffffffffff811115613a5057613a4f614aef565b5b604051908082528060200260200182016040528015613a7e5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110613ab657613ab5614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110613b0557613b04614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600267ffffffffffffffff811115613b5b57613b5a614aef565b5b604051908082528060200260200182016040528015613b895781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110613bc157613bc0614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110613c1057613c0f614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95613cae6003613ca060028a61271c90919063ffffffff16565b61279390919063ffffffff16565b5f8530426040518663ffffffff1660e01b8152600401613cd19493929190614c97565b5f604051808303818588803b158015613ce8575f80fd5b505af1158015613cfa573d5f803e3d5ffd5b505050505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95613d636003613d5560018a61271c90919063ffffffff16565b61279390919063ffffffff16565b5f8430426040518663ffffffff1660e01b8152600401613d869493929190614c97565b5f604051808303818588803b158015613d9d575f80fd5b505af1158015613daf573d5f803e3d5ffd5b50505050505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613dee919061439b565b602060405180830381865afa158015613e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e2d9190614c6c565b90505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e69919061439b565b602060405180830381865afa158015613e84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea89190614c6c565b90508573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b8152600401613ee7929190614904565b6020604051808303815f875af1158015613f03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f279190614cf5565b508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369836040518363ffffffff1660e01b8152600401613f65929190614904565b6020604051808303815f875af1158015613f81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fa59190614cf5565b5050505050505050565b5f819050919050565b613fc181613faf565b82525050565b5f602082019050613fda5f830184613fb8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614017578082015181840152602081019050613ffc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61403c82613fe0565b6140468185613fea565b9350614056818560208601613ffa565b61405f81614022565b840191505092915050565b5f6020820190508181035f8301526140828184614032565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140b78261408e565b9050919050565b6140c7816140ad565b81146140d1575f80fd5b50565b5f813590506140e2816140be565b92915050565b6140f181613faf565b81146140fb575f80fd5b50565b5f8135905061410c816140e8565b92915050565b5f80604083850312156141285761412761408a565b5b5f614135858286016140d4565b9250506020614146858286016140fe565b9150509250929050565b5f8115159050919050565b61416481614150565b82525050565b5f60208201905061417d5f83018461415b565b92915050565b5f805f6060848603121561419a5761419961408a565b5b5f6141a7868287016140d4565b93505060206141b8868287016140d4565b92505060406141c9868287016140fe565b9150509250925092565b5f80604083850312156141e9576141e861408a565b5b5f6141f6858286016140fe565b9250506020614207858286016140fe565b9150509250929050565b5f602082840312156142265761422561408a565b5b5f614233848285016140d4565b91505092915050565b5f60ff82169050919050565b6142518161423c565b82525050565b5f60208201905061426a5f830184614248565b92915050565b5f602082840312156142855761428461408a565b5b5f614292848285016140fe565b91505092915050565b6142a481614150565b81146142ae575f80fd5b50565b5f813590506142bf8161429b565b92915050565b5f80604083850312156142db576142da61408a565b5b5f6142e8858286016140d4565b92505060206142f9858286016142b1565b9150509250929050565b5f805f805f8060c0878903121561431d5761431c61408a565b5b5f61432a89828a016140fe565b965050602061433b89828a016140fe565b955050604061434c89828a016140fe565b945050606061435d89828a016140fe565b935050608061436e89828a016140fe565b92505060a061437f89828a016140fe565b9150509295509295509295565b614395816140ad565b82525050565b5f6020820190506143ae5f83018461438c565b92915050565b5f80604083850312156143ca576143c961408a565b5b5f6143d7858286016140d4565b92505060206143e8858286016140d4565b9150509250929050565b5f819050919050565b5f61441561441061440b8461408e565b6143f2565b61408e565b9050919050565b5f614426826143fb565b9050919050565b5f6144378261441c565b9050919050565b6144478161442d565b82525050565b5f6020820190506144605f83018461443e565b92915050565b5f6144708261441c565b9050919050565b61448081614466565b82525050565b5f6020820190506144995f830184614477565b92915050565b5f80604083850312156144b5576144b461408a565b5b5f6144c2858286016142b1565b92505060206144d3858286016140fe565b9150509250929050565b5f6144e78261408e565b9050919050565b6144f7816144dd565b8114614501575f80fd5b50565b5f81359050614512816144ee565b92915050565b5f6020828403121561452d5761452c61408a565b5b5f61453a84828501614504565b91505092915050565b5f61454d8261441c565b9050919050565b61455d81614543565b82525050565b5f6020820190506145765f830184614554565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806145c057607f821691505b6020821081036145d3576145d261457c565b5b50919050565b7f21415554484f52495a45440000000000000000000000000000000000000000005f82015250565b5f61460d600b83613fea565b9150614618826145d9565b602082019050919050565b5f6020820190508181035f83015261463a81614601565b9050919050565b5f6040820190506146545f830185613fb8565b6146616020830184613fb8565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61469f82613faf565b91506146aa83613faf565b92508282026146b881613faf565b915082820484148315176146cf576146ce614668565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61470d82613faf565b915061471883613faf565b925082614728576147276146d6565b5b828204905092915050565b7f466565732063616e6e6f74206265206d6f7265207468616e20313025000000005f82015250565b5f614767601c83613fea565b915061477282614733565b602082019050919050565b5f6020820190508181035f8301526147948161475b565b9050919050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f6147cf600683613fea565b91506147da8261479b565b602082019050919050565b5f6020820190508181035f8301526147fc816147c3565b9050919050565b7f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000005f82015250565b5f614837601983613fea565b915061484282614803565b602082019050919050565b5f6020820190508181035f8301526148648161482b565b9050919050565b5f6148758261441c565b9050919050565b6148858161486b565b82525050565b5f60208201905061489e5f83018461487c565b92915050565b5f819050919050565b5f6148c76148c26148bd846148a4565b6143f2565b613faf565b9050919050565b6148d7816148ad565b82525050565b5f6040820190506148f05f83018561438c565b6148fd60208301846148ce565b9392505050565b5f6040820190506149175f83018561438c565b6149246020830184613fb8565b9392505050565b5f61493582613faf565b915061494083613faf565b925082820390508181111561495857614957614668565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f614992601483613fea565b915061499d8261495e565b602082019050919050565b5f6020820190508181035f8301526149bf81614986565b9050919050565b5f6149d082613faf565b91506149db83613faf565b92508282019050808211156149f3576149f2614668565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614a2d601b83613fea565b9150614a38826149f9565b602082019050919050565b5f6020820190508181035f830152614a5a81614a21565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614abb602183613fea565b9150614ac682614a61565b604082019050919050565b5f6020820190508181035f830152614ae881614aaf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b7b816140ad565b82525050565b5f614b8c8383614b72565b60208301905092915050565b5f602082019050919050565b5f614bae82614b49565b614bb88185614b53565b9350614bc383614b63565b805f5b83811015614bf3578151614bda8882614b81565b9750614be583614b98565b925050600181019050614bc6565b5085935050505092915050565b5f60a082019050614c135f830188613fb8565b614c2060208301876148ce565b8181036040830152614c328186614ba4565b9050614c41606083018561438c565b614c4e6080830184613fb8565b9695505050505050565b5f81519050614c66816140e8565b92915050565b5f60208284031215614c8157614c8061408a565b5b5f614c8e84828501614c58565b91505092915050565b5f608082019050614caa5f8301876148ce565b8181036020830152614cbc8186614ba4565b9050614ccb604083018561438c565b614cd86060830184613fb8565b95945050505050565b5f81519050614cef8161429b565b92915050565b5f60208284031215614d0a57614d0961408a565b5b5f614d1784828501614ce1565b91505092915050565b5f60c082019050614d335f83018961438c565b614d406020830188613fb8565b614d4d60408301876148ce565b614d5a60608301866148ce565b614d67608083018561438c565b614d7460a0830184613fb8565b979650505050505050565b5f805f60608486031215614d9657614d9561408a565b5b5f614da386828701614c58565b9350506020614db486828701614c58565b9250506040614dc586828701614c58565b9150509250925092565b5f81905092915050565b50565b5f614de75f83614dcf565b9150614df282614dd9565b5f82019050919050565b5f614e0682614ddc565b915081905091905056fea26469706673582212205be09cf9864e33dec827246680e9f584d651f772965b1ab79cc265765c173abc64736f6c63430008140033608060405273f18b09a5b358b720f23d736163d328dba0bddf4160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a2760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c555f600d555f600e55348015620000d3575f80fd5b5060405162001ee738038062001ee78339818101604052810190620000f9919062000234565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001485773165c3410fc91ef562c50559f7d2289febed552d96200014a565b805b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000264565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001fe82620001d3565b9050919050565b6200021081620001f2565b81146200021b575f80fd5b50565b5f815190506200022e8162000205565b92915050565b5f602082840312156200024c576200024b620001cf565b5b5f6200025b848285016200021e565b91505092915050565b611c7580620002725f395ff3fe6080604052600436106100dc575f3560e01c8063ce7c2ac21161007e578063efca2eed11610058578063efca2eed14610286578063f0fc6bca146102b0578063ffb2c479146102c6578063ffd49c84146102ee576100dc565b8063ce7c2ac214610214578063d0e30db014610252578063e2d2e2191461025c576100dc565b80632d48e896116100ba5780632d48e8961461016e5780633a98ef39146101965780634fab0ae8146101c0578063997664d7146101ea576100dc565b806311ce023d146100e057806314b6ca961461010a57806328fd319814610132575b5f80fd5b3480156100eb575f80fd5b506100f4610318565b60405161010191906114c7565b60405180910390f35b348015610115575f80fd5b50610130600480360381019061012b9190611568565b61031e565b005b34801561013d575f80fd5b50610158600480360381019061015391906115a6565b6105c2565b60405161016591906114c7565b60405180910390f35b348015610179575f80fd5b50610194600480360381019061018f91906115d1565b6106ce565b005b3480156101a1575f80fd5b506101aa610736565b6040516101b791906114c7565b60405180910390f35b3480156101cb575f80fd5b506101d461073c565b6040516101e191906114c7565b60405180910390f35b3480156101f5575f80fd5b506101fe610742565b60405161020b91906114c7565b60405180910390f35b34801561021f575f80fd5b5061023a600480360381019061023591906115a6565b610748565b6040516102499392919061160f565b60405180910390f35b61025a61076e565b005b348015610267575f80fd5b50610270610b2c565b60405161027d91906114c7565b60405180910390f35b348015610291575f80fd5b5061029a610b32565b6040516102a791906114c7565b60405180910390f35b3480156102bb575f80fd5b506102c4610b38565b005b3480156102d1575f80fd5b506102ec60048036038101906102e79190611644565b610b43565b005b3480156102f9575f80fd5b50610302610cc8565b60405161030f91906114c7565b60405180910390f35b600c5481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610374575f80fd5b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411156103c5576103c482610cce565b5b5f8111801561041257505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b156104255761042082610f4c565b610482565b5f8114801561047257505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b156104815761048082610ff6565b5b5b6104e8816104da60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546008546111eb90919063ffffffff16565b61123490919063ffffffff16565b6008819055508060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f018190555061057a60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b5f8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015403610611575f90506106c9565b5f61065a60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b90505f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015490508082116106b1575f925050506106c9565b6106c481836111eb90919063ffffffff16565b925050505b919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610724575f80fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b6007602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c4575f80fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161081f919061167e565b602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e91906116ab565b90505f600267ffffffffffffffff81111561087c5761087b6116d6565b5b6040519080825280602002602001820160405280156108aa5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106108e2576108e1611703565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061095257610951611703565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95345f8430426040518663ffffffff1660e01b81526004016109ed9493929190611829565b5f604051808303818588803b158015610a04575f80fd5b505af1158015610a16573d5f803e3d5ffd5b50505050505f610ac78360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a7a919061167e565b602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab991906116ab565b6111eb90919063ffffffff16565b9050610ade8160095461123490919063ffffffff16565b600981905550610b21610b10600854610b0284600c546112c290919063ffffffff16565b61133990919063ffffffff16565b600b5461123490919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b4133610cce565b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b99575f80fd5b5f60048054905090505f8103610baf5750610cc5565b5f805a90505f5b8483108015610bc457508381105b15610cc05783600f5410610bda575f600f819055505b610c206004600f5481548110610bf357610bf2611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611382565b15610c6c57610c6b6004600f5481548110610c3e57610c3d611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cce565b5b610c91610c825a846111eb90919063ffffffff16565b8461123490919063ffffffff16565b92505a9150600f5f815480929190610ca8906118a0565b91905055508080610cb8906118a0565b915050610bb6565b505050505b50565b600d5481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540315610f49575f610d1f826105c2565b90505f811115610f4757610d3e81600a5461123490919063ffffffff16565b600a8190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610da09291906118e7565b6020604051808303815f875af1158015610dbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de09190611943565b504260065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610e768160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461123490919063ffffffff16565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020181905550610f0260075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b505b50565b60048054905060055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905061100a919061196e565b8154811061101b5761101a611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548154811061109457611093611703565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460055f6004600160048054905061112e919061196e565b8154811061113f5761113e611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060048054806111b6576111b56119a1565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f61122c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113ec565b905092915050565b5f80828461124291906119ce565b905083811015611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90611a5b565b60405180910390fd5b8091505092915050565b5f6112bb600c546112ad600b54856112c290919063ffffffff16565b61133990919063ffffffff16565b9050919050565b5f8083036112d2575f9050611333565b5f82846112df9190611a79565b90508284826112ee9190611ae7565b1461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590611b87565b60405180910390fd5b809150505b92915050565b5f61137a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061144e565b905092915050565b5f42600d5460065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113cf91906119ce565b1080156113e55750600e546113e3836105c2565b115b9050919050565b5f838311158290611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9190611c1f565b60405180910390fd5b505f8385611441919061196e565b9050809150509392505050565b5f8083118290611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9190611c1f565b60405180910390fd5b505f83856114a29190611ae7565b9050809150509392505050565b5f819050919050565b6114c1816114af565b82525050565b5f6020820190506114da5f8301846114b8565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61150d826114e4565b9050919050565b61151d81611503565b8114611527575f80fd5b50565b5f8135905061153881611514565b92915050565b611547816114af565b8114611551575f80fd5b50565b5f813590506115628161153e565b92915050565b5f806040838503121561157e5761157d6114e0565b5b5f61158b8582860161152a565b925050602061159c85828601611554565b9150509250929050565b5f602082840312156115bb576115ba6114e0565b5b5f6115c88482850161152a565b91505092915050565b5f80604083850312156115e7576115e66114e0565b5b5f6115f485828601611554565b925050602061160585828601611554565b9150509250929050565b5f6060820190506116225f8301866114b8565b61162f60208301856114b8565b61163c60408301846114b8565b949350505050565b5f60208284031215611659576116586114e0565b5b5f61166684828501611554565b91505092915050565b61167881611503565b82525050565b5f6020820190506116915f83018461166f565b92915050565b5f815190506116a58161153e565b92915050565b5f602082840312156116c0576116bf6114e0565b5b5f6116cd84828501611697565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f61175c61175761175284611730565b611739565b6114af565b9050919050565b61176c81611742565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6117a481611503565b82525050565b5f6117b5838361179b565b60208301905092915050565b5f602082019050919050565b5f6117d782611772565b6117e1818561177c565b93506117ec8361178c565b805f5b8381101561181c57815161180388826117aa565b975061180e836117c1565b9250506001810190506117ef565b5085935050505092915050565b5f60808201905061183c5f830187611763565b818103602083015261184e81866117cd565b905061185d604083018561166f565b61186a60608301846114b8565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118aa826114af565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118dc576118db611873565b5b600182019050919050565b5f6040820190506118fa5f83018561166f565b61190760208301846114b8565b9392505050565b5f8115159050919050565b6119228161190e565b811461192c575f80fd5b50565b5f8151905061193d81611919565b92915050565b5f60208284031215611958576119576114e0565b5b5f6119658482850161192f565b91505092915050565b5f611978826114af565b9150611983836114af565b925082820390508181111561199b5761199a611873565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6119d8826114af565b91506119e3836114af565b92508282019050808211156119fb576119fa611873565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611a45601b83611a01565b9150611a5082611a11565b602082019050919050565b5f6020820190508181035f830152611a7281611a39565b9050919050565b5f611a83826114af565b9150611a8e836114af565b9250828202611a9c816114af565b91508282048414831517611ab357611ab2611873565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611af1826114af565b9150611afc836114af565b925082611b0c57611b0b611aba565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f611b71602183611a01565b9150611b7c82611b17565b604082019050919050565b5f6020820190508181035f830152611b9e81611b65565b9050919050565b5f81519050919050565b5f5b83811015611bcc578082015181840152602081019050611bb1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611bf182611ba5565b611bfb8185611a01565b9350611c0b818560208601611baf565b611c1481611bd7565b840191505092915050565b5f6020820190508181035f830152611c378184611be7565b90509291505056fea26469706673582212203cbd6576f4f52e821cf7443a43cdaa8bd13d96dad22f748733979bac5683bea764736f6c63430008140033608060405273f18b09a5b358b720f23d736163d328dba0bddf4160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a2760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c555f600d555f600e55348015620000d3575f80fd5b5060405162001ee738038062001ee78339818101604052810190620000f9919062000234565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001485773165c3410fc91ef562c50559f7d2289febed552d96200014a565b805b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000264565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001fe82620001d3565b9050919050565b6200021081620001f2565b81146200021b575f80fd5b50565b5f815190506200022e8162000205565b92915050565b5f602082840312156200024c576200024b620001cf565b5b5f6200025b848285016200021e565b91505092915050565b611c7580620002725f395ff3fe6080604052600436106100dc575f3560e01c8063ce7c2ac21161007e578063efca2eed11610058578063efca2eed14610286578063f0fc6bca146102b0578063ffb2c479146102c6578063ffd49c84146102ee576100dc565b8063ce7c2ac214610214578063d0e30db014610252578063e2d2e2191461025c576100dc565b80632d48e896116100ba5780632d48e8961461016e5780633a98ef39146101965780634fab0ae8146101c0578063997664d7146101ea576100dc565b806311ce023d146100e057806314b6ca961461010a57806328fd319814610132575b5f80fd5b3480156100eb575f80fd5b506100f4610318565b60405161010191906114c7565b60405180910390f35b348015610115575f80fd5b50610130600480360381019061012b9190611568565b61031e565b005b34801561013d575f80fd5b50610158600480360381019061015391906115a6565b6105c2565b60405161016591906114c7565b60405180910390f35b348015610179575f80fd5b50610194600480360381019061018f91906115d1565b6106ce565b005b3480156101a1575f80fd5b506101aa610736565b6040516101b791906114c7565b60405180910390f35b3480156101cb575f80fd5b506101d461073c565b6040516101e191906114c7565b60405180910390f35b3480156101f5575f80fd5b506101fe610742565b60405161020b91906114c7565b60405180910390f35b34801561021f575f80fd5b5061023a600480360381019061023591906115a6565b610748565b6040516102499392919061160f565b60405180910390f35b61025a61076e565b005b348015610267575f80fd5b50610270610b2c565b60405161027d91906114c7565b60405180910390f35b348015610291575f80fd5b5061029a610b32565b6040516102a791906114c7565b60405180910390f35b3480156102bb575f80fd5b506102c4610b38565b005b3480156102d1575f80fd5b506102ec60048036038101906102e79190611644565b610b43565b005b3480156102f9575f80fd5b50610302610cc8565b60405161030f91906114c7565b60405180910390f35b600c5481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610374575f80fd5b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411156103c5576103c482610cce565b5b5f8111801561041257505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b156104255761042082610f4c565b610482565b5f8114801561047257505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b156104815761048082610ff6565b5b5b6104e8816104da60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546008546111eb90919063ffffffff16565b61123490919063ffffffff16565b6008819055508060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f018190555061057a60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b5f8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015403610611575f90506106c9565b5f61065a60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b90505f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015490508082116106b1575f925050506106c9565b6106c481836111eb90919063ffffffff16565b925050505b919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610724575f80fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b6007602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c4575f80fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161081f919061167e565b602060405180830381865afa15801561083a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085e91906116ab565b90505f600267ffffffffffffffff81111561087c5761087b6116d6565b5b6040519080825280602002602001820160405280156108aa5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106108e2576108e1611703565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061095257610951611703565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95345f8430426040518663ffffffff1660e01b81526004016109ed9493929190611829565b5f604051808303818588803b158015610a04575f80fd5b505af1158015610a16573d5f803e3d5ffd5b50505050505f610ac78360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a7a919061167e565b602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab991906116ab565b6111eb90919063ffffffff16565b9050610ade8160095461123490919063ffffffff16565b600981905550610b21610b10600854610b0284600c546112c290919063ffffffff16565b61133990919063ffffffff16565b600b5461123490919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b4133610cce565b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b99575f80fd5b5f60048054905090505f8103610baf5750610cc5565b5f805a90505f5b8483108015610bc457508381105b15610cc05783600f5410610bda575f600f819055505b610c206004600f5481548110610bf357610bf2611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611382565b15610c6c57610c6b6004600f5481548110610c3e57610c3d611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cce565b5b610c91610c825a846111eb90919063ffffffff16565b8461123490919063ffffffff16565b92505a9150600f5f815480929190610ca8906118a0565b91905055508080610cb8906118a0565b915050610bb6565b505050505b50565b600d5481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540315610f49575f610d1f826105c2565b90505f811115610f4757610d3e81600a5461123490919063ffffffff16565b600a8190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610da09291906118e7565b6020604051808303815f875af1158015610dbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de09190611943565b504260065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610e768160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461123490919063ffffffff16565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020181905550610f0260075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611291565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b505b50565b60048054905060055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905061100a919061196e565b8154811061101b5761101a611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548154811061109457611093611703565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460055f6004600160048054905061112e919061196e565b8154811061113f5761113e611703565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060048054806111b6576111b56119a1565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f61122c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113ec565b905092915050565b5f80828461124291906119ce565b905083811015611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90611a5b565b60405180910390fd5b8091505092915050565b5f6112bb600c546112ad600b54856112c290919063ffffffff16565b61133990919063ffffffff16565b9050919050565b5f8083036112d2575f9050611333565b5f82846112df9190611a79565b90508284826112ee9190611ae7565b1461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590611b87565b60405180910390fd5b809150505b92915050565b5f61137a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061144e565b905092915050565b5f42600d5460065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113cf91906119ce565b1080156113e55750600e546113e3836105c2565b115b9050919050565b5f838311158290611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a9190611c1f565b60405180910390fd5b505f8385611441919061196e565b9050809150509392505050565b5f8083118290611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9190611c1f565b60405180910390fd5b505f83856114a29190611ae7565b9050809150509392505050565b5f819050919050565b6114c1816114af565b82525050565b5f6020820190506114da5f8301846114b8565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61150d826114e4565b9050919050565b61151d81611503565b8114611527575f80fd5b50565b5f8135905061153881611514565b92915050565b611547816114af565b8114611551575f80fd5b50565b5f813590506115628161153e565b92915050565b5f806040838503121561157e5761157d6114e0565b5b5f61158b8582860161152a565b925050602061159c85828601611554565b9150509250929050565b5f602082840312156115bb576115ba6114e0565b5b5f6115c88482850161152a565b91505092915050565b5f80604083850312156115e7576115e66114e0565b5b5f6115f485828601611554565b925050602061160585828601611554565b9150509250929050565b5f6060820190506116225f8301866114b8565b61162f60208301856114b8565b61163c60408301846114b8565b949350505050565b5f60208284031215611659576116586114e0565b5b5f61166684828501611554565b91505092915050565b61167881611503565b82525050565b5f6020820190506116915f83018461166f565b92915050565b5f815190506116a58161153e565b92915050565b5f602082840312156116c0576116bf6114e0565b5b5f6116cd84828501611697565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f61175c61175761175284611730565b611739565b6114af565b9050919050565b61176c81611742565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6117a481611503565b82525050565b5f6117b5838361179b565b60208301905092915050565b5f602082019050919050565b5f6117d782611772565b6117e1818561177c565b93506117ec8361178c565b805f5b8381101561181c57815161180388826117aa565b975061180e836117c1565b9250506001810190506117ef565b5085935050505092915050565b5f60808201905061183c5f830187611763565b818103602083015261184e81866117cd565b905061185d604083018561166f565b61186a60608301846114b8565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118aa826114af565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118dc576118db611873565b5b600182019050919050565b5f6040820190506118fa5f83018561166f565b61190760208301846114b8565b9392505050565b5f8115159050919050565b6119228161190e565b811461192c575f80fd5b50565b5f8151905061193d81611919565b92915050565b5f60208284031215611958576119576114e0565b5b5f6119658482850161192f565b91505092915050565b5f611978826114af565b9150611983836114af565b925082820390508181111561199b5761199a611873565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6119d8826114af565b91506119e3836114af565b92508282019050808211156119fb576119fa611873565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611a45601b83611a01565b9150611a5082611a11565b602082019050919050565b5f6020820190508181035f830152611a7281611a39565b9050919050565b5f611a83826114af565b9150611a8e836114af565b9250828202611a9c816114af565b91508282048414831517611ab357611ab2611873565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611af1826114af565b9150611afc836114af565b925082611b0c57611b0b611aba565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f611b71602183611a01565b9150611b7c82611b17565b604082019050919050565b5f6020820190508181035f830152611b9e81611b65565b9050919050565b5f81519050919050565b5f5b83811015611bcc578082015181840152602081019050611bb1565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611bf182611ba5565b611bfb8185611a01565b9350611c0b818560208601611baf565b611c1481611bd7565b840191505092915050565b5f6020820190508181035f830152611c378184611be7565b90509291505056fea264697066735822122014b8edbf66f634e5d86126c55c2dc39df550364f6f40bfde78ea485b805bf9cf64736f6c63430008140033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000d4f7369726973205265626f726e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f53495200000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x608060405260043610610275575f3560e01c806395d89b411161014e578063dd62ed3e116100c0578063f887ea4011610079578063f887ea401461094e578063fce589d814610978578063fe634ad0146109a2578063fe9fbb80146109cc578063fed0d2a114610a08578063ffb54a9914610a325761027c565b8063dd62ed3e14610848578063df20fd4914610884578063e96fada2146108ac578063ec72d65f146108d6578063f2fde38b146108fe578063f708a64f146109265761027c565b8063a8aa1b3111610112578063a8aa1b311461073c578063a9059cbb14610766578063bfe10928146107a2578063c191c926146107cc578063ca33e64c146107e2578063d51ed1c81461080c5761027c565b806395d89b411461066e57806398118cb4146106985780639d1944f5146106c2578063a4b45c00146106ea578063a71b2fee146107125761027c565b8063313ce567116101e75780636ddd1713116101ab5780636ddd17131461056257806370a082311461058c57806386f6c3c1146105c857806387d3a14d146105f0578063893d20e81461061a5780638b424267146106445761027c565b8063313ce5671461048257806344a33fd2146104ac578063571ac8b0146104d4578063658d4b7f146105105780636b67c4df146105385761027c565b806318160ddd1161023957806318160ddd146103645780631df4ccfc1461038e57806323b872dd146103b85780632b112e49146103f45780632d48e8961461041e5780632f54bf6e146104465761027c565b80630445b667146102805780630662551d146102aa57806306fdde03146102d4578063095ea7b3146102fe578063180b0d7e1461033a5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a5c565b6040516102a19190613fc7565b60405180910390f35b3480156102b5575f80fd5b506102be610a62565b6040516102cb9190613fc7565b60405180910390f35b3480156102df575f80fd5b506102e8610a68565b6040516102f5919061406a565b60405180910390f35b348015610309575f80fd5b50610324600480360381019061031f9190614112565b610af8565b604051610331919061416a565b60405180910390f35b348015610345575f80fd5b5061034e610be5565b60405161035b9190613fc7565b60405180910390f35b34801561036f575f80fd5b50610378610beb565b6040516103859190613fc7565b60405180910390f35b348015610399575f80fd5b506103a2610bf4565b6040516103af9190613fc7565b60405180910390f35b3480156103c3575f80fd5b506103de60048036038101906103d99190614183565b610bfa565b6040516103eb919061416a565b60405180910390f35b3480156103ff575f80fd5b50610408610ded565b6040516104159190613fc7565b60405180910390f35b348015610429575f80fd5b50610444600480360381019061043f91906141d3565b610e6c565b005b348015610451575f80fd5b5061046c60048036038101906104679190614211565b610fca565b604051610479919061416a565b60405180910390f35b34801561048d575f80fd5b50610496611021565b6040516104a39190614257565b60405180910390f35b3480156104b7575f80fd5b506104d260048036038101906104cd9190614270565b611036565b005b3480156104df575f80fd5b506104fa60048036038101906104f59190614211565b6110e1565b604051610507919061416a565b60405180910390f35b34801561051b575f80fd5b50610536600480360381019061053191906142c5565b611113565b005b348015610543575f80fd5b5061054c6111b3565b6040516105599190613fc7565b60405180910390f35b34801561056d575f80fd5b506105766111b9565b604051610583919061416a565b60405180910390f35b348015610597575f80fd5b506105b260048036038101906105ad9190614211565b6111cb565b6040516105bf9190613fc7565b60405180910390f35b3480156105d3575f80fd5b506105ee60048036038101906105e99190614303565b611211565b005b3480156105fb575f80fd5b50610604611328565b6040516106119190613fc7565b60405180910390f35b348015610625575f80fd5b5061062e61132e565b60405161063b919061439b565b60405180910390f35b34801561064f575f80fd5b50610658611355565b6040516106659190613fc7565b60405180910390f35b348015610679575f80fd5b5061068261135b565b60405161068f919061406a565b60405180910390f35b3480156106a3575f80fd5b506106ac6113eb565b6040516106b99190613fc7565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e39190614270565b6113f1565b005b3480156106f5575f80fd5b50610710600480360381019061070b91906143b4565b61144a565b005b34801561071d575f80fd5b50610726611516565b604051610733919061444d565b60405180910390f35b348015610747575f80fd5b5061075061153b565b60405161075d919061439b565b60405180910390f35b348015610771575f80fd5b5061078c60048036038101906107879190614112565b611560565b604051610799919061416a565b60405180910390f35b3480156107ad575f80fd5b506107b6611574565b6040516107c39190614486565b60405180910390f35b3480156107d7575f80fd5b506107e0611599565b005b3480156107ed575f80fd5b506107f6611665565b604051610803919061439b565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d9190614270565b61168a565b60405161083f9190613fc7565b60405180910390f35b348015610853575f80fd5b5061086e600480360381019061086991906143b4565b6116fa565b60405161087b9190613fc7565b60405180910390f35b34801561088f575f80fd5b506108aa60048036038101906108a5919061449f565b61177c565b005b3480156108b7575f80fd5b506108c06117e8565b6040516108cd919061439b565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f79190614270565b61180d565b005b348015610909575f80fd5b50610924600480360381019061091f9190614518565b61185f565b005b348015610931575f80fd5b5061094c600480360381019061094791906142c5565b611974565b005b348015610959575f80fd5b50610962611d4f565b60405161096f9190614563565b60405180910390f35b348015610983575f80fd5b5061098c611d74565b6040516109999190613fc7565b60405180910390f35b3480156109ad575f80fd5b506109b6611d7a565b6040516109c3919061416a565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed9190614211565b611d8c565b6040516109ff919061416a565b60405180910390f35b348015610a13575f80fd5b50610a1c611dde565b604051610a299190613fc7565b60405180910390f35b348015610a3d575f80fd5b50610a46611de4565b604051610a53919061416a565b60405180910390f35b60205481565b60135481565b606060058054610a77906145a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906145a9565b8015610aee5780601f10610ac557610100808354040283529160200191610aee565b820191905f5260205f20905b815481529060010190602001808311610ad157829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bd39190613fc7565b60405180910390a36001905092915050565b60155481565b5f600854905090565b60145481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610dd957610d5c826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df79092919063ffffffff16565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610de4848484611e59565b90509392505050565b5f610e67610e1b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111cb565b610e59610e4860035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111cb565b60085461267690919063ffffffff16565b61267690919063ffffffff16565b905090565b610e7533611d8c565b610eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eab90614623565b60405180910390fd5b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f10929190614641565b5f604051808303815f87803b158015610f27575f80fd5b505af1158015610f39573d5f803e3d5ffd5b50505050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f99929190614641565b5f604051808303815f87803b158015610fb0575f80fd5b505af1158015610fc2573d5f803e3d5ffd5b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60075f9054906101000a900460ff16905090565b61103f33611d8c565b61107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614623565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846110aa9190614695565b6110b49190614703565b90811502906040515f60405180830381858888f193505050501580156110dc573d5f803e3d5ffd5b505050565b5f61110c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610af8565b9050919050565b61111c33611d8c565b61115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614623565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60115481565b601f5f9054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61121a33611d8c565b611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614623565b60405180910390fd5b85600e8190555084600f81905550836011819055508260128190555081601081905550806013819055506112cc816112be856112b0886112a28b8d6126bf90919063ffffffff16565b6126bf90919063ffffffff16565b6126bf90919063ffffffff16565b6126bf90919063ffffffff16565b6014819055506103e8601581905550606460145410611320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113179061477d565b60405180910390fd5b505050505050565b60105481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60606006805461136a906145a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906145a9565b80156113e15780601f106113b8576101008083540402835291602001916113e1565b820191905f5260205f20905b8154815290600101906020018083116113c457829003601f168201915b5050505050905090565b600e5481565b6113fa33611d8c565b611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614623565b60405180910390fd5b80601d8190555080601e8190555050565b61145333611d8c565b611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990614623565b60405180910390fd5b8160175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61156c338484611e59565b905092915050565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115a233610fca565b6115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d8906147e5565b60405180910390fd5b600d5f9054906101000a900460ff1661162f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116269061484d565b60405180910390fd5b6001601a60146101000a81548160ff0219169083151502179055505f600d5f6101000a81548160ff021916908315150217905550565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116f3611696610ded565b6116e56116d660026116c8601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111cb565b61271c90919063ffffffff16565b8561271c90919063ffffffff16565b61279390919063ffffffff16565b9050919050565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61178533611d8c565b6117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614623565b60405180910390fd5b81601f5f6101000a81548160ff021916908315150217905550806020819055505050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61181633610fca565b611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c906147e5565b60405180910390fd5b8060168190555050565b61186833610fca565b6118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e906147e5565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611969919061488b565b60405180910390a150565b61197d33611d8c565b6119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390614623565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611a455750601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611a4d575f80fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015611bbe57601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96835f6040518363ffffffff1660e01b8152600401611b039291906148dd565b5f604051808303815f87803b158015611b1a575f80fd5b505af1158015611b2c573d5f803e3d5ffd5b50505050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96835f6040518363ffffffff1660e01b8152600401611b8c9291906148dd565b5f604051808303815f87803b158015611ba3575f80fd5b505af1158015611bb5573d5f803e3d5ffd5b50505050611d4b565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611c57929190614904565b5f604051808303815f87803b158015611c6e575f80fd5b505af1158015611c80573d5f803e3d5ffd5b50505050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611d1d929190614904565b5f604051808303815f87803b158015611d34575f80fd5b505af1158015611d46573d5f803e3d5ffd5b505050505b5050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600d5f9054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60165481565b601a60149054906101000a900460ff1681565b5f838311158290611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35919061406a565b60405180910390fd5b505f8385611e4c919061492b565b9050809150509392505050565b5f60215f9054906101000a900460ff1615611e8057611e798484846127dc565b905061266f565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f1e575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f7357601a60149054906101000a900460ff16611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906149a8565b60405180910390fd5b5b611f7b6129a6565b15611f8957611f88612a77565b5b612010826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df79092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f61205c85856135df565b61206657826120c1565b6120c08584601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461368b565b5b90506121138160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661232757601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b815260040161223b929190614904565b5f604051808303815f87803b158015612252575f80fd5b505af1925050508015612263575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968660095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016122fd929190614904565b5f604051808303815f87803b158015612314575f80fd5b505af1925050508015612325575060015b505b600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124fa57601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b815260040161240e929190614904565b5f604051808303815f87803b158015612425575f80fd5b505af1925050508015612436575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968560095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016124d0929190614904565b5f604051808303815f87803b1580156124e7575f80fd5b505af19250505080156124f8575060015b505b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601d546040518263ffffffff1660e01b81526004016125569190613fc7565b5f604051808303815f87803b15801561256d575f80fd5b505af192505050801561257e575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601d546040518263ffffffff1660e01b81526004016125db9190613fc7565b5f604051808303815f87803b1580156125f2575f80fd5b505af1925050508015612603575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126619190613fc7565b60405180910390a360019150505b9392505050565b5f6126b783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611df7565b905092915050565b5f8082846126cd91906149c6565b905083811015612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614a43565b60405180910390fd5b8091505092915050565b5f80830361272c575f905061278d565b5f82846127399190614695565b90508284826127489190614703565b14612788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277f90614ad1565b60405180910390fd5b809150505b92915050565b5f6127d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139a3565b905092915050565b5f612864826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611df79092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128f58260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129939190613fc7565b60405180910390a3600190509392505050565b5f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612a10575060215f9054906101000a900460ff16155b8015612a275750601f5f9054906101000a900460ff165b8015612a72575060205460095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b600160215f6101000a81548160ff0219169083151502179055505f612ad06002612ac2601454612ab4600e5460205461271c90919063ffffffff16565b61279390919063ffffffff16565b61279390919063ffffffff16565b90505f612ae88260205461267690919063ffffffff16565b90505f4790505f600267ffffffffffffffff811115612b0a57612b09614aef565b5b604051908082528060200260200182016040528015612b385781602001602082028036833780820191505090505b50905030815f81518110612b4f57612b4e614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612bbf57612bbe614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401612c5b959493929190614c00565b5f604051808303815f87803b158015612c72575f80fd5b505af1158015612c84573d5f803e3d5ffd5b505050505f612c9c834761267690919063ffffffff16565b90505f612cdd6103e8612ccf612cbe6002600e5461279390919063ffffffff16565b60145461267690919063ffffffff16565b61271c90919063ffffffff16565b90505f612d2e6002612d20612cfd6103e88661279390919063ffffffff16565b612d12600e548861271c90919063ffffffff16565b61279390919063ffffffff16565b61279390919063ffffffff16565b90505f612d7e82612d70612d4d6103e88761279390919063ffffffff16565b612d62600f548961271c90919063ffffffff16565b61279390919063ffffffff16565b6126bf90919063ffffffff16565b90505f612dbc612d996103e88661279390919063ffffffff16565b612dae6010548861271c90919063ffffffff16565b61279390919063ffffffff16565b90505f612dfa612dd76103e88761279390919063ffffffff16565b612dec6011548961271c90919063ffffffff16565b61279390919063ffffffff16565b90505f612e38612e156103e88861279390919063ffffffff16565b612e2a6013548a61271c90919063ffffffff16565b61279390919063ffffffff16565b9050601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0612e9e6003612e9060028961271c90919063ffffffff16565b61279390919063ffffffff16565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612ec7575f80fd5b505af193505050508015612ed9575060015b50601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0612f2b60038761279390919063ffffffff16565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612f54575f80fd5b505af193505050508015612f66575060015b505f8111156133ce575f73e7308da032326de7a2a2b80e1131650e845ab98990505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612fc1919061439b565b602060405180830381865afa158015612fdc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130009190614c6c565b90505f600267ffffffffffffffff81111561301e5761301d614aef565b5b60405190808252806020026020018201604052801561304c5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f8151811061308457613083614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816001815181106130d3576130d2614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9561315e60028761279390919063ffffffff16565b5f8430426040518663ffffffff1660e01b81526004016131819493929190614c97565b5f604051808303818588803b158015613198575f80fd5b505af11580156131aa573d5f803e3d5ffd5b50505050505f61323a838573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131ed919061439b565b602060405180830381865afa158015613208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322c9190614c6c565b61267690919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016132ab929190614904565b6020604051808303815f875af11580156132c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132eb9190614cf5565b5060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71961333d60028861279390919063ffffffff16565b86845f8060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161338596959493929190614d20565b60606040518083038185885af11580156133a1573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906133c69190614d7f565b505050505050505b5f60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836175309060405161341890614dfc565b5f60405180830381858888f193505050503d805f8114613453576040519150601f19603f3d011682016040523d82523d5f602084013e613458565b606091505b505090505f90505f8c111561356b5760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71987308f5f8060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134ed96959493929190614d20565b60606040518083038185885af1158015613509573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061352e9190614d7f565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506868d604051613562929190614641565b60405180910390a15b5f613591856135838d4761267690919063ffffffff16565b61267690919063ffffffff16565b90505f8511156135b7576135b66135b182876126bf90919063ffffffff16565b613a04565b5b505050505050505050505050505f60215f6101000a81548160ff021916908315150217905550565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613637575f9050613685565b600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590505b92915050565b5f808261369957606461369d565b6016545b90505f6136e760646015546136b29190614695565b6136d9846136cb6014548a61271c90919063ffffffff16565b61271c90919063ffffffff16565b61279390919063ffffffff16565b90505f6137136014546137056012548561271c90919063ffffffff16565b61279390919063ffffffff16565b90505f613729828461267690919063ffffffff16565b90505f82111561388d576137a48260095f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138849190613fc7565b60405180910390a35b6138dd8160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126bf90919063ffffffff16565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161397b9190613fc7565b60405180910390a3613996838861267690919063ffffffff16565b9450505050509392505050565b5f80831182906139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e0919061406a565b60405180910390fd5b505f83856139f79190614703565b9050809150509392505050565b5f73e7308da032326de7a2a2b80e1131650e845ab98990505f73d4f6dfd7da9731d11b8789226f6d692f02fea16f90505f600267ffffffffffffffff811115613a5057613a4f614aef565b5b604051908082528060200260200182016040528015613a7e5781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110613ab657613ab5614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110613b0557613b04614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600267ffffffffffffffff811115613b5b57613b5a614aef565b5b604051908082528060200260200182016040528015613b895781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110613bc157613bc0614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110613c1057613c0f614b1c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95613cae6003613ca060028a61271c90919063ffffffff16565b61279390919063ffffffff16565b5f8530426040518663ffffffff1660e01b8152600401613cd19493929190614c97565b5f604051808303818588803b158015613ce8575f80fd5b505af1158015613cfa573d5f803e3d5ffd5b505050505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95613d636003613d5560018a61271c90919063ffffffff16565b61279390919063ffffffff16565b5f8430426040518663ffffffff1660e01b8152600401613d869493929190614c97565b5f604051808303818588803b158015613d9d575f80fd5b505af1158015613daf573d5f803e3d5ffd5b50505050505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613dee919061439b565b602060405180830381865afa158015613e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e2d9190614c6c565b90505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e69919061439b565b602060405180830381865afa158015613e84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea89190614c6c565b90508573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369846040518363ffffffff1660e01b8152600401613ee7929190614904565b6020604051808303815f875af1158015613f03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f279190614cf5565b508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610369836040518363ffffffff1660e01b8152600401613f65929190614904565b6020604051808303815f875af1158015613f81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fa59190614cf5565b5050505050505050565b5f819050919050565b613fc181613faf565b82525050565b5f602082019050613fda5f830184613fb8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614017578082015181840152602081019050613ffc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61403c82613fe0565b6140468185613fea565b9350614056818560208601613ffa565b61405f81614022565b840191505092915050565b5f6020820190508181035f8301526140828184614032565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140b78261408e565b9050919050565b6140c7816140ad565b81146140d1575f80fd5b50565b5f813590506140e2816140be565b92915050565b6140f181613faf565b81146140fb575f80fd5b50565b5f8135905061410c816140e8565b92915050565b5f80604083850312156141285761412761408a565b5b5f614135858286016140d4565b9250506020614146858286016140fe565b9150509250929050565b5f8115159050919050565b61416481614150565b82525050565b5f60208201905061417d5f83018461415b565b92915050565b5f805f6060848603121561419a5761419961408a565b5b5f6141a7868287016140d4565b93505060206141b8868287016140d4565b92505060406141c9868287016140fe565b9150509250925092565b5f80604083850312156141e9576141e861408a565b5b5f6141f6858286016140fe565b9250506020614207858286016140fe565b9150509250929050565b5f602082840312156142265761422561408a565b5b5f614233848285016140d4565b91505092915050565b5f60ff82169050919050565b6142518161423c565b82525050565b5f60208201905061426a5f830184614248565b92915050565b5f602082840312156142855761428461408a565b5b5f614292848285016140fe565b91505092915050565b6142a481614150565b81146142ae575f80fd5b50565b5f813590506142bf8161429b565b92915050565b5f80604083850312156142db576142da61408a565b5b5f6142e8858286016140d4565b92505060206142f9858286016142b1565b9150509250929050565b5f805f805f8060c0878903121561431d5761431c61408a565b5b5f61432a89828a016140fe565b965050602061433b89828a016140fe565b955050604061434c89828a016140fe565b945050606061435d89828a016140fe565b935050608061436e89828a016140fe565b92505060a061437f89828a016140fe565b9150509295509295509295565b614395816140ad565b82525050565b5f6020820190506143ae5f83018461438c565b92915050565b5f80604083850312156143ca576143c961408a565b5b5f6143d7858286016140d4565b92505060206143e8858286016140d4565b9150509250929050565b5f819050919050565b5f61441561441061440b8461408e565b6143f2565b61408e565b9050919050565b5f614426826143fb565b9050919050565b5f6144378261441c565b9050919050565b6144478161442d565b82525050565b5f6020820190506144605f83018461443e565b92915050565b5f6144708261441c565b9050919050565b61448081614466565b82525050565b5f6020820190506144995f830184614477565b92915050565b5f80604083850312156144b5576144b461408a565b5b5f6144c2858286016142b1565b92505060206144d3858286016140fe565b9150509250929050565b5f6144e78261408e565b9050919050565b6144f7816144dd565b8114614501575f80fd5b50565b5f81359050614512816144ee565b92915050565b5f6020828403121561452d5761452c61408a565b5b5f61453a84828501614504565b91505092915050565b5f61454d8261441c565b9050919050565b61455d81614543565b82525050565b5f6020820190506145765f830184614554565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806145c057607f821691505b6020821081036145d3576145d261457c565b5b50919050565b7f21415554484f52495a45440000000000000000000000000000000000000000005f82015250565b5f61460d600b83613fea565b9150614618826145d9565b602082019050919050565b5f6020820190508181035f83015261463a81614601565b9050919050565b5f6040820190506146545f830185613fb8565b6146616020830184613fb8565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61469f82613faf565b91506146aa83613faf565b92508282026146b881613faf565b915082820484148315176146cf576146ce614668565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61470d82613faf565b915061471883613faf565b925082614728576147276146d6565b5b828204905092915050565b7f466565732063616e6e6f74206265206d6f7265207468616e20313025000000005f82015250565b5f614767601c83613fea565b915061477282614733565b602082019050919050565b5f6020820190508181035f8301526147948161475b565b9050919050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f6147cf600683613fea565b91506147da8261479b565b602082019050919050565b5f6020820190508181035f8301526147fc816147c3565b9050919050565b7f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000005f82015250565b5f614837601983613fea565b915061484282614803565b602082019050919050565b5f6020820190508181035f8301526148648161482b565b9050919050565b5f6148758261441c565b9050919050565b6148858161486b565b82525050565b5f60208201905061489e5f83018461487c565b92915050565b5f819050919050565b5f6148c76148c26148bd846148a4565b6143f2565b613faf565b9050919050565b6148d7816148ad565b82525050565b5f6040820190506148f05f83018561438c565b6148fd60208301846148ce565b9392505050565b5f6040820190506149175f83018561438c565b6149246020830184613fb8565b9392505050565b5f61493582613faf565b915061494083613faf565b925082820390508181111561495857614957614668565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f614992601483613fea565b915061499d8261495e565b602082019050919050565b5f6020820190508181035f8301526149bf81614986565b9050919050565b5f6149d082613faf565b91506149db83613faf565b92508282019050808211156149f3576149f2614668565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614a2d601b83613fea565b9150614a38826149f9565b602082019050919050565b5f6020820190508181035f830152614a5a81614a21565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614abb602183613fea565b9150614ac682614a61565b604082019050919050565b5f6020820190508181035f830152614ae881614aaf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b7b816140ad565b82525050565b5f614b8c8383614b72565b60208301905092915050565b5f602082019050919050565b5f614bae82614b49565b614bb88185614b53565b9350614bc383614b63565b805f5b83811015614bf3578151614bda8882614b81565b9750614be583614b98565b925050600181019050614bc6565b5085935050505092915050565b5f60a082019050614c135f830188613fb8565b614c2060208301876148ce565b8181036040830152614c328186614ba4565b9050614c41606083018561438c565b614c4e6080830184613fb8565b9695505050505050565b5f81519050614c66816140e8565b92915050565b5f60208284031215614c8157614c8061408a565b5b5f614c8e84828501614c58565b91505092915050565b5f608082019050614caa5f8301876148ce565b8181036020830152614cbc8186614ba4565b9050614ccb604083018561438c565b614cd86060830184613fb8565b95945050505050565b5f81519050614cef8161429b565b92915050565b5f60208284031215614d0a57614d0961408a565b5b5f614d1784828501614ce1565b91505092915050565b5f60c082019050614d335f83018961438c565b614d406020830188613fb8565b614d4d60408301876148ce565b614d5a60608301866148ce565b614d67608083018561438c565b614d7460a0830184613fb8565b979650505050505050565b5f805f60608486031215614d9657614d9561408a565b5b5f614da386828701614c58565b9350506020614db486828701614c58565b9250506040614dc586828701614c58565b9150509250925092565b5f81905092915050565b50565b5f614de75f83614dcf565b9150614df282614dd9565b5f82019050919050565b5f614e0682614ddc565b915081905091905056fea26469706673582212205be09cf9864e33dec827246680e9f584d651f772965b1ab79cc265765c173abc64736f6c63430008140033