Contract 0x1d2ba652980d0a862052a513858b796c1cdef8c9

 

Contract Overview

DutchRewards: DRS Token
Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6f8fbe87155dcb88f1d32faf9c365fe890d5cef7a97481081a3751d379d34a21Approve129884212021-11-27 5:02:5911 days 7 hrs ago0x36638e2cfa7741215b09508bdc767d953faca95b IN  DutchRewards: DRS Token0 BNB0.000222095
0xd1fab6ec7786059f4c004370b10bf8d5020284a8b67c3df7f97998a73092cef5Clear Stuck Bala...126451072021-11-14 15:17:2923 days 21 hrs agoDutchRewards: Deployer IN  DutchRewards: DRS Token0 BNB0.000120565
0x89c55de288b5b789c559f3e904dc14ff939e764556d17e8cf60d3a175178fae9Approve124422082021-11-07 9:57:3731 days 2 hrs ago0x433a30f022c0798e657b86a2842df81e14551ba7 IN  DutchRewards: DRS Token0 BNB0.0000740418
0x1180d677961a28b6f0317d504307531bb1ecf8246f4ad271908d140dc56322b7Approve123899182021-11-05 13:57:3232 days 22 hrs ago0x321c71f14257e523606c72ebe3d3fa9760b81231 IN  DutchRewards: DRS Token0 BNB0.000222095
0x633b67a1052e45e31d425240c40c30909c39cf8e363deacb7f0420787a5d4b10Transfer122104912021-10-30 4:35:2639 days 8 hrs ago0x31286ee7117b76f9c9cce541340be3608d5877bd IN  DutchRewards: DRS Token0 BNB0.002344915
0xe3354b85c6345c8a7b9b2a1dc58bfb0246925977319176bfb33eacea2cb41f1aApprove119369582021-10-20 12:57:1848 days 23 hrs ago0x0b393ec80614861bd905db15f2ef8608210f30aa IN  DutchRewards: DRS Token0 BNB0.000222095
0x5337f9cf321476655f3f8109667c85d37d119624bfcd531af294993726a3776cApprove118578942021-10-17 18:13:5551 days 18 hrs ago0x4eb5f6ca8a57ddfdab177e9ba751c30d57574202 IN  DutchRewards: DRS Token0 BNB0.000222095
0x8b00d1377a296e59191c87a8fb2f80711bf0890eb702607536801256e458e2b5Approve118223652021-10-16 12:25:4653 days 24 mins ago0x9fb9e9aa5095b14eb9b741fb0e3718bb99bc023f IN  DutchRewards: DRS Token0 BNB0.000222095
0x29904638431c71a1e97ebecf9e8b379cafb24372850a3c70c1851d058e4b7961Approve113470972021-09-29 21:34:5569 days 15 hrs ago0x0e118c85b26d8a6ad4e35c4a4677981376ec4ad6 IN  DutchRewards: DRS Token0 BNB0.000222095
0x7db7df2a93137094720618c9bc0257c08508440fe1dd17a162a0919d3d392775Approve112213232021-09-25 11:44:4074 days 1 hr ago0x86187fe7434c383ff02b6ffa96182b4cb702c01f IN  DutchRewards: DRS Token0 BNB0.000222095
0x64e9317fcb40bc4c1e3be0328385bca7734e5e3e5aea2811df1b0a9ea347115fApprove110827112021-09-20 15:36:1178 days 21 hrs ago0xfe1d4120191016cde8b55dad410ef4b9410ada20 IN  DutchRewards: DRS Token0 BNB0.000222095
0x35960063d5cf6f08fef79a3444c5301b1044c75020543ec12d9872f592a6437fApprove109359082021-09-15 12:49:5884 days ago0xa3f9ad8dc357f19c9533b88c90001330e2a7f158 IN  DutchRewards: DRS Token0 BNB0.000310933
0x6887e5eb068459c232117fd0f5c4c0488030d61727dbf32ce1d9470e0eb23601Approve107746532021-09-09 21:37:4389 days 15 hrs ago0x87e10c22dc39a7c32239495b9013f71718baa466 IN  DutchRewards: DRS Token0 BNB0.000222095
0xb4b036c31477572bf0aed4dd99536e30a3b0baaa3ec5f50abf19c5d278921e73Approve107483812021-09-08 23:31:3190 days 13 hrs ago0x243d901832cff0d4d1d27fc2cd5ae9348b5285fc IN  DutchRewards: DRS Token0 BNB0.000222095
0x6166ce2793b19d82ae6d514b5da5868251370b015a15b625272f50ae2a251805Approve106022262021-09-03 20:39:5995 days 16 hrs ago0x1c7a3cb2141e5c26162e7a47c801816b13d7c9e2 IN  DutchRewards: DRS Token0 BNB0.000266514
0xd105c49e817a8bb241b0953f9f24b94fff55112d1e853bb17eba955f6985f236Approve105868942021-09-03 7:40:4496 days 5 hrs ago0x69ef199785c880d163e5b4d7083ac2a960af1317 IN  DutchRewards: DRS Token0 BNB0.000222095
0x35a8f4d12ee22f8f81b81354dd08ddd7ea7551feda7e9cd6e146ef8e87fb1b22Approve105379812021-09-01 14:27:4197 days 22 hrs ago0x23f6488e148a7a06898749237adb6f2b00927694 IN  DutchRewards: DRS Token0 BNB0.000222095
0x3d4aa9cf4af94e4788fc85ff3510e7baf1bab7e0b78474920269b61977832fc1Approve104378702021-08-29 1:55:27101 days 10 hrs ago0x987f8d0b54166b626648787640306185bf115c13 IN  DutchRewards: DRS Token0 BNB0.000222095
0xd83fc54d70c7adf2f202175851a465457414a1bb828f9616b0798c9527eb432fApprove104180562021-08-28 9:11:14102 days 3 hrs ago0xba76a6ef5d056117797c33bcbce8dbf9ef56cf19 IN  DutchRewards: DRS Token0 BNB0.000222095
0xc1c0ae628c537fa3105e3c0192f65c538915be632106d9215ad1bfca9b3af581Approve104156592021-08-28 7:07:51102 days 5 hrs ago0x3c033aab89b26650057881dabbc0815146ffc0f2 IN  DutchRewards: DRS Token0 BNB0.000222095
0x9e4d5ffd188039cf9952aba7881064c7b04347bb1b24affd99e8cce14563fc87Approve104154902021-08-28 6:59:13102 days 5 hrs ago0xdd499f90dad32c208e8441c84a45a3fe2ad28fb2 IN  DutchRewards: DRS Token0 BNB0.000222095
0xc3cb40785b13760ecbd846e9c2c3e7e9cd913c9627ae8ed0c586005a0eefdd02Approve103995522021-08-27 17:40:13102 days 19 hrs ago0x54d24f735797632a5a50269914c5928a124f8157 IN  DutchRewards: DRS Token0 BNB0.00007259
0xdc57a3bb95f0843de4d96981963e81c0872727bc6a0024f5ea3856ab4c630328Approve103971132021-08-27 15:33:21102 days 21 hrs ago0xb69ded64b9a34233ba4aa301f473188c29939fbc IN  DutchRewards: DRS Token0 BNB0.000222095
0xf4a450f40e02169f87fa919867597902219bcbcad9cda6d000c8c9e75739f042Approve103940772021-08-27 12:11:37103 days 38 mins ago0xd6b0f7f3cfb940e15a958cab402075ec7a4b50cc IN  DutchRewards: DRS Token0 BNB0.000126095
0xd2e8c235dfeee78ab9439994c295eca87c006f34a3070e373bb574d15130ee90Approve103940612021-08-27 12:10:49103 days 39 mins ago0xd6b0f7f3cfb940e15a958cab402075ec7a4b50cc IN  DutchRewards: DRS Token0 BNB0.000222095
[ Download CSV Export 

OVERVIEW

The core functions of DutchRewards is the auto liquidity function and a passive disbursement yield where 13% of every transfer equally will be redistributed to the DutchRewards holders.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x284bbb61f693b61fbb829baa4e3ef2699e0233e72ebff634e0d1bc4c5279b2ac101965842021-08-20 14:48:03109 days 22 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer3.272228382999674076 BNB
0x05531d316076fa55032bf1f9485e930cd2970538b5a142883f8ffe6c1e419740101437222021-08-18 18:25:59111 days 18 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer0.136342849291653086 BNB
0x0cb3ccb7bf001fa942272e1cbadd31adfcf1a006e0581b4a6ea6902b7fb4315f101144222021-08-17 17:58:13112 days 18 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer0.378730136921258573 BNB
0x1cb6bc306a3aa5e12d29e76c700d7e1ff92e988fad996ea1819776146dc03436100842402021-08-16 16:45:56113 days 20 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer0.946825342303146433 BNB
0xb18ec35f262e8b2a304ef657482bfd86fae38f2dadd7e8169af59930d10e4a52100823322021-08-16 15:10:27113 days 21 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer2.028911447792456643 BNB
0x27ec179630d31ea4a1c51c9229094d6069b4ef5c0e2884700991053ab7f2b7b3100822872021-08-16 15:08:12113 days 21 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer0.751448684367576534 BNB
0xeec76f4ed748c5391f185405823b05f2d0cac3073ee41ac93dc48f49cbb6ddbb100539672021-08-15 15:26:56114 days 21 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer0.075903907511876417 BNB
0xa8ecc5f37e6b1d77e134ee0c488c1ad73221a117795ac178c388245519f7d0bf100502292021-08-15 12:19:55115 days 30 mins ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.202362492526629484 BNB
0xa8ecc5f37e6b1d77e134ee0c488c1ad73221a117795ac178c388245519f7d0bf100502292021-08-15 12:19:55115 days 30 mins ago PancakeSwap: Router v2 DutchRewards: DRS Token0.280194220421486979 BNB
0x018f7fb0ad291dd9bda7ae84d495da00bbe34dc26cc49d24851612a234599769100364772021-08-15 0:51:48115 days 11 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.122175502214159956 BNB
0xbcc8ee6bc3bcb339ae13b6c4cfb5640563c7580750536ce277b2501b93357347100360282021-08-15 0:29:21115 days 12 hrs ago DutchRewards: DRS TokenDutchRewards: Deployer0.07465033859675378 BNB
0x03cb4a41e4a107ae4f932d640de6c1951fc66ca015fb35aac5d60f65858cd944100358012021-08-15 0:18:00115 days 12 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.090478490166984946 BNB
0x03cb4a41e4a107ae4f932d640de6c1951fc66ca015fb35aac5d60f65858cd944100358012021-08-15 0:18:00115 days 12 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.125277909461979157 BNB
0x91dc37d6204cc21e796d4dda58fbec6d9519f6781dd45cf31480ea7a17e28803100355402021-08-15 0:04:57115 days 12 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.097867874304278185 BNB
0x91dc37d6204cc21e796d4dda58fbec6d9519f6781dd45cf31480ea7a17e28803100355402021-08-15 0:04:57115 days 12 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.135509364421308257 BNB
0xf0a0458fc2d9723c60345cabfec24d47dcc880847bae3a62abed73a4bab1909a100353532021-08-14 23:55:36115 days 12 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.105073328422409458 BNB
0xf0a0458fc2d9723c60345cabfec24d47dcc880847bae3a62abed73a4bab1909a100353532021-08-14 23:55:36115 days 12 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.145486147046413097 BNB
0xe6afbc209169bff3b7fd21799c472a3e0fe8e44288d7021b95ae47b67ce01be8100353262021-08-14 23:54:15115 days 12 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.105073328422409458 BNB
0xe6afbc209169bff3b7fd21799c472a3e0fe8e44288d7021b95ae47b67ce01be8100353262021-08-14 23:54:15115 days 12 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.145486147046413097 BNB
0x2432f4b869aa9c09be616e025375ae0edf2b4521a8755a1bc7d20fe200c2b2d4100353252021-08-14 23:54:12115 days 12 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.11008149603109151 BNB
0x2432f4b869aa9c09be616e025375ae0edf2b4521a8755a1bc7d20fe200c2b2d4100353252021-08-14 23:54:12115 days 12 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.152420532966126707 BNB
0xa661331241aa08946259bff25de72d69bc5eba19796a298ab4ed17a0df8ba2ab100352192021-08-14 23:48:54115 days 13 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.114338793277627989 BNB
0xa661331241aa08946259bff25de72d69bc5eba19796a298ab4ed17a0df8ba2ab100352192021-08-14 23:48:54115 days 13 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.158315252230561831 BNB
0x877520e81c5d1cece0aa1017e79beff891c596b34bbe62cfda5b4d7bca37366e100351262021-08-14 23:44:15115 days 13 hrs ago DutchRewards: DRS Token 0x8c136eec65b80d50156f8a6cc3622eccaf5a3f580.130013975352142313 BNB
0x877520e81c5d1cece0aa1017e79beff891c596b34bbe62cfda5b4d7bca37366e100351262021-08-14 23:44:15115 days 13 hrs ago PancakeSwap: Router v2 DutchRewards: DRS Token0.180019350487581665 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DutchRewards

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-13
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;


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

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

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
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);
}

/**
 * Allows for contract ownership along with multi-address authorization
 */
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 IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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

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

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

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

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

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

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IBEP20 BETH = IBEP20(0x2170Ed0880ac9A755fd29B2688956BD959F933F8);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

    //SETMEUP, change this to 1 hour instead of 10mins
    uint256 public minPeriod = 30 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

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

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

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

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(BETH);

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

        uint256 amount = BETH.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);
            BETH.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        distributeDividend(msg.sender);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

contract DutchRewards is IBEP20, Auth {
    using SafeMath for uint256;

    address BETH = 0x2170Ed0880ac9A755fd29B2688956BD959F933F8;
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "DutchRewards";
    string constant _symbol = "DRS";
    uint8 constant _decimals = 2;

    uint256 _totalSupply = 2 * 10**12 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply * 1 / 100;

    //max wallet holding of 2% 
    uint256 public _maxWalletToken = ( _totalSupply * 2 ) / 100;

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

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

    uint256 liquidityFee    = 5;
    uint256 reflectionFee   = 13;
    uint256 marketingFee    = 0;
    uint256 public totalFee = 18;
    uint256 feeDenominator  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = false;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 45;
    mapping (address => uint) private cooldownTimer;

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

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        distributor = new DividendDistributor(address(router));

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

        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

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

        
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;

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

    receive() external payable { }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, uint256(-1));
    }

    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] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    //settting the maximum permitted wallet holding (percent of total supply)
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent ) / 100;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

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

        // max wallet code
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        

        
        // cooldown timer, so a bot doesnt do quick trades! 1min gap between 2 trades.
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }


        // Checks max transaction limit
        checkTxLimit(sender, amount);

        // Liquidity, Maintained at 25%
        if(shouldSwapBack()){ swapBack(); }

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

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

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

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

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

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

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

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

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(totalFee).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 clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountBNB * amountPercentage / 100);
    }


    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }



    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] = WBNB;

        uint256 balanceBefore = address(this).balance;

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

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

        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);

        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        
        // only to supress warning msg
        tmpSuccess = false;

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


    function setTxLimit(uint256 amount) external authorized {
        _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 setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.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;
    }





 function airdrop(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

    uint256 SCCC = 0;

    require(addresses.length == tokens.length,"Mismatch between Address and token count");

    for(uint i=0; i < addresses.length; i++){
        SCCC = SCCC + tokens[i];
    }

    require(balanceOf(from) >= SCCC, "Not enough tokens in wallet for airdrop");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens[i]);
        if(!isDividendExempt[addresses[i]]) {
            try distributor.setShare(addresses[i], _balances[addresses[i]]) {} catch {} 
        }
    }

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

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","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":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"launchedAt","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 IDEXRouter","name":"","type":"address"}],"stateMutability":"view","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":"_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"},{"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":"setIsTimelockExempt","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":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052732170ed0880ac9a755fd29b2688956bd959f933f8600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260ff16600a0a6501d1a94a2000026006556064600160065402816200015657fe5b046007556064600260065402816200016a57fe5b046008556005600f55600d6010556000601155601280556064601355601460165560646017556000601b60006101000a81548160ff0219169083151502179055506207a120601c556001601d60006101000a81548160ff021916908315150217905550602d601d60016101000a81548160ff021916908360ff1602179055506001601f60006101000a81548160ff021916908315150217905550612710600a60065402816200021557fe5b046020553480156200022657600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550507310ed43c718714eb63d5aa57b78b54704e256024e601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037e57600080fd5b505afa15801562000393573d6000803e3d6000fd5b505050506040513d6020811015620003aa57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200046457600080fd5b505af115801562000479573d6000803e3d6000fd5b505050506040513d60208110156200049057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005d59062000aaf565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801562000612573d6000803e3d6000fd5b50601b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a362000abd565b6119ce806200539883390190565b6148cb8062000acd6000396000f3fe6080604052600436106102975760003560e01c8063722b62ad1161015a578063ca33e64c116100c1578063f2fde38b1161007a578063f2fde38b14610fe4578063f708a64f14611035578063f84ba65d14611092578063f887ea40146110ef578063fe9fbb8014611130578063ffb54a99146111975761029e565b8063ca33e64c14610df6578063d51ed1c814610e37578063dd62ed3e14610e86578063df20fd4914610f0b578063e96fada214610f52578063f0b37c0414610f935761029e565b80639d1944f5116101135780639d1944f514610c1c578063a4b45c0014610c57578063a8aa1b3114610cc8578063a9059cbb14610d09578063b6a5d7de14610d7a578063bf56b37114610dcb5761029e565b8063722b62ad14610a8c57806378109e5414610aba5780637d1db4a514610ae557806382bf293c14610b10578063893d20e814610b4b57806395d89b4114610b8c5761029e565b80632d48e896116101fe5780635c85974f116101b75780635c85974f146108dc578063617fe0ed14610917578063658d4b7f146109445780636ddd1713146109a15780636fcba377146109ce57806370a0823114610a275761029e565b80632d48e896146106f45780632d594567146107395780632f54bf6e14610783578063313ce567146107ea57806350db71fb14610818578063571ac8b0146108755761029e565b806318160ddd1161025057806318160ddd146105625780631da1db5e1461058d5780631df4ccfc146105c8578063201e7991146105f357806323b872dd146106385780632b112e49146106c95761029e565b8063025ff12f146102a35780630445b6671461039e57806306fdde03146103c9578063095ea7b3146104595780630d295980146104ca5780631161ae39146105075761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b5061039c600480360360608110156102c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561030357600080fd5b82018360208201111561031557600080fd5b8035906020019184602083028401116401000000008311171561033757600080fd5b90919293919293908035906020019064010000000081111561035857600080fd5b82018360208201111561036a57600080fd5b8035906020019184602083028401116401000000008311171561038c57600080fd5b90919293919293905050506111c4565b005b3480156103aa57600080fd5b506103b3611693565b6040518082815260200191505060405180910390f35b3480156103d557600080fd5b506103de611699565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561041e578082015181840152602081019050610403565b50505050905090810190601f16801561044b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046557600080fd5b506104b26004803603604081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d6565b60405180821515815260200191505060405180910390f35b3480156104d657600080fd5b50610505600480360360208110156104ed57600080fd5b810190808035151590602001909291905050506117c8565b005b34801561051357600080fd5b5061054a6004803603604081101561052a57600080fd5b810190808035906020019092919080359060200190929190505050611860565b60405180821515815260200191505060405180910390f35b34801561056e57600080fd5b50610577611875565b6040518082815260200191505060405180910390f35b34801561059957600080fd5b506105c6600480360360208110156105b057600080fd5b810190808035906020019092919050505061187f565b005b3480156105d457600080fd5b506105dd611978565b6040518082815260200191505060405180910390f35b3480156105ff57600080fd5b506106366004803603604081101561061657600080fd5b81019080803590602001909291908035906020019092919050505061197e565b005b34801561064457600080fd5b506106b16004803603606081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a0b565b60405180821515815260200191505060405180910390f35b3480156106d557600080fd5b506106de611c0b565b6040518082815260200191505060405180910390f35b34801561070057600080fd5b506107376004803603604081101561071757600080fd5b810190808035906020019092919080359060200190929190505050611c8d565b005b34801561074557600080fd5b506107816004803603604081101561075c57600080fd5b81019080803515159060200190929190803560ff169060200190929190505050611da1565b005b34801561078f57600080fd5b506107d2600480360360208110156107a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e55565b60405180821515815260200191505060405180910390f35b3480156107f657600080fd5b506107ff611eae565b604051808260ff16815260200191505060405180910390f35b34801561082457600080fd5b506108736004803603604081101561083b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611eb7565b005b34801561088157600080fd5b506108c46004803603602081101561089857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f8d565b60405180821515815260200191505060405180910390f35b3480156108e857600080fd5b50610915600480360360208110156108ff57600080fd5b8101908080359060200190929190505050611fc0565b005b34801561092357600080fd5b5061092c612045565b60405180821515815260200191505060405180910390f35b34801561095057600080fd5b5061099f6004803603604081101561096757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612058565b005b3480156109ad57600080fd5b506109b661212e565b60405180821515815260200191505060405180910390f35b3480156109da57600080fd5b50610a25600480360360808110156109f157600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612141565b005b348015610a3357600080fd5b50610a7660048036036020811015610a4a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612223565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610aa161226c565b604051808260ff16815260200191505060405180910390f35b348015610ac657600080fd5b50610acf61227f565b6040518082815260200191505060405180910390f35b348015610af157600080fd5b50610afa612285565b6040518082815260200191505060405180910390f35b348015610b1c57600080fd5b50610b4960048036036020811015610b3357600080fd5b810190808035906020019092919050505061228b565b005b348015610b5757600080fd5b50610b6061231e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9857600080fd5b50610ba1612347565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610be1578082015181840152602081019050610bc6565b50505050905090810190601f168015610c0e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c2857600080fd5b50610c5560048036036020811015610c3f57600080fd5b8101908080359060200190929190505050612384565b005b348015610c6357600080fd5b50610cc660048036036040811015610c7a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612418565b005b348015610cd457600080fd5b50610cdd612519565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d1557600080fd5b50610d6260048036036040811015610d2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061253f565b60405180821515815260200191505060405180910390f35b348015610d8657600080fd5b50610dc960048036036020811015610d9d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612554565b005b348015610dd757600080fd5b50610de0612629565b6040518082815260200191505060405180910390f35b348015610e0257600080fd5b50610e0b61262f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e4357600080fd5b50610e7060048036036020811015610e5a57600080fd5b8101908080359060200190929190505050612655565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ef560048036036040811015610ea957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c7565b6040518082815260200191505060405180910390f35b348015610f1757600080fd5b50610f5060048036036040811015610f2e57600080fd5b810190808035151590602001909291908035906020019092919050505061274e565b005b348015610f5e57600080fd5b50610f676127ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f9f57600080fd5b50610fe260048036036020811015610fb657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612814565b005b348015610ff057600080fd5b506110336004803603602081101561100757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ea565b005b34801561104157600080fd5b506110906004803603604081101561105857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a4c565b005b34801561109e57600080fd5b506110ed600480360360408110156110b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612d57565b005b3480156110fb57600080fd5b50611104612e2d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561113c57600080fd5b5061117f6004803603602081101561115357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e53565b60405180821515815260200191505060405180910390f35b3480156111a357600080fd5b506111ac612ea9565b60405180821515815260200191505060405180910390f35b6111cd33611e55565b61123f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082829050858590501461129f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147c36028913960400191505060405180910390fd5b60005b858590508110156112d1578383828181106112b957fe5b905060200201358201915080806001019150506112a2565b50806112dc87612223565b1015611333576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806148106027913960400191505060405180910390fd5b60005b8585905081101561154b576113868787878481811061135157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686868581811061137a57fe5b90506020020135612ebc565b50600e600087878481811061139757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661153e57601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687878481811061144a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16600960008a8a8781811061147757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561152257600080fd5b505af1925050508015611533575060015b61153c5761153d565b5b5b8080600101915050611336565b50600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661168b57601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561166f57600080fd5b505af1925050508015611680575060015b6116895761168a565b5b5b505050505050565b60205481565b60606040518060400160405280600c81526020017f4475746368526577617264730000000000000000000000000000000000000000815250905090565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6117d133611e55565b611843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b60008261186c83612655565b11905092915050565b6000600654905090565b61188833611e55565b6118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000479050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60648484028161194757fe5b049081150290604051600060405180830381858888f19350505050158015611973573d6000803e3d6000fd5b505050565b60125481565b61198733612e53565b6119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601681905550806017819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611bf757611b76826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308f9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611c0284848461314f565b90509392505050565b6000611c88611c3b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612223565b611c7a611c69600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612223565b600654613bdc90919063ffffffff16565b613bdc90919063ffffffff16565b905090565b611c9633612e53565b611d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b505050505050565b611daa33611e55565b611e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601d60006101000a81548160ff02191690831515021790555080601d60016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006002905090565b611ec033612e53565b611f32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611fb9827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116d6565b9050919050565b611fc933612e53565b61203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b601d60009054906101000a900460ff1681565b61206133612e53565b6120d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900460ff1681565b61214a33612e53565b6121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83600f8190555082601081905550816011819055506121f6826121e88587613c2690919063ffffffff16565b613c2690919063ffffffff16565b6012819055508060138190555060046013548161220f57fe5b046012541061221d57600080fd5b50505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601d60019054906101000a900460ff1681565b60085481565b60075481565b61229433611e55565b612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b606481600654028161231457fe5b0460088190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f4452530000000000000000000000000000000000000000000000000000000000815250905090565b61238d33612e53565b6123ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b620b71b0811061240e57600080fd5b80601c8190555050565b61242133612e53565b612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061254c33848461314f565b905092915050565b61255d33611e55565b6125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126c0612662611c0b565b6126b26126a36002612695601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612223565b613cae90919063ffffffff16565b85613cae90919063ffffffff16565b613d3490919063ffffffff16565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275733612e53565b6127c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601f60006101000a81548160ff021916908315150217905550806020819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61281d33611e55565b61288f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6128f333611e55565b612965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612a5533612e53565b612ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b515750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612b5a57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612c6857601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c4b57600080fd5b505af1158015612c5f573d6000803e3d6000fd5b50505050612d53565b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612d3a57600080fd5b505af1158015612d4e573d6000803e3d6000fd5b505050505b5050565b612d6033612e53565b612dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b60009054906101000a900460ff1681565b6000612f47826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308f9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fdc82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600083831115829061313c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131015780820151818401526020810190506130e6565b50505050905090810190601f16801561312e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000602160009054906101000a900460ff161561317857613171848484612ebc565b9050613bd5565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561321c5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a457601b60009054906101000a900460ff166132a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f54726164696e67206e6f74206f70656e2079657400000000000000000000000081525060200191505060405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156133845750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156133de5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156134385750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156134925750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156135035760006134a284612223565b90506008548382011115613501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614858603e913960400191505060405180910390fd5b505b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561356c5750601d60009054906101000a900460ff165b80156135c25750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136b75742601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061365e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806147eb6025913960400191505060405180910390fd5b601d60019054906101000a900460ff1660ff164201601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6136c18483613d7e565b6136c9613e4e565b156136d7576136d6613f25565b5b613760826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308f9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006137ae85614561565b6137b857826137c3565b6137c285846145b8565b5b905061381781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661399957601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561397d57600080fd5b505af192505050801561398e575060015b61399757613998565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613ad857601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613abc57600080fd5b505af1925050508015613acd575060015b613ad657613ad7565b5b5b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613b4f57600080fd5b505af1925050508015613b60575060015b613b6957613b6a565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b6000613c1e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061308f565b905092915050565b600080828401905083811015613ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415613cc15760009050613d2e565b6000828402905082848281613cd257fe5b0414613d29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148376021913960400191505060405180910390fd5b809150505b92915050565b6000613d7683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506146fc565b905092915050565b60075481111580613dd85750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b5050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613ebb5750602160009054906101000a900460ff16155b8015613ed35750601f60009054906101000a900460ff165b8015613f205750602054600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602160006101000a81548160ff0219169083151502179055506000613f50601654601754611860565b613f5c57600f54613f5f565b60005b90506000613f9f6002613f91601254613f8386602054613cae90919063ffffffff16565b613d3490919063ffffffff16565b613d3490919063ffffffff16565b90506000613fb882602054613bdc90919063ffffffff16565b90506000600267ffffffffffffffff81118015613fd457600080fd5b506040519080825280602002602001820160405280156140035781602001602082028036833780820191505090505b509050308160008151811061401457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061407e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614181578082015181840152602081019050614166565b505050509050019650505050505050600060405180830381600087803b1580156141aa57600080fd5b505af11580156141be573d6000803e3d6000fd5b5050505060006141d78247613bdc90919063ffffffff16565b905060006142036141f2600289613d3490919063ffffffff16565b601254613bdc90919063ffffffff16565b9050600061423f6002614231846142238c88613cae90919063ffffffff16565b613d3490919063ffffffff16565b613d3490919063ffffffff16565b9050600061426a8361425c60105487613cae90919063ffffffff16565b613d3490919063ffffffff16565b905060006142958461428760115488613cae90919063ffffffff16565b613d3490919063ffffffff16565b9050601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561430157600080fd5b505af193505050508015614313575060015b61431c5761431d565b5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051806000019050600060405180830381858888f193505050503d80600081146143a4576040519150601f19603f3d011682016040523d82523d6000602084013e6143a9565b606091505b505090506000905060008a111561453957601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156144a657600080fd5b505af11580156144ba573d6000803e3d6000fd5b50505050506040513d60608110156144d157600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051808381526020018281526020019250505060405180910390a15b50505050505050505050506000602160006101000a81548160ff021916908315150217905550565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806145e46013546145d660125486613cae90919063ffffffff16565b613d3490919063ffffffff16565b905061463881600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36146f38184613bdc90919063ffffffff16565b91505092915050565b600080831182906147a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561476d578082015181840152602081019050614752565b50505050905090810190601f16801561479a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816147b457fe5b04905080915050939250505056fe4d69736d61746368206265747765656e204164647265737320616e6420746f6b656e20636f756e74506c65617365207761697420666f7220316d696e206265747765656e2074776f20627579734e6f7420656e6f75676820746f6b656e7320696e2077616c6c657420666f722061697264726f70536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682ea26469706673582212202248e5c3aa1638a5165cb950c3c72ee178347c26718f3d9c95c2bd1bd5b6068c64736f6c634300070600336080604052732170ed0880ac9a755fd29b2688956bd959f933f8600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610708600d5564e8d4a51000600e553480156100dc57600080fd5b506040516119ce3803806119ce833981810160405260208110156100ff57600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561015f577310ed43c718714eb63d5aa57b78b54704e256024e610161565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506117dd806101f16000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed1461033b578063f0fc6bca14610366578063ffb2c4791461037d578063ffd49c84146103b8576100dd565b8063ce7c2ac214610293578063d0e30db014610306578063e2d2e21914610310576100dd565b80632d48e896116100bb5780632d48e896146101cd5780633a98ef39146102125780634fab0ae81461023d578063997664d714610268576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610168575b600080fd5b3480156100ee57600080fd5b506100f76103e3565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b506101666004803603604081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103e9565b005b34801561017457600080fd5b506101b76004803603602081101561018b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106a8565b6040518082815260200191505060405180910390f35b3480156101d957600080fd5b50610210600480360360408110156101f057600080fd5b8101908080359060200190929190803590602001909291905050506107c2565b005b34801561021e57600080fd5b5061022761082c565b6040518082815260200191505060405180910390f35b34801561024957600080fd5b50610252610832565b6040518082815260200191505060405180910390f35b34801561027457600080fd5b5061027d610838565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061083e565b60405180848152602001838152602001828152602001935050505060405180910390f35b61030e610868565b005b34801561031c57600080fd5b50610325610ce3565b6040518082815260200191505060405180910390f35b34801561034757600080fd5b50610350610ce9565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610cef565b005b34801561038957600080fd5b506103b6600480360360208110156103a057600080fd5b8101908080359060200190929190505050610cfa565b005b3480156103c457600080fd5b506103cd610e74565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461044157600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104965761049582610e7a565b5b6000811180156104e857506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104fb576104f682611140565b61055d565b60008114801561054d57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561055c5761055b826111ef565b5b5b6105c6816105b8600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546113c890919063ffffffff16565b61141290919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061065e600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461149a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106fd57600090506107bd565b600061074a600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461149a565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107a5576000925050506107bd565b6107b881836113c890919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081a57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c057600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094b57600080fd5b505afa15801561095f573d6000803e3d6000fd5b505050506040513d602081101561097557600080fd5b810190808051906020019092919050505090506000600267ffffffffffffffff811180156109a257600080fd5b506040519080825280602002602001820160405280156109d15781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610a0457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a6e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610b66578082015181840152602081019050610b4b565b50505050905001955050505050506000604051808303818588803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050506000610c7e83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c3557600080fd5b505afa158015610c49573d6000803e3d6000fd5b505050506040513d6020811015610c5f57600080fd5b81019080805190602001909291905050506113c890919063ffffffff16565b9050610c958160095461141290919063ffffffff16565b600981905550610cd8610cc7600854610cb984600c546114cc90919063ffffffff16565b61155290919063ffffffff16565b600b5461141290919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610cf833610e7a565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5257600080fd5b600060048054905090506000811415610d6b5750610e71565b6000805a905060005b8483108015610d8257508381105b15610e6c5783600f5410610d99576000600f819055505b610ddb6004600f5481548110610dab57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661159c565b15610e2357610e226004600f5481548110610df257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e7a565b5b610e48610e395a846113c890919063ffffffff16565b8461141290919063ffffffff16565b92505a9150600f600081548092919060010191905055508080600101915050610d74565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610eca5761113d565b6000610ed5826106a8565b9050600081111561113b57610ef581600a5461141290919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b505050506040513d6020811015610fb857600080fd5b81019080805190602001909291905050505042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061106381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461141290919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506110f4600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461149a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046001600480549050038154811061120457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061127b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546005600060046001600480549050038154811061131c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061139057fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061140a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611600565b905092915050565b600080828401905083811015611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006114c5600c546114b7600b54856114cc90919063ffffffff16565b61155290919063ffffffff16565b9050919050565b6000808314156114df576000905061154c565b60008284029050828482816114f057fe5b0414611547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117876021913960400191505060405180910390fd5b809150505b92915050565b600061159483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116c0565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156115f95750600e546115f7836106a8565b115b9050919050565b60008383111582906116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611672578082015181840152602081019050611657565b50505050905090810190601f16801561169f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808311829061176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611731578082015181840152602081019050611716565b50505050905090810190601f16801561175e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161177857fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122093e79c12ec41c3d946cebb126b57b75986b75ed5cfa93f1625106d31fe97f21064736f6c63430007060033

Deployed ByteCode Sourcemap

11541:13889:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24561:800;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13306:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14724:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15146:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19758:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24398:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14454:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19508:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12631:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23543:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15658:364;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24073:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23734:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19899:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3357:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14548:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22574:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15370:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21851:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13123:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22310:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13269:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22712:423;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14894:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13167:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12153:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12059:52;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16110:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14810:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14634:84;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23925:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23143:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12906:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15494:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3030:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12934:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12704:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24223:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15005:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23379:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12747:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3200:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3757:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21955:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22438:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12875:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3531:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12966:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24561:800;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24677:12:::1;24730:6;;:13;;24710:9;;:16;;:33;24702:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24800:6;24796:82;24814:9;;:16;;24810:1;:20;24796:82;;;24861:6;;24868:1;24861:9;;;;;;;;;;;;;24854:4;:16;24847:23;;24832:3;;;;;;;24796:82;;;;24913:4;24894:15;24904:4;24894:9;:15::i;:::-;:23;;24886:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24974:6;24970:250;24988:9;;:16;;24984:1;:20;24970:250;;;25021:43;25036:4;25041:9;;25051:1;25041:12;;;;;;;;;;;;;;;25054:6;;25061:1;25054:9;;;;;;;;;;;;;25021:14;:43::i;:::-;;25079:16;:30;25096:9;;25106:1;25096:12;;;;;;;;;;;;;;;25079:30;;;;;;;;;;;;;;;;;;;;;;;;;25075:138;;25130:11;;;;;;;;;;;:20;;;25151:9;;25161:1;25151:12;;;;;;;;;;;;;;;25165:9;:23;25175:9;;25185:1;25175:12;;;;;;;;;;;;;;;25165:23;;;;;;;;;;;;;;;;25130:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25126:75;;;;;;25075:138;25006:3;;;;;;;24970:250;;;;25257:16;:22;25274:4;25257:22;;;;;;;;;;;;;;;;;;;;;;;;;25253:105;;25296:11;;;;;;;;;;;:20;;;25317:4;25323:9;:15;25333:4;25323:15;;;;;;;;;;;;;;;;25296:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25292:59;;;;;;25253:105;2778:1;24561:800:::0;;;;;:::o;13306:56::-;;;;:::o;14724:80::-;14772:13;14796:5;;;;;;;;;;;;;;;;;14789:12;;14724:80;:::o;15146:216::-;15221:4;15273:6;15238:11;:23;15250:10;15238:23;;;;;;;;;;;;;;;:32;15262:7;15238:32;;;;;;;;;;;;;;;:41;;;;15316:7;15295:37;;15304:10;15295:37;;;15325:6;15295:37;;;;;;;;;;;;;;;;;;15350:4;15343:11;;15146:216;;;;:::o;19758:94::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19837:7:::1;19823:11;;:21;;;;;;;;;;;;;;;;;;19758:94:::0;:::o;24398:150::-;24478:4;24534:6;24502:29;24522:8;24502:19;:29::i;:::-;:38;24495:45;;24398:150;;;;:::o;14454:88::-;14509:7;14527:12;;14520:19;;14454:88;:::o;19508:217::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19591:17:::1;19611:21;19591:41;;19651:20;;;;;;;;;;;19643:38;;:74;19713:3;19694:16;19682:9;:28;:34;;;;;;19643:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2778:1;19508:217:::0;:::o;12631:28::-;;;;:::o;23543:183::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23659:7:::1;23641:15;:25;;;;23706:12;23677:26;:41;;;;23543:183:::0;;:::o;15658:364::-;15758:4;15821:2;15778:11;:19;15790:6;15778:19;;;;;;;;;;;;;;;:31;15798:10;15778:31;;;;;;;;;;;;;;;;:46;15775:180;;15874:69;15910:6;15874:69;;;;;;;;;;;;;;;;;:11;:19;15886:6;15874:19;;;;;;;;;;;;;;;:31;15894:10;15874:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;15840:11;:19;15852:6;15840:19;;;;;;;;;;;;;;;:31;15860:10;15840:31;;;;;;;;;;;;;;;:103;;;;15775:180;15974:40;15988:6;15996:9;16007:6;15974:13;:40::i;:::-;15967:47;;15658:364;;;;;:::o;24073:142::-;24126:7;24153:54;24191:15;24201:4;;;;;;;;;;;24191:9;:15::i;:::-;24153:33;24170:15;24180:4;;;;;;;;;;;24170:9;:15::i;:::-;24153:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;24146:61;;24073:142;:::o;23734:183::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23844:11:::1;;;;;;;;;;;:35;;;23880:10;23892:16;23844:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23734:183:::0;;:::o;19899:164::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20004:7:::1;19983:18;;:28;;;;;;;;;;;;;;;;;;20046:9;20022:21;;:33;;;;;;;;;;;;;;;;;;19899:164:::0;;:::o;3357:103::-;3412:4;3447:5;;;;;;;;;;;3436:16;;:7;:16;;;3429:23;;3357:103;;;:::o;14548:80::-;14600:5;11989:1;14609:16;;14548:80;:::o;22574:130::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22690:6:::1;22663:16;:24;22680:6;22663:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;22574:130:::0;;:::o;15370:116::-;15425:4;15449:29;15457:7;15474:2;15449:7;:29::i;:::-;15442:36;;15370:116;;;:::o;21851:96::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21933:6:::1;21918:12;:21;;;;21851:96:::0;:::o;13123:37::-;;;;;;;;;;;;;:::o;22310:120::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22416:6:::1;22394:11;:19;22406:6;22394:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22310:120:::0;;:::o;13269:30::-;;;;;;;;;;;;;:::o;22712:423::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22870:13:::1;22855:12;:28;;;;22910:14;22894:13;:30;;;;22950:13;22935:12;:28;;;;22985:52;23023:13;22985:33;23003:14;22985:13;:17;;:33;;;;:::i;:::-;:37;;:52;;;;:::i;:::-;22974:8;:63;;;;23065:15;23048:14;:32;;;;23125:1;23110:14;;:16;;;;;;23099:8;;:27;23091:36;;;::::0;::::1;;22712:423:::0;;;;:::o;14894:105::-;14960:7;14978:9;:18;14988:7;14978:18;;;;;;;;;;;;;;;;14971:25;;14894:105;;;:::o;13167:39::-;;;;;;;;;;;;;:::o;12153:59::-;;;;:::o;12059:52::-;;;;:::o;16110:149::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16248:3:::1;16229:14;16214:12;;:29;16213:38;;;;;;16195:15;:56;;;;16110:149:::0;:::o;14810:78::-;14862:7;14880:5;;;;;;;;;;;14873:12;;14810:78;:::o;14634:84::-;14684:13;14708:7;;;;;;;;;;;;;;;;;14701:14;;14634:84;:::o;23925:136::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24015:6:::1;24009:3;:12;24001:21;;;::::0;::::1;;24050:3;24033:14;:20;;;;23925:136:::0;:::o;23143:228::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23286:22:::1;23262:21;;:46;;;;;;;;;;;;;;;;;;23342:21;23319:20;;:44;;;;;;;;;;;;;;;;;;23143:228:::0;;:::o;12906:19::-;;;;;;;;;;;;;:::o;15494:156::-;15574:4;15598:44;15612:10;15624:9;15635:6;15598:13;:44::i;:::-;15591:51;;15494:156;;;;:::o;3030:94::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3112:4:::1;3090:14:::0;:19:::1;3105:3;3090:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3030:94:::0;:::o;12934:25::-;;;;:::o;12704:36::-;;;;;;;;;;;;;:::o;24223:167::-;24291:7;24318:64;24359:22;:20;:22::i;:::-;24318:36;24331:22;24351:1;24331:15;24341:4;;;;;;;;;;;24331:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;24318:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;24311:71;;24223:167;;;:::o;15005:133::-;15089:7;15107:11;:19;15119:6;15107:19;;;;;;;;;;;;;;;:28;15127:7;15107:28;;;;;;;;;;;;;;;;15100:35;;15005:133;;;;:::o;23379:156::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23485:8:::1;23471:11;;:22;;;;;;;;;;;;;;;;;;23520:7;23504:13;:23;;;;23379:156:::0;;:::o;12747:35::-;;;;;;;;;;;;;:::o;3200:97::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3284:5:::1;3262:14;:19;3277:3;3262:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3200:97:::0;:::o;3757:173::-;2746:19;2754:10;2746:7;:19::i;:::-;2738:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3841:3:::1;3833:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3877:4;3855:14:::0;:19:::1;3870:3;3855:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3897:25;3918:3;3897:25;;;;;;;;;;;;;;;;;;;;3757:173:::0;:::o;21955:347::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22070:4:::1;22052:23;;:6;:23;;;;:41;;;;;22089:4;;;;;;;;;;;22079:14;;:6;:14;;;;22052:41;22044:50;;;::::0;::::1;;22132:6;22105:16;:24;22122:6;22105:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;22152:6;22149:146;;;22174:11;;;;;;;;;;;:20;;;22195:6;22203:1;22174:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22149:146;;;22236:11;;;;;;;;;;;:20;;;22257:6;22265:9;:17;22275:6;22265:17;;;;;;;;;;;;;;;;22236:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22149:146;21955:347:::0;;:::o;22438:128::-;2915:24;2928:10;2915:12;:24::i;:::-;2907:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22552:6:::1;22526:15;:23;22542:6;22526:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22438:128:::0;;:::o;12875:24::-;;;;;;;;;;;;;:::o;3531:107::-;3587:4;3611:14;:19;3626:3;3611:19;;;;;;;;;;;;;;;;;;;;;;;;;3604:26;;3531:107;;;:::o;12966:31::-;;;;;;;;;;;;;:::o;18328:330::-;18421:4;18458:53;18480:6;18458:53;;;;;;;;;;;;;;;;;:9;:17;18468:6;18458:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18438:9;:17;18448:6;18438:17;;;;;;;;;;;;;;;:73;;;;18545:32;18570:6;18545:9;:20;18555:9;18545:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;18522:9;:20;18532:9;18522:20;;;;;;;;;;;;;;;:55;;;;18610:9;18593:35;;18602:6;18593:35;;;18621:6;18593:35;;;;;;;;;;;;;;;;;;18646:4;18639:11;;18328:330;;;;;:::o;416:192::-;502:7;535:1;530;:6;;538:12;522:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;562:9;578:1;574;:5;562:17;;599:1;592:8;;;416:192;;;;;:::o;16267:2049::-;16359:4;16379:6;;;;;;;;;;;16376:63;;;16395:41;16410:6;16418:9;16429:6;16395:14;:41::i;:::-;16388:48;;;;16376:63;16455:14;:22;16470:6;16455:22;;;;;;;;;;;;;;;;;;;;;;;;;16454:23;:53;;;;;16482:14;:25;16497:9;16482:25;;;;;;;;;;;;;;;;;;;;;;;;;16481:26;16454:53;16451:127;;;16531:11;;;;;;;;;;;16523:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16451:127;16623:14;:22;16638:6;16623:22;;;;;;;;;;;;;;;;;;;;;;;;;16622:23;:53;;;;;16670:4;16649:26;;:9;:26;;;;16622:53;:84;;;;;16701:4;;;;;;;;;;;16680:26;;:9;:26;;;;16622:84;:105;;;;;16723:4;;;;;;;;;;;16710:17;;:9;:17;;;;16622:105;:142;;;;;16744:20;;;;;;;;;;;16731:33;;:9;:33;;;;16622:142;:180;;;;;16781:21;;;;;;;;;;;16768:34;;:9;:34;;;;16622:180;16618:372;;;16818:18;16839:20;16849:9;16839;:20::i;:::-;16818:41;;16907:15;;16896:6;16883:10;:19;16882:40;;16874:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16618:372;;17124:4;;;;;;;;;;;17114:14;;:6;:14;;;:49;;;;;17145:18;;;;;;;;;;;17114:49;:94;;;;;17181:16;:27;17198:9;17181:27;;;;;;;;;;;;;;;;;;;;;;;;;17180:28;17114:94;17110:299;;;17260:15;17233:13;:24;17247:9;17233:24;;;;;;;;;;;;;;;;:42;17225:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17376:21;;;;;;;;;;;17358:39;;:15;:39;17331:13;:24;17345:9;17331:24;;;;;;;;;;;;;;;:66;;;;17110:299;17464:28;17477:6;17485;17464:12;:28::i;:::-;17549:16;:14;:16::i;:::-;17546:35;;;17568:10;:8;:10::i;:::-;17546:35;17640:53;17662:6;17640:53;;;;;;;;;;;;;;;;;:9;:17;17650:6;17640:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;17620:9;:17;17630:6;17620:17;;;;;;;;;;;;;;;:73;;;;17706:22;17731:21;17745:6;17731:13;:21::i;:::-;:56;;17781:6;17731:56;;;17755:23;17763:6;17771;17755:7;:23::i;:::-;17731:56;17706:81;;17821:40;17846:14;17821:9;:20;17831:9;17821:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;17798:9;:20;17808:9;17798:20;;;;;;;;;;;;;;;:63;;;;17907:16;:24;17924:6;17907:24;;;;;;;;;;;;;;;;;;;;;;;;;17903:119;;17952:11;;;;;;;;;;;:20;;;17973:6;17981:9;:17;17991:6;17981:17;;;;;;;;;;;;;;;;17952:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17948:63;;;;;;17903:119;18038:16;:27;18055:9;18038:27;;;;;;;;;;;;;;;;;;;;;;;;;18034:129;;18086:11;;;;;;;;;;;:20;;;18107:9;18118;:20;18128:9;18118:20;;;;;;;;;;;;;;;;18086:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18082:69;;;;;;18034:129;18179:11;;;;;;;;;;;:19;;;18199:14;;18179:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18175:51;;;;;;18260:9;18243:43;;18252:6;18243:43;;;18271:14;18243:43;;;;;;;;;;;;;;;;;;18304:4;18297:11;;;16267:2049;;;;;;:::o;274:136::-;332:7;359:43;363:1;366;359:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;352:50;;274:136;;;;:::o;87:181::-;145:7;165:9;181:1;177;:5;165:17;;206:1;201;:6;;193:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;259:1;252:8;;;87:181;;;;:::o;614:250::-;672:7;701:1;696;:6;692:47;;;726:1;719:8;;;;692:47;751:9;767:1;763;:5;751:17;;796:1;791;787;:5;;;;;;:10;779:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;855:1;848:8;;;614:250;;;;;:::o;870:132::-;928:7;955:39;959:1;962;955:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;948:46;;870:132;;;;:::o;18666:166::-;18763:12;;18753:6;:22;;:49;;;;18779:15;:23;18795:6;18779:23;;;;;;;;;;;;;;;;;;;;;;;;;18753:49;18745:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18666:166;;:::o;19303:197::-;19352:4;19390;;;;;;;;;;;19376:18;;:10;:18;;;;:38;;;;;19408:6;;;;;;;;;;;19407:7;19376:38;:62;;;;;19427:11;;;;;;;;;;;19376:62;:116;;;;;19479:13;;19451:9;:24;19469:4;19451:24;;;;;;;;;;;;;;;;:41;;19376:116;19369:123;;19303:197;:::o;20075:1766::-;13437:4;13428:6;;:13;;;;;;;;;;;;;;;;;;20124:27:::1;20154:60;20170:15;;20187:26;;20154:15;:60::i;:::-;:79;;20221:12;;20154:79;;;20217:1;20154:79;20124:109;;20244:23;20270:59;20327:1;20270:52;20313:8;;20270:38;20288:19;20270:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;20244:85;;20340:20;20363:34;20381:15;20363:13;;:17;;:34;;;;:::i;:::-;20340:57;;20410:21;20448:1;20434:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20410:40;;20479:4;20461;20466:1;20461:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;20505:4;;;;;;;;;;;20495;20500:1;20495:7;;;;;;;;;;;;;:14;;;;;;;;;::::0;::::1;20522:21;20546;20522:45;;20580:6;;;;;;;;;;;:57;;;20652:12;20679:1;20695:4;20722;20742:15;20580:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20781:17;20801:40;20827:13;20801:21;:25;;:40;;;;:::i;:::-;20781:60;;20854:19;20876:40;20889:26;20913:1;20889:19;:23;;:26;;;;:::i;:::-;20876:8;;:12;;:40;;;;:::i;:::-;20854:62;;20937:26;20966:58;21022:1;20966:51;21005:11;20966:34;20980:19;20966:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;20937:87;;21035:27;21065:45;21098:11;21065:28;21079:13;;21065:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;21035:75;;21121:26;21150:44;21182:11;21150:27;21164:12;;21150:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;21121:73;;21211:11;;;;;;;;;;;:19;;;21238;21211:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;21207:65;;;;;;21283:15;21311:20;;;;;;;;;;;21303:34;;21345:18;21370:5;21303:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21282:98;;;21454:5;21441:18;;21493:1;21475:15;:19;21472:362;;;21510:6;;;;;;;;;;;:22;;;21540:18;21586:4;21610:15;21644:1;21664::::0;21684:21:::1;;;;;;;;;;;21724:15;21510:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21774:48;21786:18;21806:15;21774:48;;;;;;;;;;;;;;;;;;;;;;;;21472:362;13443:1;;;;;;;;;;;13455:5:::0;13446:6;;:14;;;;;;;;;;;;;;;;;;20075:1766::o;18840:114::-;18902:4;18927:11;:19;18939:6;18927:19;;;;;;;;;;;;;;;;;;;;;;;;;18926:20;18919:27;;18840:114;;;:::o;18962:333::-;19029:7;19049:17;19069:40;19094:14;;19069:20;19080:8;;19069:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;19049:60;;19149:39;19178:9;19149;:24;19167:4;19149:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;19122:9;:24;19140:4;19122:24;;;;;;;;;;;;;;;:66;;;;19229:4;19204:42;;19213:6;19204:42;;;19236:9;19204:42;;;;;;;;;;;;;;;;;;19266:21;19277:9;19266:6;:10;;:21;;;;:::i;:::-;19259:28;;;18962:333;;;;:::o;1008:345::-;1094:7;1193:1;1189;:5;1196:12;1181:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1220:9;1236:1;1232;:5;;;;;;1220:17;;1344:1;1337:8;;;1008:345;;;;;:::o

Swarm Source

ipfs://93e79c12ec41c3d946cebb126b57b75986b75ed5cfa93f1625106d31fe97f210
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.