FTM Price: $1.02 (+1.07%)
Gas: 151 GWei

Contract

0x5E5AabC95380B38C014FDc5e602C5183177fcCa4
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo251 wei

FTM Value

Less Than $0.01 (@ $1.02/FTM)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve763249552024-02-26 4:50:5631 days ago1708923056IN
0x5E5AabC9...3177fcCa4
0 FTM0.00488776103.40531287
Transfer763249062024-02-26 4:49:5031 days ago1708922990IN
0x5E5AabC9...3177fcCa4
0 FTM0.04141907104.38721676
Approve707922842023-11-18 10:11:48131 days ago1700302308IN
0x5E5AabC9...3177fcCa4
0 FTM0.0007053626.31570913
Approve707919862023-11-18 10:02:13131 days ago1700301733IN
0x5E5AabC9...3177fcCa4
0 FTM0.000648526.14515247
Approve580734552023-03-21 18:18:10372 days ago1679422690IN
0x5E5AabC9...3177fcCa4
0 FTM0.0033011398
Approve580375572023-03-21 7:00:57373 days ago1679382057IN
0x5E5AabC9...3177fcCa4
0 FTM0.0010229141.24011088
Approve515700332022-11-28 22:10:10485 days ago1669673410IN
0x5E5AabC9...3177fcCa4
0 FTM0.0029476260
Approve511194952022-11-19 9:17:31495 days ago1668849451IN
0x5E5AabC9...3177fcCa4
0 FTM0.00492154103
Approve392953332022-05-29 4:02:04669 days ago1653796924IN
0x5E5AabC9...3177fcCa4
0 FTM0.000245235.15663472
Transfer369614302022-04-25 23:28:23702 days ago1650929303IN
0x5E5AabC9...3177fcCa4
0 FTM0.0948667199.5291
Transfer369507662022-04-25 20:04:53702 days ago1650917093IN
0x5E5AabC9...3177fcCa4
0 FTM0.12073274337.7376
Approve346214102022-03-28 12:55:57731 days ago1648472157IN
0x5E5AabC9...3177fcCa4
0 FTM0.00911971200.7111
Approve345597282022-03-27 19:50:46731 days ago1648410646IN
0x5E5AabC9...3177fcCa4
0 FTM0.00770432169.5606
Approve321958292022-02-28 14:41:04759 days ago1646059264IN
0x5E5AabC9...3177fcCa4
0 FTM0.023872221,103
Approve321008752022-02-27 12:55:05760 days ago1645966505IN
0x5E5AabC9...3177fcCa4
0 FTM0.024846161,148
Approve316279082022-02-21 17:17:43765 days ago1645463863IN
0x5E5AabC9...3177fcCa4
0 FTM0.00753237348.028
Approve316040572022-02-21 10:50:56766 days ago1645440656IN
0x5E5AabC9...3177fcCa4
0 FTM0.00616825285
Set Tx Limit315151802022-02-20 12:19:22767 days ago1645359562IN
0x5E5AabC9...3177fcCa4
0 FTM0.00493307162.3097
Set Free315145682022-02-20 12:11:03767 days ago1645359063IN
0x5E5AabC9...3177fcCa4
0 FTM0.007688167.0725
Set Is Fee Exemp...315144042022-02-20 12:08:45767 days ago1645358925IN
0x5E5AabC9...3177fcCa4
0 FTM0.00481699181.8559
Approve315133992022-02-20 11:54:36767 days ago1645358076IN
0x5E5AabC9...3177fcCa4
0 FTM0.00561206179.8912
Set Max Wallet315131312022-02-20 11:50:58767 days ago1645357858IN
0x5E5AabC9...3177fcCa4
0 FTM0.00626457205.7062
Set Is Tx Limit ...315129042022-02-20 11:47:28767 days ago1645357648IN
0x5E5AabC9...3177fcCa4
0 FTM0.00505299190.6072
Approve314199862022-02-19 12:11:03768 days ago1645272663IN
0x5E5AabC9...3177fcCa4
0 FTM0.0049346228
Approve314165412022-02-19 11:15:50768 days ago1645269350IN
0x5E5AabC9...3177fcCa4
0 FTM0.00419874194
View all transactions

Latest 25 internal transactions (View All)

Parent Txn Hash Block From To Value
346215952022-03-28 12:58:38731 days ago1648472318
0x5E5AabC9...3177fcCa4
1.11935887 FTM
346215952022-03-28 12:58:38731 days ago1648472318
0x5E5AabC9...3177fcCa4
0.8954871 FTM
346215952022-03-28 12:58:38731 days ago1648472318
0x5E5AabC9...3177fcCa4
2.01484598 FTM
315153382022-02-20 12:21:46767 days ago1645359706
0x5E5AabC9...3177fcCa4
0.58913687 FTM
315153382022-02-20 12:21:46767 days ago1645359706
0x5E5AabC9...3177fcCa4
0.4713095 FTM
315153382022-02-20 12:21:46767 days ago1645359706
0x5E5AabC9...3177fcCa4
1.06044638 FTM
315130882022-02-20 11:50:13767 days ago1645357813
0x5E5AabC9...3177fcCa4
0.72585791 FTM
315130882022-02-20 11:50:13767 days ago1645357813
0x5E5AabC9...3177fcCa4
0.58068632 FTM
315130882022-02-20 11:50:13767 days ago1645357813
0x5E5AabC9...3177fcCa4
1.30654423 FTM
309918122022-02-15 0:43:52772 days ago1644885832
0x5E5AabC9...3177fcCa4
0.73905628 FTM
309918122022-02-15 0:43:52772 days ago1644885832
0x5E5AabC9...3177fcCa4
0.59124502 FTM
309918122022-02-15 0:43:52772 days ago1644885832
0x5E5AabC9...3177fcCa4
1.3303013 FTM
309917972022-02-15 0:43:39772 days ago1644885819
0x5E5AabC9...3177fcCa4
0.76303391 FTM
309917972022-02-15 0:43:39772 days ago1644885819
0x5E5AabC9...3177fcCa4
0.61042713 FTM
309917972022-02-15 0:43:39772 days ago1644885819
0x5E5AabC9...3177fcCa4
1.37346105 FTM
309917742022-02-15 0:43:20772 days ago1644885800
0x5E5AabC9...3177fcCa4
0.78819806 FTM
309917742022-02-15 0:43:20772 days ago1644885800
0x5E5AabC9...3177fcCa4
0.63055845 FTM
309917742022-02-15 0:43:20772 days ago1644885800
0x5E5AabC9...3177fcCa4
1.41875651 FTM
304948812022-02-09 23:09:57777 days ago1644448197
0x5E5AabC9...3177fcCa4
0.79589134 FTM
304948812022-02-09 23:09:57777 days ago1644448197
0x5E5AabC9...3177fcCa4
0.63671307 FTM
304948812022-02-09 23:09:57777 days ago1644448197
0x5E5AabC9...3177fcCa4
1.43260442 FTM
304696422022-02-09 17:08:03777 days ago1644426483
0x5E5AabC9...3177fcCa4
0.80059641 FTM
304696422022-02-09 17:08:03777 days ago1644426483
0x5E5AabC9...3177fcCa4
0.64047713 FTM
304696422022-02-09 17:08:03777 days ago1644426483
0x5E5AabC9...3177fcCa4
1.44107355 FTM
304026012022-02-08 23:42:57778 days ago1644363777
0x5E5AabC9...3177fcCa4
0.82107253 FTM
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
creditp

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-01-12
*/

/**
 *Submitted for verification at FtmScan.com on 2022-01-04
*/

// Stealth Launched
// 1k$ Initial Liquidity [600FTM]
// https://t.me/creditp

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.7;

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

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

interface IBEP20 {
    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;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

interface IUniswapV2Router {
    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;// excluded dividend
        uint256 totalRealised;
    }

    IBEP20 EP = IBEP20(0x77128DFdD0ac859B33F44050c6fa272F34872B5E); // CREDIT
    address WFTM = 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83;
    IUniswapV2Router 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;// to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 10 * (10 ** 18);

    uint256 currentIndex;

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

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

    constructor (address _router) {
        router = _router != address(0)
        ? IUniswapV2Router(_router)
        : IUniswapV2Router(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        _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 = EP.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WFTM;
        path[1] = address(EP);

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

        uint256 amount = EP.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);
            EP.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);
    }
/*
returns the  unpaid earnings
*/
    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 creditp is IBEP20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address EP = 0x77128DFdD0ac859B33F44050c6fa272F34872B5E; // CREDIT
    address public WFTM = 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Credit Printer";
    string constant _symbol = "creditp";
    uint8 constant _decimals = 6;

    uint256 _totalSupply = 1_000_000_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply.div(100); // 1%
    uint256 public _maxWallet = _totalSupply.div(40); // 2.5%

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public _isFree;

    uint256 liquidityFee = 0;
    uint256 buybackFee = 0;
    uint256 reflectionFee = 800;
    uint256 marketingFee = 1000;
    uint256 totalFee = 1800;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver=0x31F979CC66d55f5a541A1b7FEd24C76F06D39ec6; //liq address
    address public marketingFeeReceiver=0x9aC2060664DcbF547B44d06c03b72Ea961b8B7cC; // marketing address

    uint256 targetLiquidity = 5;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    mapping (address => bool) buyBacker;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    address public distributorAddress;

    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1500; // 0.1%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        address _router = 0xF491e7B69E4244ad4002BC14e878a34207E38c29;
        router = IUniswapV2Router(_router);
        pair = IUniswapV2Factory(router.factory()).createPair(WFTM, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WFTM = router.WETH();
        distributor = new DividendDistributor(_router);
        distributorAddress = address(distributor);

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        buyBacker[msg.sender] = true;

        autoLiquidityReceiver = msg.sender;

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

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    modifier onlyBuybacker() { require(buyBacker[msg.sender] == true, ""); _; }
    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, _totalSupply);
    }

    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] != _totalSupply){
            _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); }
         
        // Max  tx check
        address routerAddress = 0xF491e7B69E4244ad4002BC14e878a34207E38c29;
        // bool isBuy=sender== pair|| sender == routerAddress;
        bool isSell=recipient== pair|| recipient == routerAddress;
        
        checkTxLimit(sender, amount);
        
        // Max wallet check excluding pair and router
        if (!isSell && !_isFree[recipient]){
            require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
        }
        
        // No swapping on buy and tx
        if (isSell) {
            if(shouldSwapBack()){ swapBack(); }
            if(shouldAutoBuyback()){ triggerAutoBuyback(); }
        }
        //        if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }

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

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount;

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

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

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

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

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



    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

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

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return totalFee; }
        if(selling){ return totalFee; }
        return totalFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        /**
         * if (launchedAtTimestamp + 1 days > block.timestamp) {
            return totalFee.mul(18000).div(feeDenominator);
        } else if (buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp) {
            uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
            uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
            return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
        }
        */
        return totalFee;
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator);

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

        return amount.sub(feeAmount);
    }

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

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

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

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

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

        uint256 totalFTMFee = totalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountFTMLiquidity = amountFTM.mul(dynamicLiquidityFee).div(totalFTMFee).div(2);
        uint256 amountFTMReflection = amountFTM.mul(reflectionFee).div(totalFTMFee);
        uint256 amountFTMMarketing = amountFTM.mul(marketingFee).div(totalFTMFee);

        try distributor.deposit{value: amountFTMReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountFTMMarketing);
            
        

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

    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && autoBuybackEnabled
        && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number // After N blocks from last buyback
        && address(this).balance >= autoBuybackAmount;
    }

    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WFTM;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }


    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public authorized {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
    }
    
    function setMaxWallet(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxWallet = amount;
    }

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

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

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

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setFree(address holder) public onlyOwner {
        _isFree[holder] = true;
    }
    
    function unSetFree(address holder) public onlyOwner {
        _isFree[holder] = false;
    }
    
    function checkFree(address holder) public view onlyOwner returns(bool){
        return _isFree[holder];
    }

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

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

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

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

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

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

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

    event AutoLiquify(uint256 amountFTM, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountFTM","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WFTM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040527377128dfdd0ac859b33f44050c6fa272f34872b5e600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507321be370d5312f44cb42ce377bc9b8a0cef1a4c83600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600a62000186919062000e2a565b66038d7ea4c680006200019a919062000f67565b600755620001ba606460075462000bab60201b6200243f1790919060201c565b600855620001da602860075462000bab60201b6200243f1790919060201c565b600955600060105560006011556103206012556103e86013556107086014556127106015557331f979cc66d55f5a541a1b7fed24c76f06d39ec6601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739ac2060664dcbf547b44d06c03b72ea961b8b7cc601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005601855606460195560c8601e556064601f556107086021556000602260006101000a81548160ff0219169083151502179055506207a120602b556001602c60006101000a81548160ff0219169083151502179055506105dc60075462000312919062000d97565b602d553480156200032257600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600073f491e7b69e4244ad4002bc14e878a34207e38c29905080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047f57600080fd5b505afa15801562000494573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ba919062000cdc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200051892919062000d4d565b602060405180830381600087803b1580156200053357600080fd5b505af115801562000548573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056e919062000cdc565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620006bc57600080fd5b505afa158015620006d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f7919062000cdc565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620007469062000cb7565b62000752919062000d30565b604051809103906000f0801580156200076f573d6000803e3d6000fd5b50602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000abc8160075462000bc360201b60201c565b5062000af3601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075462000bc360201b60201c565b50600754600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000b9c919062000d7a565b60405180910390a3506200109d565b6000818362000bbb919062000d97565b905092915050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000ca5919062000d7a565b60405180910390a36001905092915050565b611ca5806200570d83390190565b60008151905062000cd68162001083565b92915050565b60006020828403121562000cf55762000cf462001071565b5b600062000d058482850162000cc5565b91505092915050565b62000d198162000fc8565b82525050565b62000d2a8162000ffc565b82525050565b600060208201905062000d47600083018462000d0e565b92915050565b600060408201905062000d64600083018562000d0e565b62000d73602083018462000d0e565b9392505050565b600060208201905062000d91600083018462000d1f565b92915050565b600062000da48262000ffc565b915062000db18362000ffc565b92508262000dc45762000dc362001042565b5b828204905092915050565b6000808291508390505b600185111562000e215780860481111562000df95762000df862001013565b5b600185161562000e095780820291505b808102905062000e198562001076565b945062000dd9565b94509492505050565b600062000e378262000ffc565b915062000e448362001006565b925062000e737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e7b565b905092915050565b60008262000e8d576001905062000f60565b8162000e9d576000905062000f60565b816001811462000eb6576002811462000ec15762000ef7565b600191505062000f60565b60ff84111562000ed65762000ed562001013565b5b8360020a91508482111562000ef05762000eef62001013565b5b5062000f60565b5060208310610133831016604e8410600b841016171562000f315782820a90508381111562000f2b5762000f2a62001013565b5b62000f60565b62000f40848484600162000dcf565b9250905081840481111562000f5a5762000f5962001013565b5b81810290505b9392505050565b600062000f748262000ffc565b915062000f818362000ffc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fbd5762000fbc62001013565b5b828202905092915050565b600062000fd58262000fdc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b6200108e8162000fc8565b81146200109a57600080fd5b50565b61466080620010ad6000396000f3fe6080604052600436106103545760003560e01c80637d1db4a5116101c6578063ca33e64c116100f7578063f0b37c0411610095578063f708a64f1161006f578063f708a64f14610c6d578063f84ba65d14610c96578063f887ea4014610cbf578063fe9fbb8014610cea5761035b565b8063f0b37c0414610bde578063f1f3bca314610c07578063f2fde38b14610c445761035b565b8063dd62ed3e116100d1578063dd62ed3e14610b22578063df20fd4914610b5f578063e91f214e14610b88578063e96fada214610bb35761035b565b8063ca33e64c14610a8f578063d51ed1c814610aba578063d806d12f14610af75761035b565b8063a51af4c511610164578063b210b06d1161013e578063b210b06d146109f9578063b6a5d7de14610a10578063bf56b37114610a39578063c6d2577d14610a645761035b565b8063a51af4c514610966578063a8aa1b3114610991578063a9059cbb146109bc5761035b565b806389ef69f6116101a057806389ef69f6146108c057806395d89b41146108e95780639d1944f514610914578063a4b45c001461093d5761035b565b80637d1db4a51461083f57806382247ec01461086a578063893d20e8146108955761035b565b8063296020e7116102a0578063571ac8b01161023e578063658d4b7f11610218578063658d4b7f146107975780636ddd1713146107c05780637088fb7f146107eb57806370a08231146108025761035b565b8063571ac8b0146107085780635c85974f146107455780635d0044ca1461076e5761035b565b80632f54bf6e1161027a5780632f54bf6e1461064c578063313ce567146106895780633425c001146106b45780633bb8a8d4146106dd5761035b565b8063296020e7146105bb5780632b112e49146105f85780632d48e896146106235761035b565b8063095ea7b31161030d578063201e7991116102e7578063201e79911461050157806321dbe8761461052a5780632375ce401461055557806323b872dd1461057e5761035b565b8063095ea7b31461045c5780631161ae391461049957806318160ddd146104d65761035b565b806301339c21146103605780630445b66714610377578063048c7baf146103a257806304a66b48146103cb57806306fdde03146103f457806307c89fe81461041f5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d27565b005b34801561038357600080fd5b5061038c610dc4565b6040516103999190614118565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613b20565b610dca565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613c9a565b610e56565b005b34801561040057600080fd5b50610409610f21565b6040516104169190614056565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190613946565b610f5e565b6040516104539190613fd4565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613a73565b610ffc565b6040516104909190613fd4565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613bb4565b6110ee565b6040516104cd9190613fd4565b60405180910390f35b3480156104e257600080fd5b506104eb611103565b6040516104f89190614118565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190613bb4565b61110d565b005b34801561053657600080fd5b5061053f611167565b60405161054c9190613eeb565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613bf4565b61118d565b005b34801561058a57600080fd5b506105a560048036038101906105a091906139e0565b611213565b6040516105b29190613fd4565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190613946565b6113f5565b6040516105ef9190613fd4565b60405180910390f35b34801561060457600080fd5b5061060d611415565b60405161061a9190614118565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190613bb4565b611497565b005b34801561065857600080fd5b50610673600480360381019061066e9190613946565b611572565b6040516106809190613fd4565b60405180910390f35b34801561069557600080fd5b5061069e6115cb565b6040516106ab91906141b6565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613946565b6115d4565b005b3480156106e957600080fd5b506106f2611677565b6040516106ff9190613fd4565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613946565b61168a565b60405161073c9190613fd4565b60405180910390f35b34801561075157600080fd5b5061076c60048036038101906107679190613b87565b61169f565b005b34801561077a57600080fd5b5061079560048036038101906107909190613b87565b61170d565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613a33565b61177b565b005b3480156107cc57600080fd5b506107d561181e565b6040516107e29190613fd4565b60405180910390f35b3480156107f757600080fd5b50610800611831565b005b34801561080e57600080fd5b5061082960048036038101906108249190613946565b6118c8565b6040516108369190614118565b60405180910390f35b34801561084b57600080fd5b50610854611911565b6040516108619190614118565b60405180910390f35b34801561087657600080fd5b5061087f611917565b60405161088c9190614118565b60405180910390f35b3480156108a157600080fd5b506108aa61191d565b6040516108b79190613eeb565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190613946565b611946565b005b3480156108f557600080fd5b506108fe6119e9565b60405161090b9190614056565b60405180910390f35b34801561092057600080fd5b5061093b60048036038101906109369190613b87565b611a26565b005b34801561094957600080fd5b50610964600480360381019061095f91906139a0565b611a87565b005b34801561097257600080fd5b5061097b611b55565b6040516109889190613eeb565b60405180910390f35b34801561099d57600080fd5b506109a6611b7b565b6040516109b39190613eeb565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190613a73565b611ba1565b6040516109f09190613fd4565b60405180910390f35b348015610a0557600080fd5b50610a0e611bb6565b005b348015610a1c57600080fd5b50610a376004803603810190610a329190613946565b611c08565b005b348015610a4557600080fd5b50610a4e611caa565b604051610a5b9190614118565b60405180910390f35b348015610a7057600080fd5b50610a79611cb0565b604051610a869190614118565b60405180910390f35b348015610a9b57600080fd5b50610aa4611cb6565b604051610ab19190613eeb565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190613b87565b611cdc565b604051610aee9190614118565b60405180910390f35b348015610b0357600080fd5b50610b0c611d4e565b604051610b199190614118565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b4491906139a0565b611d58565b604051610b569190614118565b60405180910390f35b348015610b6b57600080fd5b50610b866004803603810190610b819190613ae0565b611ddf565b005b348015610b9457600080fd5b50610b9d611e4c565b604051610baa9190614118565b60405180910390f35b348015610bbf57600080fd5b50610bc8611e62565b604051610bd59190613eeb565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c009190613946565b611e88565b005b348015610c1357600080fd5b50610c2e6004803603810190610c299190613ab3565b611f2b565b604051610c3b9190614118565b60405180910390f35b348015610c5057600080fd5b50610c6b6004803603810190610c669190613973565b611f67565b005b348015610c7957600080fd5b50610c946004803603810190610c8f9190613a33565b612080565b005b348015610ca257600080fd5b50610cbd6004803603810190610cb89190613a33565b612320565b005b348015610ccb57600080fd5b50610cd46123c3565b604051610ce19190613fef565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613946565b6123e9565b604051610d1e9190613fd4565b60405180910390f35b610d30336123e9565b610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d66906140f8565b60405180910390fd5b6000601c5414610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab906140b8565b60405180910390fd5b43601c8190555042601d81905550565b602d5481565b610dd3336123e9565b610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e09906140f8565b60405180910390fd5b83602260006101000a81548160ff02191690831515021790555082602481905550600060258190555081602681905550806027819055504360288190555050505050565b610e5f336123e9565b610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e95906140f8565b60405180910390fd5b84601081905550836011819055508260128190555081601381905550610ef182610ee385610ed5888a61245590919063ffffffff16565b61245590919063ffffffff16565b61245590919063ffffffff16565b601481905550806015819055506004601554610f0d919061427c565b60145410610f1a57600080fd5b5050505050565b60606040518060400160405280600e81526020017f437265646974205072696e746572000000000000000000000000000000000000815250905090565b6000610f6933611572565b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f906140d8565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110dc9190614118565b60405180910390a36001905092915050565b6000826110fa83611cdc565b11905092915050565b6000600754905090565b611116336123e9565b611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906140f8565b60405180910390fd5b81601881905550806019819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611196336123e9565b6111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906140f8565b60405180910390fd5b600282846111e3919061427c565b111580156111f057508183115b6111f957600080fd5b82601e8190555081601f8190555080602181905550505050565b6000600754600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113e157611360826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461246b9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113ec8484846124c0565b90509392505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000611492611445600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c8565b611484611473600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c8565b600754612b8690919063ffffffff16565b612b8690919063ffffffff16565b905090565b6114a0336123e9565b6114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d6906140f8565b60405180910390fd5b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161153c92919061418d565b600060405180830381600087803b15801561155657600080fd5b505af115801561156a573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006006905090565b6115dd33611572565b61161c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611613906140d8565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602260009054906101000a900460ff1681565b600061169882600754610ffc565b9050919050565b6116a8336123e9565b6116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de906140f8565b60405180910390fd5b6103e86007546116f7919061427c565b81101561170357600080fd5b8060088190555050565b611716336123e9565b611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c906140f8565b60405180910390fd5b6103e8600754611765919061427c565b81101561177157600080fd5b8060098190555050565b611784336123e9565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906140f8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602c60009054906101000a900460ff1681565b61183a33611572565b611879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611870906140d8565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156118c4573d6000803e3d6000fd5b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61194f33611572565b61198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906140d8565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600781526020017f6372656469747000000000000000000000000000000000000000000000000000815250905090565b611a2f336123e9565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a65906140f8565b60405180910390fd5b620b71b08110611a7d57600080fd5b80602b8190555050565b611a90336123e9565b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906140f8565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611bae3384846124c0565b905092915050565b611bbf336123e9565b611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906140f8565b60405180910390fd5b6000602081905550565b611c1133611572565b611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c47906140d8565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c5481565b601d5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d47611ce9611415565b611d39611d2a6002611d1c601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c8565b612b9c90919063ffffffff16565b85612b9c90919063ffffffff16565b61243f90919063ffffffff16565b9050919050565b6000601454905090565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611de8336123e9565b611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906140f8565b60405180910390fd5b81602c60006101000a81548160ff02191690831515021790555080602d819055505050565b6fffffffffffffffffffffffffffffffff801681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e9133611572565b611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec7906140d8565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000436001601c54611f3d9190614226565b10611f4c576014549050611f62565b8115611f5c576014549050611f62565b60145490505b919050565b611f7033611572565b611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa6906140d8565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120759190613f06565b60405180910390a150565b612089336123e9565b6120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf906140f8565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156121525750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61215b57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561224d57602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401612216929190613f21565b600060405180830381600087803b15801561223057600080fd5b505af1158015612244573d6000803e3d6000fd5b5050505061231c565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016122e9929190613f4a565b600060405180830381600087803b15801561230357600080fd5b505af1158015612317573d6000803e3d6000fd5b505050505b5050565b612329336123e9565b612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f906140f8565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000818361244d919061427c565b905092915050565b600081836124639190614226565b905092915050565b60008383111582906124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa9190614056565b60405180910390fd5b5082840390509392505050565b6000602e60009054906101000a900460ff16156124e9576124e2848484612bb2565b9050612b7f565b600073f491e7b69e4244ad4002bc14e878a34207e38c2990506000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061258b57508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b90506125978685612d20565b801580156125ef5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126835760095484600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126429190614226565b10612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614098565b60405180910390fd5b5b80156126b657612691612dbd565b1561269f5761269e612e94565b5b6126a76133de565b156126b5576126b4613491565b5b5b61273f846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461246b9092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061278d8761350d565b61279757846127a3565b6127a2878787613564565b5b90506127f781600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245590919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661295d57602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612927929190613f4a565b600060405180830381600087803b15801561294157600080fd5b505af1925050508015612952575060015b61295b5761295c565b5b5b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8057602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a4a929190613f4a565b600060405180830381600087803b158015612a6457600080fd5b505af1925050508015612a75575060015b612a7e57612a7f565b5b5b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602b546040518263ffffffff1660e01b8152600401612add9190614118565b600060405180830381600087803b158015612af757600080fd5b505af1925050508015612b08575060015b612b1157612b12565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6f9190614118565b60405180910390a3600193505050505b9392505050565b60008183612b949190614307565b905092915050565b60008183612baa91906142ad565b905092915050565b6000612c3d826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461246b9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cd282600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245590919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612d7a5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db090614078565b60405180910390fd5b5050565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612e2a5750602e60009054906101000a900460ff16155b8015612e425750602c60009054906101000a900460ff165b8015612e8f5750602d54600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602e60006101000a81548160ff0219169083151502179055506000612ebf6018546019546110ee565b612ecb57601054612ece565b60005b90506000612f0e6002612f00601454612ef286602d54612b9c90919063ffffffff16565b61243f90919063ffffffff16565b61243f90919063ffffffff16565b90506000612f2782602d54612b8690919063ffffffff16565b90506000600267ffffffffffffffff811115612f4657612f456144bc565b5b604051908082528060200260200182016040528015612f745781602001602082028036833780820191505090505b5090503081600081518110612f8c57612f8b61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612ffd57612ffc61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016130a0959493929190614133565b600060405180830381600087803b1580156130ba57600080fd5b505af11580156130ce573d6000803e3d6000fd5b5050505060006130e78247612b8690919063ffffffff16565b9050600061311361310260028961243f90919063ffffffff16565b601454612b8690919063ffffffff16565b9050600061314f6002613141846131338c88612b9c90919063ffffffff16565b61243f90919063ffffffff16565b61243f90919063ffffffff16565b9050600061317a8361316c60125487612b9c90919063ffffffff16565b61243f90919063ffffffff16565b905060006131a58461319760135488612b9c90919063ffffffff16565b61243f90919063ffffffff16565b9050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561321157600080fd5b505af193505050508015613223575060015b61322c5761322d565b5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613295573d6000803e3d6000fd5b5060008911156133b757601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161332896959493929190613f73565b6060604051808303818588803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061337a9190613c47565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516133ae92919061418d565b60405180910390a15b505050505050505050506000602e60006101000a81548160ff021916908315150217905550565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561344b5750602e60009054906101000a900460ff16155b80156134635750602260009054906101000a900460ff165b801561347e57504360275460285461347b9190614226565b11155b801561348c57506026544710155b905090565b6134bf602654600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166136ff565b436028819055506134dd60265460255461245590919063ffffffff16565b602581905550602454602554111561350b576000602260006101000a81548160ff0219169083151502179055505b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806135e66015546135d86135c9601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611f2b565b86612b9c90919063ffffffff16565b61243f90919063ffffffff16565b905061363a81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245590919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136da9190614118565b60405180910390a36136f58184612b8690919063ffffffff16565b9150509392505050565b6001602e60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613737576137366144bc565b5b6040519080825280602002602001820160405280156137655781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061379f5761379e61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106137ee576137ed61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b815260040161388b949392919061400a565b6000604051808303818588803b1580156138a457600080fd5b505af11580156138b8573d6000803e3d6000fd5b5050505050506000602e60006101000a81548160ff0219169083151502179055505050565b6000813590506138ec816145ce565b92915050565b600081359050613901816145e5565b92915050565b600081359050613916816145fc565b92915050565b60008135905061392b81614613565b92915050565b60008151905061394081614613565b92915050565b60006020828403121561395c5761395b6144eb565b5b600061396a848285016138dd565b91505092915050565b600060208284031215613989576139886144eb565b5b6000613997848285016138f2565b91505092915050565b600080604083850312156139b7576139b66144eb565b5b60006139c5858286016138dd565b92505060206139d6858286016138dd565b9150509250929050565b6000806000606084860312156139f9576139f86144eb565b5b6000613a07868287016138dd565b9350506020613a18868287016138dd565b9250506040613a298682870161391c565b9150509250925092565b60008060408385031215613a4a57613a496144eb565b5b6000613a58858286016138dd565b9250506020613a6985828601613907565b9150509250929050565b60008060408385031215613a8a57613a896144eb565b5b6000613a98858286016138dd565b9250506020613aa98582860161391c565b9150509250929050565b600060208284031215613ac957613ac86144eb565b5b6000613ad784828501613907565b91505092915050565b60008060408385031215613af757613af66144eb565b5b6000613b0585828601613907565b9250506020613b168582860161391c565b9150509250929050565b60008060008060808587031215613b3a57613b396144eb565b5b6000613b4887828801613907565b9450506020613b598782880161391c565b9350506040613b6a8782880161391c565b9250506060613b7b8782880161391c565b91505092959194509250565b600060208284031215613b9d57613b9c6144eb565b5b6000613bab8482850161391c565b91505092915050565b60008060408385031215613bcb57613bca6144eb565b5b6000613bd98582860161391c565b9250506020613bea8582860161391c565b9150509250929050565b600080600060608486031215613c0d57613c0c6144eb565b5b6000613c1b8682870161391c565b9350506020613c2c8682870161391c565b9250506040613c3d8682870161391c565b9150509250925092565b600080600060608486031215613c6057613c5f6144eb565b5b6000613c6e86828701613931565b9350506020613c7f86828701613931565b9250506040613c9086828701613931565b9150509250925092565b600080600080600060a08688031215613cb657613cb56144eb565b5b6000613cc48882890161391c565b9550506020613cd58882890161391c565b9450506040613ce68882890161391c565b9350506060613cf78882890161391c565b9250506080613d088882890161391c565b9150509295509295909350565b6000613d218383613d3c565b60208301905092915050565b613d36816143a2565b82525050565b613d458161433b565b82525050565b613d548161433b565b82525050565b6000613d65826141e1565b613d6f8185614204565b9350613d7a836141d1565b8060005b83811015613dab578151613d928882613d15565b9750613d9d836141f7565b925050600181019050613d7e565b5085935050505092915050565b613dc18161435f565b82525050565b613dd0816143b4565b82525050565b613ddf816143c6565b82525050565b6000613df0826141ec565b613dfa8185614215565b9350613e0a8185602086016143fc565b613e13816144f0565b840191505092915050565b6000613e2b601183614215565b9150613e3682614501565b602082019050919050565b6000613e4e601d83614215565b9150613e598261452a565b602082019050919050565b6000613e71601483614215565b9150613e7c82614553565b602082019050919050565b6000613e94600683614215565b9150613e9f8261457c565b602082019050919050565b6000613eb7600b83614215565b9150613ec2826145a5565b602082019050919050565b613ed68161438b565b82525050565b613ee581614395565b82525050565b6000602082019050613f006000830184613d4b565b92915050565b6000602082019050613f1b6000830184613d2d565b92915050565b6000604082019050613f366000830185613d4b565b613f436020830184613dd6565b9392505050565b6000604082019050613f5f6000830185613d4b565b613f6c6020830184613ecd565b9392505050565b600060c082019050613f886000830189613d4b565b613f956020830188613ecd565b613fa26040830187613dd6565b613faf6060830186613dd6565b613fbc6080830185613d4b565b613fc960a0830184613ecd565b979650505050505050565b6000602082019050613fe96000830184613db8565b92915050565b60006020820190506140046000830184613dc7565b92915050565b600060808201905061401f6000830187613dd6565b81810360208301526140318186613d5a565b90506140406040830185613d4b565b61404d6060830184613ecd565b95945050505050565b600060208201905081810360008301526140708184613de5565b905092915050565b6000602082019050818103600083015261409181613e1e565b9050919050565b600060208201905081810360008301526140b181613e41565b9050919050565b600060208201905081810360008301526140d181613e64565b9050919050565b600060208201905081810360008301526140f181613e87565b9050919050565b6000602082019050818103600083015261411181613eaa565b9050919050565b600060208201905061412d6000830184613ecd565b92915050565b600060a0820190506141486000830188613ecd565b6141556020830187613dd6565b81810360408301526141678186613d5a565b90506141766060830185613d4b565b6141836080830184613ecd565b9695505050505050565b60006040820190506141a26000830185613ecd565b6141af6020830184613ecd565b9392505050565b60006020820190506141cb6000830184613edc565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142318261438b565b915061423c8361438b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142715761427061442f565b5b828201905092915050565b60006142878261438b565b91506142928361438b565b9250826142a2576142a161445e565b5b828204905092915050565b60006142b88261438b565b91506142c38361438b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142fc576142fb61442f565b5b828202905092915050565b60006143128261438b565b915061431d8361438b565b9250828210156143305761432f61442f565b5b828203905092915050565b60006143468261436b565b9050919050565b60006143588261436b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006143ad826143d8565b9050919050565b60006143bf826143d8565b9050919050565b60006143d18261438b565b9050919050565b60006143e3826143ea565b9050919050565b60006143f58261436b565b9050919050565b60005b8381101561441a5780820151818401526020810190506143ff565b83811115614429576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f4d61782077616c6c657420686173206265656e20747269676765726564000000600082015250565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6145d78161433b565b81146145e257600080fd5b50565b6145ee8161434d565b81146145f957600080fd5b50565b6146058161435f565b811461461057600080fd5b50565b61461c8161438b565b811461462757600080fd5b5056fea2646970667358221220b3244cf54dd3fa1e77c9101ddd6d910940cae84e78b1b82c8811d70c88eda27364736f6c6343000807003360806040527377128dfdd0ac859b33f44050c6fa272f34872b5e600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507321be370d5312f44cb42ce377bc9b8a0cef1a4c83600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55678ac7230489e80000600e55348015620000e057600080fd5b5060405162001ca538038062001ca58339818101604052810190620001069190620001f7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001575773f491e7b69e4244ad4002bc14e878a34207e38c2962000159565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200027c565b600081519050620001f18162000262565b92915050565b60006020828403121562000210576200020f6200025d565b5b60006200022084828501620001e0565b91505092915050565b600062000236826200023d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200026d8162000229565b81146200027957600080fd5b50565b611a19806200028c6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b604051610104919061166b565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611422565b61032d565b005b34801561014257600080fd5b5061015d600480360381019061015891906113f5565b6105ec565b60405161016a919061166b565b60405180910390f35b34801561017f57600080fd5b5061019a600480360381019061019591906114e9565b610706565b005b3480156101a857600080fd5b506101b1610770565b6040516101be919061166b565b60405180910390f35b3480156101d357600080fd5b506101dc610776565b6040516101e9919061166b565b60405180910390f35b3480156101fe57600080fd5b5061020761077c565b604051610214919061166b565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f91906113f5565b610782565b60405161025393929190611686565b60405180910390f35b6102646107ac565b005b34801561027257600080fd5b5061027b610b9c565b604051610288919061166b565b60405180910390f35b34801561029d57600080fd5b506102a6610ba2565b6040516102b3919061166b565b60405180910390f35b3480156102c857600080fd5b506102d1610ba8565b005b3480156102df57600080fd5b506102fa60048036038101906102f5919061148f565b610bb3565b005b34801561030857600080fd5b50610311610d47565b60405161031e919061166b565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d4d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610ff4565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f826110a3565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546112aa90919063ffffffff16565b6112c090919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112d6565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106415760009050610701565b600061068e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112d6565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e957600092505050610701565b6106fc81836112aa90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075e57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080457600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086191906115db565b60206040518083038186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b191906114bc565b90506000600267ffffffffffffffff8111156108d0576108cf61196a565b5b6040519080825280602002602001820160405280156108fe5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106109385761093761193b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106109a9576109a861193b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a46949392919061161f565b6000604051808303818588803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050506000610b3783600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ad991906115db565b60206040518083038186803b158015610af157600080fd5b505afa158015610b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2991906114bc565b6112aa90919063ffffffff16565b9050610b4e816009546112c090919063ffffffff16565b600981905550610b91610b80600854610b7284600c5461130890919063ffffffff16565b61131e90919063ffffffff16565b600b546112c090919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610bb133610d4d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0b57600080fd5b600060048054905090506000811415610c245750610d44565b6000805a905060005b8483108015610c3b57508381105b15610d3f5783600f5410610c52576000600f819055505b610c9b6004600f5481548110610c6b57610c6a61193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611334565b15610cea57610ce96004600f5481548110610cb957610cb861193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d4d565b5b610d0f610d005a846112aa90919063ffffffff16565b846112c090919063ffffffff16565b92505a9150600f6000815480929190610d2790611865565b91905055508080610d3790611865565b915050610c2d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610d9d57610ff1565b6000610da8826105ec565b90506000811115610fef57610dc881600a546112c090919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e2b9291906115f6565b602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190611462565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f1781600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112c090919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610fa8600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112d6565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110b791906117d7565b815481106110c8576110c761193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111465761114561193b565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111e691906117d7565b815481106111f7576111f661193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112725761127161190c565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836112b891906117d7565b905092915050565b600081836112ce91906116f6565b905092915050565b6000611301600c546112f3600b548561130890919063ffffffff16565b61131e90919063ffffffff16565b9050919050565b60008183611316919061177d565b905092915050565b6000818361132c919061174c565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138491906116f6565b10801561139a5750600e54611398836105ec565b115b9050919050565b6000813590506113b08161199e565b92915050565b6000815190506113c5816119b5565b92915050565b6000813590506113da816119cc565b92915050565b6000815190506113ef816119cc565b92915050565b60006020828403121561140b5761140a611999565b5b6000611419848285016113a1565b91505092915050565b6000806040838503121561143957611438611999565b5b6000611447858286016113a1565b9250506020611458858286016113cb565b9150509250929050565b60006020828403121561147857611477611999565b5b6000611486848285016113b6565b91505092915050565b6000602082840312156114a5576114a4611999565b5b60006114b3848285016113cb565b91505092915050565b6000602082840312156114d2576114d1611999565b5b60006114e0848285016113e0565b91505092915050565b60008060408385031215611500576114ff611999565b5b600061150e858286016113cb565b925050602061151f858286016113cb565b9150509250929050565b60006115358383611541565b60208301905092915050565b61154a8161180b565b82525050565b6115598161180b565b82525050565b600061156a826116cd565b61157481856116e5565b935061157f836116bd565b8060005b838110156115b05781516115978882611529565b97506115a2836116d8565b925050600181019050611583565b5085935050505092915050565b6115c681611853565b82525050565b6115d581611849565b82525050565b60006020820190506115f06000830184611550565b92915050565b600060408201905061160b6000830185611550565b61161860208301846115cc565b9392505050565b600060808201905061163460008301876115bd565b8181036020830152611646818661155f565b90506116556040830185611550565b61166260608301846115cc565b95945050505050565b600060208201905061168060008301846115cc565b92915050565b600060608201905061169b60008301866115cc565b6116a860208301856115cc565b6116b560408301846115cc565b949350505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600061170182611849565b915061170c83611849565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611741576117406118ae565b5b828201905092915050565b600061175782611849565b915061176283611849565b925082611772576117716118dd565b5b828204905092915050565b600061178882611849565b915061179383611849565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117cc576117cb6118ae565b5b828202905092915050565b60006117e282611849565b91506117ed83611849565b925082821015611800576117ff6118ae565b5b828203905092915050565b600061181682611829565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061185e82611849565b9050919050565b600061187082611849565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118a3576118a26118ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6119a78161180b565b81146119b257600080fd5b50565b6119be8161181d565b81146119c957600080fd5b50565b6119d581611849565b81146119e057600080fd5b5056fea264697066735822122008f82294585a66d2ccef561d8d3bfda9a8947d13d0accdb620dacc10e7fb7b7c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80637d1db4a5116101c6578063ca33e64c116100f7578063f0b37c0411610095578063f708a64f1161006f578063f708a64f14610c6d578063f84ba65d14610c96578063f887ea4014610cbf578063fe9fbb8014610cea5761035b565b8063f0b37c0414610bde578063f1f3bca314610c07578063f2fde38b14610c445761035b565b8063dd62ed3e116100d1578063dd62ed3e14610b22578063df20fd4914610b5f578063e91f214e14610b88578063e96fada214610bb35761035b565b8063ca33e64c14610a8f578063d51ed1c814610aba578063d806d12f14610af75761035b565b8063a51af4c511610164578063b210b06d1161013e578063b210b06d146109f9578063b6a5d7de14610a10578063bf56b37114610a39578063c6d2577d14610a645761035b565b8063a51af4c514610966578063a8aa1b3114610991578063a9059cbb146109bc5761035b565b806389ef69f6116101a057806389ef69f6146108c057806395d89b41146108e95780639d1944f514610914578063a4b45c001461093d5761035b565b80637d1db4a51461083f57806382247ec01461086a578063893d20e8146108955761035b565b8063296020e7116102a0578063571ac8b01161023e578063658d4b7f11610218578063658d4b7f146107975780636ddd1713146107c05780637088fb7f146107eb57806370a08231146108025761035b565b8063571ac8b0146107085780635c85974f146107455780635d0044ca1461076e5761035b565b80632f54bf6e1161027a5780632f54bf6e1461064c578063313ce567146106895780633425c001146106b45780633bb8a8d4146106dd5761035b565b8063296020e7146105bb5780632b112e49146105f85780632d48e896146106235761035b565b8063095ea7b31161030d578063201e7991116102e7578063201e79911461050157806321dbe8761461052a5780632375ce401461055557806323b872dd1461057e5761035b565b8063095ea7b31461045c5780631161ae391461049957806318160ddd146104d65761035b565b806301339c21146103605780630445b66714610377578063048c7baf146103a257806304a66b48146103cb57806306fdde03146103f457806307c89fe81461041f5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d27565b005b34801561038357600080fd5b5061038c610dc4565b6040516103999190614118565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613b20565b610dca565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613c9a565b610e56565b005b34801561040057600080fd5b50610409610f21565b6040516104169190614056565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190613946565b610f5e565b6040516104539190613fd4565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613a73565b610ffc565b6040516104909190613fd4565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613bb4565b6110ee565b6040516104cd9190613fd4565b60405180910390f35b3480156104e257600080fd5b506104eb611103565b6040516104f89190614118565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190613bb4565b61110d565b005b34801561053657600080fd5b5061053f611167565b60405161054c9190613eeb565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613bf4565b61118d565b005b34801561058a57600080fd5b506105a560048036038101906105a091906139e0565b611213565b6040516105b29190613fd4565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190613946565b6113f5565b6040516105ef9190613fd4565b60405180910390f35b34801561060457600080fd5b5061060d611415565b60405161061a9190614118565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190613bb4565b611497565b005b34801561065857600080fd5b50610673600480360381019061066e9190613946565b611572565b6040516106809190613fd4565b60405180910390f35b34801561069557600080fd5b5061069e6115cb565b6040516106ab91906141b6565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613946565b6115d4565b005b3480156106e957600080fd5b506106f2611677565b6040516106ff9190613fd4565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613946565b61168a565b60405161073c9190613fd4565b60405180910390f35b34801561075157600080fd5b5061076c60048036038101906107679190613b87565b61169f565b005b34801561077a57600080fd5b5061079560048036038101906107909190613b87565b61170d565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613a33565b61177b565b005b3480156107cc57600080fd5b506107d561181e565b6040516107e29190613fd4565b60405180910390f35b3480156107f757600080fd5b50610800611831565b005b34801561080e57600080fd5b5061082960048036038101906108249190613946565b6118c8565b6040516108369190614118565b60405180910390f35b34801561084b57600080fd5b50610854611911565b6040516108619190614118565b60405180910390f35b34801561087657600080fd5b5061087f611917565b60405161088c9190614118565b60405180910390f35b3480156108a157600080fd5b506108aa61191d565b6040516108b79190613eeb565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190613946565b611946565b005b3480156108f557600080fd5b506108fe6119e9565b60405161090b9190614056565b60405180910390f35b34801561092057600080fd5b5061093b60048036038101906109369190613b87565b611a26565b005b34801561094957600080fd5b50610964600480360381019061095f91906139a0565b611a87565b005b34801561097257600080fd5b5061097b611b55565b6040516109889190613eeb565b60405180910390f35b34801561099d57600080fd5b506109a6611b7b565b6040516109b39190613eeb565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190613a73565b611ba1565b6040516109f09190613fd4565b60405180910390f35b348015610a0557600080fd5b50610a0e611bb6565b005b348015610a1c57600080fd5b50610a376004803603810190610a329190613946565b611c08565b005b348015610a4557600080fd5b50610a4e611caa565b604051610a5b9190614118565b60405180910390f35b348015610a7057600080fd5b50610a79611cb0565b604051610a869190614118565b60405180910390f35b348015610a9b57600080fd5b50610aa4611cb6565b604051610ab19190613eeb565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190613b87565b611cdc565b604051610aee9190614118565b60405180910390f35b348015610b0357600080fd5b50610b0c611d4e565b604051610b199190614118565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b4491906139a0565b611d58565b604051610b569190614118565b60405180910390f35b348015610b6b57600080fd5b50610b866004803603810190610b819190613ae0565b611ddf565b005b348015610b9457600080fd5b50610b9d611e4c565b604051610baa9190614118565b60405180910390f35b348015610bbf57600080fd5b50610bc8611e62565b604051610bd59190613eeb565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c009190613946565b611e88565b005b348015610c1357600080fd5b50610c2e6004803603810190610c299190613ab3565b611f2b565b604051610c3b9190614118565b60405180910390f35b348015610c5057600080fd5b50610c6b6004803603810190610c669190613973565b611f67565b005b348015610c7957600080fd5b50610c946004803603810190610c8f9190613a33565b612080565b005b348015610ca257600080fd5b50610cbd6004803603810190610cb89190613a33565b612320565b005b348015610ccb57600080fd5b50610cd46123c3565b604051610ce19190613fef565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613946565b6123e9565b604051610d1e9190613fd4565b60405180910390f35b610d30336123e9565b610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d66906140f8565b60405180910390fd5b6000601c5414610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab906140b8565b60405180910390fd5b43601c8190555042601d81905550565b602d5481565b610dd3336123e9565b610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e09906140f8565b60405180910390fd5b83602260006101000a81548160ff02191690831515021790555082602481905550600060258190555081602681905550806027819055504360288190555050505050565b610e5f336123e9565b610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e95906140f8565b60405180910390fd5b84601081905550836011819055508260128190555081601381905550610ef182610ee385610ed5888a61245590919063ffffffff16565b61245590919063ffffffff16565b61245590919063ffffffff16565b601481905550806015819055506004601554610f0d919061427c565b60145410610f1a57600080fd5b5050505050565b60606040518060400160405280600e81526020017f437265646974205072696e746572000000000000000000000000000000000000815250905090565b6000610f6933611572565b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f906140d8565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110dc9190614118565b60405180910390a36001905092915050565b6000826110fa83611cdc565b11905092915050565b6000600754905090565b611116336123e9565b611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906140f8565b60405180910390fd5b81601881905550806019819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611196336123e9565b6111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906140f8565b60405180910390fd5b600282846111e3919061427c565b111580156111f057508183115b6111f957600080fd5b82601e8190555081601f8190555080602181905550505050565b6000600754600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113e157611360826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461246b9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113ec8484846124c0565b90509392505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000611492611445600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c8565b611484611473600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c8565b600754612b8690919063ffffffff16565b612b8690919063ffffffff16565b905090565b6114a0336123e9565b6114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d6906140f8565b60405180910390fd5b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161153c92919061418d565b600060405180830381600087803b15801561155657600080fd5b505af115801561156a573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006006905090565b6115dd33611572565b61161c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611613906140d8565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602260009054906101000a900460ff1681565b600061169882600754610ffc565b9050919050565b6116a8336123e9565b6116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de906140f8565b60405180910390fd5b6103e86007546116f7919061427c565b81101561170357600080fd5b8060088190555050565b611716336123e9565b611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c906140f8565b60405180910390fd5b6103e8600754611765919061427c565b81101561177157600080fd5b8060098190555050565b611784336123e9565b6117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906140f8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602c60009054906101000a900460ff1681565b61183a33611572565b611879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611870906140d8565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156118c4573d6000803e3d6000fd5b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61194f33611572565b61198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906140d8565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600781526020017f6372656469747000000000000000000000000000000000000000000000000000815250905090565b611a2f336123e9565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a65906140f8565b60405180910390fd5b620b71b08110611a7d57600080fd5b80602b8190555050565b611a90336123e9565b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906140f8565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611bae3384846124c0565b905092915050565b611bbf336123e9565b611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906140f8565b60405180910390fd5b6000602081905550565b611c1133611572565b611c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c47906140d8565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c5481565b601d5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d47611ce9611415565b611d39611d2a6002611d1c601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118c8565b612b9c90919063ffffffff16565b85612b9c90919063ffffffff16565b61243f90919063ffffffff16565b9050919050565b6000601454905090565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611de8336123e9565b611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906140f8565b60405180910390fd5b81602c60006101000a81548160ff02191690831515021790555080602d819055505050565b6fffffffffffffffffffffffffffffffff801681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e9133611572565b611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec7906140d8565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000436001601c54611f3d9190614226565b10611f4c576014549050611f62565b8115611f5c576014549050611f62565b60145490505b919050565b611f7033611572565b611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa6906140d8565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120759190613f06565b60405180910390a150565b612089336123e9565b6120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf906140f8565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156121525750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61215b57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561224d57602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401612216929190613f21565b600060405180830381600087803b15801561223057600080fd5b505af1158015612244573d6000803e3d6000fd5b5050505061231c565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016122e9929190613f4a565b600060405180830381600087803b15801561230357600080fd5b505af1158015612317573d6000803e3d6000fd5b505050505b5050565b612329336123e9565b612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f906140f8565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000818361244d919061427c565b905092915050565b600081836124639190614226565b905092915050565b60008383111582906124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa9190614056565b60405180910390fd5b5082840390509392505050565b6000602e60009054906101000a900460ff16156124e9576124e2848484612bb2565b9050612b7f565b600073f491e7b69e4244ad4002bc14e878a34207e38c2990506000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061258b57508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b90506125978685612d20565b801580156125ef5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126835760095484600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126429190614226565b10612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614098565b60405180910390fd5b5b80156126b657612691612dbd565b1561269f5761269e612e94565b5b6126a76133de565b156126b5576126b4613491565b5b5b61273f846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461246b9092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061278d8761350d565b61279757846127a3565b6127a2878787613564565b5b90506127f781600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245590919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661295d57602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612927929190613f4a565b600060405180830381600087803b15801561294157600080fd5b505af1925050508015612952575060015b61295b5761295c565b5b5b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8057602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a4a929190613f4a565b600060405180830381600087803b158015612a6457600080fd5b505af1925050508015612a75575060015b612a7e57612a7f565b5b5b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602b546040518263ffffffff1660e01b8152600401612add9190614118565b600060405180830381600087803b158015612af757600080fd5b505af1925050508015612b08575060015b612b1157612b12565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6f9190614118565b60405180910390a3600193505050505b9392505050565b60008183612b949190614307565b905092915050565b60008183612baa91906142ad565b905092915050565b6000612c3d826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461246b9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cd282600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245590919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612d7a5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db090614078565b60405180910390fd5b5050565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612e2a5750602e60009054906101000a900460ff16155b8015612e425750602c60009054906101000a900460ff165b8015612e8f5750602d54600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602e60006101000a81548160ff0219169083151502179055506000612ebf6018546019546110ee565b612ecb57601054612ece565b60005b90506000612f0e6002612f00601454612ef286602d54612b9c90919063ffffffff16565b61243f90919063ffffffff16565b61243f90919063ffffffff16565b90506000612f2782602d54612b8690919063ffffffff16565b90506000600267ffffffffffffffff811115612f4657612f456144bc565b5b604051908082528060200260200182016040528015612f745781602001602082028036833780820191505090505b5090503081600081518110612f8c57612f8b61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612ffd57612ffc61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016130a0959493929190614133565b600060405180830381600087803b1580156130ba57600080fd5b505af11580156130ce573d6000803e3d6000fd5b5050505060006130e78247612b8690919063ffffffff16565b9050600061311361310260028961243f90919063ffffffff16565b601454612b8690919063ffffffff16565b9050600061314f6002613141846131338c88612b9c90919063ffffffff16565b61243f90919063ffffffff16565b61243f90919063ffffffff16565b9050600061317a8361316c60125487612b9c90919063ffffffff16565b61243f90919063ffffffff16565b905060006131a58461319760135488612b9c90919063ffffffff16565b61243f90919063ffffffff16565b9050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561321157600080fd5b505af193505050508015613223575060015b61322c5761322d565b5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613295573d6000803e3d6000fd5b5060008911156133b757601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161332896959493929190613f73565b6060604051808303818588803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061337a9190613c47565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516133ae92919061418d565b60405180910390a15b505050505050505050506000602e60006101000a81548160ff021916908315150217905550565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561344b5750602e60009054906101000a900460ff16155b80156134635750602260009054906101000a900460ff165b801561347e57504360275460285461347b9190614226565b11155b801561348c57506026544710155b905090565b6134bf602654600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166136ff565b436028819055506134dd60265460255461245590919063ffffffff16565b602581905550602454602554111561350b576000602260006101000a81548160ff0219169083151502179055505b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806135e66015546135d86135c9601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611f2b565b86612b9c90919063ffffffff16565b61243f90919063ffffffff16565b905061363a81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245590919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136da9190614118565b60405180910390a36136f58184612b8690919063ffffffff16565b9150509392505050565b6001602e60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613737576137366144bc565b5b6040519080825280602002602001820160405280156137655781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061379f5761379e61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106137ee576137ed61448d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b815260040161388b949392919061400a565b6000604051808303818588803b1580156138a457600080fd5b505af11580156138b8573d6000803e3d6000fd5b5050505050506000602e60006101000a81548160ff0219169083151502179055505050565b6000813590506138ec816145ce565b92915050565b600081359050613901816145e5565b92915050565b600081359050613916816145fc565b92915050565b60008135905061392b81614613565b92915050565b60008151905061394081614613565b92915050565b60006020828403121561395c5761395b6144eb565b5b600061396a848285016138dd565b91505092915050565b600060208284031215613989576139886144eb565b5b6000613997848285016138f2565b91505092915050565b600080604083850312156139b7576139b66144eb565b5b60006139c5858286016138dd565b92505060206139d6858286016138dd565b9150509250929050565b6000806000606084860312156139f9576139f86144eb565b5b6000613a07868287016138dd565b9350506020613a18868287016138dd565b9250506040613a298682870161391c565b9150509250925092565b60008060408385031215613a4a57613a496144eb565b5b6000613a58858286016138dd565b9250506020613a6985828601613907565b9150509250929050565b60008060408385031215613a8a57613a896144eb565b5b6000613a98858286016138dd565b9250506020613aa98582860161391c565b9150509250929050565b600060208284031215613ac957613ac86144eb565b5b6000613ad784828501613907565b91505092915050565b60008060408385031215613af757613af66144eb565b5b6000613b0585828601613907565b9250506020613b168582860161391c565b9150509250929050565b60008060008060808587031215613b3a57613b396144eb565b5b6000613b4887828801613907565b9450506020613b598782880161391c565b9350506040613b6a8782880161391c565b9250506060613b7b8782880161391c565b91505092959194509250565b600060208284031215613b9d57613b9c6144eb565b5b6000613bab8482850161391c565b91505092915050565b60008060408385031215613bcb57613bca6144eb565b5b6000613bd98582860161391c565b9250506020613bea8582860161391c565b9150509250929050565b600080600060608486031215613c0d57613c0c6144eb565b5b6000613c1b8682870161391c565b9350506020613c2c8682870161391c565b9250506040613c3d8682870161391c565b9150509250925092565b600080600060608486031215613c6057613c5f6144eb565b5b6000613c6e86828701613931565b9350506020613c7f86828701613931565b9250506040613c9086828701613931565b9150509250925092565b600080600080600060a08688031215613cb657613cb56144eb565b5b6000613cc48882890161391c565b9550506020613cd58882890161391c565b9450506040613ce68882890161391c565b9350506060613cf78882890161391c565b9250506080613d088882890161391c565b9150509295509295909350565b6000613d218383613d3c565b60208301905092915050565b613d36816143a2565b82525050565b613d458161433b565b82525050565b613d548161433b565b82525050565b6000613d65826141e1565b613d6f8185614204565b9350613d7a836141d1565b8060005b83811015613dab578151613d928882613d15565b9750613d9d836141f7565b925050600181019050613d7e565b5085935050505092915050565b613dc18161435f565b82525050565b613dd0816143b4565b82525050565b613ddf816143c6565b82525050565b6000613df0826141ec565b613dfa8185614215565b9350613e0a8185602086016143fc565b613e13816144f0565b840191505092915050565b6000613e2b601183614215565b9150613e3682614501565b602082019050919050565b6000613e4e601d83614215565b9150613e598261452a565b602082019050919050565b6000613e71601483614215565b9150613e7c82614553565b602082019050919050565b6000613e94600683614215565b9150613e9f8261457c565b602082019050919050565b6000613eb7600b83614215565b9150613ec2826145a5565b602082019050919050565b613ed68161438b565b82525050565b613ee581614395565b82525050565b6000602082019050613f006000830184613d4b565b92915050565b6000602082019050613f1b6000830184613d2d565b92915050565b6000604082019050613f366000830185613d4b565b613f436020830184613dd6565b9392505050565b6000604082019050613f5f6000830185613d4b565b613f6c6020830184613ecd565b9392505050565b600060c082019050613f886000830189613d4b565b613f956020830188613ecd565b613fa26040830187613dd6565b613faf6060830186613dd6565b613fbc6080830185613d4b565b613fc960a0830184613ecd565b979650505050505050565b6000602082019050613fe96000830184613db8565b92915050565b60006020820190506140046000830184613dc7565b92915050565b600060808201905061401f6000830187613dd6565b81810360208301526140318186613d5a565b90506140406040830185613d4b565b61404d6060830184613ecd565b95945050505050565b600060208201905081810360008301526140708184613de5565b905092915050565b6000602082019050818103600083015261409181613e1e565b9050919050565b600060208201905081810360008301526140b181613e41565b9050919050565b600060208201905081810360008301526140d181613e64565b9050919050565b600060208201905081810360008301526140f181613e87565b9050919050565b6000602082019050818103600083015261411181613eaa565b9050919050565b600060208201905061412d6000830184613ecd565b92915050565b600060a0820190506141486000830188613ecd565b6141556020830187613dd6565b81810360408301526141678186613d5a565b90506141766060830185613d4b565b6141836080830184613ecd565b9695505050505050565b60006040820190506141a26000830185613ecd565b6141af6020830184613ecd565b9392505050565b60006020820190506141cb6000830184613edc565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142318261438b565b915061423c8361438b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142715761427061442f565b5b828201905092915050565b60006142878261438b565b91506142928361438b565b9250826142a2576142a161445e565b5b828204905092915050565b60006142b88261438b565b91506142c38361438b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142fc576142fb61442f565b5b828202905092915050565b60006143128261438b565b915061431d8361438b565b9250828210156143305761432f61442f565b5b828203905092915050565b60006143468261436b565b9050919050565b60006143588261436b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006143ad826143d8565b9050919050565b60006143bf826143d8565b9050919050565b60006143d18261438b565b9050919050565b60006143e3826143ea565b9050919050565b60006143f58261436b565b9050919050565b60005b8381101561441a5780820151818401526020810190506143ff565b83811115614429576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f4d61782077616c6c657420686173206265656e20747269676765726564000000600082015250565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6145d78161433b565b81146145e257600080fd5b50565b6145ee8161434d565b81146145f957600080fd5b50565b6146058161435f565b811461461057600080fd5b50565b61461c8161438b565b811461462757600080fd5b5056fea2646970667358221220b3244cf54dd3fa1e77c9101ddd6d910940cae84e78b1b82c8811d70c88eda27364736f6c63430008070033

Deployed Bytecode Sourcemap

12877:16170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25565:187;;;;;;;;;;;;;:::i;:::-;;15224:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24750:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27021:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16646:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26902:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17149:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28776:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16376:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27925:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13079:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25117:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17662:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13939:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28451:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28116:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4672:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16470:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26796:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14808:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17373:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25917:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25764;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26425:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15187:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24598:142;;;;;;;;;;;;;:::i;:::-;;16897:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13554:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13618:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16732:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26693:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16556:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28307:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27525:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15105:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14513:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17498:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23801:105;;;;;;;;;;;;;:::i;:::-;;4345:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14541:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14573:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14185:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28601:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20522:691;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17008:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27761:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12952:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14285:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4515:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20310:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5072:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26070:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26553:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14476:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4846:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25565:187;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25634:1:::1;25620:10;;:15;25612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25684:12;25671:10;:25;;;;25729:15;25707:19;:37;;;;25565:187::o:0;15224:50::-;;;;:::o;24750:359::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24897:8:::1;24876:18;;:29;;;;;;;;;;;;;;;;;;24933:4;24916:14;:21;;;;24973:1;24948:22;:26;;;;25005:7;24985:17;:27;;;;25048:7;25023:22;:32;;;;25089:12;25066:20;:35;;;;24750:359:::0;;;;:::o;27021:496::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27200:13:::1;27185:12;:28;;;;27237:11;27224:10;:24;;;;27275:14;27259:13;:30;;;;27315:13;27300:12;:28;;;;27350:69;27405:13;27350:50;27385:14;27350:30;27368:11;27350:13;:17;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;:54;;:69;;;;:::i;:::-;27339:8;:80;;;;27447:15;27430:14;:32;;;;27507:1;27492:14;;:16;;;;:::i;:::-;27481:8;;:27;27473:36;;;::::0;::::1;;27021:496:::0;;;;;:::o;16646:80::-;16694:13;16718:5;;;;;;;;;;;;;;;;;16711:12;;16646:80;:::o;26902:111::-;26967:4;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26990:7:::1;:15;26998:6;26990:15;;;;;;;;;;;;;;;;;;;;;;;;;26983:22;;26902:111:::0;;;:::o;17149:216::-;17224:4;17276:6;17241:11;:23;17253:10;17241:23;;;;;;;;;;;;;;;:32;17265:7;17241:32;;;;;;;;;;;;;;;:41;;;;17319:7;17298:37;;17307:10;17298:37;;;17328:6;17298:37;;;;;;:::i;:::-;;;;;;;;17353:4;17346:11;;17149:216;;;;:::o;28776:150::-;28856:4;28912:6;28880:29;28900:8;28880:19;:29::i;:::-;:38;28873:45;;28776:150;;;;:::o;16376:88::-;16431:7;16449:12;;16442:19;;16376:88;:::o;27925:183::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28041:7:::1;28023:15;:25;;;;28088:12;28059:26;:41;;;;27925:183:::0;;:::o;13079:64::-;;;;;;;;;;;;;:::o;25117:342::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25277:1:::1;25262:11;25250:9;:23;;;;:::i;:::-;:28;;:55;;;;;25294:11;25282:9;:23;25250:55;25242:64;;;::::0;::::1;;25346:9;25317:26;:38;;;;25397:11;25366:28;:42;;;;25445:6;25419:23;:32;;;;25117:342:::0;;;:::o;17662:365::-;17762:4;17817:12;;17782:11;:19;17794:6;17782:19;;;;;;;;;;;;;;;:31;17802:10;17782:31;;;;;;;;;;;;;;;;:47;17779:181;;17879:69;17915:6;17879:69;;;;;;;;;;;;;;;;;:11;:19;17891:6;17879:19;;;;;;;;;;;;;;;:31;17899:10;17879:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;17845:11;:19;17857:6;17845:19;;;;;;;;;;;;;;;:31;17865:10;17845:31;;;;;;;;;;;;;;;:103;;;;17779:181;17979:40;17993:6;18001:9;18012:6;17979:13;:40::i;:::-;17972:47;;17662:365;;;;;:::o;13939:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;28451:142::-;28504:7;28531:54;28569:15;28579:4;;;;;;;;;;;28569:9;:15::i;:::-;28531:33;28548:15;28558:4;;;;;;;;;;;28548:9;:15::i;:::-;28531:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;28524:61;;28451:142;:::o;28116:183::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28226:11:::1;;;;;;;;;;;:35;;;28262:10;28274:16;28226:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28116:183:::0;;:::o;4672:103::-;4727:4;4762:5;;;;;;;;;;;4751:16;;:7;:16;;;4744:23;;4672:103;;;:::o;16470:80::-;16522:5;13473:1;16531:16;;16470:80;:::o;26796:94::-;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26877:5:::1;26859:7;:15;26867:6;26859:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;26796:94:::0;:::o;14808:38::-;;;;;;;;;;;;;:::o;17373:117::-;17428:4;17452:30;17460:7;17469:12;;17452:7;:30::i;:::-;17445:37;;17373:117;;;:::o;25917:145::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26017:4:::1;26002:12;;:19;;;;:::i;:::-;25992:6;:29;;25984:38;;;::::0;::::1;;26048:6;26033:12;:21;;;;25917:145:::0;:::o;25764:::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25866:4:::1;25851:12;;:19;;;;:::i;:::-;25841:6;:29;;25833:38;;;::::0;::::1;;25895:6;25882:10;:19;;;;25764:145:::0;:::o;26425:120::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26531:6:::1;26509:11;:19;26521:6;26509:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26425:120:::0;;:::o;15187:30::-;;;;;;;;;;;;;:::o;24598:142::-;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24645:15:::1;24663:21;24645:39;;24703:10;24695:28;;:37;24724:7;24695:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24634:106;24598:142::o:0;16897:105::-;16963:7;16981:9;:18;16991:7;16981:18;;;;;;;;;;;;;;;;16974:25;;16897:105;;;:::o;13554:51::-;;;;:::o;13618:48::-;;;;:::o;16732:78::-;16784:7;16802:5;;;;;;;;;;;16795:12;;16732:78;:::o;26693:91::-;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26772:4:::1;26754:7;:15;26762:6;26754:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;26693:91:::0;:::o;16556:84::-;16606:13;16630:7;;;;;;;;;;;;;;;;;16623:14;;16556:84;:::o;28307:136::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28397:6:::1;28391:3;:12;28383:21;;;::::0;::::1;;28432:3;28415:14;:20;;;;28307:136:::0;:::o;27525:228::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27668:22:::1;27644:21;;:46;;;;;;;;;;;;;;;;;;27724:21;27701:20;;:44;;;;;;;;;;;;;;;;;;27525:228:::0;;:::o;15105:33::-;;;;;;;;;;;;;:::o;14513:19::-;;;;;;;;;;;;;:::o;17498:156::-;17578:4;17602:44;17616:10;17628:9;17639:6;17602:13;:44::i;:::-;17595:51;;17498:156;;;;:::o;23801:105::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23897:1:::1;23866:28;:32;;;;23801:105::o:0;4345:94::-;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4427:4:::1;4405:14:::0;:19:::1;4420:3;4405:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;4345:94:::0;:::o;14541:25::-;;;;:::o;14573:34::-;;;;:::o;14185:79::-;;;;;;;;;;;;;:::o;28601:167::-;28669:7;28696:64;28737:22;:20;:22::i;:::-;28696:36;28709:22;28729:1;28709:15;28719:4;;;;;;;;;;;28709:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;28696:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;28689:71;;28601:167;;;:::o;20522:691::-;20571:7;21197:8;;21190:15;;20522:691;:::o;17008:133::-;17092:7;17110:11;:19;17122:6;17110:19;;;;;;;;;;;;;;;:28;17130:7;17110:28;;;;;;;;;;;;;;;;17103:35;;17008:133;;;;:::o;27761:156::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27867:8:::1;27853:11;;:22;;;;;;;;;;;;;;;;;;27902:7;27886:13;:23;;;;27761:156:::0;;:::o;12952:48::-;12983:17;12952:48;;;:::o;14285:78::-;;;;;;;;;;;;;:::o;4515:97::-;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4599:5:::1;4577:14;:19;4592:3;4577:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4515:97:::0;:::o;20310:204::-;20366:7;20407:12;20402:1;20389:10;;:14;;;;:::i;:::-;:30;20386:54;;20429:8;;20422:15;;;;20386:54;20453:7;20450:31;;;20470:8;;20463:15;;;;20450:31;20498:8;;20491:15;;20310:204;;;;:::o;5072:173::-;4061:19;4069:10;4061:7;:19::i;:::-;4053:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5156:3:::1;5148:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;5192:4;5170:14:::0;:19:::1;5185:3;5170:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5212:25;5233:3;5212:25;;;;;;:::i;:::-;;;;;;;;5072:173:::0;:::o;26070:347::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26185:4:::1;26167:23;;:6;:23;;;;:41;;;;;26204:4;;;;;;;;;;;26194:14;;:6;:14;;;;26167:41;26159:50;;;::::0;::::1;;26247:6;26220:16;:24;26237:6;26220:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26267:6;26264:146;;;26289:11;;;;;;;;;;;:20;;;26310:6;26318:1;26289:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26264:146;;;26351:11;;;;;;;;;;;:20;;;26372:6;26380:9;:17;26390:6;26380:17;;;;;;;;;;;;;;;;26351:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26264:146;26070:347:::0;;:::o;26553:128::-;4230:24;4243:10;4230:12;:24::i;:::-;4222:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26667:6:::1;26641:15;:23;26657:6;26641:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;26553:128:::0;;:::o;14476:30::-;;;;;;;;;;;;;:::o;4846:107::-;4902:4;4926:14;:19;4941:3;4926:19;;;;;;;;;;;;;;;;;;;;;;;;;4919:26;;4846:107;;;:::o;1947:98::-;2005:7;2036:1;2032;:5;;;;:::i;:::-;2025:12;;1947:98;;;;:::o;1629:::-;1687:7;1718:1;1714;:5;;;;:::i;:::-;1707:12;;1629:98;;;;:::o;2159:206::-;2245:7;2303:1;2298;:6;;2306:12;2290:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2345:1;2341;:5;2334:12;;2159:206;;;;;:::o;18035:1627::-;18127:4;18147:6;;;;;;;;;;;18144:63;;;18163:41;18178:6;18186:9;18197:6;18163:14;:41::i;:::-;18156:48;;;;18144:63;18254:21;18278:42;18254:66;;18395:11;18419:4;;;;;;;;;;;18407:16;;:9;:16;;;:45;;;;18439:13;18426:26;;:9;:26;;;18407:45;18395:57;;18473:28;18486:6;18494;18473:12;:28::i;:::-;18582:6;18581:7;:30;;;;;18593:7;:18;18601:9;18593:18;;;;;;;;;;;;;;;;;;;;;;;;;18592:19;18581:30;18577:148;;;18669:10;;18659:6;18636:9;:20;18646:9;18636:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;18635:44;18627:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;18577:148;18787:6;18783:135;;;18813:16;:14;:16::i;:::-;18810:35;;;18832:10;:8;:10::i;:::-;18810:35;18862:19;:17;:19::i;:::-;18859:48;;;18884:20;:18;:20::i;:::-;18859:48;18783:135;19051:53;19073:6;19051:53;;;;;;;;;;;;;;;;;:9;:17;19061:6;19051:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;19031:9;:17;19041:6;19031:17;;;;;;;;;;;;;;;:73;;;;19117:22;19142:21;19156:6;19142:13;:21::i;:::-;:67;;19203:6;19142:67;;;19166:34;19174:6;19182:9;19193:6;19166:7;:34::i;:::-;19142:67;19117:92;;19245:40;19270:14;19245:9;:20;19255:9;19245:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;19222:9;:20;19232:9;19222:20;;;;;;;;;;;;;;;:63;;;;19302:16;:24;19319:6;19302:24;;;;;;;;;;;;;;;;;;;;;;;;;19298:96;;19333:11;;;;;;;;;;;:20;;;19354:6;19362:9;:17;19372:6;19362:17;;;;;;;;;;;;;;;;19333:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19329:63;;;;;;19298:96;19408:16;:27;19425:9;19408:27;;;;;;;;;;;;;;;;;;;;;;;;;19404:105;;19442:11;;;;;;;;;;;:20;;;19463:9;19474;:20;19484:9;19474:20;;;;;;;;;;;;;;;;19442:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19438:69;;;;;;19404:105;19525:11;;;;;;;;;;;:19;;;19545:14;;19525:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19521:51;;;;;;19606:9;19589:43;;19598:6;19589:43;;;19617:14;19589:43;;;;;;:::i;:::-;;;;;;;;19650:4;19643:11;;;;;18035:1627;;;;;;:::o;1735:98::-;1793:7;1824:1;1820;:5;;;;:::i;:::-;1813:12;;1735:98;;;;:::o;1841:::-;1899:7;1930:1;1926;:5;;;;:::i;:::-;1919:12;;1841:98;;;;:::o;19670:332::-;19763:4;19800:53;19822:6;19800:53;;;;;;;;;;;;;;;;;:9;:17;19810:6;19800:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;19780:9;:17;19790:6;19780:17;;;;;;;;;;;;;;;:73;;;;19887:32;19912:6;19887:9;:20;19897:9;19887:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;19864:9;:20;19874:9;19864:20;;;;;;;;;;;;;;;:55;;;;19990:4;19983:11;;19670:332;;;;;:::o;20014:166::-;20111:12;;20101:6;:22;;:49;;;;20127:15;:23;20143:6;20127:23;;;;;;;;;;;;;;;;;;;;;;;;;20101:49;20093:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;20014:166;;:::o;21601:197::-;21650:4;21688;;;;;;;;;;;21674:18;;:10;:18;;;;:38;;;;;21706:6;;;;;;;;;;;21705:7;21674:38;:62;;;;;21725:11;;;;;;;;;;;21674:62;:116;;;;;21777:13;;21749:9;:24;21767:4;21749:24;;;;;;;;;;;;;;;;:41;;21674:116;21667:123;;21601:197;:::o;21806:1661::-;15338:4;15329:6;;:13;;;;;;;;;;;;;;;;;;21855:27:::1;21885:60;21901:15;;21918:26;;21885:15;:60::i;:::-;:79;;21952:12;;21885:79;;;21948:1;21885:79;21855:109;;21975:23;22001:59;22058:1;22001:52;22044:8;;22001:38;22019:19;22001:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;21975:85;;22071:20;22094:34;22112:15;22094:13;;:17;;:34;;;;:::i;:::-;22071:57;;22141:21;22179:1;22165:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22141:40;;22210:4;22192;22197:1;22192:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;22236:4;;;;;;;;;;;22226;22231:1;22226:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;22251:21;22275;22251:45;;22309:6;;;;;;;;;;;:57;;;22381:12;22408:1;22424:4;22451;22471:15;22309:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22510:17;22530:40;22556:13;22530:21;:25;;:40;;;;:::i;:::-;22510:60;;22583:19;22605:40;22618:26;22642:1;22618:19;:23;;:26;;;;:::i;:::-;22605:8;;:12;;:40;;;;:::i;:::-;22583:62;;22658:26;22687:58;22743:1;22687:51;22726:11;22687:34;22701:19;22687:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;22658:87;;22756:27;22786:45;22819:11;22786:28;22800:13;;22786:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;22756:75;;22842:26;22871:44;22903:11;22871:27;22885:12;;22871:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;22842:73;;22932:11;;;;;;;;;;;:19;;;22959;22932:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22928:65;;;;;;23011:20;;;;;;;;;;;23003:38;;:58;23042:18;23003:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23119:1;23101:15;:19;23098:362;;;23136:6;;;;;;;;;;;:22;;;23166:18;23212:4;23236:15;23270:1;23290::::0;23310:21:::1;;;;;;;;;;;23350:15;23136:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23400:48;23412:18;23432:15;23400:48;;;;;;;:::i;:::-;;;;;;;;23098:362;21844:1623;;;;;;;;;;15356:5:::0;15347:6;;:14;;;;;;;;;;;;;;;;;;21806:1661::o;23475:318::-;23527:4;23565;;;;;;;;;;;23551:18;;:10;:18;;;;:38;;;;;23583:6;;;;;;;;;;;23582:7;23551:38;:69;;;;;23602:18;;;;;;;;;;;23551:69;:143;;;;;23682:12;23656:22;;23633:20;;:45;;;;:::i;:::-;:61;;23551:143;:234;;;;;23768:17;;23743:21;:42;;23551:234;23544:241;;23475:318;:::o;23914:303::-;23964:34;23974:17;;23993:4;;;;;;;;;;;23964:9;:34::i;:::-;24032:12;24009:20;:35;;;;24080:45;24107:17;;24080:22;;:26;;:45;;;;:::i;:::-;24055:22;:70;;;;24164:14;;24139:22;;:39;24136:74;;;24202:5;24181:18;;:26;;;;;;;;;;;;;;;;;;24136:74;23914:303::o;20188:114::-;20250:4;20275:11;:19;20287:6;20275:19;;;;;;;;;;;;;;;;;;;;;;;;;20274:20;20267:27;;20188:114;;;:::o;21221:372::-;21306:7;21326:17;21346:61;21392:14;;21346:41;21357:29;21381:4;;;;;;;;;;;21369:16;;:8;:16;;;21357:11;:29::i;:::-;21346:6;:10;;:41;;;;:::i;:::-;:45;;:61;;;;:::i;:::-;21326:81;;21447:39;21476:9;21447;:24;21465:4;21447:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;21420:9;:24;21438:4;21420:24;;;;;;;;;;;;;;;:66;;;;21527:4;21502:42;;21511:6;21502:42;;;21534:9;21502:42;;;;;;:::i;:::-;;;;;;;;21564:21;21575:9;21564:6;:10;;:21;;;;:::i;:::-;21557:28;;;21221:372;;;;;:::o;24225:361::-;15338:4;15329:6;;:13;;;;;;;;;;;;;;;;;;24301:21:::1;24339:1;24325:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24301:40;;24362:4;;;;;;;;;;;24352;24357:1;24352:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;24395:4;24377;24382:1;24377:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;24413:6;;;;;;;;;;;:57;;;24478:6;24500:1;24516:4;24535:2;24552:15;24413:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;24290:296;15356:5:::0;15347:6;;:14;;;;;;;;;;;;;;;;;;24225:361;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;152:155;;;;:::o;313:133::-;356:5;394:6;381:20;372:29;;410:30;434:5;410:30;:::i;:::-;313:133;;;;:::o;452:139::-;498:5;536:6;523:20;514:29;;552:33;579:5;552:33;:::i;:::-;452:139;;;;:::o;597:143::-;654:5;685:6;679:13;670:22;;701:33;728:5;701:33;:::i;:::-;597:143;;;;:::o;746:329::-;805:6;854:2;842:9;833:7;829:23;825:32;822:119;;;860:79;;:::i;:::-;822:119;980:1;1005:53;1050:7;1041:6;1030:9;1026:22;1005:53;:::i;:::-;995:63;;951:117;746:329;;;;:::o;1081:345::-;1148:6;1197:2;1185:9;1176:7;1172:23;1168:32;1165:119;;;1203:79;;:::i;:::-;1165:119;1323:1;1348:61;1401:7;1392:6;1381:9;1377:22;1348:61;:::i;:::-;1338:71;;1294:125;1081:345;;;;:::o;1432:474::-;1500:6;1508;1557:2;1545:9;1536:7;1532:23;1528:32;1525:119;;;1563:79;;:::i;:::-;1525:119;1683:1;1708:53;1753:7;1744:6;1733:9;1729:22;1708:53;:::i;:::-;1698:63;;1654:117;1810:2;1836:53;1881:7;1872:6;1861:9;1857:22;1836:53;:::i;:::-;1826:63;;1781:118;1432:474;;;;;:::o;1912:619::-;1989:6;1997;2005;2054:2;2042:9;2033:7;2029:23;2025:32;2022:119;;;2060:79;;:::i;:::-;2022:119;2180:1;2205:53;2250:7;2241:6;2230:9;2226:22;2205:53;:::i;:::-;2195:63;;2151:117;2307:2;2333:53;2378:7;2369:6;2358:9;2354:22;2333:53;:::i;:::-;2323:63;;2278:118;2435:2;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2406:118;1912:619;;;;;:::o;2537:468::-;2602:6;2610;2659:2;2647:9;2638:7;2634:23;2630:32;2627:119;;;2665:79;;:::i;:::-;2627:119;2785:1;2810:53;2855:7;2846:6;2835:9;2831:22;2810:53;:::i;:::-;2800:63;;2756:117;2912:2;2938:50;2980:7;2971:6;2960:9;2956:22;2938:50;:::i;:::-;2928:60;;2883:115;2537:468;;;;;:::o;3011:474::-;3079:6;3087;3136:2;3124:9;3115:7;3111:23;3107:32;3104:119;;;3142:79;;:::i;:::-;3104:119;3262:1;3287:53;3332:7;3323:6;3312:9;3308:22;3287:53;:::i;:::-;3277:63;;3233:117;3389:2;3415:53;3460:7;3451:6;3440:9;3436:22;3415:53;:::i;:::-;3405:63;;3360:118;3011:474;;;;;:::o;3491:323::-;3547:6;3596:2;3584:9;3575:7;3571:23;3567:32;3564:119;;;3602:79;;:::i;:::-;3564:119;3722:1;3747:50;3789:7;3780:6;3769:9;3765:22;3747:50;:::i;:::-;3737:60;;3693:114;3491:323;;;;:::o;3820:468::-;3885:6;3893;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;;:::i;:::-;3910:119;4068:1;4093:50;4135:7;4126:6;4115:9;4111:22;4093:50;:::i;:::-;4083:60;;4039:114;4192:2;4218:53;4263:7;4254:6;4243:9;4239:22;4218:53;:::i;:::-;4208:63;;4163:118;3820:468;;;;;:::o;4294:759::-;4377:6;4385;4393;4401;4450:3;4438:9;4429:7;4425:23;4421:33;4418:120;;;4457:79;;:::i;:::-;4418:120;4577:1;4602:50;4644:7;4635:6;4624:9;4620:22;4602:50;:::i;:::-;4592:60;;4548:114;4701:2;4727:53;4772:7;4763:6;4752:9;4748:22;4727:53;:::i;:::-;4717:63;;4672:118;4829:2;4855:53;4900:7;4891:6;4880:9;4876:22;4855:53;:::i;:::-;4845:63;;4800:118;4957:2;4983:53;5028:7;5019:6;5008:9;5004:22;4983:53;:::i;:::-;4973:63;;4928:118;4294:759;;;;;;;:::o;5059:329::-;5118:6;5167:2;5155:9;5146:7;5142:23;5138:32;5135:119;;;5173:79;;:::i;:::-;5135:119;5293:1;5318:53;5363:7;5354:6;5343:9;5339:22;5318:53;:::i;:::-;5308:63;;5264:117;5059:329;;;;:::o;5394:474::-;5462:6;5470;5519:2;5507:9;5498:7;5494:23;5490:32;5487:119;;;5525:79;;:::i;:::-;5487:119;5645:1;5670:53;5715:7;5706:6;5695:9;5691:22;5670:53;:::i;:::-;5660:63;;5616:117;5772:2;5798:53;5843:7;5834:6;5823:9;5819:22;5798:53;:::i;:::-;5788:63;;5743:118;5394:474;;;;;:::o;5874:619::-;5951:6;5959;5967;6016:2;6004:9;5995:7;5991:23;5987:32;5984:119;;;6022:79;;:::i;:::-;5984:119;6142:1;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6113:117;6269:2;6295:53;6340:7;6331:6;6320:9;6316:22;6295:53;:::i;:::-;6285:63;;6240:118;6397:2;6423:53;6468:7;6459:6;6448:9;6444:22;6423:53;:::i;:::-;6413:63;;6368:118;5874:619;;;;;:::o;6499:663::-;6587:6;6595;6603;6652:2;6640:9;6631:7;6627:23;6623:32;6620:119;;;6658:79;;:::i;:::-;6620:119;6778:1;6803:64;6859:7;6850:6;6839:9;6835:22;6803:64;:::i;:::-;6793:74;;6749:128;6916:2;6942:64;6998:7;6989:6;6978:9;6974:22;6942:64;:::i;:::-;6932:74;;6887:129;7055:2;7081:64;7137:7;7128:6;7117:9;7113:22;7081:64;:::i;:::-;7071:74;;7026:129;6499:663;;;;;:::o;7168:911::-;7263:6;7271;7279;7287;7295;7344:3;7332:9;7323:7;7319:23;7315:33;7312:120;;;7351:79;;:::i;:::-;7312:120;7471:1;7496:53;7541:7;7532:6;7521:9;7517:22;7496:53;:::i;:::-;7486:63;;7442:117;7598:2;7624:53;7669:7;7660:6;7649:9;7645:22;7624:53;:::i;:::-;7614:63;;7569:118;7726:2;7752:53;7797:7;7788:6;7777:9;7773:22;7752:53;:::i;:::-;7742:63;;7697:118;7854:2;7880:53;7925:7;7916:6;7905:9;7901:22;7880:53;:::i;:::-;7870:63;;7825:118;7982:3;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7953:119;7168:911;;;;;;;;:::o;8085:179::-;8154:10;8175:46;8217:3;8209:6;8175:46;:::i;:::-;8253:4;8248:3;8244:14;8230:28;;8085:179;;;;:::o;8270:147::-;8365:45;8404:5;8365:45;:::i;:::-;8360:3;8353:58;8270:147;;:::o;8423:108::-;8500:24;8518:5;8500:24;:::i;:::-;8495:3;8488:37;8423:108;;:::o;8537:118::-;8624:24;8642:5;8624:24;:::i;:::-;8619:3;8612:37;8537:118;;:::o;8691:732::-;8810:3;8839:54;8887:5;8839:54;:::i;:::-;8909:86;8988:6;8983:3;8909:86;:::i;:::-;8902:93;;9019:56;9069:5;9019:56;:::i;:::-;9098:7;9129:1;9114:284;9139:6;9136:1;9133:13;9114:284;;;9215:6;9209:13;9242:63;9301:3;9286:13;9242:63;:::i;:::-;9235:70;;9328:60;9381:6;9328:60;:::i;:::-;9318:70;;9174:224;9161:1;9158;9154:9;9149:14;;9114:284;;;9118:14;9414:3;9407:10;;8815:608;;;8691:732;;;;:::o;9429:109::-;9510:21;9525:5;9510:21;:::i;:::-;9505:3;9498:34;9429:109;;:::o;9544:179::-;9655:61;9710:5;9655:61;:::i;:::-;9650:3;9643:74;9544:179;;:::o;9729:147::-;9824:45;9863:5;9824:45;:::i;:::-;9819:3;9812:58;9729:147;;:::o;9882:364::-;9970:3;9998:39;10031:5;9998:39;:::i;:::-;10053:71;10117:6;10112:3;10053:71;:::i;:::-;10046:78;;10133:52;10178:6;10173:3;10166:4;10159:5;10155:16;10133:52;:::i;:::-;10210:29;10232:6;10210:29;:::i;:::-;10205:3;10201:39;10194:46;;9974:272;9882:364;;;;:::o;10252:366::-;10394:3;10415:67;10479:2;10474:3;10415:67;:::i;:::-;10408:74;;10491:93;10580:3;10491:93;:::i;:::-;10609:2;10604:3;10600:12;10593:19;;10252:366;;;:::o;10624:::-;10766:3;10787:67;10851:2;10846:3;10787:67;:::i;:::-;10780:74;;10863:93;10952:3;10863:93;:::i;:::-;10981:2;10976:3;10972:12;10965:19;;10624:366;;;:::o;10996:::-;11138:3;11159:67;11223:2;11218:3;11159:67;:::i;:::-;11152:74;;11235:93;11324:3;11235:93;:::i;:::-;11353:2;11348:3;11344:12;11337:19;;10996:366;;;:::o;11368:365::-;11510:3;11531:66;11595:1;11590:3;11531:66;:::i;:::-;11524:73;;11606:93;11695:3;11606:93;:::i;:::-;11724:2;11719:3;11715:12;11708:19;;11368:365;;;:::o;11739:366::-;11881:3;11902:67;11966:2;11961:3;11902:67;:::i;:::-;11895:74;;11978:93;12067:3;11978:93;:::i;:::-;12096:2;12091:3;12087:12;12080:19;;11739:366;;;:::o;12111:118::-;12198:24;12216:5;12198:24;:::i;:::-;12193:3;12186:37;12111:118;;:::o;12235:112::-;12318:22;12334:5;12318:22;:::i;:::-;12313:3;12306:35;12235:112;;:::o;12353:222::-;12446:4;12484:2;12473:9;12469:18;12461:26;;12497:71;12565:1;12554:9;12550:17;12541:6;12497:71;:::i;:::-;12353:222;;;;:::o;12581:238::-;12682:4;12720:2;12709:9;12705:18;12697:26;;12733:79;12809:1;12798:9;12794:17;12785:6;12733:79;:::i;:::-;12581:238;;;;:::o;12825:348::-;12954:4;12992:2;12981:9;12977:18;12969:26;;13005:71;13073:1;13062:9;13058:17;13049:6;13005:71;:::i;:::-;13086:80;13162:2;13151:9;13147:18;13138:6;13086:80;:::i;:::-;12825:348;;;;;:::o;13179:332::-;13300:4;13338:2;13327:9;13323:18;13315:26;;13351:71;13419:1;13408:9;13404:17;13395:6;13351:71;:::i;:::-;13432:72;13500:2;13489:9;13485:18;13476:6;13432:72;:::i;:::-;13179:332;;;;;:::o;13517:807::-;13766:4;13804:3;13793:9;13789:19;13781:27;;13818:71;13886:1;13875:9;13871:17;13862:6;13818:71;:::i;:::-;13899:72;13967:2;13956:9;13952:18;13943:6;13899:72;:::i;:::-;13981:80;14057:2;14046:9;14042:18;14033:6;13981:80;:::i;:::-;14071;14147:2;14136:9;14132:18;14123:6;14071:80;:::i;:::-;14161:73;14229:3;14218:9;14214:19;14205:6;14161:73;:::i;:::-;14244;14312:3;14301:9;14297:19;14288:6;14244:73;:::i;:::-;13517:807;;;;;;;;;:::o;14330:210::-;14417:4;14455:2;14444:9;14440:18;14432:26;;14468:65;14530:1;14519:9;14515:17;14506:6;14468:65;:::i;:::-;14330:210;;;;:::o;14546:270::-;14663:4;14701:2;14690:9;14686:18;14678:26;;14714:95;14806:1;14795:9;14791:17;14782:6;14714:95;:::i;:::-;14546:270;;;;:::o;14822:720::-;15057:4;15095:3;15084:9;15080:19;15072:27;;15109:79;15185:1;15174:9;15170:17;15161:6;15109:79;:::i;:::-;15235:9;15229:4;15225:20;15220:2;15209:9;15205:18;15198:48;15263:108;15366:4;15357:6;15263:108;:::i;:::-;15255:116;;15381:72;15449:2;15438:9;15434:18;15425:6;15381:72;:::i;:::-;15463;15531:2;15520:9;15516:18;15507:6;15463:72;:::i;:::-;14822:720;;;;;;;:::o;15548:313::-;15661:4;15699:2;15688:9;15684:18;15676:26;;15748:9;15742:4;15738:20;15734:1;15723:9;15719:17;15712:47;15776:78;15849:4;15840:6;15776:78;:::i;:::-;15768:86;;15548:313;;;;:::o;15867:419::-;16033:4;16071:2;16060:9;16056:18;16048:26;;16120:9;16114:4;16110:20;16106:1;16095:9;16091:17;16084:47;16148:131;16274:4;16148:131;:::i;:::-;16140:139;;15867:419;;;:::o;16292:::-;16458:4;16496:2;16485:9;16481:18;16473:26;;16545:9;16539:4;16535:20;16531:1;16520:9;16516:17;16509:47;16573:131;16699:4;16573:131;:::i;:::-;16565:139;;16292:419;;;:::o;16717:::-;16883:4;16921:2;16910:9;16906:18;16898:26;;16970:9;16964:4;16960:20;16956:1;16945:9;16941:17;16934:47;16998:131;17124:4;16998:131;:::i;:::-;16990:139;;16717:419;;;:::o;17142:::-;17308:4;17346:2;17335:9;17331:18;17323:26;;17395:9;17389:4;17385:20;17381:1;17370:9;17366:17;17359:47;17423:131;17549:4;17423:131;:::i;:::-;17415:139;;17142:419;;;:::o;17567:::-;17733:4;17771:2;17760:9;17756:18;17748:26;;17820:9;17814:4;17810:20;17806:1;17795:9;17791:17;17784:47;17848:131;17974:4;17848:131;:::i;:::-;17840:139;;17567:419;;;:::o;17992:222::-;18085:4;18123:2;18112:9;18108:18;18100:26;;18136:71;18204:1;18193:9;18189:17;18180:6;18136:71;:::i;:::-;17992:222;;;;:::o;18220:831::-;18483:4;18521:3;18510:9;18506:19;18498:27;;18535:71;18603:1;18592:9;18588:17;18579:6;18535:71;:::i;:::-;18616:80;18692:2;18681:9;18677:18;18668:6;18616:80;:::i;:::-;18743:9;18737:4;18733:20;18728:2;18717:9;18713:18;18706:48;18771:108;18874:4;18865:6;18771:108;:::i;:::-;18763:116;;18889:72;18957:2;18946:9;18942:18;18933:6;18889:72;:::i;:::-;18971:73;19039:3;19028:9;19024:19;19015:6;18971:73;:::i;:::-;18220:831;;;;;;;;:::o;19057:332::-;19178:4;19216:2;19205:9;19201:18;19193:26;;19229:71;19297:1;19286:9;19282:17;19273:6;19229:71;:::i;:::-;19310:72;19378:2;19367:9;19363:18;19354:6;19310:72;:::i;:::-;19057:332;;;;;:::o;19395:214::-;19484:4;19522:2;19511:9;19507:18;19499:26;;19535:67;19599:1;19588:9;19584:17;19575:6;19535:67;:::i;:::-;19395:214;;;;:::o;19696:132::-;19763:4;19786:3;19778:11;;19816:4;19811:3;19807:14;19799:22;;19696:132;;;:::o;19834:114::-;19901:6;19935:5;19929:12;19919:22;;19834:114;;;:::o;19954:99::-;20006:6;20040:5;20034:12;20024:22;;19954:99;;;:::o;20059:113::-;20129:4;20161;20156:3;20152:14;20144:22;;20059:113;;;:::o;20178:184::-;20277:11;20311:6;20306:3;20299:19;20351:4;20346:3;20342:14;20327:29;;20178:184;;;;:::o;20368:169::-;20452:11;20486:6;20481:3;20474:19;20526:4;20521:3;20517:14;20502:29;;20368:169;;;;:::o;20543:305::-;20583:3;20602:20;20620:1;20602:20;:::i;:::-;20597:25;;20636:20;20654:1;20636:20;:::i;:::-;20631:25;;20790:1;20722:66;20718:74;20715:1;20712:81;20709:107;;;20796:18;;:::i;:::-;20709:107;20840:1;20837;20833:9;20826:16;;20543:305;;;;:::o;20854:185::-;20894:1;20911:20;20929:1;20911:20;:::i;:::-;20906:25;;20945:20;20963:1;20945:20;:::i;:::-;20940:25;;20984:1;20974:35;;20989:18;;:::i;:::-;20974:35;21031:1;21028;21024:9;21019:14;;20854:185;;;;:::o;21045:348::-;21085:7;21108:20;21126:1;21108:20;:::i;:::-;21103:25;;21142:20;21160:1;21142:20;:::i;:::-;21137:25;;21330:1;21262:66;21258:74;21255:1;21252:81;21247:1;21240:9;21233:17;21229:105;21226:131;;;21337:18;;:::i;:::-;21226:131;21385:1;21382;21378:9;21367:20;;21045:348;;;;:::o;21399:191::-;21439:4;21459:20;21477:1;21459:20;:::i;:::-;21454:25;;21493:20;21511:1;21493:20;:::i;:::-;21488:25;;21532:1;21529;21526:8;21523:34;;;21537:18;;:::i;:::-;21523:34;21582:1;21579;21575:9;21567:17;;21399:191;;;;:::o;21596:96::-;21633:7;21662:24;21680:5;21662:24;:::i;:::-;21651:35;;21596:96;;;:::o;21698:104::-;21743:7;21772:24;21790:5;21772:24;:::i;:::-;21761:35;;21698:104;;;:::o;21808:90::-;21842:7;21885:5;21878:13;21871:21;21860:32;;21808:90;;;:::o;21904:126::-;21941:7;21981:42;21974:5;21970:54;21959:65;;21904:126;;;:::o;22036:77::-;22073:7;22102:5;22091:16;;22036:77;;;:::o;22119:86::-;22154:7;22194:4;22187:5;22183:16;22172:27;;22119:86;;;:::o;22211:134::-;22269:9;22302:37;22333:5;22302:37;:::i;:::-;22289:50;;22211:134;;;:::o;22351:150::-;22425:9;22458:37;22489:5;22458:37;:::i;:::-;22445:50;;22351:150;;;:::o;22507:121::-;22565:9;22598:24;22616:5;22598:24;:::i;:::-;22585:37;;22507:121;;;:::o;22634:126::-;22684:9;22717:37;22748:5;22717:37;:::i;:::-;22704:50;;22634:126;;;:::o;22766:113::-;22816:9;22849:24;22867:5;22849:24;:::i;:::-;22836:37;;22766:113;;;:::o;22885:307::-;22953:1;22963:113;22977:6;22974:1;22971:13;22963:113;;;23062:1;23057:3;23053:11;23047:18;23043:1;23038:3;23034:11;23027:39;22999:2;22996:1;22992:10;22987:15;;22963:113;;;23094:6;23091:1;23088:13;23085:101;;;23174:1;23165:6;23160:3;23156:16;23149:27;23085:101;22934:258;22885:307;;;:::o;23198:180::-;23246:77;23243:1;23236:88;23343:4;23340:1;23333:15;23367:4;23364:1;23357:15;23384:180;23432:77;23429:1;23422:88;23529:4;23526:1;23519:15;23553:4;23550:1;23543:15;23570:180;23618:77;23615:1;23608:88;23715:4;23712:1;23705:15;23739:4;23736:1;23729:15;23756:180;23804:77;23801:1;23794:88;23901:4;23898:1;23891:15;23925:4;23922:1;23915:15;24065:117;24174:1;24171;24164:12;24188:102;24229:6;24280:2;24276:7;24271:2;24264:5;24260:14;24256:28;24246:38;;24188:102;;;:::o;24296:167::-;24436:19;24432:1;24424:6;24420:14;24413:43;24296:167;:::o;24469:179::-;24609:31;24605:1;24597:6;24593:14;24586:55;24469:179;:::o;24654:170::-;24794:22;24790:1;24782:6;24778:14;24771:46;24654:170;:::o;24830:156::-;24970:8;24966:1;24958:6;24954:14;24947:32;24830:156;:::o;24992:161::-;25132:13;25128:1;25120:6;25116:14;25109:37;24992:161;:::o;25159:122::-;25232:24;25250:5;25232:24;:::i;:::-;25225:5;25222:35;25212:63;;25271:1;25268;25261:12;25212:63;25159:122;:::o;25287:138::-;25368:32;25394:5;25368:32;:::i;:::-;25361:5;25358:43;25348:71;;25415:1;25412;25405:12;25348:71;25287:138;:::o;25431:116::-;25501:21;25516:5;25501:21;:::i;:::-;25494:5;25491:32;25481:60;;25537:1;25534;25527:12;25481:60;25431:116;:::o;25553:122::-;25626:24;25644:5;25626:24;:::i;:::-;25619:5;25616:35;25606:63;;25665:1;25662;25655:12;25606:63;25553:122;:::o

Swarm Source

ipfs://08f82294585a66d2ccef561d8d3bfda9a8947d13d0accdb620dacc10e7fb7b7c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.