ETH Price: $2,914.78 (-2.99%)
Gas: 2 Gwei

Contract

0x9f19c8e321bD14345b797d43E01f0eED030F5Bff
 

Overview

ETH Balance

0.170646535476889493 ETH

Eth Value

$497.40 (@ $2,914.78/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Transaction Hash
Method
Block
From
To
Value
Approve184015132023-10-21 21:57:59260 days ago1697925479IN
0x9f19c8e3...D030F5Bff
0 ETH0.000241979.95613702
Approve178016322023-07-29 22:19:47344 days ago1690669187IN
0x9f19c8e3...D030F5Bff
0 ETH0.0006355326.14953359
Approve Max176662022023-07-10 22:23:47363 days ago1689027827IN
0x9f19c8e3...D030F5Bff
0 ETH0.0017506637.95801478
Approve Max176652652023-07-10 19:13:59363 days ago1689016439IN
0x9f19c8e3...D030F5Bff
0 ETH0.0005876322.41072531
Approve Max176629482023-07-10 11:25:11363 days ago1688988311IN
0x9f19c8e3...D030F5Bff
0 ETH0.0003233912.33339492
Approve Max176584292023-07-09 20:09:59364 days ago1688933399IN
0x9f19c8e3...D030F5Bff
0 ETH0.0004475717.06936628
_sell175992662023-07-01 12:40:59372 days ago1688215259IN
0x9f19c8e3...D030F5Bff
0 ETH0.0004622317.00700853
_sell175992512023-07-01 12:37:47372 days ago1688215067IN
0x9f19c8e3...D030F5Bff
0 ETH0.0003972215.27777662
Approve Max175567352023-06-25 13:16:47378 days ago1687699007IN
0x9f19c8e3...D030F5Bff
0 ETH0.000327112.47505992
Approve Max175153012023-06-19 17:33:47384 days ago1687196027IN
0x9f19c8e3...D030F5Bff
0 ETH0.0009135119.80694187
Approve Max175145022023-06-19 14:51:47384 days ago1687186307IN
0x9f19c8e3...D030F5Bff
0 ETH0.0005770222.00622612
Approve Max175144982023-06-19 14:50:59384 days ago1687186259IN
0x9f19c8e3...D030F5Bff
0 ETH0.0010866623.56108311
Approve Max174803942023-06-14 19:56:59389 days ago1686772619IN
0x9f19c8e3...D030F5Bff
0 ETH0.0011831225.65269429
Approve Max173460742023-05-26 21:55:47408 days ago1685138147IN
0x9f19c8e3...D030F5Bff
0 ETH0.0013342628.92964279
Approve Max173233732023-05-23 17:20:35411 days ago1684862435IN
0x9f19c8e3...D030F5Bff
0 ETH0.0017993768.62342761
Approve Max173233692023-05-23 17:19:35411 days ago1684862375IN
0x9f19c8e3...D030F5Bff
0 ETH0.0029669264.32919891
Approve Max173036152023-05-20 22:32:47414 days ago1684621967IN
0x9f19c8e3...D030F5Bff
0 ETH0.0014729531.93673037
Approve Max170950002023-04-21 13:15:35443 days ago1682082935IN
0x9f19c8e3...D030F5Bff
0 ETH0.0009321835.55097387
Approve Max170949902023-04-21 13:13:35443 days ago1682082815IN
0x9f19c8e3...D030F5Bff
0 ETH0.0009862637.61363458
Approve Max170949852023-04-21 13:12:35443 days ago1682082755IN
0x9f19c8e3...D030F5Bff
0 ETH0.0010828141.29576168
Approve Max170947042023-04-21 12:15:47443 days ago1682079347IN
0x9f19c8e3...D030F5Bff
0 ETH0.0010394939.64346058
Approve Max170946972023-04-21 12:14:23443 days ago1682079263IN
0x9f19c8e3...D030F5Bff
0 ETH0.0010412439.71035771
Approve Max170946812023-04-21 12:11:11443 days ago1682079071IN
0x9f19c8e3...D030F5Bff
0 ETH0.0009883837.69427049
Approve Max170701052023-04-18 0:42:35447 days ago1681778555IN
0x9f19c8e3...D030F5Bff
0 ETH0.0009360435.69828196
Approve Max170700972023-04-18 0:40:59447 days ago1681778459IN
0x9f19c8e3...D030F5Bff
0 ETH0.0015009732.54435433
View all transactions

Latest 9 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
164897502023-01-26 8:19:23528 days ago1674721163
0x9f19c8e3...D030F5Bff
0.10089205 ETH
164888122023-01-26 5:10:11529 days ago1674709811
0x9f19c8e3...D030F5Bff
0.01199937 ETH
164845612023-01-25 14:54:47529 days ago1674658487
0x9f19c8e3...D030F5Bff
0.01902231 ETH
164841592023-01-25 13:33:35529 days ago1674653615
0x9f19c8e3...D030F5Bff
0.09322667 ETH
164252842023-01-17 8:20:23537 days ago1673943623
0x9f19c8e3...D030F5Bff
0.01996217 ETH
164222542023-01-16 22:11:47538 days ago1673907107
0x9f19c8e3...D030F5Bff
0.01903782 ETH
164190032023-01-16 11:19:23538 days ago1673867963
0x9f19c8e3...D030F5Bff
0.0737307 ETH
164153382023-01-15 23:00:11539 days ago1673823611
0x9f19c8e3...D030F5Bff
0.12281698 ETH
163921492023-01-12 17:16:11542 days ago1673543771
0x9f19c8e3...D030F5Bff
24.66999999 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SURGE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-12
*/

//SPDX-License-Identifier: MIT

/**
 * Contract: Surge Token
 * Developed by: Heisenman
 * Team: t.me/ALBINO_RHINOOO, t.me/Heisenman, t.me/STFGNZ
 * Trade without dex fees. $SURGE is the inception of the next generation of decentralized protocols.
 * Socials:
 * TG: https://t.me/SURGEPROTOCOL
 * Website: https://surgeprotocol.io/
 * Twitter: https://twitter.com/SURGEPROTOCOL
 */

pragma solidity 0.8.17;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

interface IPancakePair {
    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract SURGE is IERC20, Context, Ownable, ReentrancyGuard {
    event Bought(
        address indexed from,
        address indexed to,
        uint256 tokens,
        uint256 beans,
        uint256 dollarBuy
    );
    event Sold(
        address indexed from,
        address indexed to,
        uint256 tokens,
        uint256 beans,
        uint256 dollarSell
    );
    event FeesMulChanged(uint256 newBuyMul, uint256 newSellMul);
    event StablePairChanged(address newStablePair, address newStableToken);
    event MaxBagChanged(uint256 newMaxBag);

    // token data
    string private constant _name = "SURGE";
    string private constant _symbol = "SRG";
    uint8 private constant _decimals = 9;
    uint256 private constant _decMultiplier = 10**_decimals;

    // Total Supply
    uint256 public constant _totalSupply = 10**8 * _decMultiplier;

    // balances
    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

    //Fees
    mapping(address => bool) public isFeeExempt;
    uint256 public sellMul = 95;
    uint256 public buyMul = 95;
    uint256 public constant DIVISOR = 100;

    //Max bag requirements
    mapping(address => bool) public isTxLimitExempt;
    uint256 public maxBag = _totalSupply / 100;

    //Tax collection
    uint256 public taxBalance = 0;

    //Tax wallets
    address public teamWallet = 0xDa17D158bC42f9C29E626b836d9231bB173bab06;
    address public treasuryWallet = 0xF526A924c406D31d16a844FF04810b79E71804Ef;

    // Tax Split
    uint256 public teamShare = 40;
    uint256 public treasuryShare = 60;
    uint256 public constant SHAREDIVISOR = 100;

    //Known Wallets
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    //trading parameters
    uint256 public liquidity = 20 ether;
    uint256 public liqConst = liquidity * _totalSupply;
    uint256 public constant TRADE_OPEN_TIME = 1673544600;

    //volume trackers
    mapping(address => uint256) public indVol;
    mapping(uint256 => uint256) public tVol;
    uint256 public totalVolume = 0;

    //candlestick data
    uint256 public totalTx;
    mapping(uint256 => uint256) public txTimeStamp;

    struct candleStick {
        uint256 time;
        uint256 open;
        uint256 close;
        uint256 high;
        uint256 low;
    }

    mapping(uint256 => candleStick) public candleStickData;

    //Frontrun Guard
    mapping(address => uint256) private _lastBuyBlock;

    //Migration Wallet
    address public constant MIGRATION_WALLET =
        0xc207cd3f61Da958AA6f4209C5f0a145C056B576f;

    // initialize supply
    constructor() {
        _balances[address(this)] = _totalSupply;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[MIGRATION_WALLET] = true;
        
        isTxLimitExempt[MIGRATION_WALLET] = true;
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[address(0)] = true;

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

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

    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 name() public pure returns (string memory) {
        return _name;
    }

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

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        require(spender != address(0), "SRG20: approve to the zero address");
        require(
            msg.sender != address(0),
            "SRG20: approve from the zero address"
        );

        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - _balances[DEAD];
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        require(
            newLimit >= _totalSupply / 100,
            "New wallet limit should be at least 1% of total supply"
        );
        maxBag = newLimit;
        emit MaxBagChanged(newLimit);
    }

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

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

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

    /** TransferFrom Function */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        address spender = msg.sender;
        //check allowance requirement
        _spendAllowance(sender, spender, amount);
        return _transferFrom(sender, recipient, amount);
    }

    /** Internal Transfer */
    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        // make standard checks
        require(
            recipient != address(0) && recipient != address(this),
            "transfer to the zero address or CA"
        );
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            isTxLimitExempt[recipient] ||
                _balances[recipient] + amount <= maxBag,
            "Max wallet exceeded!"
        );

        // subtract from sender
        _balances[sender] = _balances[sender] - amount;

        // give amount to receiver
        _balances[recipient] = _balances[recipient] + amount;

        // Transfer Event
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = _allowances[owner][spender];
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "SRG20: insufficient allowance"
            );

            unchecked {
                // decrease allowance
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /** Purchases SURGE Tokens and Deposits Them in Sender's Address*/
    function _buy(uint256 minTokenOut, uint256 deadline)
        public
        payable
        nonReentrant
        returns (bool)
    {
        // deadline requirement
        require(deadline >= block.timestamp, "Deadline EXPIRED");

        // Frontrun Guard
        _lastBuyBlock[msg.sender] = block.number;

        // liquidity is set
        require(liquidity > 0, "The token has no liquidity");

        // check if trading is open or whether the buying wallet is the migration one
        require(
            block.timestamp >= TRADE_OPEN_TIME ||
                msg.sender == MIGRATION_WALLET,
            "Trading is not Open"
        );

        //remove the buy tax
        uint256 bnbAmount = isFeeExempt[msg.sender]
            ? msg.value
            : (msg.value * buyMul) / DIVISOR;

        // how much they should purchase?
        uint256 tokensToSend = _balances[address(this)] -
            (liqConst / (bnbAmount + liquidity));

        //revert for max bag
        require(
            _balances[msg.sender] + tokensToSend <= maxBag ||
                isTxLimitExempt[msg.sender],
            "Max wallet exceeded"
        );

        // revert if under 1
        require(tokensToSend > 1, "Must Buy more than 1 decimal of Surge");

        // revert for slippage
        require(tokensToSend >= minTokenOut, "INSUFFICIENT OUTPUT AMOUNT");

        // transfer the tokens from CA to the buyer
        buy(msg.sender, tokensToSend);

        //update available tax to extract and Liquidity
        uint256 taxAmount = msg.value - bnbAmount;
        taxBalance = taxBalance + taxAmount;
        liquidity = liquidity + bnbAmount;

        //update volume
        uint256 cTime = block.timestamp;
        uint256 dollarBuy = msg.value * getBNBPrice();
        totalVolume += dollarBuy;
        indVol[msg.sender] += dollarBuy;
        tVol[cTime] += dollarBuy;

        //update candleStickData
        totalTx += 1;
        txTimeStamp[totalTx] = cTime;
        uint256 cPrice = calculatePrice() * getBNBPrice();
        candleStickData[cTime].time = cTime;
        if (candleStickData[cTime].open == 0) {
            if (totalTx == 1) {
                candleStickData[cTime].open =
                    ((liquidity - bnbAmount) / (_totalSupply)) *
                    getBNBPrice();
            } else {
                candleStickData[cTime].open = candleStickData[
                    txTimeStamp[totalTx - 1]
                ].close;
            }
        }
        candleStickData[cTime].close = cPrice;

        if (
            candleStickData[cTime].high < cPrice ||
            candleStickData[cTime].high == 0
        ) {
            candleStickData[cTime].high = cPrice;
        }

        if (
            candleStickData[cTime].low > cPrice ||
            candleStickData[cTime].low == 0
        ) {
            candleStickData[cTime].low = cPrice;
        }

        //emit transfer and buy events
        emit Transfer(address(this), msg.sender, tokensToSend);
        emit Bought(
            msg.sender,
            address(this),
            tokensToSend,
            msg.value,
            bnbAmount * getBNBPrice()
        );
        return true;
    }

    /** Sends Tokens to the buyer Address */
    function buy(address receiver, uint256 amount) internal {
        _balances[receiver] = _balances[receiver] + amount;
        _balances[address(this)] = _balances[address(this)] - amount;
    }

    /** Sells SURGE Tokens And Deposits the BNB into Seller's Address */
    function _sell(
        uint256 tokenAmount,
        uint256 deadline,
        uint256 minBNBOut
    ) public nonReentrant returns (bool) {
        // deadline requirement
        require(deadline >= block.timestamp, "Deadline EXPIRED");

        //Frontrun Guard
        require(
            _lastBuyBlock[msg.sender] != block.number,
            "Buying and selling in the same block is not allowed!"
        );

        address seller = msg.sender;

        // make sure seller has this balance
        require(
            _balances[seller] >= tokenAmount,
            "cannot sell above token amount"
        );

        // get how much beans are the tokens worth
        uint256 amountBNB = liquidity -
            (liqConst / (_balances[address(this)] + tokenAmount));
        uint256 amountTax = (amountBNB * (DIVISOR - sellMul)) / DIVISOR;
        uint256 BNBToSend = amountBNB - amountTax;

        //slippage revert
        require(amountBNB >= minBNBOut, "INSUFFICIENT OUTPUT AMOUNT");

        // send BNB to Seller
        (bool successful, ) = isFeeExempt[msg.sender]
            ? payable(seller).call{value: amountBNB}("")
            : payable(seller).call{value: BNBToSend}("");
        require(successful, "BNB/ETH transfer failed");

        // subtract full amount from sender
        _balances[seller] = _balances[seller] - tokenAmount;

        //add tax allowance to be withdrawn and remove from liq the amount of beans taken by the seller
        taxBalance = isFeeExempt[msg.sender]
            ? taxBalance
            : taxBalance + amountTax;
        liquidity = liquidity - amountBNB;

        // add tokens back into the contract
        _balances[address(this)] = _balances[address(this)] + tokenAmount;

        //update volume
        uint256 cTime = block.timestamp;
        uint256 dollarSell = amountBNB * getBNBPrice();
        totalVolume += dollarSell;
        indVol[msg.sender] += dollarSell;
        tVol[cTime] += dollarSell;

        //update candleStickData
        totalTx += 1;
        txTimeStamp[totalTx] = cTime;
        uint256 cPrice = calculatePrice() * getBNBPrice();
        candleStickData[cTime].time = cTime;
        if (candleStickData[cTime].open == 0) {
            candleStickData[cTime].open = candleStickData[
                txTimeStamp[totalTx - 1]
            ].close;
        }
        candleStickData[cTime].close = cPrice;

        if (
            candleStickData[cTime].high < cPrice ||
            candleStickData[cTime].high == 0
        ) {
            candleStickData[cTime].high = cPrice;
        }

        if (
            candleStickData[cTime].low > cPrice ||
            candleStickData[cTime].low == 0
        ) {
            candleStickData[cTime].low = cPrice;
        }

        // emit transfer and sell events
        emit Transfer(seller, address(this), tokenAmount);
        if (isFeeExempt[msg.sender]) {
            emit Sold(
                address(this),
                msg.sender,
                tokenAmount,
                amountBNB,
                dollarSell
            );
        } else {
            emit Sold(
                address(this),
                msg.sender,
                tokenAmount,
                BNBToSend,
                BNBToSend * getBNBPrice()
            );
        }
        return true;
    }

    /** Amount of BNB in Contract */
    function getLiquidity() public view returns (uint256) {
        return liquidity;
    }

    /** Returns the value of your holdings before the sell fee */
    function getValueOfHoldings(address holder) public view returns (uint256) {
        return
            ((_balances[holder] * liquidity) / _balances[address(this)]) *
            getBNBPrice();
    }

    function changeFees(uint256 newBuyMul, uint256 newSellMul)
        external
        onlyOwner
    {
        require(
            newBuyMul >= 90 &&
                newSellMul >= 90 &&
                newBuyMul <= 100 &&
                newSellMul <= 100,
            "Fees are too high"
        );

        buyMul = newBuyMul;
        sellMul = newSellMul;

        emit FeesMulChanged(newBuyMul, newSellMul);
    }

    function changeTaxDistribution(
        uint256 newteamShare,
        uint256 newtreasuryShare
    ) external onlyOwner {
        require(
            newteamShare + newtreasuryShare == SHAREDIVISOR,
            "Sum of shares must be 100"
        );

        teamShare = newteamShare;
        treasuryShare = newtreasuryShare;
    }

    function changeFeeReceivers(
        address newTeamWallet,
        address newTreasuryWallet
    ) external onlyOwner {
        require(
            newTeamWallet != address(0) && newTreasuryWallet != address(0),
            "New wallets must not be the ZERO address"
        );

        teamWallet = newTeamWallet;
        treasuryWallet = newTreasuryWallet;
    }

    function withdrawTaxBalance() external nonReentrant onlyOwner {
        (bool temp1, ) = payable(teamWallet).call{
            value: (taxBalance * teamShare) / SHAREDIVISOR
        }("");
        (bool temp2, ) = payable(treasuryWallet).call{
            value: (taxBalance * treasuryShare) / SHAREDIVISOR
        }("");
        assert(temp1 && temp2);
        taxBalance = 0;
    }

    function getTokenAmountOut(uint256 amountBNBIn)
        external
        view
        returns (uint256)
    {
        uint256 amountAfter = liqConst / (liquidity - amountBNBIn);
        uint256 amountBefore = liqConst / liquidity;
        return amountAfter - amountBefore;
    }

    function getBNBAmountOut(uint256 amountIn) public view returns (uint256) {
        uint256 beansBefore = liqConst / _balances[address(this)];
        uint256 beansAfter = liqConst / (_balances[address(this)] + amountIn);
        return beansBefore - beansAfter;
    }

    function addLiquidity() external payable onlyOwner {
        uint256 tokensToAdd = (_balances[address(this)] * msg.value) /
            liquidity;
        require(_balances[msg.sender] >= tokensToAdd, "Not enough tokens!");

        uint256 oldLiq = liquidity;
        liquidity = liquidity + msg.value;
        _balances[address(this)] += tokensToAdd;
        _balances[msg.sender] -= tokensToAdd;
        liqConst = (liqConst * liquidity) / oldLiq;

        emit Transfer(msg.sender, address(this), tokensToAdd);
    }

    function getMarketCap() external view returns (uint256) {
        return (getCirculatingSupply() * calculatePrice() * getBNBPrice());
    }

    address private stablePairAddress =
        0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc;
    address private stableAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

    function changeStablePair(address newStablePair, address newStableAddress)
        external
        onlyOwner
    {
        require(
            newStablePair != address(0) && newStableAddress != address(0),
            "New addresses must not be the ZERO address"
        );

        stablePairAddress = newStablePair;
        stableAddress = newStableAddress;
        emit StablePairChanged(newStablePair, newStableAddress);
    }

    // calculate price based on pair reserves
    function getBNBPrice() public view returns (uint256) {
        IPancakePair pair = IPancakePair(stablePairAddress);
        IERC20 token1 = pair.token0() == stableAddress
            ? IERC20(pair.token1())
            : IERC20(pair.token0());

        (uint256 Res0, uint256 Res1, ) = pair.getReserves();

        if (pair.token0() != stableAddress) {
            (Res1, Res0, ) = pair.getReserves();
        }
        uint256 res0 = Res0 * 10**token1.decimals();
        return (res0 / Res1); // return amount of token0 needed to buy token1
    }

    // Returns the Current Price of the Token in beans
    function calculatePrice() public view returns (uint256) {
        require(liquidity > 0, "No Liquidity");
        return liquidity / _balances[address(this)];
    }
}

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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beans","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dollarBuy","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBuyMul","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellMul","type":"uint256"}],"name":"FeesMulChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxBag","type":"uint256"}],"name":"MaxBagChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beans","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dollarSell","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newStablePair","type":"address"},{"indexed":false,"internalType":"address","name":"newStableToken","type":"address"}],"name":"StablePairChanged","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":"DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIGRATION_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHAREDIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRADE_OPEN_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokenOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"_buy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"minBNBOut","type":"uint256"}],"name":"_sell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMul","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"candleStickData","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"open","type":"uint256"},{"internalType":"uint256","name":"close","type":"uint256"},{"internalType":"uint256","name":"high","type":"uint256"},{"internalType":"uint256","name":"low","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newTeamWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyMul","type":"uint256"},{"internalType":"uint256","name":"newSellMul","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newStablePair","type":"address"},{"internalType":"address","name":"newStableAddress","type":"address"}],"name":"changeStablePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newteamShare","type":"uint256"},{"internalType":"uint256","name":"newtreasuryShare","type":"uint256"}],"name":"changeTaxDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getBNBAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBNBPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountBNBIn","type":"uint256"}],"name":"getTokenAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getValueOfHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"indVol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqConst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBag","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMul","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tVol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"txTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052605f600581905560065560646200001e6009600a620003f1565b6200002e906305f5e10062000409565b6200003a919062000423565b60085560006009908155600a80546001600160a01b031990811673da17d158bc42f9c29e626b836d9231bb173bab06178255600b805490911673f526a924c406d31d16a844ff04810b79e71804ef1790556028600c55603c600d556801158e460913d00000600e55620000ae9190620003f1565b620000be906305f5e10062000409565b600e54620000cd919062000409565b600f556000601255601780546001600160a01b031990811673b4e16d0168e52d35cacd2c6185b44281ec28c9dc179091556018805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790553480156200012a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556200017e6009600a620003f1565b6200018e906305f5e10062000409565b30600081815260026020908152604080832094909455338252600481528382208054600160ff1991821681179092557fa117656c6a259eb6b5d8d76b4581229baabc32fdc432407a7740bae4c3df9f52805482168317905560079092527fea2c12fe97acd9868ccd4ce083e17f3749fee6bf474bfed5f51316445f6b10da8054831682179055848320805483168217905583835293822080548216851790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548216851790558180527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054909116909317909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002b56009600a620003f1565b620002c5906305f5e10062000409565b60405190815260200160405180910390a362000446565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000333578160001904821115620003175762000317620002dc565b808516156200032557918102915b93841c9390800290620002f7565b509250929050565b6000826200034c57506001620003eb565b816200035b57506000620003eb565b81600181146200037457600281146200037f576200039f565b6001915050620003eb565b60ff841115620003935762000393620002dc565b50506001821b620003eb565b5060208310610133831016604e8410600b8410161715620003c4575081810a620003eb565b620003d08383620002f2565b8060001904821115620003e757620003e7620002dc565b0290505b92915050565b60006200040260ff8416836200033b565b9392505050565b8082028115828204841417620003eb57620003eb620002dc565b6000826200044157634e487b7160e01b600052601260045260246000fd5b500490565b612f6c80620004566000396000f3fe60806040526004361061036b5760003560e01c80637220cf39116101c6578063aa98e163116100f7578063e8f620b111610095578063f2fde38b1161006f578063f2fde38b14610a08578063f4034e4b14610a28578063f7a62fe914610a48578063fabe628314610a7557600080fd5b8063e8f620b1146109c7578063ea6ef2fe146109dd578063f2220c9e146109f357600080fd5b8063d348b409116100d1578063d348b4091461094e578063dd62ed3e14610963578063e0cfcc95146109a9578063e8078d94146109bf57600080fd5b8063aa98e163146108f0578063b37659a414610906578063b4492d0c1461092657600080fd5b806395d89b4111610164578063a0e571a21161013e578063a0e571a214610828578063a3a2e89e1461083e578063a8fb66b41461085e578063a9059cbb146108d057600080fd5b806395d89b41146107b95780639cbd09ac146107e55780639d7550261461081257600080fd5b80638b42507f116101a05780638b42507f146107435780638da5cb5b146107735780638f0d3b8b1461079157806390825c28146107a457600080fd5b80637220cf39146106f75780637796ff371461070d5780637db1342c1461072357600080fd5b8063313ce567116102a0578063599270441161023e5780636ebcf607116102185780636ebcf6071461065f57806370a082311461068c57806371073b38146106c2578063715018a6146106e257600080fd5b806359927044146106295780635f81a57c1461064957806362ff2e9a1461054a57600080fd5b80633f4218e01161027a5780633f4218e0146105745780634626402b146105a457806349ce234c146105dc578063571ac8b01461060957600080fd5b8063313ce5671461052e5780633410fe6e1461054a5780633eaaf86b1461055f57600080fd5b80631f02a29c1161030d57806321ecff5b116102e757806321ecff5b146104c157806323b872dd146104e157806325b15556146105015780632b112e491461051957600080fd5b80631f02a29c146104615780631f1a73d5146104815780631f2c80f1146104a157600080fd5b806318160ddd1161034957806318160ddd146103ff5780631a686502146104145780631ab6ab241461042a5780631d6bdb5b1461044c57600080fd5b806306fdde03146103705780630910a510146103b0578063095ea7b3146103cf575b600080fd5b34801561037c57600080fd5b50604080518082019091526005815264535552474560d81b60208201525b6040516103a79190612abd565b60405180910390f35b3480156103bc57600080fd5b50600e545b6040519081526020016103a7565b3480156103db57600080fd5b506103ef6103ea366004612b23565b610a95565b60405190151581526020016103a7565b34801561040b57600080fd5b506103c1610bbb565b34801561042057600080fd5b506103c1600e5481565b34801561043657600080fd5b5061044a610445366004612b4f565b610bdc565b005b34801561045857600080fd5b5061044a610cf4565b34801561046d57600080fd5b506103c161047c366004612b88565b610e4e565b34801561048d57600080fd5b506103c161049c366004612ba5565b610e9b565b3480156104ad57600080fd5b5061044a6104bc366004612b4f565b610ef9565b3480156104cd57600080fd5b5061044a6104dc366004612bbe565b610fce565b3480156104ed57600080fd5b506103ef6104fc366004612be0565b6110a4565b34801561050d57600080fd5b506103c16363c0439881565b34801561052557600080fd5b506103c16110c6565b34801561053a57600080fd5b50604051600981526020016103a7565b34801561055657600080fd5b506103c1606481565b34801561056b57600080fd5b506103c1611119565b34801561058057600080fd5b506103ef61058f366004612b88565b60046020526000908152604090205460ff1681565b3480156105b057600080fd5b50600b546105c4906001600160a01b031681565b6040516001600160a01b0390911681526020016103a7565b3480156105e857600080fd5b506103c16105f7366004612ba5565b60116020526000908152604090205481565b34801561061557600080fd5b506103ef610624366004612b88565b611136565b34801561063557600080fd5b50600a546105c4906001600160a01b031681565b34801561065557600080fd5b506103c160125481565b34801561066b57600080fd5b506103c161067a366004612b88565b60026020526000908152604090205481565b34801561069857600080fd5b506103c16106a7366004612b88565b6001600160a01b031660009081526002602052604090205490565b3480156106ce57600080fd5b506103c16106dd366004612ba5565b611144565b3480156106ee57600080fd5b5061044a611176565b34801561070357600080fd5b506103c160135481565b34801561071957600080fd5b506103c1600d5481565b34801561072f57600080fd5b5061044a61073e366004612ba5565b6111ea565b34801561074f57600080fd5b506103ef61075e366004612b88565b60076020526000908152604090205460ff1681565b34801561077f57600080fd5b506000546001600160a01b03166105c4565b6103ef61079f366004612bbe565b6112e3565b3480156107b057600080fd5b506103c16118a6565b3480156107c557600080fd5b5060408051808201909152600381526253524760e81b602082015261039a565b3480156107f157600080fd5b506103c1610800366004612b88565b60106020526000908152604090205481565b34801561081e57600080fd5b506103c160055481565b34801561083457600080fd5b506103c160065481565b34801561084a57600080fd5b5061044a610859366004612c21565b6118d4565b34801561086a57600080fd5b506108a8610879366004612ba5565b601560205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103a7565b3480156108dc57600080fd5b506103ef6108eb366004612b23565b611929565b3480156108fc57600080fd5b506103c160095481565b34801561091257600080fd5b506103ef610921366004612c54565b61193d565b34801561093257600080fd5b506105c473c207cd3f61da958aa6f4209c5f0a145c056b576f81565b34801561095a57600080fd5b506103c1611fb7565b34801561096f57600080fd5b506103c161097e366004612b4f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109b557600080fd5b506103c160085481565b61044a612016565b3480156109d357600080fd5b506103c1600f5481565b3480156109e957600080fd5b506103c1600c5481565b3480156109ff57600080fd5b506103c1612161565b348015610a1457600080fd5b5061044a610a23366004612b88565b6124c2565b348015610a3457600080fd5b5061044a610a43366004612bbe565b6125ac565b348015610a5457600080fd5b506103c1610a63366004612ba5565b60146020526000908152604090205481565b348015610a8157600080fd5b5061044a610a90366004612c21565b61263a565b60006001600160a01b038316610afd5760405162461bcd60e51b815260206004820152602260248201527f53524732303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084015b60405180910390fd5b33610b565760405162461bcd60e51b8152602060048201526024808201527f53524732303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af4565b3360008181526003602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000610bc96009600a612d7a565b610bd7906305f5e100612d89565b905090565b6000546001600160a01b03163314610c065760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03821615801590610c2657506001600160a01b03811615155b610c855760405162461bcd60e51b815260206004820152602a60248201527f4e657720616464726573736573206d757374206e6f7420626520746865205a45604482015269524f206164647265737360b01b6064820152608401610af4565b601780546001600160a01b038481166001600160a01b03199283168117909355601880549185169190921681179091556040805192835260208301919091527f9531844c54a073e677302121f844ce762e5d0d82415924346672381a39f8532c91015b60405180910390a15050565b600260015403610d165760405162461bcd60e51b8152600401610af490612dd5565b60026001556000546001600160a01b03163314610d455760405162461bcd60e51b8152600401610af490612da0565b600a54600c546009546000926001600160a01b031691606491610d689190612d89565b610d729190612e0c565b604051600081818185875af1925050503d8060008114610dae576040519150601f19603f3d011682016040523d82523d6000602084013e610db3565b606091505b5050600b54600d546009549293506000926001600160a01b0390921691606491610ddc91612d89565b610de69190612e0c565b604051600081818185875af1925050503d8060008114610e22576040519150601f19603f3d011682016040523d82523d6000602084013e610e27565b606091505b50509050818015610e355750805b610e4157610e41612e2e565b5050600060095560018055565b6000610e58612161565b3060009081526002602052604080822054600e546001600160a01b03871684529190922054610e879190612d89565b610e919190612e0c565b610bb59190612d89565b30600090815260026020526040812054600f548291610eb991612e0c565b3060009081526002602052604081205491925090610ed8908590612e44565b600f54610ee59190612e0c565b9050610ef18183612e57565b949350505050565b6000546001600160a01b03163314610f235760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03821615801590610f4357506001600160a01b03811615155b610fa05760405162461bcd60e51b815260206004820152602860248201527f4e65772077616c6c657473206d757374206e6f7420626520746865205a45524f604482015267206164647265737360c01b6064820152608401610af4565b600a80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b6000546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610af490612da0565b605a821015801561100a5750605a8110155b8015611017575060648211155b8015611024575060648111155b6110645760405162461bcd60e51b815260206004820152601160248201527008ccacae640c2e4ca40e8dede40d0d2ced607b1b6044820152606401610af4565b6006829055600581905560408051838152602081018390527fc19ebd395193e8ddaaeda048fb5cb09d4e2dbebcce719174166029a4093878569101610ce8565b6000336110b285828561268f565b6110bd858585612721565b95945050505050565b61dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546111016009600a612d7a565b61110f906305f5e100612d89565b610bd79190612e57565b6111256009600a612d7a565b611133906305f5e100612d89565b81565b6000610bb582600019610a95565b60008082600e546111559190612e57565b600f546111629190612e0c565b90506000600e54600f54610ee59190612e0c565b6000546001600160a01b031633146111a05760405162461bcd60e51b8152600401610af490612da0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112145760405162461bcd60e51b8152600401610af490612da0565b60646112226009600a612d7a565b611230906305f5e100612d89565b61123a9190612e0c565b8110156112a85760405162461bcd60e51b815260206004820152603660248201527f4e65772077616c6c6574206c696d69742073686f756c64206265206174206c65604482015275617374203125206f6620746f74616c20737570706c7960501b6064820152608401610af4565b60088190556040518181527fb579b5ff4decd3791f679ec8d72f16128df08aa3f346b425480a0135d2e8bf759060200160405180910390a150565b60006002600154036113075760405162461bcd60e51b8152600401610af490612dd5565b60026001554282101561134f5760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610af4565b336000908152601660205260409020439055600e546113b05760405162461bcd60e51b815260206004820152601a60248201527f54686520746f6b656e20686173206e6f206c69717569646974790000000000006044820152606401610af4565b6363c04398421015806113d657503373c207cd3f61da958aa6f4209c5f0a145c056b576f145b6114185760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1027b832b760691b6044820152606401610af4565b3360009081526004602052604081205460ff1661144e5760646006543461143f9190612d89565b6114499190612e0c565b611450565b345b90506000600e54826114629190612e44565b600f5461146f9190612e0c565b306000908152600260205260409020546114899190612e57565b60085433600090815260026020526040902054919250906114ab908390612e44565b1115806114c757503360009081526007602052604090205460ff165b6115095760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610af4565b600181116115675760405162461bcd60e51b815260206004820152602560248201527f4d75737420427579206d6f7265207468616e203120646563696d616c206f6620604482015264537572676560d81b6064820152608401610af4565b848110156115b75760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610af4565b6115c13382612934565b60006115cd8334612e57565b9050806009546115dd9190612e44565b600955600e546115ee908490612e44565b600e554260006115fc612161565b6116069034612d89565b9050806012600082825461161a9190612e44565b9091555050336000908152601060205260408120805483929061163e908490612e44565b909155505060008281526011602052604081208054839290611661908490612e44565b9250508190555060016013600082825461167b9190612e44565b9091555050601354600090815260146020526040812083905561169c612161565b6116a4611fb7565b6116ae9190612d89565b6000848152601560205260408120858155600101549192500361178357601354600103611730576116dd612161565b6116e96009600a612d7a565b6116f7906305f5e100612d89565b87600e546117059190612e57565b61170f9190612e0c565b6117199190612d89565b600084815260156020526040902060010155611783565b601560006014600060016013546117479190612e57565b81526020019081526020016000205481526020019081526020016000206002015460156000858152602001908152602001600020600101819055505b600083815260156020526040902060028101829055600301548111806117b85750600083815260156020526040902060030154155b156117d25760008381526015602052604090206003018190555b6000838152601560205260409020600401548110806118005750600083815260156020526040902060040154155b1561181a5760008381526015602052604090206004018190555b60405185815233903090600080516020612f178339815191529060200160405180910390a330337f7ce543d1780f3bdc3dac42da06c95da802653cd1b212b8d74ec3e3c33ad7095c873461186c612161565b611876908c612d89565b6040805193845260208401929092529082015260600160405180910390a350506001808055979650505050505050565b60006118b0612161565b6118b8611fb7565b6118c06110c6565b6118ca9190612d89565b610bd79190612d89565b6000546001600160a01b031633146118fe5760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000611936338484612721565b9392505050565b60006002600154036119615760405162461bcd60e51b8152600401610af490612dd5565b6002600155428310156119a95760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610af4565b33600090815260166020526040902054439003611a255760405162461bcd60e51b815260206004820152603460248201527f427579696e6720616e642073656c6c696e6720696e207468652073616d6520626044820152736c6f636b206973206e6f7420616c6c6f7765642160601b6064820152608401610af4565b33600081815260026020526040902054851115611a845760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742073656c6c2061626f766520746f6b656e20616d6f756e7400006044820152606401610af4565b30600090815260026020526040812054611a9f908790612e44565b600f54611aac9190612e0c565b600e54611ab99190612e57565b9050600060646005546064611ace9190612e57565b611ad89084612d89565b611ae29190612e0c565b90506000611af08284612e57565b905085831015611b425760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610af4565b3360009081526004602052604081205460ff16611bad576040516001600160a01b038616908390600081818185875af1925050503d8060008114611ba2576040519150601f19603f3d011682016040523d82523d6000602084013e611ba7565b606091505b50611bfd565b6040516001600160a01b038616908590600081818185875af1925050503d8060008114611bf6576040519150601f19603f3d011682016040523d82523d6000602084013e611bfb565b606091505b505b50905080611c4d5760405162461bcd60e51b815260206004820152601760248201527f424e422f455448207472616e73666572206661696c65640000000000000000006044820152606401610af4565b6001600160a01b038516600090815260026020526040902054611c71908a90612e57565b6001600160a01b03861660009081526002602090815260408083209390935533825260049052205460ff16611cb35782600954611cae9190612e44565b611cb7565b6009545b600955600e54611cc8908590612e57565b600e5530600090815260026020526040902054611ce6908a90612e44565b306000908152600260205260408120919091554290611d03612161565b611d0d9087612d89565b90508060126000828254611d219190612e44565b90915550503360009081526010602052604081208054839290611d45908490612e44565b909155505060008281526011602052604081208054839290611d68908490612e44565b92505081905550600160136000828254611d829190612e44565b90915550506013546000908152601460205260408120839055611da3612161565b611dab611fb7565b611db59190612d89565b60008481526015602052604081208581556001015491925003611e255760156000601460006001601354611de99190612e57565b81526020019081526020016000205481526020019081526020016000206002015460156000858152602001908152602001600020600101819055505b60008381526015602052604090206002810182905560030154811180611e5a5750600083815260156020526040902060030154155b15611e745760008381526015602052604090206003018190555b600083815260156020526040902060040154811080611ea25750600083815260156020526040902060040154155b15611ebc5760008381526015602052604090206004018190555b6040518c815230906001600160a01b038a1690600080516020612f178339815191529060200160405180910390a33360009081526004602052604090205460ff1615611f4c57604080518d815260208101899052908101839052339030907f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e9060600160405180910390a3611fa2565b33307f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e8e88611f79612161565b611f83908b612d89565b6040805193845260208401929092529082015260600160405180910390a35b505060018080559a9950505050505050505050565b600080600e5411611ff95760405162461bcd60e51b815260206004820152600c60248201526b4e6f204c697175696469747960a01b6044820152606401610af4565b30600090815260026020526040902054600e54610bd79190612e0c565b6000546001600160a01b031633146120405760405162461bcd60e51b8152600401610af490612da0565b600e5430600090815260026020526040812054909190612061903490612d89565b61206b9190612e0c565b336000908152600260205260409020549091508111156120c25760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610af4565b600e546120cf3482612e44565b600e5530600090815260026020526040812080548492906120f1908490612e44565b90915550503360009081526002602052604081208054849290612115908490612e57565b9091555050600e54600f54829161212b91612d89565b6121359190612e0c565b600f5560405182815230903390600080516020612f178339815191529060200160405180910390a35050565b60175460185460408051630dfe168160e01b815290516000936001600160a01b039081169385939116918491630dfe16819160048083019260209291908290030181865afa1580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121db9190612e6a565b6001600160a01b03161461225057816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224b9190612e6a565b6122b2565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b29190612e6a565b9050600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156122f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123199190612ea3565b506001600160701b031691506001600160701b03169150601860009054906101000a90046001600160a01b03166001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b19190612e6a565b6001600160a01b03161461243357836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156123fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124219190612ea3565b506001600160701b0390811693501690505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124979190612ef3565b6124a290600a612d7a565b6124ac9084612d89565b90506124b88282612e0c565b9550505050505090565b6000546001600160a01b031633146124ec5760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b0381166125515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125d65760405162461bcd60e51b8152600401610af490612da0565b60646125e28284612e44565b1461262f5760405162461bcd60e51b815260206004820152601960248201527f53756d206f6620736861726573206d75737420626520313030000000000000006044820152606401610af4565b600c91909155600d55565b6000546001600160a01b031633146126645760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03808416600090815260036020908152604080832093861683529290522054600019811461271b578181101561270e5760405162461bcd60e51b815260206004820152601d60248201527f53524732303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610af4565b61271b8484848403612999565b50505050565b60006001600160a01b0383161580159061274457506001600160a01b0383163014155b61279b5760405162461bcd60e51b815260206004820152602260248201527f7472616e7366657220746f20746865207a65726f2061646472657373206f7220604482015261434160f01b6064820152608401610af4565b600082116127fd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af4565b6001600160a01b03831660009081526007602052604090205460ff168061284957506008546001600160a01b038416600090815260026020526040902054612846908490612e44565b11155b61288c5760405162461bcd60e51b81526020600482015260146024820152734d61782077616c6c65742065786365656465642160601b6044820152606401610af4565b6001600160a01b0384166000908152600260205260409020546128b0908390612e57565b6001600160a01b0380861660009081526002602052604080822093909355908516815220546128e0908390612e44565b6001600160a01b038085166000818152600260205260409081902093909355915190861690600080516020612f17833981519152906129229086815260200190565b60405180910390a35060019392505050565b6001600160a01b038216600090815260026020526040902054612958908290612e44565b6001600160a01b038316600090815260026020526040808220929092553081522054612985908290612e57565b306000908152600260205260409020555050565b6001600160a01b0383166129fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af4565b6001600160a01b038216612a5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060208083528351808285015260005b81811015612aea57858101830151858201604001528201612ace565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612b2057600080fd5b50565b60008060408385031215612b3657600080fd5b8235612b4181612b0b565b946020939093013593505050565b60008060408385031215612b6257600080fd5b8235612b6d81612b0b565b91506020830135612b7d81612b0b565b809150509250929050565b600060208284031215612b9a57600080fd5b813561193681612b0b565b600060208284031215612bb757600080fd5b5035919050565b60008060408385031215612bd157600080fd5b50508035926020909101359150565b600080600060608486031215612bf557600080fd5b8335612c0081612b0b565b92506020840135612c1081612b0b565b929592945050506040919091013590565b60008060408385031215612c3457600080fd5b8235612c3f81612b0b565b915060208301358015158114612b7d57600080fd5b600080600060608486031215612c6957600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612cd1578160001904821115612cb757612cb7612c80565b80851615612cc457918102915b93841c9390800290612c9b565b509250929050565b600082612ce857506001610bb5565b81612cf557506000610bb5565b8160018114612d0b5760028114612d1557612d31565b6001915050610bb5565b60ff841115612d2657612d26612c80565b50506001821b610bb5565b5060208310610133831016604e8410600b8410161715612d54575081810a610bb5565b612d5e8383612c96565b8060001904821115612d7257612d72612c80565b029392505050565b600061193660ff841683612cd9565b8082028115828204841417610bb557610bb5612c80565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082612e2957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b80820180821115610bb557610bb5612c80565b81810381811115610bb557610bb5612c80565b600060208284031215612e7c57600080fd5b815161193681612b0b565b80516001600160701b0381168114612e9e57600080fd5b919050565b600080600060608486031215612eb857600080fd5b612ec184612e87565b9250612ecf60208501612e87565b9150604084015163ffffffff81168114612ee857600080fd5b809150509250925092565b600060208284031215612f0557600080fd5b815160ff8116811461193657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220373f1a86638fcd8d8fbc36215f3934b9e7e8c411171c1474ef05aeb37762270464736f6c63430008110033

Deployed Bytecode

0x60806040526004361061036b5760003560e01c80637220cf39116101c6578063aa98e163116100f7578063e8f620b111610095578063f2fde38b1161006f578063f2fde38b14610a08578063f4034e4b14610a28578063f7a62fe914610a48578063fabe628314610a7557600080fd5b8063e8f620b1146109c7578063ea6ef2fe146109dd578063f2220c9e146109f357600080fd5b8063d348b409116100d1578063d348b4091461094e578063dd62ed3e14610963578063e0cfcc95146109a9578063e8078d94146109bf57600080fd5b8063aa98e163146108f0578063b37659a414610906578063b4492d0c1461092657600080fd5b806395d89b4111610164578063a0e571a21161013e578063a0e571a214610828578063a3a2e89e1461083e578063a8fb66b41461085e578063a9059cbb146108d057600080fd5b806395d89b41146107b95780639cbd09ac146107e55780639d7550261461081257600080fd5b80638b42507f116101a05780638b42507f146107435780638da5cb5b146107735780638f0d3b8b1461079157806390825c28146107a457600080fd5b80637220cf39146106f75780637796ff371461070d5780637db1342c1461072357600080fd5b8063313ce567116102a0578063599270441161023e5780636ebcf607116102185780636ebcf6071461065f57806370a082311461068c57806371073b38146106c2578063715018a6146106e257600080fd5b806359927044146106295780635f81a57c1461064957806362ff2e9a1461054a57600080fd5b80633f4218e01161027a5780633f4218e0146105745780634626402b146105a457806349ce234c146105dc578063571ac8b01461060957600080fd5b8063313ce5671461052e5780633410fe6e1461054a5780633eaaf86b1461055f57600080fd5b80631f02a29c1161030d57806321ecff5b116102e757806321ecff5b146104c157806323b872dd146104e157806325b15556146105015780632b112e491461051957600080fd5b80631f02a29c146104615780631f1a73d5146104815780631f2c80f1146104a157600080fd5b806318160ddd1161034957806318160ddd146103ff5780631a686502146104145780631ab6ab241461042a5780631d6bdb5b1461044c57600080fd5b806306fdde03146103705780630910a510146103b0578063095ea7b3146103cf575b600080fd5b34801561037c57600080fd5b50604080518082019091526005815264535552474560d81b60208201525b6040516103a79190612abd565b60405180910390f35b3480156103bc57600080fd5b50600e545b6040519081526020016103a7565b3480156103db57600080fd5b506103ef6103ea366004612b23565b610a95565b60405190151581526020016103a7565b34801561040b57600080fd5b506103c1610bbb565b34801561042057600080fd5b506103c1600e5481565b34801561043657600080fd5b5061044a610445366004612b4f565b610bdc565b005b34801561045857600080fd5b5061044a610cf4565b34801561046d57600080fd5b506103c161047c366004612b88565b610e4e565b34801561048d57600080fd5b506103c161049c366004612ba5565b610e9b565b3480156104ad57600080fd5b5061044a6104bc366004612b4f565b610ef9565b3480156104cd57600080fd5b5061044a6104dc366004612bbe565b610fce565b3480156104ed57600080fd5b506103ef6104fc366004612be0565b6110a4565b34801561050d57600080fd5b506103c16363c0439881565b34801561052557600080fd5b506103c16110c6565b34801561053a57600080fd5b50604051600981526020016103a7565b34801561055657600080fd5b506103c1606481565b34801561056b57600080fd5b506103c1611119565b34801561058057600080fd5b506103ef61058f366004612b88565b60046020526000908152604090205460ff1681565b3480156105b057600080fd5b50600b546105c4906001600160a01b031681565b6040516001600160a01b0390911681526020016103a7565b3480156105e857600080fd5b506103c16105f7366004612ba5565b60116020526000908152604090205481565b34801561061557600080fd5b506103ef610624366004612b88565b611136565b34801561063557600080fd5b50600a546105c4906001600160a01b031681565b34801561065557600080fd5b506103c160125481565b34801561066b57600080fd5b506103c161067a366004612b88565b60026020526000908152604090205481565b34801561069857600080fd5b506103c16106a7366004612b88565b6001600160a01b031660009081526002602052604090205490565b3480156106ce57600080fd5b506103c16106dd366004612ba5565b611144565b3480156106ee57600080fd5b5061044a611176565b34801561070357600080fd5b506103c160135481565b34801561071957600080fd5b506103c1600d5481565b34801561072f57600080fd5b5061044a61073e366004612ba5565b6111ea565b34801561074f57600080fd5b506103ef61075e366004612b88565b60076020526000908152604090205460ff1681565b34801561077f57600080fd5b506000546001600160a01b03166105c4565b6103ef61079f366004612bbe565b6112e3565b3480156107b057600080fd5b506103c16118a6565b3480156107c557600080fd5b5060408051808201909152600381526253524760e81b602082015261039a565b3480156107f157600080fd5b506103c1610800366004612b88565b60106020526000908152604090205481565b34801561081e57600080fd5b506103c160055481565b34801561083457600080fd5b506103c160065481565b34801561084a57600080fd5b5061044a610859366004612c21565b6118d4565b34801561086a57600080fd5b506108a8610879366004612ba5565b601560205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103a7565b3480156108dc57600080fd5b506103ef6108eb366004612b23565b611929565b3480156108fc57600080fd5b506103c160095481565b34801561091257600080fd5b506103ef610921366004612c54565b61193d565b34801561093257600080fd5b506105c473c207cd3f61da958aa6f4209c5f0a145c056b576f81565b34801561095a57600080fd5b506103c1611fb7565b34801561096f57600080fd5b506103c161097e366004612b4f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109b557600080fd5b506103c160085481565b61044a612016565b3480156109d357600080fd5b506103c1600f5481565b3480156109e957600080fd5b506103c1600c5481565b3480156109ff57600080fd5b506103c1612161565b348015610a1457600080fd5b5061044a610a23366004612b88565b6124c2565b348015610a3457600080fd5b5061044a610a43366004612bbe565b6125ac565b348015610a5457600080fd5b506103c1610a63366004612ba5565b60146020526000908152604090205481565b348015610a8157600080fd5b5061044a610a90366004612c21565b61263a565b60006001600160a01b038316610afd5760405162461bcd60e51b815260206004820152602260248201527f53524732303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084015b60405180910390fd5b33610b565760405162461bcd60e51b8152602060048201526024808201527f53524732303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af4565b3360008181526003602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000610bc96009600a612d7a565b610bd7906305f5e100612d89565b905090565b6000546001600160a01b03163314610c065760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03821615801590610c2657506001600160a01b03811615155b610c855760405162461bcd60e51b815260206004820152602a60248201527f4e657720616464726573736573206d757374206e6f7420626520746865205a45604482015269524f206164647265737360b01b6064820152608401610af4565b601780546001600160a01b038481166001600160a01b03199283168117909355601880549185169190921681179091556040805192835260208301919091527f9531844c54a073e677302121f844ce762e5d0d82415924346672381a39f8532c91015b60405180910390a15050565b600260015403610d165760405162461bcd60e51b8152600401610af490612dd5565b60026001556000546001600160a01b03163314610d455760405162461bcd60e51b8152600401610af490612da0565b600a54600c546009546000926001600160a01b031691606491610d689190612d89565b610d729190612e0c565b604051600081818185875af1925050503d8060008114610dae576040519150601f19603f3d011682016040523d82523d6000602084013e610db3565b606091505b5050600b54600d546009549293506000926001600160a01b0390921691606491610ddc91612d89565b610de69190612e0c565b604051600081818185875af1925050503d8060008114610e22576040519150601f19603f3d011682016040523d82523d6000602084013e610e27565b606091505b50509050818015610e355750805b610e4157610e41612e2e565b5050600060095560018055565b6000610e58612161565b3060009081526002602052604080822054600e546001600160a01b03871684529190922054610e879190612d89565b610e919190612e0c565b610bb59190612d89565b30600090815260026020526040812054600f548291610eb991612e0c565b3060009081526002602052604081205491925090610ed8908590612e44565b600f54610ee59190612e0c565b9050610ef18183612e57565b949350505050565b6000546001600160a01b03163314610f235760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03821615801590610f4357506001600160a01b03811615155b610fa05760405162461bcd60e51b815260206004820152602860248201527f4e65772077616c6c657473206d757374206e6f7420626520746865205a45524f604482015267206164647265737360c01b6064820152608401610af4565b600a80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b6000546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610af490612da0565b605a821015801561100a5750605a8110155b8015611017575060648211155b8015611024575060648111155b6110645760405162461bcd60e51b815260206004820152601160248201527008ccacae640c2e4ca40e8dede40d0d2ced607b1b6044820152606401610af4565b6006829055600581905560408051838152602081018390527fc19ebd395193e8ddaaeda048fb5cb09d4e2dbebcce719174166029a4093878569101610ce8565b6000336110b285828561268f565b6110bd858585612721565b95945050505050565b61dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546111016009600a612d7a565b61110f906305f5e100612d89565b610bd79190612e57565b6111256009600a612d7a565b611133906305f5e100612d89565b81565b6000610bb582600019610a95565b60008082600e546111559190612e57565b600f546111629190612e0c565b90506000600e54600f54610ee59190612e0c565b6000546001600160a01b031633146111a05760405162461bcd60e51b8152600401610af490612da0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112145760405162461bcd60e51b8152600401610af490612da0565b60646112226009600a612d7a565b611230906305f5e100612d89565b61123a9190612e0c565b8110156112a85760405162461bcd60e51b815260206004820152603660248201527f4e65772077616c6c6574206c696d69742073686f756c64206265206174206c65604482015275617374203125206f6620746f74616c20737570706c7960501b6064820152608401610af4565b60088190556040518181527fb579b5ff4decd3791f679ec8d72f16128df08aa3f346b425480a0135d2e8bf759060200160405180910390a150565b60006002600154036113075760405162461bcd60e51b8152600401610af490612dd5565b60026001554282101561134f5760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610af4565b336000908152601660205260409020439055600e546113b05760405162461bcd60e51b815260206004820152601a60248201527f54686520746f6b656e20686173206e6f206c69717569646974790000000000006044820152606401610af4565b6363c04398421015806113d657503373c207cd3f61da958aa6f4209c5f0a145c056b576f145b6114185760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1027b832b760691b6044820152606401610af4565b3360009081526004602052604081205460ff1661144e5760646006543461143f9190612d89565b6114499190612e0c565b611450565b345b90506000600e54826114629190612e44565b600f5461146f9190612e0c565b306000908152600260205260409020546114899190612e57565b60085433600090815260026020526040902054919250906114ab908390612e44565b1115806114c757503360009081526007602052604090205460ff165b6115095760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610af4565b600181116115675760405162461bcd60e51b815260206004820152602560248201527f4d75737420427579206d6f7265207468616e203120646563696d616c206f6620604482015264537572676560d81b6064820152608401610af4565b848110156115b75760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610af4565b6115c13382612934565b60006115cd8334612e57565b9050806009546115dd9190612e44565b600955600e546115ee908490612e44565b600e554260006115fc612161565b6116069034612d89565b9050806012600082825461161a9190612e44565b9091555050336000908152601060205260408120805483929061163e908490612e44565b909155505060008281526011602052604081208054839290611661908490612e44565b9250508190555060016013600082825461167b9190612e44565b9091555050601354600090815260146020526040812083905561169c612161565b6116a4611fb7565b6116ae9190612d89565b6000848152601560205260408120858155600101549192500361178357601354600103611730576116dd612161565b6116e96009600a612d7a565b6116f7906305f5e100612d89565b87600e546117059190612e57565b61170f9190612e0c565b6117199190612d89565b600084815260156020526040902060010155611783565b601560006014600060016013546117479190612e57565b81526020019081526020016000205481526020019081526020016000206002015460156000858152602001908152602001600020600101819055505b600083815260156020526040902060028101829055600301548111806117b85750600083815260156020526040902060030154155b156117d25760008381526015602052604090206003018190555b6000838152601560205260409020600401548110806118005750600083815260156020526040902060040154155b1561181a5760008381526015602052604090206004018190555b60405185815233903090600080516020612f178339815191529060200160405180910390a330337f7ce543d1780f3bdc3dac42da06c95da802653cd1b212b8d74ec3e3c33ad7095c873461186c612161565b611876908c612d89565b6040805193845260208401929092529082015260600160405180910390a350506001808055979650505050505050565b60006118b0612161565b6118b8611fb7565b6118c06110c6565b6118ca9190612d89565b610bd79190612d89565b6000546001600160a01b031633146118fe5760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000611936338484612721565b9392505050565b60006002600154036119615760405162461bcd60e51b8152600401610af490612dd5565b6002600155428310156119a95760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610af4565b33600090815260166020526040902054439003611a255760405162461bcd60e51b815260206004820152603460248201527f427579696e6720616e642073656c6c696e6720696e207468652073616d6520626044820152736c6f636b206973206e6f7420616c6c6f7765642160601b6064820152608401610af4565b33600081815260026020526040902054851115611a845760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742073656c6c2061626f766520746f6b656e20616d6f756e7400006044820152606401610af4565b30600090815260026020526040812054611a9f908790612e44565b600f54611aac9190612e0c565b600e54611ab99190612e57565b9050600060646005546064611ace9190612e57565b611ad89084612d89565b611ae29190612e0c565b90506000611af08284612e57565b905085831015611b425760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610af4565b3360009081526004602052604081205460ff16611bad576040516001600160a01b038616908390600081818185875af1925050503d8060008114611ba2576040519150601f19603f3d011682016040523d82523d6000602084013e611ba7565b606091505b50611bfd565b6040516001600160a01b038616908590600081818185875af1925050503d8060008114611bf6576040519150601f19603f3d011682016040523d82523d6000602084013e611bfb565b606091505b505b50905080611c4d5760405162461bcd60e51b815260206004820152601760248201527f424e422f455448207472616e73666572206661696c65640000000000000000006044820152606401610af4565b6001600160a01b038516600090815260026020526040902054611c71908a90612e57565b6001600160a01b03861660009081526002602090815260408083209390935533825260049052205460ff16611cb35782600954611cae9190612e44565b611cb7565b6009545b600955600e54611cc8908590612e57565b600e5530600090815260026020526040902054611ce6908a90612e44565b306000908152600260205260408120919091554290611d03612161565b611d0d9087612d89565b90508060126000828254611d219190612e44565b90915550503360009081526010602052604081208054839290611d45908490612e44565b909155505060008281526011602052604081208054839290611d68908490612e44565b92505081905550600160136000828254611d829190612e44565b90915550506013546000908152601460205260408120839055611da3612161565b611dab611fb7565b611db59190612d89565b60008481526015602052604081208581556001015491925003611e255760156000601460006001601354611de99190612e57565b81526020019081526020016000205481526020019081526020016000206002015460156000858152602001908152602001600020600101819055505b60008381526015602052604090206002810182905560030154811180611e5a5750600083815260156020526040902060030154155b15611e745760008381526015602052604090206003018190555b600083815260156020526040902060040154811080611ea25750600083815260156020526040902060040154155b15611ebc5760008381526015602052604090206004018190555b6040518c815230906001600160a01b038a1690600080516020612f178339815191529060200160405180910390a33360009081526004602052604090205460ff1615611f4c57604080518d815260208101899052908101839052339030907f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e9060600160405180910390a3611fa2565b33307f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e8e88611f79612161565b611f83908b612d89565b6040805193845260208401929092529082015260600160405180910390a35b505060018080559a9950505050505050505050565b600080600e5411611ff95760405162461bcd60e51b815260206004820152600c60248201526b4e6f204c697175696469747960a01b6044820152606401610af4565b30600090815260026020526040902054600e54610bd79190612e0c565b6000546001600160a01b031633146120405760405162461bcd60e51b8152600401610af490612da0565b600e5430600090815260026020526040812054909190612061903490612d89565b61206b9190612e0c565b336000908152600260205260409020549091508111156120c25760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610af4565b600e546120cf3482612e44565b600e5530600090815260026020526040812080548492906120f1908490612e44565b90915550503360009081526002602052604081208054849290612115908490612e57565b9091555050600e54600f54829161212b91612d89565b6121359190612e0c565b600f5560405182815230903390600080516020612f178339815191529060200160405180910390a35050565b60175460185460408051630dfe168160e01b815290516000936001600160a01b039081169385939116918491630dfe16819160048083019260209291908290030181865afa1580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121db9190612e6a565b6001600160a01b03161461225057816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224b9190612e6a565b6122b2565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561228e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b29190612e6a565b9050600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156122f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123199190612ea3565b506001600160701b031691506001600160701b03169150601860009054906101000a90046001600160a01b03166001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b19190612e6a565b6001600160a01b03161461243357836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156123fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124219190612ea3565b506001600160701b0390811693501690505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124979190612ef3565b6124a290600a612d7a565b6124ac9084612d89565b90506124b88282612e0c565b9550505050505090565b6000546001600160a01b031633146124ec5760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b0381166125515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610af4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125d65760405162461bcd60e51b8152600401610af490612da0565b60646125e28284612e44565b1461262f5760405162461bcd60e51b815260206004820152601960248201527f53756d206f6620736861726573206d75737420626520313030000000000000006044820152606401610af4565b600c91909155600d55565b6000546001600160a01b031633146126645760405162461bcd60e51b8152600401610af490612da0565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03808416600090815260036020908152604080832093861683529290522054600019811461271b578181101561270e5760405162461bcd60e51b815260206004820152601d60248201527f53524732303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610af4565b61271b8484848403612999565b50505050565b60006001600160a01b0383161580159061274457506001600160a01b0383163014155b61279b5760405162461bcd60e51b815260206004820152602260248201527f7472616e7366657220746f20746865207a65726f2061646472657373206f7220604482015261434160f01b6064820152608401610af4565b600082116127fd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af4565b6001600160a01b03831660009081526007602052604090205460ff168061284957506008546001600160a01b038416600090815260026020526040902054612846908490612e44565b11155b61288c5760405162461bcd60e51b81526020600482015260146024820152734d61782077616c6c65742065786365656465642160601b6044820152606401610af4565b6001600160a01b0384166000908152600260205260409020546128b0908390612e57565b6001600160a01b0380861660009081526002602052604080822093909355908516815220546128e0908390612e44565b6001600160a01b038085166000818152600260205260409081902093909355915190861690600080516020612f17833981519152906129229086815260200190565b60405180910390a35060019392505050565b6001600160a01b038216600090815260026020526040902054612958908290612e44565b6001600160a01b038316600090815260026020526040808220929092553081522054612985908290612e57565b306000908152600260205260409020555050565b6001600160a01b0383166129fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af4565b6001600160a01b038216612a5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060208083528351808285015260005b81811015612aea57858101830151858201604001528201612ace565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612b2057600080fd5b50565b60008060408385031215612b3657600080fd5b8235612b4181612b0b565b946020939093013593505050565b60008060408385031215612b6257600080fd5b8235612b6d81612b0b565b91506020830135612b7d81612b0b565b809150509250929050565b600060208284031215612b9a57600080fd5b813561193681612b0b565b600060208284031215612bb757600080fd5b5035919050565b60008060408385031215612bd157600080fd5b50508035926020909101359150565b600080600060608486031215612bf557600080fd5b8335612c0081612b0b565b92506020840135612c1081612b0b565b929592945050506040919091013590565b60008060408385031215612c3457600080fd5b8235612c3f81612b0b565b915060208301358015158114612b7d57600080fd5b600080600060608486031215612c6957600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612cd1578160001904821115612cb757612cb7612c80565b80851615612cc457918102915b93841c9390800290612c9b565b509250929050565b600082612ce857506001610bb5565b81612cf557506000610bb5565b8160018114612d0b5760028114612d1557612d31565b6001915050610bb5565b60ff841115612d2657612d26612c80565b50506001821b610bb5565b5060208310610133831016604e8410600b8410161715612d54575081810a610bb5565b612d5e8383612c96565b8060001904821115612d7257612d72612c80565b029392505050565b600061193660ff841683612cd9565b8082028115828204841417610bb557610bb5612c80565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082612e2957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b80820180821115610bb557610bb5612c80565b81810381811115610bb557610bb5612c80565b600060208284031215612e7c57600080fd5b815161193681612b0b565b80516001600160701b0381168114612e9e57600080fd5b919050565b600080600060608486031215612eb857600080fd5b612ec184612e87565b9250612ecf60208501612e87565b9150604084015163ffffffff81168114612ee857600080fd5b809150509250925092565b600060208284031215612f0557600080fd5b815160ff8116811461193657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220373f1a86638fcd8d8fbc36215f3934b9e7e8c411171c1474ef05aeb37762270464736f6c63430008110033

Deployed Bytecode Sourcemap

3194:19506:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6830:83;;;;;;;;;;-1:-1:-1;6900:5:0;;;;;;;;;;;;-1:-1:-1;;;6900:5:0;;;;6830:83;;;;;;;:::i;:::-;;;;;;;;18016:89;;;;;;;;;;-1:-1:-1;18088:9:0;;18016:89;;;713:25:1;;;701:2;686:18;18016:89:0;567:177:1;7107:450:0;;;;;;;;;;-1:-1:-1;7107:450:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;7107:450:0;1205:187:1;6397:102:0;;;;;;;;;;;;;:::i;5052:35::-;;;;;;;;;;;;;;;;21406:444;;;;;;;;;;-1:-1:-1;21406:444:0;;;;;:::i;:::-;;:::i;:::-;;19566:392;;;;;;;;;;;;;:::i;18180:202::-;;;;;;;;;;-1:-1:-1;18180:202:0;;;;;:::i;:::-;;:::i;20261:271::-;;;;;;;;;;-1:-1:-1;20261:271:0;;;;;:::i;:::-;;:::i;19181:377::-;;;;;;;;;;-1:-1:-1;19181:377:0;;;;;:::i;:::-;;:::i;18390:431::-;;;;;;;;;;-1:-1:-1;18390:431:0;;;;;:::i;:::-;;:::i;8664:335::-;;;;;;;;;;-1:-1:-1;8664:335:0;;;;;:::i;:::-;;:::i;5151:52::-;;;;;;;;;;;;5193:10;5151:52;;7695:118;;;;;;;;;;;;;:::i;7016:83::-;;;;;;;;;;-1:-1:-1;7016:83:0;;3922:1;3083:36:1;;3071:2;3056:18;7016:83:0;2941:184:1;4359:37:0;;;;;;;;;;;;4393:3;4359:37;;4015:61;;;;;;;;;;;;;:::i;4242:43::-;;;;;;;;;;-1:-1:-1;4242:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4694:74;;;;;;;;;;-1:-1:-1;4694:74:0;;;;-1:-1:-1;;;;;4694:74:0;;;;;;-1:-1:-1;;;;;3294:32:1;;;3276:51;;3264:2;3249:18;4694:74:0;3130:203:1;5283:39:0;;;;;;;;;;-1:-1:-1;5283:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;7565:122;;;;;;;;;;-1:-1:-1;7565:122:0;;;;;:::i;:::-;;:::i;4617:70::-;;;;;;;;;;-1:-1:-1;4617:70:0;;;;-1:-1:-1;;;;;4617:70:0;;;5329:30;;;;;;;;;;;;;;;;4102:44;;;;;;;;;;-1:-1:-1;4102:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;6507:119;;;;;;;;;;-1:-1:-1;6507:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;6600:18:0;6573:7;6600:18;;;:9;:18;;;;;;;6507:119;19966:287;;;;;;;;;;-1:-1:-1;19966:287:0;;;;;:::i;:::-;;:::i;2750:148::-;;;;;;;;;;;;;:::i;5392:22::-;;;;;;;;;;;;;;;;4831:33;;;;;;;;;;;;;;;;7821:284;;;;;;;;;;-1:-1:-1;7821:284:0;;;;;:::i;:::-;;:::i;4433:47::-;;;;;;;;;;-1:-1:-1;4433:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2536:79;;;;;;;;;;-1:-1:-1;2574:7:0;2601:6;-1:-1:-1;;;;;2601:6:0;2536:79;;10916:3294;;;;;;:::i;:::-;;:::i;21080:141::-;;;;;;;;;;;;;:::i;6921:87::-;;;;;;;;;;-1:-1:-1;6993:7:0;;;;;;;;;;;;-1:-1:-1;;;6993:7:0;;;;6921:87;;5235:41;;;;;;;;;;-1:-1:-1;5235:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;4292:27;;;;;;;;;;;;;;;;4326:26;;;;;;;;;;;;;;;;8113:122;;;;;;;;;;-1:-1:-1;8113:122:0;;;;;:::i;:::-;;:::i;5626:54::-;;;;;;;;;;-1:-1:-1;5626:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4018:25:1;;;4074:2;4059:18;;4052:34;;;;4102:18;;;4095:34;;;;4160:2;4145:18;;4138:34;4203:3;4188:19;;4181:35;4005:3;3990:19;5626:54:0;3759:463:1;8434:188:0;;;;;;;;;;-1:-1:-1;8434:188:0;;;;;:::i;:::-;;:::i;4560:29::-;;;;;;;;;;;;;;;;14542:3428;;;;;;;;;;-1:-1:-1;14542:3428:0;;;;;:::i;:::-;;:::i;5793:94::-;;;;;;;;;;;;5845:42;5793:94;;22530:167;;;;;;;;;;;;;:::i;6634:188::-;;;;;;;;;;-1:-1:-1;6634:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;6786:19:0;;;6754:7;6786:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;6634:188;4487:42;;;;;;;;;;;;;;;;20540:532;;;:::i;5094:50::-;;;;;;;;;;;;;;;;4795:29;;;;;;;;;;;;;;;;21905:561;;;;;;;;;;;;;:::i;2906:281::-;;;;;;;;;;-1:-1:-1;2906:281:0;;;;;:::i;:::-;;:::i;18829:344::-;;;;;;;;;;-1:-1:-1;18829:344:0;;;;;:::i;:::-;;:::i;5421:46::-;;;;;;;;;;-1:-1:-1;5421:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;8243:153;;;;;;;;;;-1:-1:-1;8243:153:0;;;;;:::i;:::-;;:::i;7107:450::-;7209:4;-1:-1:-1;;;;;7239:21:0;;7231:68;;;;-1:-1:-1;;;7231:68:0;;4750:2:1;7231:68:0;;;4732:21:1;4789:2;4769:18;;;4762:30;4828:34;4808:18;;;4801:62;-1:-1:-1;;;4879:18:1;;;4872:32;4921:19;;7231:68:0;;;;;;;;;7332:10;7310:110;;;;-1:-1:-1;;;7310:110:0;;5153:2:1;7310:110:0;;;5135:21:1;5192:2;5172:18;;;5165:30;5231:34;5211:18;;;5204:62;-1:-1:-1;;;5282:18:1;;;5275:34;5326:19;;7310:110:0;4951:400:1;7310:110:0;7445:10;7433:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;7433:32:0;;;;;;;;;;;;:41;;;7490:37;713:25:1;;;7433:32:0;;7445:10;7490:37;;686:18:1;7490:37:0;;;;;;;-1:-1:-1;7545:4:0;7107:450;;;;;:::o;6397:102::-;6452:7;3972:13;3922:1;3972:2;:13;:::i;:::-;4054:22;;:5;:22;:::i;:::-;6472:19;;6397:102;:::o;21406:444::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21556:27:0;::::1;::::0;;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;21587:30:0;::::1;::::0;::::1;21556:61;21534:153;;;::::0;-1:-1:-1;;;21534:153:0;;7607:2:1;21534:153:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;7685:34;7665:18;;;7658:62;-1:-1:-1;;;7736:18:1;;;7729:40;7786:19;;21534:153:0::1;7405:406:1::0;21534:153:0::1;21700:17;:33:::0;;-1:-1:-1;;;;;21700:33:0;;::::1;-1:-1:-1::0;;;;;;21700:33:0;;::::1;::::0;::::1;::::0;;;21744:13:::1;:32:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;21792:50:::1;::::0;;8028:34:1;;;8093:2;8078:18;;8071:43;;;;21792:50:0::1;::::0;7963:18:1;21792:50:0::1;;;;;;;;21406:444:::0;;:::o;19566:392::-;548:1;694:7;;:19;686:63;;;;-1:-1:-1;;;686:63:0;;;;;;;:::i;:::-;548:1;760:7;:18;2663:6:::1;::::0;-1:-1:-1;;;;;2663:6:0::1;2166:10:::0;2663:22:::1;2655:67;;;;-1:-1:-1::0;;;2655:67:0::1;;;;;;;:::i;:::-;19664:10:::2;::::0;19716:9:::2;::::0;19703:10:::2;::::0;19640::::2;::::0;-1:-1:-1;;;;;19664:10:0::2;::::0;4910:3:::2;::::0;19703:22:::2;::::0;19716:9;19703:22:::2;:::i;:::-;19702:39;;;;:::i;:::-;19656:100;::::0;::::2;::::0;;;;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;19792:14:0::2;::::0;19848:13:::2;::::0;19835:10:::2;::::0;19639:117;;-1:-1:-1;19768:10:0::2;::::0;-1:-1:-1;;;;;19792:14:0;;::::2;::::0;4910:3:::2;::::0;19835:26:::2;::::0;::::2;:::i;:::-;19834:43;;;;:::i;:::-;19784:108;::::0;::::2;::::0;;;;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19767:125;;;19910:5;:14;;;;;19919:5;19910:14;19903:22;;;;:::i;:::-;-1:-1:-1::0;;19949:1:0::2;19936:10;:14:::0;504:1;801:22;;19566:392::o;18180:202::-;18245:7;18361:13;:11;:13::i;:::-;18338:4;18320:24;;;;:9;:24;;;;;;;18307:9;;-1:-1:-1;;;;;18287:17:0;;;;;;;;;:29;;18307:9;18287:29;:::i;:::-;18286:58;;;;:::i;:::-;18285:89;;;;:::i;20261:271::-;20396:4;20325:7;20378:24;;;:9;:24;;;;;;20367:8;;20325:7;;20367:35;;;:::i;:::-;20464:4;20413:18;20446:24;;;:9;:24;;;;;;20345:57;;-1:-1:-1;20413:18:0;20446:35;;20473:8;;20446:35;:::i;:::-;20434:8;;:48;;;;:::i;:::-;20413:69;-1:-1:-1;20500:24:0;20413:69;20500:11;:24;:::i;:::-;20493:31;20261:271;-1:-1:-1;;;;20261:271:0:o;19181:377::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19336:27:0;::::1;::::0;;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;19367:31:0;::::1;::::0;::::1;19336:62;19314:152;;;::::0;-1:-1:-1;;;19314:152:0;;9514:2:1;19314:152:0::1;::::0;::::1;9496:21:1::0;9553:2;9533:18;;;9526:30;9592:34;9572:18;;;9565:62;-1:-1:-1;;;9643:18:1;;;9636:38;9691:19;;19314:152:0::1;9312:404:1::0;19314:152:0::1;19479:10;:26:::0;;-1:-1:-1;;;;;19479:26:0;;::::1;-1:-1:-1::0;;;;;;19479:26:0;;::::1;;::::0;;;19516:14:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;19181:377::o;18390:431::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;18537:2:::1;18524:9;:15;;:52;;;;;18574:2;18560:10;:16;;18524:52;:89;;;;;18610:3;18597:9;:16;;18524:89;:127;;;;;18648:3;18634:10;:17;;18524:127;18502:194;;;::::0;-1:-1:-1;;;18502:194:0;;9923:2:1;18502:194:0::1;::::0;::::1;9905:21:1::0;9962:2;9942:18;;;9935:30;-1:-1:-1;;;9981:18:1;;;9974:47;10038:18;;18502:194:0::1;9721:341:1::0;18502:194:0::1;18709:6;:18:::0;;;18738:7:::1;:20:::0;;;18776:37:::1;::::0;;10241:25:1;;;10297:2;10282:18;;10275:34;;;18776:37:0::1;::::0;10214:18:1;18776:37:0::1;10067:248:1::0;8664:335:0;8798:4;8833:10;8893:40;8909:6;8833:10;8926:6;8893:15;:40::i;:::-;8951;8965:6;8973:9;8984:6;8951:13;:40::i;:::-;8944:47;8664:335;-1:-1:-1;;;;;8664:335:0:o;7695:118::-;4975:42;7748:7;7790:15;;;:9;:15;;;;3972:13;3922:1;3972:2;:13;:::i;:::-;4054:22;;:5;:22;:::i;:::-;7775:30;;;;:::i;4015:61::-;3972:13;3922:1;3972:2;:13;:::i;:::-;4054:22;;:5;:22;:::i;:::-;4015:61;:::o;7565:122::-;7620:4;7644:35;7652:7;-1:-1:-1;;7644:7:0;:35::i;19966:287::-;20064:7;20089:19;20135:11;20123:9;;:23;;;;:::i;:::-;20111:8;;:36;;;;:::i;:::-;20089:58;;20158:20;20192:9;;20181:8;;:20;;;;:::i;2750:148::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;2857:1:::1;2841:6:::0;;2820:40:::1;::::0;-1:-1:-1;;;;;2841:6:0;;::::1;::::0;2820:40:::1;::::0;2857:1;;2820:40:::1;2888:1;2871:19:::0;;-1:-1:-1;;;;;;2871:19:0::1;::::0;;2750:148::o;7821:284::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;7945:3:::1;3972:13;3922:1;3972:2;:13;:::i;:::-;4054:22;::::0;:5:::1;:22;:::i;:::-;7930:18;;;;:::i;:::-;7918:8;:30;;7896:134;;;::::0;-1:-1:-1;;;7896:134:0;;10522:2:1;7896:134:0::1;::::0;::::1;10504:21:1::0;10561:2;10541:18;;;10534:30;10600:34;10580:18;;;10573:62;-1:-1:-1;;;10651:18:1;;;10644:52;10713:19;;7896:134:0::1;10320:418:1::0;7896:134:0::1;8041:6;:17:::0;;;8074:23:::1;::::0;713:25:1;;;8074:23:0::1;::::0;701:2:1;686:18;8074:23:0::1;;;;;;;7821:284:::0;:::o;10916:3294::-;11042:4;548:1;694:7;;:19;686:63;;;;-1:-1:-1;;;686:63:0;;;;;;;:::i;:::-;548:1;760:7;:18;11117:15:::1;11105:27:::0;::::1;;11097:56;;;::::0;-1:-1:-1;;;11097:56:0;;10945:2:1;11097:56:0::1;::::0;::::1;10927:21:1::0;10984:2;10964:18;;;10957:30;-1:-1:-1;;;11003:18:1;;;10996:46;11059:18;;11097:56:0::1;10743:340:1::0;11097:56:0::1;11207:10;11193:25;::::0;;;:13:::1;:25;::::0;;;;11221:12:::1;11193:40:::0;;11283:9:::1;::::0;11275:52:::1;;;::::0;-1:-1:-1;;;11275:52:0;;11290:2:1;11275:52:0::1;::::0;::::1;11272:21:1::0;11329:2;11309:18;;;11302:30;11368:28;11348:18;;;11341:56;11414:18;;11275:52:0::1;11088:350:1::0;11275:52:0::1;5193:10;11449:15;:34;;:85;;;-1:-1:-1::0;11504:10:0::1;5845:42;11504:30;11449:85;11427:154;;;::::0;-1:-1:-1;;;11427:154:0;;11645:2:1;11427:154:0::1;::::0;::::1;11627:21:1::0;11684:2;11664:18;;;11657:30;-1:-1:-1;;;11703:18:1;;;11696:49;11762:18;;11427:154:0::1;11443:343:1::0;11427:154:0::1;11656:10;11624:17;11644:23:::0;;;:11:::1;:23;::::0;;;;;::::1;;:94;;4393:3;11721:6;;11709:9;:18;;;;:::i;:::-;11708:30;;;;:::i;:::-;11644:94;;;11683:9;11644:94;11624:114;;11794:20;11882:9;;11870;:21;;;;:::i;:::-;11858:8;;:34;;;;:::i;:::-;11835:4;11817:24;::::0;;;:9:::1;:24;::::0;;;;;:76:::1;::::0;;::::1;:::i;:::-;11998:6;::::0;11968:10:::1;11958:21;::::0;;;:9:::1;:21;::::0;;;;;11794:99;;-1:-1:-1;11998:6:0;11958:36:::1;::::0;11794:99;;11958:36:::1;:::i;:::-;:46;;:94;;;-1:-1:-1::0;12041:10:0::1;12025:27;::::0;;;:15:::1;:27;::::0;;;;;::::1;;11958:94;11936:163;;;::::0;-1:-1:-1;;;11936:163:0;;11993:2:1;11936:163:0::1;::::0;::::1;11975:21:1::0;12032:2;12012:18;;;12005:30;-1:-1:-1;;;12051:18:1;;;12044:49;12110:18;;11936:163:0::1;11791:343:1::0;11936:163:0::1;12165:1;12150:12;:16;12142:66;;;::::0;-1:-1:-1;;;12142:66:0;;12341:2:1;12142:66:0::1;::::0;::::1;12323:21:1::0;12380:2;12360:18;;;12353:30;12419:34;12399:18;;;12392:62;-1:-1:-1;;;12470:18:1;;;12463:35;12515:19;;12142:66:0::1;12139:401:1::0;12142:66:0::1;12277:11;12261:12;:27;;12253:66;;;::::0;-1:-1:-1;;;12253:66:0;;12747:2:1;12253:66:0::1;::::0;::::1;12729:21:1::0;12786:2;12766:18;;;12759:30;12825:28;12805:18;;;12798:56;12871:18;;12253:66:0::1;12545:350:1::0;12253:66:0::1;12385:29;12389:10;12401:12;12385:3;:29::i;:::-;12484:17;12504:21;12516:9:::0;12504::::1;:21;:::i;:::-;12484:41;;12562:9;12549:10;;:22;;;;:::i;:::-;12536:10;:35:::0;12594:9:::1;::::0;:21:::1;::::0;12606:9;;12594:21:::1;:::i;:::-;12582:9;:33:::0;12669:15:::1;12653:13;12727;:11;:13::i;:::-;12715:25;::::0;:9:::1;:25;:::i;:::-;12695:45;;12766:9;12751:11;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12793:10:0::1;12786:18;::::0;;;:6:::1;:18;::::0;;;;:31;;12808:9;;12786:18;:31:::1;::::0;12808:9;;12786:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;12828:11:0::1;::::0;;;:4:::1;:11;::::0;;;;:24;;12843:9;;12828:11;:24:::1;::::0;12843:9;;12828:24:::1;:::i;:::-;;;;;;;;12910:1;12899:7;;:12;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12934:7:0::1;::::0;12922:20:::1;::::0;;;:11:::1;:20;::::0;;;;:28;;;12997:13:::1;:11;:13::i;:::-;12978:16;:14;:16::i;:::-;:32;;;;:::i;:::-;13021:22;::::0;;;:15:::1;:22;::::0;;;;:35;;;13071:27:::1;;::::0;12961:49;;-1:-1:-1;13071:32:0;13067:405:::1;;13124:7;;13135:1;13124:12:::0;13120:341:::1;;13274:13;:11;:13::i;:::-;3972;3922:1;3972:2;:13;:::i;:::-;4054:22;::::0;:5:::1;:22;:::i;:::-;13222:9;13210;;:21;;;;:::i;:::-;13209:40;;;;:::i;:::-;13208:79;;;;:::i;:::-;13157:22;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;:130:::0;13120:341:::1;;;13358:15;:81;13396:11;:24;13418:1;13408:7;;:11;;;;:::i;:::-;13396:24;;;;;;;;;;;;13358:81;;;;;;;;;;;:87;;;13328:15;:22;13344:5;13328:22;;;;;;;;;;;:27;;:117;;;;13120:341;13482:22;::::0;;;:15:::1;:22;::::0;;;;:28:::1;::::0;::::1;:37:::0;;;13550:27:::1;;::::0;:36;-1:-1:-1;13550:36:0;:85:::1;;-1:-1:-1::0;13603:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;::::0;:32;13550:85:::1;13532:178;;;13662:22;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;:36:::0;;;13532:178:::1;13740:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:35;-1:-1:-1;13740:35:0;:83:::1;;-1:-1:-1::0;13792:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:31;13740:83:::1;13722:175;;;13850:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;:35:::0;;;13722:175:::1;13954:49;::::0;713:25:1;;;13978:10:0::1;::::0;13971:4:::1;::::0;-1:-1:-1;;;;;;;;;;;13954:49:0;701:2:1;686:18;13954:49:0::1;;;;;;;14073:4;14040:10;14019:161;14093:12:::0;14120:9:::1;14156:13;:11;:13::i;:::-;14144:25;::::0;:9;:25:::1;:::i;:::-;14019:161;::::0;;13102:25:1;;;13158:2;13143:18;;13136:34;;;;13186:18;;;13179:34;13090:2;13075:18;14019:161:0::1;;;;;;;-1:-1:-1::0;;14198:4:0::1;801:22:::0;;;14198:4;10916:3294;-1:-1:-1;;;;;;;10916:3294:0:o;21080:141::-;21127:7;21199:13;:11;:13::i;:::-;21180:16;:14;:16::i;:::-;21155:22;:20;:22::i;:::-;:41;;;;:::i;:::-;:57;;;;:::i;8113:122::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8199:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;8199:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8113:122::o;8434:188::-;8541:4;8570:44;8584:10;8596:9;8607:6;8570:13;:44::i;:::-;8563:51;8434:188;-1:-1:-1;;;8434:188:0:o;14542:3428::-;14678:4;548:1;694:7;;:19;686:63;;;;-1:-1:-1;;;686:63:0;;;;;;;:::i;:::-;548:1;760:7;:18;14748:15:::1;14736:27:::0;::::1;;14728:56;;;::::0;-1:-1:-1;;;14728:56:0;;10945:2:1;14728:56:0::1;::::0;::::1;10927:21:1::0;10984:2;10964:18;;;10957:30;-1:-1:-1;;;11003:18:1;;;10996:46;11059:18;;14728:56:0::1;10743:340:1::0;14728:56:0::1;14859:10;14845:25;::::0;;;:13:::1;:25;::::0;;;;;14874:12:::1;14845:41:::0;;14823:143:::1;;;::::0;-1:-1:-1;;;14823:143:0;;13426:2:1;14823:143:0::1;::::0;::::1;13408:21:1::0;13465:2;13445:18;;;13438:30;13504:34;13484:18;;;13477:62;-1:-1:-1;;;13555:18:1;;;13548:50;13615:19;;14823:143:0::1;13224:416:1::0;14823:143:0::1;14996:10;14979:14;15087:17:::0;;;:9:::1;:17;::::0;;;;;:32;-1:-1:-1;15087:32:0::1;15065:112;;;::::0;-1:-1:-1;;;15065:112:0;;13847:2:1;15065:112:0::1;::::0;::::1;13829:21:1::0;13886:2;13866:18;;;13859:30;13925:32;13905:18;;;13898:60;13975:18;;15065:112:0::1;13645:354:1::0;15065:112:0::1;15318:4;15242:17;15300:24:::0;;;:9:::1;:24;::::0;;;;;:38:::1;::::0;15327:11;;15300:38:::1;:::i;:::-;15288:8;;:51;;;;:::i;:::-;15262:9;;:78;;;;:::i;:::-;15242:98;;15351:17;4393:3;15395:7;;4393:3;15385:17;;;;:::i;:::-;15372:31;::::0;:9;:31:::1;:::i;:::-;15371:43;;;;:::i;:::-;15351:63:::0;-1:-1:-1;15425:17:0::1;15445:21;15351:63:::0;15445:9;:21:::1;:::i;:::-;15425:41;;15527:9;15514;:22;;15506:61;;;::::0;-1:-1:-1;;;15506:61:0;;12747:2:1;15506:61:0::1;::::0;::::1;12729:21:1::0;12786:2;12766:18;;;12759:30;12825:28;12805:18;;;12798:56;12871:18;;15506:61:0::1;12545:350:1::0;15506:61:0::1;15645:10;15612:15;15633:23:::0;;;:11:::1;:23;::::0;;;;;::::1;;:139;;15730:42;::::0;-1:-1:-1;;;;;15730:20:0;::::1;::::0;15758:9;;15730:42:::1;::::0;;;15758:9;15730:20;:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15633:139;;;15672:42;::::0;-1:-1:-1;;;;;15672:20:0;::::1;::::0;15700:9;;15672:42:::1;::::0;;;15700:9;15672:20;:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15633:139;15611:161;;;15791:10;15783:46;;;::::0;-1:-1:-1;;;15783:46:0;;14206:2:1;15783:46:0::1;::::0;::::1;14188:21:1::0;14245:2;14225:18;;;14218:30;14284:25;14264:18;;;14257:53;14327:18;;15783:46:0::1;14004:347:1::0;15783:46:0::1;-1:-1:-1::0;;;;;15907:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;:31:::1;::::0;15927:11;;15907:31:::1;:::i;:::-;-1:-1:-1::0;;;;;15887:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;:51;;;;16081:10:::1;16069:23:::0;;:11:::1;:23:::0;;;;::::1;;:87;;16147:9;16134:10;;:22;;;;:::i;:::-;16069:87;;;16108:10;;16069:87;16056:10;:100:::0;16179:9:::1;::::0;:21:::1;::::0;16191:9;;16179:21:::1;:::i;:::-;16167:9;:33:::0;16304:4:::1;16286:24;::::0;;;:9:::1;:24;::::0;;;;;:38:::1;::::0;16313:11;;16286:38:::1;:::i;:::-;16277:4;16259:24;::::0;;;:9:::1;:24;::::0;;;;:65;;;;16378:15:::1;::::0;16437:13:::1;:11;:13::i;:::-;16425:25;::::0;:9;:25:::1;:::i;:::-;16404:46;;16476:10;16461:11;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16504:10:0::1;16497:18;::::0;;;:6:::1;:18;::::0;;;;:32;;16519:10;;16497:18;:32:::1;::::0;16519:10;;16497:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;16540:11:0::1;::::0;;;:4:::1;:11;::::0;;;;:25;;16555:10;;16540:11;:25:::1;::::0;16555:10;;16540:25:::1;:::i;:::-;;;;;;;;16623:1;16612:7;;:12;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16647:7:0::1;::::0;16635:20:::1;::::0;;;:11:::1;:20;::::0;;;;:28;;;16710:13:::1;:11;:13::i;:::-;16691:16;:14;:16::i;:::-;:32;;;;:::i;:::-;16734:22;::::0;;;:15:::1;:22;::::0;;;;:35;;;16784:27:::1;;::::0;16674:49;;-1:-1:-1;16784:32:0;16780:174:::1;;16863:15;:73;16897:11;:24;16919:1;16909:7;;:11;;;;:::i;:::-;16897:24;;;;;;;;;;;;16863:73;;;;;;;;;;;:79;;;16833:15;:22;16849:5;16833:22;;;;;;;;;;;:27;;:109;;;;16780:174;16964:22;::::0;;;:15:::1;:22;::::0;;;;:28:::1;::::0;::::1;:37:::0;;;17032:27:::1;;::::0;:36;-1:-1:-1;17032:36:0;:85:::1;;-1:-1:-1::0;17085:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;::::0;:32;17032:85:::1;17014:178;;;17144:22;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;:36:::0;;;17014:178:::1;17222:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:35;-1:-1:-1;17222:35:0;:83:::1;;-1:-1:-1::0;17274:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:31;17222:83:::1;17204:175;;;17332:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;:35:::0;;;17204:175:::1;17438:44;::::0;713:25:1;;;17463:4:0::1;::::0;-1:-1:-1;;;;;17438:44:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;17438:44:0;701:2:1;686:18;17438:44:0::1;;;;;;;17509:10;17497:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;17493:448;;;17542:167;::::0;;13102:25:1;;;13158:2;13143:18;;13136:34;;;13186:18;;;13179:34;;;17597:10:0::1;::::0;17573:4:::1;::::0;17542:167:::1;::::0;13090:2:1;13075:18;17542:167:0::1;;;;;;;17493:448;;;17802:10;17778:4;17747:182;17831:11:::0;17861:9;17901:13:::1;:11;:13::i;:::-;17889:25;::::0;:9;:25:::1;:::i;:::-;17747:182;::::0;;13102:25:1;;;13158:2;13143:18;;13136:34;;;;13186:18;;;13179:34;13090:2;13075:18;17747:182:0::1;;;;;;;17493:448;-1:-1:-1::0;;17958:4:0::1;801:22:::0;;;17958:4;14542:3428;-1:-1:-1;;;;;;;;;;14542:3428:0:o;22530:167::-;22577:7;22617:1;22605:9;;:13;22597:38;;;;-1:-1:-1;;;22597:38:0;;14558:2:1;22597:38:0;;;14540:21:1;14597:2;14577:18;;;14570:30;-1:-1:-1;;;14616:18:1;;;14609:42;14668:18;;22597:38:0;14356:336:1;22597:38:0;22683:4;22665:24;;;;:9;:24;;;;;;22653:9;;:36;;22665:24;22653:36;:::i;20540:532::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;20678:9:::1;::::0;20643:4:::1;20602:19;20625:24:::0;;;:9:::1;:24;::::0;;;;;20602:19;;20678:9;20625:36:::1;::::0;20652:9:::1;::::0;20625:36:::1;:::i;:::-;20624:63;;;;:::i;:::-;20716:10;20706:21;::::0;;;:9:::1;:21;::::0;;;;;20602:85;;-1:-1:-1;20706:36:0;-1:-1:-1;20706:36:0::1;20698:67;;;::::0;-1:-1:-1;;;20698:67:0;;14899:2:1;20698:67:0::1;::::0;::::1;14881:21:1::0;14938:2;14918:18;;;14911:30;-1:-1:-1;;;14957:18:1;;;14950:48;15015:18;;20698:67:0::1;14697:342:1::0;20698:67:0::1;20795:9;::::0;20827:21:::1;20839:9;20795::::0;20827:21:::1;:::i;:::-;20815:9;:33:::0;20877:4:::1;20859:24;::::0;;;:9:::1;:24;::::0;;;;:39;;20887:11;;20859:24;:39:::1;::::0;20887:11;;20859:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;20919:10:0::1;20909:21;::::0;;;:9:::1;:21;::::0;;;;:36;;20934:11;;20909:21;:36:::1;::::0;20934:11;;20909:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;20979:9:0::1;::::0;20968:8:::1;::::0;20992:6;;20968:20:::1;::::0;::::1;:::i;:::-;20967:31;;;;:::i;:::-;20956:8;:42:::0;21016:48:::1;::::0;713:25:1;;;21045:4:0::1;::::0;21025:10:::1;::::0;-1:-1:-1;;;;;;;;;;;21016:48:0;701:2:1;686:18;21016:48:0::1;;;;;;;20591:481;;20540:532::o:0;21905:561::-;22002:17;;22064:13;;22047;;;-1:-1:-1;;;22047:13:0;;;;21949:7;;-1:-1:-1;;;;;22002:17:0;;;;21949:7;;22064:13;;;22002:17;;22047:11;;:13;;;;;;;;;;;;;;22002:17;22047:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22047:30:0;;:104;;22137:4;-1:-1:-1;;;;;22137:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22047:104;;;22100:4;-1:-1:-1;;;;;22100:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22031:120;;22165:12;22179;22197:4;-1:-1:-1;;;;;22197:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22164:51;-1:-1:-1;;;;;22164:51:0;;;-1:-1:-1;;;;;22164:51:0;;;22249:13;;;;;;;;;-1:-1:-1;;;;;22249:13:0;-1:-1:-1;;;;;22232:30:0;:4;-1:-1:-1;;;;;22232:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22232:30:0;;22228:98;;22296:4;-1:-1:-1;;;;;22296:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;22279:35:0;;;;-1:-1:-1;22279:35:0;;-1:-1:-1;22228:98:0;22336:12;22362:6;-1:-1:-1;;;;;22362:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22358:21;;:2;:21;:::i;:::-;22351:28;;:4;:28;:::i;:::-;22336:43;-1:-1:-1;22398:11:0;22405:4;22336:43;22398:11;:::i;:::-;22390:20;;;;;;;21905:561;:::o;2906:281::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3009:22:0;::::1;2987:110;;;::::0;-1:-1:-1;;;2987:110:0;;16428:2:1;2987:110:0::1;::::0;::::1;16410:21:1::0;16467:2;16447:18;;;16440:30;16506:34;16486:18;;;16479:62;-1:-1:-1;;;16557:18:1;;;16550:36;16603:19;;2987:110:0::1;16226:402:1::0;2987:110:0::1;3134:6;::::0;;3113:38:::1;::::0;-1:-1:-1;;;;;3113:38:0;;::::1;::::0;3134:6;::::1;::::0;3113:38:::1;::::0;::::1;3162:6;:17:::0;;-1:-1:-1;;;;;;3162:17:0::1;-1:-1:-1::0;;;;;3162:17:0;;;::::1;::::0;;;::::1;::::0;;2906:281::o;18829:344::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;4910:3:::1;18985:31;19000:16:::0;18985:12;:31:::1;:::i;:::-;:47;18963:122;;;::::0;-1:-1:-1;;;18963:122:0;;16835:2:1;18963:122:0::1;::::0;::::1;16817:21:1::0;16874:2;16854:18;;;16847:30;16913:27;16893:18;;;16886:55;16958:18;;18963:122:0::1;16633:349:1::0;18963:122:0::1;19098:9;:24:::0;;;;19133:13:::1;:32:::0;18829:344::o;8243:153::-;2663:6;;-1:-1:-1;;;;;2663:6:0;2166:10;2663:22;2655:67;;;;-1:-1:-1;;;2655:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8356:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;8356:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8243:153::o;9903:545::-;-1:-1:-1;;;;;10065:18:0;;;10038:24;10065:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10107:37:0;;10103:338;;10207:6;10187:16;:26;;10161:117;;;;-1:-1:-1;;;10161:117:0;;17189:2:1;10161:117:0;;;17171:21:1;17228:2;17208:18;;;17201:30;17267:31;17247:18;;;17240:59;17316:18;;10161:117:0;16987:353:1;10161:117:0;10363:51;10372:5;10379:7;10407:6;10388:16;:25;10363:8;:51::i;:::-;10027:421;9903:545;;;:::o;9037:858::-;9163:4;-1:-1:-1;;;;;9235:23:0;;;;;;:53;;-1:-1:-1;;;;;;9262:26:0;;9283:4;9262:26;;9235:53;9213:137;;;;-1:-1:-1;;;9213:137:0;;17547:2:1;9213:137:0;;;17529:21:1;17586:2;17566:18;;;17559:30;17625:34;17605:18;;;17598:62;-1:-1:-1;;;17676:18:1;;;17669:32;17718:19;;9213:137:0;17345:398:1;9213:137:0;9378:1;9369:6;:10;9361:64;;;;-1:-1:-1;;;9361:64:0;;17950:2:1;9361:64:0;;;17932:21:1;17989:2;17969:18;;;17962:30;18028:34;18008:18;;;18001:62;-1:-1:-1;;;18079:18:1;;;18072:39;18128:19;;9361:64:0;17748:405:1;9361:64:0;-1:-1:-1;;;;;9458:26:0;;;;;;:15;:26;;;;;;;;;:86;;-1:-1:-1;9538:6:0;;-1:-1:-1;;;;;9505:20:0;;;;;;:9;:20;;;;;;:29;;9528:6;;9505:29;:::i;:::-;:39;;9458:86;9436:156;;;;-1:-1:-1;;;9436:156:0;;18360:2:1;9436:156:0;;;18342:21:1;18399:2;18379:18;;;18372:30;-1:-1:-1;;;18418:18:1;;;18411:50;18478:18;;9436:156:0;18158:344:1;9436:156:0;-1:-1:-1;;;;;9658:17:0;;;;;;:9;:17;;;;;;:26;;9678:6;;9658:26;:::i;:::-;-1:-1:-1;;;;;9638:17:0;;;;;;;:9;:17;;;;;;:46;;;;9756:20;;;;;;;:29;;9779:6;;9756:29;:::i;:::-;-1:-1:-1;;;;;9733:20:0;;;;;;;:9;:20;;;;;;;:52;;;;9830:35;;;;;;-1:-1:-1;;;;;;;;;;;9830:35:0;;;9858:6;713:25:1;;701:2;686:18;;567:177;9830:35:0;;;;;;;;-1:-1:-1;9883:4:0;9037:858;;;;;:::o;14264:196::-;-1:-1:-1;;;;;14353:19:0;;;;;;:9;:19;;;;;;:28;;14375:6;;14353:28;:::i;:::-;-1:-1:-1;;;;;14331:19:0;;;;;;:9;:19;;;;;;:50;;;;14437:4;14419:24;;;;:33;;14446:6;;14419:33;:::i;:::-;14410:4;14392:24;;;;:9;:24;;;;;:60;-1:-1:-1;;14264:196:0:o;10456:380::-;-1:-1:-1;;;;;10592:19:0;;10584:68;;;;-1:-1:-1;;;10584:68:0;;18709:2:1;10584:68:0;;;18691:21:1;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;-1:-1:-1;;;18838:18:1;;;18831:34;18882:19;;10584:68:0;18507:400:1;10584:68:0;-1:-1:-1;;;;;10671:21:0;;10663:68;;;;-1:-1:-1;;;10663:68:0;;19114:2:1;10663:68:0;;;19096:21:1;19153:2;19133:18;;;19126:30;19192:34;19172:18;;;19165:62;-1:-1:-1;;;19243:18:1;;;19236:32;19285:19;;10663:68:0;18912:398:1;10663:68:0;-1:-1:-1;;;;;10744:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10796:32;;713:25:1;;;10796:32:0;;686:18:1;10796:32:0;;;;;;;10456:380;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:388::-;1465:6;1473;1526:2;1514:9;1505:7;1501:23;1497:32;1494:52;;;1542:1;1539;1532:12;1494:52;1581:9;1568:23;1600:31;1625:5;1600:31;:::i;:::-;1650:5;-1:-1:-1;1707:2:1;1692:18;;1679:32;1720:33;1679:32;1720:33;:::i;:::-;1772:7;1762:17;;;1397:388;;;;;:::o;1790:247::-;1849:6;1902:2;1890:9;1881:7;1877:23;1873:32;1870:52;;;1918:1;1915;1908:12;1870:52;1957:9;1944:23;1976:31;2001:5;1976:31;:::i;2042:180::-;2101:6;2154:2;2142:9;2133:7;2129:23;2125:32;2122:52;;;2170:1;2167;2160:12;2122:52;-1:-1:-1;2193:23:1;;2042:180;-1:-1:-1;2042:180:1:o;2227:248::-;2295:6;2303;2356:2;2344:9;2335:7;2331:23;2327:32;2324:52;;;2372:1;2369;2362:12;2324:52;-1:-1:-1;;2395:23:1;;;2465:2;2450:18;;;2437:32;;-1:-1:-1;2227:248:1:o;2480:456::-;2557:6;2565;2573;2626:2;2614:9;2605:7;2601:23;2597:32;2594:52;;;2642:1;2639;2632:12;2594:52;2681:9;2668:23;2700:31;2725:5;2700:31;:::i;:::-;2750:5;-1:-1:-1;2807:2:1;2792:18;;2779:32;2820:33;2779:32;2820:33;:::i;:::-;2480:456;;2872:7;;-1:-1:-1;;;2926:2:1;2911:18;;;;2898:32;;2480:456::o;3338:416::-;3403:6;3411;3464:2;3452:9;3443:7;3439:23;3435:32;3432:52;;;3480:1;3477;3470:12;3432:52;3519:9;3506:23;3538:31;3563:5;3538:31;:::i;:::-;3588:5;-1:-1:-1;3645:2:1;3630:18;;3617:32;3687:15;;3680:23;3668:36;;3658:64;;3718:1;3715;3708:12;4227:316;4304:6;4312;4320;4373:2;4361:9;4352:7;4348:23;4344:32;4341:52;;;4389:1;4386;4379:12;4341:52;-1:-1:-1;;4412:23:1;;;4482:2;4467:18;;4454:32;;-1:-1:-1;4533:2:1;4518:18;;;4505:32;;4227:316;-1:-1:-1;4227:316:1:o;5356:127::-;5417:10;5412:3;5408:20;5405:1;5398:31;5448:4;5445:1;5438:15;5472:4;5469:1;5462:15;5488:422;5577:1;5620:5;5577:1;5634:270;5655:7;5645:8;5642:21;5634:270;;;5714:4;5710:1;5706:6;5702:17;5696:4;5693:27;5690:53;;;5723:18;;:::i;:::-;5773:7;5763:8;5759:22;5756:55;;;5793:16;;;;5756:55;5872:22;;;;5832:15;;;;5634:270;;;5638:3;5488:422;;;;;:::o;5915:806::-;5964:5;5994:8;5984:80;;-1:-1:-1;6035:1:1;6049:5;;5984:80;6083:4;6073:76;;-1:-1:-1;6120:1:1;6134:5;;6073:76;6165:4;6183:1;6178:59;;;;6251:1;6246:130;;;;6158:218;;6178:59;6208:1;6199:10;;6222:5;;;6246:130;6283:3;6273:8;6270:17;6267:43;;;6290:18;;:::i;:::-;-1:-1:-1;;6346:1:1;6332:16;;6361:5;;6158:218;;6460:2;6450:8;6447:16;6441:3;6435:4;6432:13;6428:36;6422:2;6412:8;6409:16;6404:2;6398:4;6395:12;6391:35;6388:77;6385:159;;;-1:-1:-1;6497:19:1;;;6529:5;;6385:159;6576:34;6601:8;6595:4;6576:34;:::i;:::-;6646:6;6642:1;6638:6;6634:19;6625:7;6622:32;6619:58;;;6657:18;;:::i;:::-;6695:20;;5915:806;-1:-1:-1;;;5915:806:1:o;6726:140::-;6784:5;6813:47;6854:4;6844:8;6840:19;6834:4;6813:47;:::i;6871:168::-;6944:9;;;6975;;6992:15;;;6986:22;;6972:37;6962:71;;7013:18;;:::i;7044:356::-;7246:2;7228:21;;;7265:18;;;7258:30;7324:34;7319:2;7304:18;;7297:62;7391:2;7376:18;;7044:356::o;8125:355::-;8327:2;8309:21;;;8366:2;8346:18;;;8339:30;8405:33;8400:2;8385:18;;8378:61;8471:2;8456:18;;8125:355::o;8485:217::-;8525:1;8551;8541:132;;8595:10;8590:3;8586:20;8583:1;8576:31;8630:4;8627:1;8620:15;8658:4;8655:1;8648:15;8541:132;-1:-1:-1;8687:9:1;;8485:217::o;8917:127::-;8978:10;8973:3;8969:20;8966:1;8959:31;9009:4;9006:1;8999:15;9033:4;9030:1;9023:15;9049:125;9114:9;;;9135:10;;;9132:36;;;9148:18;;:::i;9179:128::-;9246:9;;;9267:11;;;9264:37;;;9281:18;;:::i;15044:251::-;15114:6;15167:2;15155:9;15146:7;15142:23;15138:32;15135:52;;;15183:1;15180;15173:12;15135:52;15215:9;15209:16;15234:31;15259:5;15234:31;:::i;15300:188::-;15379:13;;-1:-1:-1;;;;;15421:42:1;;15411:53;;15401:81;;15478:1;15475;15468:12;15401:81;15300:188;;;:::o;15493:450::-;15580:6;15588;15596;15649:2;15637:9;15628:7;15624:23;15620:32;15617:52;;;15665:1;15662;15655:12;15617:52;15688:40;15718:9;15688:40;:::i;:::-;15678:50;;15747:49;15792:2;15781:9;15777:18;15747:49;:::i;:::-;15737:59;;15839:2;15828:9;15824:18;15818:25;15883:10;15876:5;15872:22;15865:5;15862:33;15852:61;;15909:1;15906;15899:12;15852:61;15932:5;15922:15;;;15493:450;;;;;:::o;15948:273::-;16016:6;16069:2;16057:9;16048:7;16044:23;16040:32;16037:52;;;16085:1;16082;16075:12;16037:52;16117:9;16111:16;16167:4;16160:5;16156:16;16149:5;16146:27;16136:55;;16187:1;16184;16177:12

Swarm Source

ipfs://373f1a86638fcd8d8fbc36215f3934b9e7e8c411171c1474ef05aeb377622704

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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