ETH Price: $2,916.06 (+0.66%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve242893852026-01-22 9:19:115 days ago1769073551IN
Trump Pepe: TRUMPE Token
0 ETH0.000013510.55461453
Approve238673182025-11-24 7:45:3564 days ago1763970335IN
Trump Pepe: TRUMPE Token
0 ETH0.00000480.10300249
Approve237774012025-11-11 17:12:3576 days ago1762881155IN
Trump Pepe: TRUMPE Token
0 ETH0.000150083.23503786
Approve237655512025-11-10 1:22:5978 days ago1762737779IN
Trump Pepe: TRUMPE Token
0 ETH0.000098622.12536372
Approve236376142025-10-23 3:46:1196 days ago1761191171IN
Trump Pepe: TRUMPE Token
0 ETH0.000016070.60956018
Approve235833642025-10-15 13:23:35104 days ago1760534615IN
Trump Pepe: TRUMPE Token
0 ETH0.000052512.1544643
Transfer235678292025-10-13 9:13:35106 days ago1760346815IN
Trump Pepe: TRUMPE Token
0 ETH0.00004840.77318514
Transfer235466312025-10-10 10:07:35109 days ago1760090855IN
Trump Pepe: TRUMPE Token
0 ETH0.000018620.29753359
Transfer235466282025-10-10 10:06:47109 days ago1760090807IN
Trump Pepe: TRUMPE Token
0 ETH0.000012270.3171605
Approve235442132025-10-10 2:01:23109 days ago1760061683IN
Trump Pepe: TRUMPE Token
0 ETH0.00001730.71010715
Transfer234583672025-09-28 1:58:11121 days ago1759024691IN
Trump Pepe: TRUMPE Token
0 ETH0.00001360.20195181
Transfer234581252025-09-28 1:09:23121 days ago1759021763IN
Trump Pepe: TRUMPE Token
0 ETH0.000010180.20262693
Transfer234580532025-09-28 0:54:59121 days ago1759020899IN
Trump Pepe: TRUMPE Token
0 ETH0.000013770.20440736
Approve234425022025-09-25 20:41:23123 days ago1758832883IN
Trump Pepe: TRUMPE Token
0 ETH0.00012262.64261642
Approve234044372025-09-20 13:00:23129 days ago1758373223IN
Trump Pepe: TRUMPE Token
0 ETH0.000039050.83814168
Transfer233996182025-09-19 20:50:35129 days ago1758315035IN
Trump Pepe: TRUMPE Token
0 ETH0.000023280.34553468
Approve233296052025-09-10 2:05:47139 days ago1757469947IN
Trump Pepe: TRUMPE Token
0 ETH0.000056781.21698094
Transfer232974322025-09-05 14:13:59144 days ago1757081639IN
Trump Pepe: TRUMPE Token
0 ETH0.000091281.45780152
Approve232926132025-09-04 22:05:35144 days ago1757023535IN
Trump Pepe: TRUMPE Token
0 ETH0.000246255.27795011
Approve232785432025-09-02 22:56:35146 days ago1756853795IN
Trump Pepe: TRUMPE Token
0 ETH0.000011930.2561986
Approve232774692025-09-02 19:20:23146 days ago1756840823IN
Trump Pepe: TRUMPE Token
0 ETH0.000015710.33698962
Approve232749832025-09-02 11:00:47147 days ago1756810847IN
Trump Pepe: TRUMPE Token
0 ETH0.000058492.21174492
Approve232749822025-09-02 11:00:35147 days ago1756810835IN
Trump Pepe: TRUMPE Token
0 ETH0.000059062.23336628
Approve232749802025-09-02 11:00:11147 days ago1756810811IN
Trump Pepe: TRUMPE Token
0 ETH0.000058712.22036806
Approve232749792025-09-02 10:59:59147 days ago1756810799IN
Trump Pepe: TRUMPE Token
0 ETH0.00001840.69589454
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer225914162025-05-29 22:36:11242 days ago1748558171
Trump Pepe: TRUMPE Token
1.73376765 ETH
Transfer225914162025-05-29 22:36:11242 days ago1748558171
Trump Pepe: TRUMPE Token
1.73376765 ETH
Transfer225914132025-05-29 22:35:35242 days ago1748558135
Trump Pepe: TRUMPE Token
1.66911059 ETH
Transfer225914132025-05-29 22:35:35242 days ago1748558135
Trump Pepe: TRUMPE Token
1.66911059 ETH
Transfer225914112025-05-29 22:35:11242 days ago1748558111
Trump Pepe: TRUMPE Token
1.57322863 ETH
Transfer225914112025-05-29 22:35:11242 days ago1748558111
Trump Pepe: TRUMPE Token
1.57322863 ETH
Transfer225914082025-05-29 22:34:35242 days ago1748558075
Trump Pepe: TRUMPE Token
1.70732676 ETH
Transfer225914082025-05-29 22:34:35242 days ago1748558075
Trump Pepe: TRUMPE Token
1.70732676 ETH
Transfer225914062025-05-29 22:34:11242 days ago1748558051
Trump Pepe: TRUMPE Token
1.8910952 ETH
Transfer225914062025-05-29 22:34:11242 days ago1748558051
Trump Pepe: TRUMPE Token
1.8910952 ETH
Transfer225914042025-05-29 22:33:47242 days ago1748558027
Trump Pepe: TRUMPE Token
2.0170104 ETH
Transfer225914042025-05-29 22:33:47242 days ago1748558027
Trump Pepe: TRUMPE Token
2.0170104 ETH
Transfer225914022025-05-29 22:33:23242 days ago1748558003
Trump Pepe: TRUMPE Token
2.33418024 ETH
Transfer225914022025-05-29 22:33:23242 days ago1748558003
Trump Pepe: TRUMPE Token
2.33418024 ETH
Transfer225914002025-05-29 22:32:59242 days ago1748557979
Trump Pepe: TRUMPE Token
1.66073639 ETH
Transfer225914002025-05-29 22:32:59242 days ago1748557979
Trump Pepe: TRUMPE Token
1.66073639 ETH
Transfer225913982025-05-29 22:32:35242 days ago1748557955
Trump Pepe: TRUMPE Token
2.0250981 ETH
Transfer225913982025-05-29 22:32:35242 days ago1748557955
Trump Pepe: TRUMPE Token
2.0250981 ETH
Transfer225913962025-05-29 22:32:11242 days ago1748557931
Trump Pepe: TRUMPE Token
1.60955361 ETH
Transfer225913962025-05-29 22:32:11242 days ago1748557931
Trump Pepe: TRUMPE Token
1.60955361 ETH
Transfer225913942025-05-29 22:31:47242 days ago1748557907
Trump Pepe: TRUMPE Token
1.6323869 ETH
Transfer225913942025-05-29 22:31:47242 days ago1748557907
Trump Pepe: TRUMPE Token
1.6323869 ETH
Transfer225913922025-05-29 22:31:23242 days ago1748557883
Trump Pepe: TRUMPE Token
1.61510869 ETH
Transfer225913922025-05-29 22:31:23242 days ago1748557883
Trump Pepe: TRUMPE Token
1.61510869 ETH
Transfer225913902025-05-29 22:30:59242 days ago1748557859
Trump Pepe: TRUMPE Token
1.67894673 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
token

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2025-05-29
*/

/**

████████ ██████  ██    ██ ███    ███ ██████  ███████     
   ██    ██   ██ ██    ██ ████  ████ ██   ██ ██          
   ██    ██████  ██    ██ ██ ████ ██ ██████  █████       
   ██    ██   ██ ██    ██ ██  ██  ██ ██      ██          
   ██    ██   ██  ██████  ██      ██ ██      ███████

Trump Pepe, $TRUMPE - Make Ethereum Great Again!

Web: https://trumpecoineth.vip
X: https://x.com/trumpecoineth
TG: https://t.me/trumpecoineth

*/


pragma solidity 0.8.26;


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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

interface IERC20Metadata is IERC20{
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }


    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }


    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, 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);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

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() external 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;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

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

contract token is ERC20, Ownable {

    // Mappings
    mapping(address => bool) public exemptFromFees;
    mapping(address => bool) public exemptFromLimits;
    mapping(address => bool) public isAMMPair;
    mapping(address => uint256) private _holderLastTransferBlock; // MEV protection

    // Addresses
    address public marketingAddress;
    address public devAddress;
    address public immutable lpPair;
    address public immutable WETH;

    // Contracts
    IDexRouter public immutable dexRouter;

    // Booleans
    bool public tradingAllowed;
    bool public antiMevEnabled = false;
    bool public limited = true;
    bool public transferDelayEnabled = true;

    // Structs
    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint64 marketingTax;
        uint64 devTax;
        uint64 liquidityTax;
        uint64 totalTax;
    }

    struct TokensForTax {
        uint80 tokensForMarketing;
        uint80 tokensForLiquidity;
        uint80 tokensForDev;
        bool gasSaver;
    }

    // Public Variables
    TxLimits public txLimits;
    Taxes public buyTax;
    Taxes public sellTax;
    TokensForTax public tokensForTax;

    // Constants
    uint64 public constant FEE_DIVISOR = 10000;

    uint256 public launchBlock;

    // Swap Variables
    uint256 public swapTokensAtAmt;
    uint256 public lastSwapBackBlock;

    // Events
    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);
    event removeTaxEvent(uint newAmt);

    uint128 private launchTax = 500; // Initial value set to 500 (5%)

    constructor()
        ERC20("Trump Pepe", "TRUMPE")
    {   
        _mint(msg.sender, 1000000000 * (10 ** 18));

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 56){
            _v2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else if(block.chainid == 8453){
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        txLimits.transactionLimit = uint128(totalSupply() * 10 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 10 / 1000);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        marketingAddress = msg.sender; // update
        devAddress = msg.sender; // update

        buyTax.marketingTax = 1500;// 1% = 100
        buyTax.liquidityTax = 0;
        buyTax.devTax = 0;
        buyTax.totalTax = buyTax.marketingTax + buyTax.liquidityTax + buyTax.devTax;

        sellTax.marketingTax = 1500;
        sellTax.liquidityTax = 0;
        sellTax.devTax = 0;
        sellTax.totalTax = sellTax.marketingTax + sellTax.liquidityTax + sellTax.devTax;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            amount -= handleTax(from, to, amount);
            checkLimits(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }

            if(transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] + 6 < block.number, "Transfer Delay");
                    _holderLastTransferBlock[to] = block.number;
                    _holderLastTransferBlock[tx.origin] = block.number;
                    if(from == address(lpPair)){
                        require(tx.origin == to, "no buying to external wallets yet");
                    }
                }
            }

        }

    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from] && lastSwapBackBlock + 2 <= block.number) {
            convertTaxes();
        }
        
        uint128 tax = 0;

        Taxes memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }
        
        if(taxes.totalTax > 0){
            TokensForTax memory tokensForTaxUpdate = tokensForTax;
            if(launchBlock == block.number){
                if (isAMMPair[from] || isAMMPair[to]){
                    tax = uint128(amount * launchTax / FEE_DIVISOR);
                }
            } else if(block.number == launchBlock + 1 || block.number == launchBlock + 2){
                if (isAMMPair[from] || isAMMPair[to]){
                    tax = uint128(amount * 3000 / FEE_DIVISOR);
                }
            } else {
                tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            }
            tokensForTaxUpdate.tokensForLiquidity += uint80(tax * taxes.liquidityTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForMarketing += uint80(tax * taxes.marketingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint80(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }
 
    function swapTokensForETH(uint256 tokenAmt) private {

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        TokensForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForLiquidity + tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 10){
            contractBalance = swapTokensAtAmt * 10;
        }

        if(tokensForTaxMem.tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForTaxMem.tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForTaxMem.tokensForLiquidity;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = marketingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForLiquidity = 0;
        tokensForTaxMem.tokensForMarketing = 0;
        tokensForTaxMem.tokensForDev = 0;

        tokensForTax = tokensForTaxMem;
        lastSwapBackBlock = block.number;
    }

    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function updateSwapTokensAmt(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmt = newAmount;
    }

    function updateBuyTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax;
        require(taxes.totalTax  <= 6000 || taxes.totalTax <= buyTax.totalTax, "Keep tax below 60%");
        emit UpdatedBuyTax(taxes.totalTax);
        buyTax = taxes;
    }

    function updateSellTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax;
        require(taxes.totalTax  <= 6000 || taxes.totalTax <= sellTax.totalTax, "Keep tax below 60%");
        emit UpdatedSellTax(taxes.totalTax);
        sellTax = taxes;
    }

    function renounceDevTax() external {
        require(msg.sender == devAddress, "Not dev");
        
        Taxes memory buyTaxes = buyTax;
        buyTaxes.marketingTax += buyTaxes.devTax;
        buyTaxes.devTax = 0;
        buyTax = buyTaxes;

        Taxes memory sellTaxes = sellTax;
        sellTaxes.marketingTax += sellTaxes.devTax;
        sellTaxes.devTax = 0;
        sellTax = sellTaxes;
    }

    
    function enableTrading() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchBlock = block.number;
        lastSwapBackBlock = block.number;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }


    function removeTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already disabled!");
        transferDelayEnabled = false;
    }
    
    
    function withdrawStuckETH() external {
        bool success;
        (success,) = address(devAddress).call{value: address(this).balance}("");
    }

    function rescueTokens(address _token) external {
        require(_token != address(0), "_token address cannot be 0");
        require(msg.sender == marketingAddress || msg.sender == devAddress, "Not dev");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),address(devAddress), _contractBalance);
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    function setLaunchTax(uint128 newTax) external onlyOwner {
        require(newTax <= 9900, "Launch tax cannot exceed 99%"); // Safety check
        launchTax = newTax;
    }

    function trumpPepe() public pure returns (string memory) {
        return "Trump but Pepe";
    }

    receive() payable external {}
}

Contract Security Audit

Contract ABI

API
[{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"removeTaxEvent","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiMevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceDevTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newTax","type":"uint128"}],"name":"setLaunchTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForMarketing","type":"uint80"},{"internalType":"uint80","name":"tokensForLiquidity","type":"uint80"},{"internalType":"uint80","name":"tokensForDev","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"trumpPepe","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600b805461010160b01b62ffffff60a81b19909116179055601380546001600160801b0319166101f417905534801561003b575f80fd5b506040518060400160405280600a8152602001695472756d70205065706560b01b815250604051806040016040528060068152602001655452554d504560d01b815250816003908161008d919061088c565b50600461009a828261088c565b5050505f6100ac61060a60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061010f336b033b2e3c9fd0803ce800000061060e565b5f466001036101335750737a250d5630b4cf539739df2c5dacb4c659f2488d610231565b466005036101565750737a250d5630b4cf539739df2c5dacb4c659f2488d610231565b46606103610179575073d99d1c33f9fc3444f8101754abc46c52416550d1610231565b4660380361019c57507310ed43c718714eb63d5aa57b78b54704e256024e610231565b4661a4b1036101c05750731b02da8cb0d097eb8d57a175b88c7d8b47997506610231565b46612105036101e45750734752ba5dbc23f44d87826276bf6fd6b1c372ad24610231565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660c0526103e861024a60025490565b61025590600a61095a565b61025f9190610977565b600c80546001600160801b0319166001600160801b03929092169190911790556103e861028b60025490565b61029690600a61095a565b6102a09190610977565b600c80546001600160801b03928316600160801b029216919091179055620186a06102ca60025490565b6102d590601961095a565b6102df9190610977565b601155600a8054336001600160a01b03199182168117909255600b80549091169091179055600d80546105dc6001600160c01b03199091168117918290556001600160401b0368010000000000000000830481169261034992600160801b90910490911690610996565b6103539190610996565b600d80546001600160c01b0316600160c01b6001600160401b0393841602179055600e80546105dc6001600160c01b03199091168117918290556801000000000000000082048316926103ae92600160801b90041690610996565b6103b89190610996565b600e80546001600160401b0392909216600160c01b026001600160c01b03909216919091179055600f805460ff60f01b1916600160f01b17905560c051604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa15801561043a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045e91906109b5565b6001600160a01b031660a0816001600160a01b03168152505060c0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d991906109b5565b60a0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af1158015610527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054b91906109b5565b6001600160a01b0390811660808190525f9081526008602090815260408083208054600160ff19918216811790925560078452828520805482168317905533808652838620805483168417905530808752848720805484168517905590865260069094528285208054821683179055838552828520805482168317905560c05195861685529190932080549091169092179091556105ea915f196106d1565b6106043360c0516105ff6106cb60201b60201c565b6106d1565b506109f5565b3390565b6001600160a01b0382166106645760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610228565b8060025f82825461067591906109e2565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60025490565b6001600160a01b0383166107335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610228565b6001600160a01b0382166107945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610228565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061081c57607f821691505b60208210810361083a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561088757805f5260205f20601f840160051c810160208510156108655750805b601f840160051c820191505b81811015610884575f8155600101610871565b50505b505050565b81516001600160401b038111156108a5576108a56107f4565b6108b9816108b38454610808565b84610840565b6020601f8211600181146108eb575f83156108d45750848201515b5f19600385901b1c1916600184901b178455610884565b5f84815260208120601f198516915b8281101561091a57878501518255602094850194600190920191016108fa565b508482101561093757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761097157610971610946565b92915050565b5f8261099157634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160401b03818116838216019081111561097157610971610946565b5f602082840312156109c5575f80fd5b81516001600160a01b03811681146109db575f80fd5b9392505050565b8082018082111561097157610971610946565b60805160a05160c051613558610a575f395f8181610342015281816127570152612f0c01525f81816108a80152612eb501525f81816104e301528181611aa2015281816127940152818161284e01528181612b970152612bbe01526135585ff3fe6080604052600436106102db575f3560e01c80637580863111610189578063ad5c4648116100d8578063ccad03e111610092578063f270fde41161006d578063f270fde4146109dd578063f2fde38b14610a27578063f5648a4f14610a46578063f8686f0714610a5a575f80fd5b8063ccad03e11461098a578063d00efb2f146109a9578063dd62ed3e146109be575f80fd5b8063ad5c464814610897578063b0249cc6146108ca578063bedafd01146108f8578063c78d0fa014610917578063c876d0b91461092c578063cc1776d31461094c575f80fd5b80638da5cb5b116101435780639e93ad8e1161011e5780639e93ad8e1461080d578063a457c2d71461083a578063a5ece94114610859578063a9059cbb14610878575f80fd5b80638da5cb5b146107a657806392f278b2146107c357806395d89b41146107f9575f80fd5b806375808631146106f25780638503376214610706578063860a32ec146107255780638a8c523c146107455780638becc57d146107595780638d3e6e4014610778575f80fd5b80633ad10ef611610245578063627e9d8e116101ff5780636eb14903116101da5780636eb149031461067757806370a0823114610696578063715018a6146106ca578063751039fc146106de575f80fd5b8063627e9d8e146105c457806366ebd39a146105e45780636d7adcad14610603575f80fd5b80633ad10ef61461049e578063432e95a5146104bd578063452ed4f1146104d25780634f7041a51461050557806353371be0146105765780635a90a49e14610596575f80fd5b80632369bf83116102965780632369bf83146103e857806323b872dd14610407578063286965a714610426578063313ce5671461044557806336e18e1914610460578063395093511461047f575f80fd5b8062ae3bf8146102e657806306fdde03146103075780630758d92414610331578063095ea7b31461037c57806318160ddd146103ab57806321045918146103c9575f80fd5b366102e257005b5f80fd5b3480156102f1575f80fd5b5061030561030036600461302c565b610a6e565b005b348015610312575f80fd5b5061031b610ba9565b604051610328919061304c565b60405180910390f35b34801561033c575f80fd5b506103647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610328565b348015610387575f80fd5b5061039b610396366004613081565b610c39565b6040519015158152602001610328565b3480156103b6575f80fd5b506002545b604051908152602001610328565b3480156103d4575f80fd5b506103056103e33660046130a9565b610c52565b3480156103f3575f80fd5b5061030561040236600461302c565b610d9d565b348015610412575f80fd5b5061039b6104213660046130c0565b610e2e565b348015610431575f80fd5b50610305610440366004613110565b610e51565b348015610450575f80fd5b5060405160128152602001610328565b34801561046b575f80fd5b5061030561047a366004613150565b610fee565b34801561048a575f80fd5b5061039b610499366004613081565b611106565b3480156104a9575f80fd5b50600b54610364906001600160a01b031681565b3480156104c8575f80fd5b506103bb60125481565b3480156104dd575f80fd5b506103647f000000000000000000000000000000000000000000000000000000000000000081565b348015610510575f80fd5b50600d54610543906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b0395861681529385166020850152918416918301919091529091166060820152608001610328565b348015610581575f80fd5b50600b5461039b90600160a01b900460ff1681565b3480156105a1575f80fd5b5061039b6105b036600461302c565b60066020525f908152604090205460ff1681565b3480156105cf575f80fd5b50600b5461039b90600160a81b900460ff1681565b3480156105ef575f80fd5b506103056105fe366004613150565b611127565b34801561060e575f80fd5b50600f54610642906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b60405161032894939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b348015610682575f80fd5b50610305610691366004613150565b61123b565b3480156106a1575f80fd5b506103bb6106b036600461302c565b6001600160a01b03165f9081526020819052604090205490565b3480156106d5575f80fd5b506103056112e2565b3480156106e9575f80fd5b50610305611355565b3480156106fd575f80fd5b506103056113f7565b348015610711575f80fd5b5061030561072036600461302c565b61159c565b348015610730575f80fd5b50600b5461039b90600160b01b900460ff1681565b348015610750575f80fd5b5061030561162d565b348015610764575f80fd5b50610305610773366004613110565b6116cf565b348015610783575f80fd5b5061039b61079236600461302c565b60076020525f908152604090205460ff1681565b3480156107b1575f80fd5b506005546001600160a01b0316610364565b3480156107ce575f80fd5b5060408051808201909152600e81526d5472756d7020627574205065706560901b602082015261031b565b348015610804575f80fd5b5061031b61186c565b348015610818575f80fd5b5061082261271081565b6040516001600160401b039091168152602001610328565b348015610845575f80fd5b5061039b610854366004613081565b61187b565b348015610864575f80fd5b50600a54610364906001600160a01b031681565b348015610883575f80fd5b5061039b610892366004613081565b6118f5565b3480156108a2575f80fd5b506103647f000000000000000000000000000000000000000000000000000000000000000081565b3480156108d5575f80fd5b5061039b6108e436600461302c565b60086020525f908152604090205460ff1681565b348015610903575f80fd5b50610305610912366004613186565b611902565b348015610922575f80fd5b506103bb60115481565b348015610937575f80fd5b50600b5461039b90600160b81b900460ff1681565b348015610957575f80fd5b50600e54610543906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b348015610995575f80fd5b506103056109a4366004613186565b611a2c565b3480156109b4575f80fd5b506103bb60105481565b3480156109c9575f80fd5b506103bb6109d83660046131bb565b611b71565b3480156109e8575f80fd5b50600c54610a07906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610328565b348015610a32575f80fd5b50610305610a4136600461302c565b611b9b565b348015610a51575f80fd5b50610305611c85565b348015610a65575f80fd5b50610305611cda565b6001600160a01b038116610ac95760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b600a546001600160a01b0316331480610aec5750600b546001600160a01b031633145b610b225760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610ac0565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8a91906131ec565b600b54909150610ba59083906001600160a01b031683611d60565b5050565b606060038054610bb890613203565b80601f0160208091040260200160405190810160405280929190818152602001828054610be490613203565b8015610c2f5780601f10610c0657610100808354040283529160200191610c2f565b820191905f5260205f20905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b5f33610c46818585611db7565b60019150505b92915050565b6005546001600160a01b03163314610c7c5760405162461bcd60e51b8152600401610ac09061323b565b620186a0610c8960025490565b610c94906001613284565b610c9e91906132af565b811015610d0b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ac0565b6103e8610d1760025490565b610d22906005613284565b610d2c91906132af565b811115610d985760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ac0565b601155565b6005546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b038116610e0c5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610ac0565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610e3b858285611eda565b610e46858585611f4c565b506001949350505050565b6005546001600160a01b03163314610e7b5760405162461bcd60e51b8152600401610ac09061323b565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610eb584866132c2565b610ebf91906132c2565b6001600160401b031660608201819052611770101580610ef95750600e5460608201516001600160401b03600160c01b9092048216911611155b610f3a5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610ac0565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600e8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b6005546001600160a01b031633146110185760405162461bcd60e51b8152600401610ac09061323b565b6110246012600a6133c4565b6103e861103060025490565b61103b906001613284565b61104591906132af565b61104f91906132af565b816001600160801b031610156110915760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610ac0565b61109d6012600a6133c4565b6110b0906001600160801b038316613284565b600c80546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610c468185856111188383611b71565b61112291906133d2565b611db7565b6005546001600160a01b031633146111515760405162461bcd60e51b8152600401610ac09061323b565b61115d6012600a6133c4565b6103e861116960025490565b611174906001613284565b61117e91906132af565b61118891906132af565b816001600160801b031610156111ca5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610ac0565b6111d66012600a6133c4565b6111e9906001600160801b038316613284565b600c80546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020016110fb565b6005546001600160a01b031633146112655760405162461bcd60e51b8152600401610ac09061323b565b6126ac816001600160801b031611156112c05760405162461bcd60e51b815260206004820152601c60248201527f4c61756e6368207461782063616e6e6f742065786365656420393925000000006044820152606401610ac0565b601380546001600160801b0319166001600160801b0392909216919091179055565b6005546001600160a01b0316331461130c5760405162461bcd60e51b8152600401610ac09061323b565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461137f5760405162461bcd60e51b8152600401610ac09061323b565b600b805460ff60b01b19169055604080518082019091525f80825260208201525f6113a960025490565b6001600160801b03811680845260208401819052600160801b810217600c556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b600b546001600160a01b0316331461143b5760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610ac0565b60408051608081018252600d546001600160401b03808216808452600160401b8304821660208501819052600160801b8404831695850195909552600160c01b90920416606083015290919082906114949083906132c2565b6001600160401b039081169091525f6020848101919091528351600d80546040808801516060808a01519588166001600160c01b031990941693909317600160801b9188168202176001600160c01b0316600160c01b9588168602179093558051608081018252600e54808816808352600160401b8204891697830188905294810488169282019290925293900490941693820193909352925090829061153c9083906132c2565b6001600160401b039081169091525f60208401528251600e805460408601516060909601519284166001600160c01b031990911617600160801b95841695909502949094176001600160c01b0316600160c01b9190921602179091555050565b6005546001600160a01b031633146115c65760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b03811661160b5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610ac0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116575760405162461bcd60e51b8152600401610ac09061323b565b600b54600160a01b900460ff16156116b15760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610ac0565b600b805460ff60a01b1916600160a01b179055436010819055601255565b6005546001600160a01b031633146116f95760405162461bcd60e51b8152600401610ac09061323b565b604080516080810182525f60608201526001600160401b0385811682528481169282019290925290821660208201528161173384866132c2565b61173d91906132c2565b6001600160401b0316606082018190526117701015806117775750600d5460608201516001600160401b03600160c01b9092048216911611155b6117b85760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610ac0565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600d8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b606060048054610bb890613203565b5f33816118888286611b71565b9050838110156118e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ac0565b610e468286868403611db7565b5f33610c46818585611f4c565b6005546001600160a01b0316331461192c5760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b0382166119715760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610ac0565b306001600160a01b038316036119c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610ac0565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314611a565760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b038216611a9b5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610ac0565b80611b16577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611b165760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610ac0565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611a20565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b038116611c2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600b546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611ccf576040519150601f19603f3d011682016040523d82523d5f602084013e611cd4565b606091505b50505050565b6005546001600160a01b03163314611d045760405162461bcd60e51b8152600401610ac09061323b565b600b54600160b81b900460ff16611d515760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610ac0565b600b805460ff60b81b19169055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611db290849061200c565b505050565b6001600160a01b038316611e195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac0565b6001600160a01b038216611e7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac0565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611ee58484611b71565b90505f198114611cd45781811015611f3f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ac0565b611cd48484848403611db7565b6001600160a01b0383165f9081526006602052604090205460ff16158015611f8c57506001600160a01b0382165f9081526006602052604090205460ff16155b1561200157600b54600160a01b900460ff16611fdf5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610ac0565b611fea8383836120dd565b611ff490826133e5565b9050612001838383612549565b611db28383836128e1565b5f612060826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a849092919063ffffffff16565b805190915015611db2578080602001905181019061207e91906133f8565b611db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ac0565b601154305f9081526020819052604081205490911115801561211757506001600160a01b0384165f9081526008602052604090205460ff16155b8015612131575043601254600261212e91906133d2565b11155b1561213e5761213e612a9a565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600890529182205460ff16156121ca575060408051608081018252600e546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152612233565b6001600160a01b0386165f9081526008602052604090205460ff1615612233575060408051608081018252600d546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b0316156125375760408051608081018252600f546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff1615156060820152601054439003612307576001600160a01b0387165f9081526008602052604090205460ff16806122d657506001600160a01b0386165f9081526008602052604090205460ff165b1561230257601354612710906122f5906001600160801b031687613284565b6122ff91906132af565b92505b6123ad565b6010546123159060016133d2565b43148061232e575060105461232b9060026133d2565b43145b15612384576001600160a01b0387165f9081526008602052604090205460ff168061237057506001600160a01b0386165f9081526008602052604090205460ff165b15612302576127106122f586610bb8613284565b6060820151612710906123a0906001600160401b031687613284565b6123aa91906132af565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b0316856123d99190613413565b6123e3919061343c565b6123ed919061343c565b816020018181516123fe9190613469565b6001600160501b031690525060608201518251633b9aca00916001600160401b039081169161242e911686613413565b612438919061343c565b612442919061343c565b81518290612451908390613469565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b0390811691612484911686613413565b61248e919061343c565b612498919061343c565b816040018181516124a99190613469565b6001600160501b039081169091528251600f80546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b031990941695909616949094179190911716929092171790555061253587306001600160801b0386166128e1565b505b506001600160801b0316949350505050565b600b54600160b01b900460ff1615611db2576001600160a01b038281165f908152600760209081526040808320548383528184205482518084018452600c546001600160801b038082168352600160801b90910416818601529589168552600890935292205460ff9283169391921680156125c2575082155b156126635780516001600160801b031684111561260b5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610ac0565b60208101516001600160801b031661262383866133d2565b111561265e5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610ac0565b612743565b6001600160a01b0385165f9081526008602052604090205460ff1680156126a257506001600160a01b0386165f9081526007602052604090205460ff16155b156126eb5780516001600160801b031684111561265e5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610ac0565b826127435760208101516001600160801b031661270883866133d2565b11156127435760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610ac0565b600b54600160b81b900460ff16156128d9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156127c957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b156128d957325f9081526009602052604090205443906127ea9060066133d2565b106128285760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610ac0565b6001600160a01b038086165f9081526009602052604080822043908190553283529120557f00000000000000000000000000000000000000000000000000000000000000008116908716036128d957326001600160a01b038616146128d95760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b6064820152608401610ac0565b505050505050565b6001600160a01b0383166129455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac0565b6001600160a01b0382166129a75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac0565b6001600160a01b0383165f9081526020819052604090205481811015612a1e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ac0565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6060612a9284845f85612d89565b949350505050565b305f9081526020819052604081205460408051608081018252600f546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f9291612b0791613469565b612b119190613469565b6001600160501b03169050821580612b27575080155b15612b3157505050565b601154612b3f90600a613284565b831115612b5757601154612b5490600a613284565b92505b60208201516001600160501b031615612c4f575f8183602001516001600160501b031685612b859190613284565b612b8f91906132af565b9050612bbc307f0000000000000000000000000000000000000000000000000000000000000000836128e1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612c14575f80fd5b505af1925050508015612c25575060015b50612c3081856133e5565b935082602001516001600160501b031682612c4b91906133e5565b9150505b8215612d4d57612c5e83612e60565b604082015147905f906001600160501b031615612cec57600b5460408501516001600160a01b03909116908490612c9e906001600160501b031685613284565b612ca891906132af565b6040515f81818185875af1925050503d805f8114612ce1576040519150601f19603f3d011682016040523d82523d5f602084013e612ce6565b606091505b50909150505b4791508115612d4a57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f8114612d3f576040519150601f19603f3d011682016040523d82523d5f602084013e612d44565b606091505b50909150505b50505b505f602082018190528082526040820152600f80546060909201511515600160f01b026001600160f81b03199092169190911790555043601255565b606082471015612dea5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ac0565b5f80866001600160a01b03168587604051612e059190613488565b5f6040518083038185875af1925050503d805f8114612e3f576040519150601f19603f3d011682016040523d82523d5f602084013e612e44565b606091505b5091509150612e5587838387612f74565b979650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612e9357612e9361349e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612ee757612ee761349e565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612f4b9085905f908690309042906004016134b2565b5f604051808303815f87803b158015612f62575f80fd5b505af11580156128d9573d5f803e3d5ffd5b60608315612fe25782515f03612fdb576001600160a01b0385163b612fdb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ac0565b5081612a92565b612a928383815115612ff75781518083602001fd5b8060405162461bcd60e51b8152600401610ac0919061304c565b80356001600160a01b0381168114613027575f80fd5b919050565b5f6020828403121561303c575f80fd5b61304582613011565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613092575f80fd5b61309b83613011565b946020939093013593505050565b5f602082840312156130b9575f80fd5b5035919050565b5f805f606084860312156130d2575f80fd5b6130db84613011565b92506130e960208501613011565b929592945050506040919091013590565b80356001600160401b0381168114613027575f80fd5b5f805f60608486031215613122575f80fd5b61312b846130fa565b9250613139602085016130fa565b9150613147604085016130fa565b90509250925092565b5f60208284031215613160575f80fd5b81356001600160801b0381168114613045575f80fd5b8015158114613183575f80fd5b50565b5f8060408385031215613197575f80fd5b6131a083613011565b915060208301356131b081613176565b809150509250929050565b5f80604083850312156131cc575f80fd5b6131d583613011565b91506131e360208401613011565b90509250929050565b5f602082840312156131fc575f80fd5b5051919050565b600181811c9082168061321757607f821691505b60208210810361323557634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c4c57610c4c613270565b634e487b7160e01b5f52601260045260245ffd5b5f826132bd576132bd61329b565b500490565b6001600160401b038181168382160190811115610c4c57610c4c613270565b6001815b600184111561331c5780850481111561330057613300613270565b600184161561330e57908102905b60019390931c9280026132e5565b935093915050565b5f8261333257506001610c4c565b8161333e57505f610c4c565b8160018114613354576002811461335e5761337a565b6001915050610c4c565b60ff84111561336f5761336f613270565b50506001821b610c4c565b5060208310610133831016604e8410600b841016171561339d575081810a610c4c565b6133a95f1984846132e1565b805f19048211156133bc576133bc613270565b029392505050565b5f61304560ff841683613324565b80820180821115610c4c57610c4c613270565b81810381811115610c4c57610c4c613270565b5f60208284031215613408575f80fd5b815161304581613176565b6001600160801b03818116838216029081169081811461343557613435613270565b5092915050565b5f6001600160801b038316806134545761345461329b565b806001600160801b0384160491505092915050565b6001600160501b038181168382160190811115610c4c57610c4c613270565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156135025783516001600160a01b03168352602093840193909201916001016134db565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122070ab1412dacf491ee47fd0bf96deb823138394e08514913cc9bbf6f19f49ac3064736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106102db575f3560e01c80637580863111610189578063ad5c4648116100d8578063ccad03e111610092578063f270fde41161006d578063f270fde4146109dd578063f2fde38b14610a27578063f5648a4f14610a46578063f8686f0714610a5a575f80fd5b8063ccad03e11461098a578063d00efb2f146109a9578063dd62ed3e146109be575f80fd5b8063ad5c464814610897578063b0249cc6146108ca578063bedafd01146108f8578063c78d0fa014610917578063c876d0b91461092c578063cc1776d31461094c575f80fd5b80638da5cb5b116101435780639e93ad8e1161011e5780639e93ad8e1461080d578063a457c2d71461083a578063a5ece94114610859578063a9059cbb14610878575f80fd5b80638da5cb5b146107a657806392f278b2146107c357806395d89b41146107f9575f80fd5b806375808631146106f25780638503376214610706578063860a32ec146107255780638a8c523c146107455780638becc57d146107595780638d3e6e4014610778575f80fd5b80633ad10ef611610245578063627e9d8e116101ff5780636eb14903116101da5780636eb149031461067757806370a0823114610696578063715018a6146106ca578063751039fc146106de575f80fd5b8063627e9d8e146105c457806366ebd39a146105e45780636d7adcad14610603575f80fd5b80633ad10ef61461049e578063432e95a5146104bd578063452ed4f1146104d25780634f7041a51461050557806353371be0146105765780635a90a49e14610596575f80fd5b80632369bf83116102965780632369bf83146103e857806323b872dd14610407578063286965a714610426578063313ce5671461044557806336e18e1914610460578063395093511461047f575f80fd5b8062ae3bf8146102e657806306fdde03146103075780630758d92414610331578063095ea7b31461037c57806318160ddd146103ab57806321045918146103c9575f80fd5b366102e257005b5f80fd5b3480156102f1575f80fd5b5061030561030036600461302c565b610a6e565b005b348015610312575f80fd5b5061031b610ba9565b604051610328919061304c565b60405180910390f35b34801561033c575f80fd5b506103647f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610328565b348015610387575f80fd5b5061039b610396366004613081565b610c39565b6040519015158152602001610328565b3480156103b6575f80fd5b506002545b604051908152602001610328565b3480156103d4575f80fd5b506103056103e33660046130a9565b610c52565b3480156103f3575f80fd5b5061030561040236600461302c565b610d9d565b348015610412575f80fd5b5061039b6104213660046130c0565b610e2e565b348015610431575f80fd5b50610305610440366004613110565b610e51565b348015610450575f80fd5b5060405160128152602001610328565b34801561046b575f80fd5b5061030561047a366004613150565b610fee565b34801561048a575f80fd5b5061039b610499366004613081565b611106565b3480156104a9575f80fd5b50600b54610364906001600160a01b031681565b3480156104c8575f80fd5b506103bb60125481565b3480156104dd575f80fd5b506103647f000000000000000000000000136de0af045de8c7c8ec5fa50be81c11492cf8bc81565b348015610510575f80fd5b50600d54610543906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b0395861681529385166020850152918416918301919091529091166060820152608001610328565b348015610581575f80fd5b50600b5461039b90600160a01b900460ff1681565b3480156105a1575f80fd5b5061039b6105b036600461302c565b60066020525f908152604090205460ff1681565b3480156105cf575f80fd5b50600b5461039b90600160a81b900460ff1681565b3480156105ef575f80fd5b506103056105fe366004613150565b611127565b34801561060e575f80fd5b50600f54610642906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b60405161032894939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b348015610682575f80fd5b50610305610691366004613150565b61123b565b3480156106a1575f80fd5b506103bb6106b036600461302c565b6001600160a01b03165f9081526020819052604090205490565b3480156106d5575f80fd5b506103056112e2565b3480156106e9575f80fd5b50610305611355565b3480156106fd575f80fd5b506103056113f7565b348015610711575f80fd5b5061030561072036600461302c565b61159c565b348015610730575f80fd5b50600b5461039b90600160b01b900460ff1681565b348015610750575f80fd5b5061030561162d565b348015610764575f80fd5b50610305610773366004613110565b6116cf565b348015610783575f80fd5b5061039b61079236600461302c565b60076020525f908152604090205460ff1681565b3480156107b1575f80fd5b506005546001600160a01b0316610364565b3480156107ce575f80fd5b5060408051808201909152600e81526d5472756d7020627574205065706560901b602082015261031b565b348015610804575f80fd5b5061031b61186c565b348015610818575f80fd5b5061082261271081565b6040516001600160401b039091168152602001610328565b348015610845575f80fd5b5061039b610854366004613081565b61187b565b348015610864575f80fd5b50600a54610364906001600160a01b031681565b348015610883575f80fd5b5061039b610892366004613081565b6118f5565b3480156108a2575f80fd5b506103647f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156108d5575f80fd5b5061039b6108e436600461302c565b60086020525f908152604090205460ff1681565b348015610903575f80fd5b50610305610912366004613186565b611902565b348015610922575f80fd5b506103bb60115481565b348015610937575f80fd5b50600b5461039b90600160b81b900460ff1681565b348015610957575f80fd5b50600e54610543906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b348015610995575f80fd5b506103056109a4366004613186565b611a2c565b3480156109b4575f80fd5b506103bb60105481565b3480156109c9575f80fd5b506103bb6109d83660046131bb565b611b71565b3480156109e8575f80fd5b50600c54610a07906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610328565b348015610a32575f80fd5b50610305610a4136600461302c565b611b9b565b348015610a51575f80fd5b50610305611c85565b348015610a65575f80fd5b50610305611cda565b6001600160a01b038116610ac95760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b600a546001600160a01b0316331480610aec5750600b546001600160a01b031633145b610b225760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610ac0565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8a91906131ec565b600b54909150610ba59083906001600160a01b031683611d60565b5050565b606060038054610bb890613203565b80601f0160208091040260200160405190810160405280929190818152602001828054610be490613203565b8015610c2f5780601f10610c0657610100808354040283529160200191610c2f565b820191905f5260205f20905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b5f33610c46818585611db7565b60019150505b92915050565b6005546001600160a01b03163314610c7c5760405162461bcd60e51b8152600401610ac09061323b565b620186a0610c8960025490565b610c94906001613284565b610c9e91906132af565b811015610d0b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ac0565b6103e8610d1760025490565b610d22906005613284565b610d2c91906132af565b811115610d985760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ac0565b601155565b6005546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b038116610e0c5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610ac0565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610e3b858285611eda565b610e46858585611f4c565b506001949350505050565b6005546001600160a01b03163314610e7b5760405162461bcd60e51b8152600401610ac09061323b565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610eb584866132c2565b610ebf91906132c2565b6001600160401b031660608201819052611770101580610ef95750600e5460608201516001600160401b03600160c01b9092048216911611155b610f3a5760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610ac0565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600e8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b6005546001600160a01b031633146110185760405162461bcd60e51b8152600401610ac09061323b565b6110246012600a6133c4565b6103e861103060025490565b61103b906001613284565b61104591906132af565b61104f91906132af565b816001600160801b031610156110915760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610ac0565b61109d6012600a6133c4565b6110b0906001600160801b038316613284565b600c80546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610c468185856111188383611b71565b61112291906133d2565b611db7565b6005546001600160a01b031633146111515760405162461bcd60e51b8152600401610ac09061323b565b61115d6012600a6133c4565b6103e861116960025490565b611174906001613284565b61117e91906132af565b61118891906132af565b816001600160801b031610156111ca5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610ac0565b6111d66012600a6133c4565b6111e9906001600160801b038316613284565b600c80546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020016110fb565b6005546001600160a01b031633146112655760405162461bcd60e51b8152600401610ac09061323b565b6126ac816001600160801b031611156112c05760405162461bcd60e51b815260206004820152601c60248201527f4c61756e6368207461782063616e6e6f742065786365656420393925000000006044820152606401610ac0565b601380546001600160801b0319166001600160801b0392909216919091179055565b6005546001600160a01b0316331461130c5760405162461bcd60e51b8152600401610ac09061323b565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461137f5760405162461bcd60e51b8152600401610ac09061323b565b600b805460ff60b01b19169055604080518082019091525f80825260208201525f6113a960025490565b6001600160801b03811680845260208401819052600160801b810217600c556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b600b546001600160a01b0316331461143b5760405162461bcd60e51b81526020600482015260076024820152662737ba103232bb60c91b6044820152606401610ac0565b60408051608081018252600d546001600160401b03808216808452600160401b8304821660208501819052600160801b8404831695850195909552600160c01b90920416606083015290919082906114949083906132c2565b6001600160401b039081169091525f6020848101919091528351600d80546040808801516060808a01519588166001600160c01b031990941693909317600160801b9188168202176001600160c01b0316600160c01b9588168602179093558051608081018252600e54808816808352600160401b8204891697830188905294810488169282019290925293900490941693820193909352925090829061153c9083906132c2565b6001600160401b039081169091525f60208401528251600e805460408601516060909601519284166001600160c01b031990911617600160801b95841695909502949094176001600160c01b0316600160c01b9190921602179091555050565b6005546001600160a01b031633146115c65760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b03811661160b5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610ac0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116575760405162461bcd60e51b8152600401610ac09061323b565b600b54600160a01b900460ff16156116b15760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610ac0565b600b805460ff60a01b1916600160a01b179055436010819055601255565b6005546001600160a01b031633146116f95760405162461bcd60e51b8152600401610ac09061323b565b604080516080810182525f60608201526001600160401b0385811682528481169282019290925290821660208201528161173384866132c2565b61173d91906132c2565b6001600160401b0316606082018190526117701015806117775750600d5460608201516001600160401b03600160c01b9092048216911611155b6117b85760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772036302560701b6044820152606401610ac0565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600d8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b606060048054610bb890613203565b5f33816118888286611b71565b9050838110156118e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ac0565b610e468286868403611db7565b5f33610c46818585611f4c565b6005546001600160a01b0316331461192c5760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b0382166119715760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610ac0565b306001600160a01b038316036119c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610ac0565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b03163314611a565760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b038216611a9b5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610ac0565b80611b16577f000000000000000000000000136de0af045de8c7c8ec5fa50be81c11492cf8bc6001600160a01b0316826001600160a01b031603611b165760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610ac0565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611a20565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610ac09061323b565b6001600160a01b038116611c2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600b546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611ccf576040519150601f19603f3d011682016040523d82523d5f602084013e611cd4565b606091505b50505050565b6005546001600160a01b03163314611d045760405162461bcd60e51b8152600401610ac09061323b565b600b54600160b81b900460ff16611d515760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610ac0565b600b805460ff60b81b19169055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611db290849061200c565b505050565b6001600160a01b038316611e195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac0565b6001600160a01b038216611e7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac0565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611ee58484611b71565b90505f198114611cd45781811015611f3f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ac0565b611cd48484848403611db7565b6001600160a01b0383165f9081526006602052604090205460ff16158015611f8c57506001600160a01b0382165f9081526006602052604090205460ff16155b1561200157600b54600160a01b900460ff16611fdf5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610ac0565b611fea8383836120dd565b611ff490826133e5565b9050612001838383612549565b611db28383836128e1565b5f612060826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a849092919063ffffffff16565b805190915015611db2578080602001905181019061207e91906133f8565b611db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ac0565b601154305f9081526020819052604081205490911115801561211757506001600160a01b0384165f9081526008602052604090205460ff16155b8015612131575043601254600261212e91906133d2565b11155b1561213e5761213e612a9a565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600890529182205460ff16156121ca575060408051608081018252600e546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b90049091166060820152612233565b6001600160a01b0386165f9081526008602052604090205460ff1615612233575060408051608081018252600d546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b0316156125375760408051608081018252600f546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff1615156060820152601054439003612307576001600160a01b0387165f9081526008602052604090205460ff16806122d657506001600160a01b0386165f9081526008602052604090205460ff165b1561230257601354612710906122f5906001600160801b031687613284565b6122ff91906132af565b92505b6123ad565b6010546123159060016133d2565b43148061232e575060105461232b9060026133d2565b43145b15612384576001600160a01b0387165f9081526008602052604090205460ff168061237057506001600160a01b0386165f9081526008602052604090205460ff165b15612302576127106122f586610bb8613284565b6060820151612710906123a0906001600160401b031687613284565b6123aa91906132af565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b0316856123d99190613413565b6123e3919061343c565b6123ed919061343c565b816020018181516123fe9190613469565b6001600160501b031690525060608201518251633b9aca00916001600160401b039081169161242e911686613413565b612438919061343c565b612442919061343c565b81518290612451908390613469565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b0390811691612484911686613413565b61248e919061343c565b612498919061343c565b816040018181516124a99190613469565b6001600160501b039081169091528251600f80546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b031990941695909616949094179190911716929092171790555061253587306001600160801b0386166128e1565b505b506001600160801b0316949350505050565b600b54600160b01b900460ff1615611db2576001600160a01b038281165f908152600760209081526040808320548383528184205482518084018452600c546001600160801b038082168352600160801b90910416818601529589168552600890935292205460ff9283169391921680156125c2575082155b156126635780516001600160801b031684111561260b5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610ac0565b60208101516001600160801b031661262383866133d2565b111561265e5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610ac0565b612743565b6001600160a01b0385165f9081526008602052604090205460ff1680156126a257506001600160a01b0386165f9081526007602052604090205460ff16155b156126eb5780516001600160801b031684111561265e5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610ac0565b826127435760208101516001600160801b031661270883866133d2565b11156127435760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610ac0565b600b54600160b81b900460ff16156128d9577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b0316141580156127c957507f000000000000000000000000136de0af045de8c7c8ec5fa50be81c11492cf8bc6001600160a01b0316856001600160a01b031614155b156128d957325f9081526009602052604090205443906127ea9060066133d2565b106128285760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610ac0565b6001600160a01b038086165f9081526009602052604080822043908190553283529120557f000000000000000000000000136de0af045de8c7c8ec5fa50be81c11492cf8bc8116908716036128d957326001600160a01b038616146128d95760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b6064820152608401610ac0565b505050505050565b6001600160a01b0383166129455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac0565b6001600160a01b0382166129a75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac0565b6001600160a01b0383165f9081526020819052604090205481811015612a1e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ac0565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6060612a9284845f85612d89565b949350505050565b305f9081526020819052604081205460408051608081018252600f546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f9291612b0791613469565b612b119190613469565b6001600160501b03169050821580612b27575080155b15612b3157505050565b601154612b3f90600a613284565b831115612b5757601154612b5490600a613284565b92505b60208201516001600160501b031615612c4f575f8183602001516001600160501b031685612b859190613284565b612b8f91906132af565b9050612bbc307f000000000000000000000000136de0af045de8c7c8ec5fa50be81c11492cf8bc836128e1565b7f000000000000000000000000136de0af045de8c7c8ec5fa50be81c11492cf8bc6001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612c14575f80fd5b505af1925050508015612c25575060015b50612c3081856133e5565b935082602001516001600160501b031682612c4b91906133e5565b9150505b8215612d4d57612c5e83612e60565b604082015147905f906001600160501b031615612cec57600b5460408501516001600160a01b03909116908490612c9e906001600160501b031685613284565b612ca891906132af565b6040515f81818185875af1925050503d805f8114612ce1576040519150601f19603f3d011682016040523d82523d5f602084013e612ce6565b606091505b50909150505b4791508115612d4a57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f8114612d3f576040519150601f19603f3d011682016040523d82523d5f602084013e612d44565b606091505b50909150505b50505b505f602082018190528082526040820152600f80546060909201511515600160f01b026001600160f81b03199092169190911790555043601255565b606082471015612dea5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ac0565b5f80866001600160a01b03168587604051612e059190613488565b5f6040518083038185875af1925050503d805f8114612e3f576040519150601f19603f3d011682016040523d82523d5f602084013e612e44565b606091505b5091509150612e5587838387612f74565b979650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612e9357612e9361349e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612ee757612ee761349e565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612f4b9085905f908690309042906004016134b2565b5f604051808303815f87803b158015612f62575f80fd5b505af11580156128d9573d5f803e3d5ffd5b60608315612fe25782515f03612fdb576001600160a01b0385163b612fdb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ac0565b5081612a92565b612a928383815115612ff75781518083602001fd5b8060405162461bcd60e51b8152600401610ac0919061304c565b80356001600160a01b0381168114613027575f80fd5b919050565b5f6020828403121561303c575f80fd5b61304582613011565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613092575f80fd5b61309b83613011565b946020939093013593505050565b5f602082840312156130b9575f80fd5b5035919050565b5f805f606084860312156130d2575f80fd5b6130db84613011565b92506130e960208501613011565b929592945050506040919091013590565b80356001600160401b0381168114613027575f80fd5b5f805f60608486031215613122575f80fd5b61312b846130fa565b9250613139602085016130fa565b9150613147604085016130fa565b90509250925092565b5f60208284031215613160575f80fd5b81356001600160801b0381168114613045575f80fd5b8015158114613183575f80fd5b50565b5f8060408385031215613197575f80fd5b6131a083613011565b915060208301356131b081613176565b809150509250929050565b5f80604083850312156131cc575f80fd5b6131d583613011565b91506131e360208401613011565b90509250929050565b5f602082840312156131fc575f80fd5b5051919050565b600181811c9082168061321757607f821691505b60208210810361323557634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c4c57610c4c613270565b634e487b7160e01b5f52601260045260245ffd5b5f826132bd576132bd61329b565b500490565b6001600160401b038181168382160190811115610c4c57610c4c613270565b6001815b600184111561331c5780850481111561330057613300613270565b600184161561330e57908102905b60019390931c9280026132e5565b935093915050565b5f8261333257506001610c4c565b8161333e57505f610c4c565b8160018114613354576002811461335e5761337a565b6001915050610c4c565b60ff84111561336f5761336f613270565b50506001821b610c4c565b5060208310610133831016604e8410600b841016171561339d575081810a610c4c565b6133a95f1984846132e1565b805f19048211156133bc576133bc613270565b029392505050565b5f61304560ff841683613324565b80820180821115610c4c57610c4c613270565b81810381811115610c4c57610c4c613270565b5f60208284031215613408575f80fd5b815161304581613176565b6001600160801b03818116838216029081169081811461343557613435613270565b5092915050565b5f6001600160801b038316806134545761345461329b565b806001600160801b0384160491505092915050565b6001600160501b038181168382160190811115610c4c57610c4c613270565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156135025783516001600160a01b03168352602093840193909201916001016134db565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122070ab1412dacf491ee47fd0bf96deb823138394e08514913cc9bbf6f19f49ac3064736f6c634300081a0033

Deployed Bytecode Sourcemap

13358:14849:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27148:378;;;;;;;;;;-1:-1:-1;27148:378:0;;;;;:::i;:::-;;:::i;:::-;;2482:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13842:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;989:32:1;;;971:51;;959:2;944:18;13842:37:0;806:222:1;3414:201:0;;;;;;;;;;-1:-1:-1;3414:201:0;;;;;:::i;:::-;;:::i;:::-;;;1503:14:1;;1496:22;1478:41;;1466:2;1451:18;3414:201:0;1338:187:1;2803:108:0;;;;;;;;;;-1:-1:-1;2891:12:0;;2803:108;;;1676:25:1;;;1664:2;1649:18;2803:108:0;1530:177:1;24444:346:0;;;;;;;;;;-1:-1:-1;24444:346:0;;;;;:::i;:::-;;:::i;27534:173::-;;;;;;;;;;-1:-1:-1;27534:173:0;;;;;:::i;:::-;;:::i;3623:261::-;;;;;;;;;;-1:-1:-1;3623:261:0;;;;;:::i;:::-;;:::i;25306:504::-;;;;;;;;;;-1:-1:-1;25306:504:0;;;;;:::i;:::-;;:::i;2702:93::-;;;;;;;;;;-1:-1:-1;2702:93:0;;2785:2;2973:36:1;;2961:2;2946:18;2702:93:0;2831:184:1;23804:322:0;;;;;;;;;;-1:-1:-1;23804:322:0;;;;;:::i;:::-;;:::i;3892:238::-;;;;;;;;;;-1:-1:-1;3892:238:0;;;;;:::i;:::-;;:::i;13716:25::-;;;;;;;;;;-1:-1:-1;13716:25:0;;;;-1:-1:-1;;;;;13716:25:0;;;14788:32;;;;;;;;;;;;;;;;13748:31;;;;;;;;;;;;;;;14530:19;;;;;;;;;;-1:-1:-1;14530:19:0;;;;-1:-1:-1;;;;;14530:19:0;;;;-1:-1:-1;;;14530:19:0;;;;;-1:-1:-1;;;14530:19:0;;;;;-1:-1:-1;;;14530:19:0;;;;;;;;;-1:-1:-1;;;;;3775:31:1;;;3757:50;;3843:31;;;3838:2;3823:18;;3816:59;3911:31;;;3891:18;;;3884:59;;;;3979:31;;;3974:2;3959:18;;3952:59;3744:3;3729:19;14530::0;3534:483:1;13905:26:0;;;;;;;;;;-1:-1:-1;13905:26:0;;;;-1:-1:-1;;;13905:26:0;;;;;;13417:46;;;;;;;;;;-1:-1:-1;13417:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13938:34;;;;;;;;;;-1:-1:-1;13938:34:0;;;;-1:-1:-1;;;13938:34:0;;;;;;24134:302;;;;;;;;;;-1:-1:-1;24134:302:0;;;;;:::i;:::-;;:::i;14583:32::-;;;;;;;;;;-1:-1:-1;14583:32:0;;;;-1:-1:-1;;;;;14583:32:0;;;;-1:-1:-1;;;14583:32:0;;;;;-1:-1:-1;;;14583:32:0;;;;-1:-1:-1;;;14583:32:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4259:35:1;;;4241:54;;4331:35;;;4326:2;4311:18;;4304:63;4403:35;;4398:2;4383:18;;4376:63;4482:14;;4475:22;4470:2;4455:18;;4448:50;4228:3;4213:19;;4022:482;27884:176:0;;;;;;;;;;-1:-1:-1;27884:176:0;;;;;:::i;:::-;;:::i;2919:127::-;;;;;;;;;;-1:-1:-1;2919:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3020:18:0;2993:7;3020:18;;;;;;;;;;;;2919:127;7050:150;;;;;;;;;;;;;:::i;26483:321::-;;;;;;;;;;;;;:::i;25818:417::-;;;;;;;;;;;;;:::i;27715:161::-;;;;;;;;;;-1:-1:-1;27715:161:0;;;;;:::i;:::-;;:::i;13979:26::-;;;;;;;;;;-1:-1:-1;13979:26:0;;;;-1:-1:-1;;;13979:26:0;;;;;;26249:226;;;;;;;;;;;;;:::i;24798:500::-;;;;;;;;;;-1:-1:-1;24798:500:0;;;;;:::i;:::-;;:::i;13470:48::-;;;;;;;;;;-1:-1:-1;13470:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6836:79;;;;;;;;;;-1:-1:-1;6901:6:0;;-1:-1:-1;;;;;6901:6:0;6836:79;;28068:99;;;;;;;;;;-1:-1:-1;28136:23:0;;;;;;;;;;;;-1:-1:-1;;;28136:23:0;;;;28068:99;;2590:104;;;;;;;;;;;;;:::i;14642:42::-;;;;;;;;;;;;14679:5;14642:42;;;;;-1:-1:-1;;;;;4671:31:1;;;4653:50;;4641:2;4626:18;14642:42:0;4509:200:1;4140:436:0;;;;;;;;;;-1:-1:-1;4140:436:0;;;;;:::i;:::-;;:::i;13678:31::-;;;;;;;;;;-1:-1:-1;13678:31:0;;;;-1:-1:-1;;;;;13678:31:0;;;3054:193;;;;;;;;;;-1:-1:-1;3054:193:0;;;;;:::i;:::-;;:::i;13786:29::-;;;;;;;;;;;;;;;13525:41;;;;;;;;;;-1:-1:-1;13525:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23117:319;;;;;;;;;;-1:-1:-1;23117:319:0;;;;;:::i;:::-;;:::i;14751:30::-;;;;;;;;;;;;;;;;14012:39;;;;;;;;;;-1:-1:-1;14012:39:0;;;;-1:-1:-1;;;14012:39:0;;;;;;14556:20;;;;;;;;;;-1:-1:-1;14556:20:0;;;;-1:-1:-1;;;;;14556:20:0;;;;-1:-1:-1;;;14556:20:0;;;;;-1:-1:-1;;;14556:20:0;;;;;-1:-1:-1;;;14556:20:0;;;;;23444:352;;;;;;;;;;-1:-1:-1;23444:352:0;;;;;:::i;:::-;;:::i;14693:26::-;;;;;;;;;;;;;;;;3255:151;;;;;;;;;;-1:-1:-1;3255:151:0;;;;;:::i;:::-;;:::i;14499:24::-;;;;;;;;;;-1:-1:-1;14499:24:0;;;;-1:-1:-1;;;;;14499:24:0;;;;-1:-1:-1;;;14499:24:0;;;;;;;;;-1:-1:-1;;;;;5614:47:1;;;5596:66;;5698:47;;;;5693:2;5678:18;;5671:75;5569:18;14499:24:0;5422:330:1;7208:244:0;;;;;;;;;;-1:-1:-1;7208:244:0;;;;;:::i;:::-;;:::i;26990:150::-;;;;;;;;;;;;;:::i;26814:158::-;;;;;;;;;;;;;:::i;27148:378::-;-1:-1:-1;;;;;27214:20:0;;27206:59;;;;-1:-1:-1;;;27206:59:0;;5959:2:1;27206:59:0;;;5941:21:1;5998:2;5978:18;;;5971:30;6037:28;6017:18;;;6010:56;6083:18;;27206:59:0;;;;;;;;;27298:16;;-1:-1:-1;;;;;27298:16:0;27284:10;:30;;:58;;-1:-1:-1;27332:10:0;;-1:-1:-1;;;;;27332:10:0;27318;:24;27284:58;27276:78;;;;-1:-1:-1;;;27276:78:0;;6314:2:1;27276:78:0;;;6296:21:1;6353:1;6333:18;;;6326:29;-1:-1:-1;;;6371:18:1;;;6364:37;6418:18;;27276:78:0;6112:330:1;27276:78:0;27392:39;;-1:-1:-1;;;27392:39:0;;27425:4;27392:39;;;971:51:1;27365:24:0;;-1:-1:-1;;;;;27392:24:0;;;;;944:18:1;;27392:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27488:10;;27365:66;;-1:-1:-1;27442:76:0;;27472:6;;-1:-1:-1;;;;;27488:10:0;27365:66;27442:22;:76::i;:::-;27195:331;27148:378;:::o;2482:100::-;2536:13;2569:5;2562:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2482:100;:::o;3414:201::-;3497:4;873:10;3553:32;873:10;3569:7;3578:6;3553:8;:32::i;:::-;3603:4;3596:11;;;3414:201;;;;;:::o;24444:346::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;24565:6:::1;24544:13;2891:12:::0;;;2803:108;24544:13:::1;:17;::::0;24560:1:::1;24544:17;:::i;:::-;24543:28;;;;:::i;:::-;24530:9;:41;;24522:107;;;::::0;-1:-1:-1;;;24522:107:0;;8146:2:1;24522:107:0::1;::::0;::::1;8128:21:1::0;8185:2;8165:18;;;8158:30;8224:34;8204:18;;;8197:62;-1:-1:-1;;;8275:18:1;;;8268:51;8336:19;;24522:107:0::1;7944:417:1::0;24522:107:0::1;24683:4;24662:13;2891:12:::0;;;2803:108;24662:13:::1;:17;::::0;24678:1:::1;24662:17;:::i;:::-;24661:26;;;;:::i;:::-;24648:9;:39;;24640:104;;;::::0;-1:-1:-1;;;24640:104:0;;8568:2:1;24640:104:0::1;::::0;::::1;8550:21:1::0;8607:2;8587:18;;;8580:30;8646:34;8626:18;;;8619:62;-1:-1:-1;;;8697:18:1;;;8690:50;8757:19;;24640:104:0::1;8366:416:1::0;24640:104:0::1;24755:15;:27:::0;24444:346::o;27534:173::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27622:22:0;::::1;27614:47;;;::::0;-1:-1:-1;;;27614:47:0;;8989:2:1;27614:47:0::1;::::0;::::1;8971:21:1::0;9028:2;9008:18;;;9001:30;-1:-1:-1;;;9047:18:1;;;9040:42;9099:18;;27614:47:0::1;8787:336:1::0;27614:47:0::1;27672:16;:27:::0;;-1:-1:-1;;;;;;27672:27:0::1;-1:-1:-1::0;;;;;27672:27:0;;;::::1;::::0;;;::::1;::::0;;27534:173::o;3623:261::-;3720:4;873:10;3778:38;3794:4;873:10;3809:6;3778:15;:38::i;:::-;3827:27;3837:4;3843:2;3847:6;3827:9;:27::i;:::-;-1:-1:-1;3872:4:0;;3623:261;-1:-1:-1;;;;3623:261:0:o;25306:504::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;25448:34:0;;::::1;::::0;;25493;;::::1;-1:-1:-1::0;;;25493:34:0;;;;25538:22;;::::1;-1:-1:-1::0;;;25538:22:0;;25588:29:::1;25493:34:::0;25448;25588:29:::1;:::i;:::-;:39;;;;:::i;:::-;-1:-1:-1::0;;;;;25571:56:0::1;:14;::::0;::::1;:56:::0;;;25665:4:::1;-1:-1:-1::0;25646:23:0::1;::::0;:61:::1;;-1:-1:-1::0;25691:7:0::1;:16:::0;25673:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;25691:16:0;;::::1;::::0;::::1;25673:34:::0;::::1;;;25646:61;25638:92;;;::::0;-1:-1:-1;;;25638:92:0;;9526:2:1;25638:92:0::1;::::0;::::1;9508:21:1::0;9565:2;9545:18;;;9538:30;-1:-1:-1;;;9584:18:1;;;9577:48;9642:18;;25638:92:0::1;9324:342:1::0;25638:92:0::1;25761:14;::::0;::::1;::::0;25746:30:::1;::::0;-1:-1:-1;;;;;4671:31:1;;;4653:50;;25746:30:0::1;::::0;4641:2:1;4626:18;25746:30:0::1;;;;;;;25787:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;25787:15:0;;::::1;-1:-1:-1::0;;;25787:15:0::1;-1:-1:-1::0;;;;;25787:15:0;;::::1;-1:-1:-1::0;;;25787:15:0::1;::::0;;;;-1:-1:-1;;;;;25787:15:0;;::::1;-1:-1:-1::0;;;25787:15:0::1;-1:-1:-1::0;;;;;;25787:15:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;25306:504:0:o;23804:322::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;23944:14:::1;2785:2:::0;23944::::1;:14;:::i;:::-;23937:4;23917:13;2891:12:::0;;;2803:108;23917:13:::1;:17;::::0;23933:1:::1;23917:17;:::i;:::-;:24;;;;:::i;:::-;23916:43;;;;:::i;:::-;23898:14;-1:-1:-1::0;;;;;23898:61:0::1;;;23890:81;;;::::0;-1:-1:-1;;;23890:81:0;;11511:2:1;23890:81:0::1;::::0;::::1;11493:21:1::0;11550:1;11530:18;;;11523:29;-1:-1:-1;;;11568:18:1;;;11561:37;11615:18;;23890:81:0::1;11309:330:1::0;23890:81:0::1;24036:14;2785:2:::0;24036::::1;:14;:::i;:::-;24018:33;::::0;-1:-1:-1;;;;;24018:33:0;::::1;;:::i;:::-;23982:8;:70:::0;;-1:-1:-1;;;;;;23982:70:0::1;-1:-1:-1::0;;;;;23982:70:0;;;::::1;::::0;;::::1;::::0;;24068:50:::1;::::0;11790:66:1;;;24068:50:0::1;::::0;11778:2:1;11763:18;24068:50:0::1;;;;;;;;23804:322:::0;:::o;3892:238::-;3980:4;873:10;4036:64;873:10;4052:7;4089:10;4061:25;873:10;4052:7;4061:9;:25::i;:::-;:38;;;;:::i;:::-;4036:8;:64::i;24134:302::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;24269:14:::1;2785:2:::0;24269::::1;:14;:::i;:::-;24262:4;24242:13;2891:12:::0;;;2803:108;24242:13:::1;:17;::::0;24258:1:::1;24242:17;:::i;:::-;:24;;;;:::i;:::-;24241:43;;;;:::i;:::-;24223:14;-1:-1:-1::0;;;;;24223:61:0::1;;;24215:81;;;::::0;-1:-1:-1;;;24215:81:0;;11511:2:1;24215:81:0::1;::::0;::::1;11493:21:1::0;11550:1;11530:18;;;11523:29;-1:-1:-1;;;11568:18:1;;;11561:37;11615:18;;24215:81:0::1;11309:330:1::0;24215:81:0::1;24356:14;2785:2:::0;24356::::1;:14;:::i;:::-;24338:33;::::0;-1:-1:-1;;;;;24338:33:0;::::1;;:::i;:::-;24307:8;:65:::0;;-1:-1:-1;;;;;24307:65:0;;::::1;-1:-1:-1::0;;;24307:65:0;;::::1;::::0;::::1;;::::0;;;;24388:40:::1;::::0;24407:20;;;::::1;;11790:66:1::0;;24388:40:0::1;::::0;11778:2:1;11763:18;24388:40:0::1;11644:218:1::0;27884:176:0;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;27970:4:::1;27960:6;-1:-1:-1::0;;;;;27960:14:0::1;;;27952:55;;;::::0;-1:-1:-1;;;27952:55:0;;12199:2:1;27952:55:0::1;::::0;::::1;12181:21:1::0;12238:2;12218:18;;;12211:30;12277;12257:18;;;12250:58;12325:18;;27952:55:0::1;11997:352:1::0;27952:55:0::1;28034:9;:18:::0;;-1:-1:-1;;;;;;28034:18:0::1;-1:-1:-1::0;;;;;28034:18:0;;;::::1;::::0;;;::::1;::::0;;27884:176::o;7050:150::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;7143:6:::1;::::0;7122:40:::1;::::0;7159:1:::1;::::0;-1:-1:-1;;;;;7143:6:0::1;::::0;7122:40:::1;::::0;7159:1;;7122:40:::1;7173:6;:19:::0;;-1:-1:-1;;;;;;7173:19:0::1;::::0;;7050:150::o;26483:321::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;26537:7:::1;:15:::0;;-1:-1:-1;;;;26537:15:0::1;::::0;;-1:-1:-1;;;;;;;;;26547:5:0::1;-1:-1:-1::0;;;;;;;26599:14:0::1;26616:13;2891:12:::0;;;2803:108;26616:13:::1;-1:-1:-1::0;;;;;26640:44:0;::::1;::::0;;;26695:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;26745:20:0;::::1;;:8;:20:::0;26781:15:::1;::::0;26599:30;;-1:-1:-1;26781:15:0::1;::::0;26640:26:::1;::::0;26781:15:::1;26526:278;;26483:321::o:0;25818:417::-;25886:10;;-1:-1:-1;;;;;25886:10:0;25872;:24;25864:44;;;;-1:-1:-1;;;25864:44:0;;6314:2:1;25864:44:0;;;6296:21:1;6353:1;6333:18;;;6326:29;-1:-1:-1;;;6371:18:1;;;6364:37;6418:18;;25864:44:0;6112:330:1;25864:44:0;25929:30;;;;;;;;25953:6;25929:30;-1:-1:-1;;;;;25929:30:0;;;;;;-1:-1:-1;;;25929:30:0;;;;;;;;;;-1:-1:-1;;;25929:30:0;;;;;;;;;;;-1:-1:-1;;;25929:30:0;;;;;;;;;;;;;25970:40;;25929:30;;25970:40;:::i;:::-;-1:-1:-1;;;;;25970:40:0;;;;;;26039:1;26021:15;;;;:19;;;;26051:17;;:6;:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26051:17:0;;;;;;;-1:-1:-1;;;26051:17:0;;;;;;-1:-1:-1;;;;;26051:17:0;-1:-1:-1;;;26051:17:0;;;;;;;;;26081:32;;;;;;;26106:7;26081:32;;;;;;;-1:-1:-1;;;26081:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26081:32:0;;;26124:42;;26081:32;;26124:42;:::i;:::-;-1:-1:-1;;;;;26124:42:0;;;;;;26196:1;26177:16;;;:20;26208:19;;:7;:19;;;;;;;;;;;;;;-1:-1:-1;;;;;;26208:19:0;;;;-1:-1:-1;;;26208:19:0;;;;;;;;;;;-1:-1:-1;;;;;26208:19:0;-1:-1:-1;;;26208:19:0;;;;;;;;;-1:-1:-1;;25818:417:0:o;27715:161::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27797:22:0;::::1;27789:47;;;::::0;-1:-1:-1;;;27789:47:0;;8989:2:1;27789:47:0::1;::::0;::::1;8971:21:1::0;9028:2;9008:18;;;9001:30;-1:-1:-1;;;9047:18:1;;;9040:42;9099:18;;27789:47:0::1;8787:336:1::0;27789:47:0::1;27847:10;:21:::0;;-1:-1:-1;;;;;;27847:21:0::1;-1:-1:-1::0;;;;;27847:21:0;;;::::1;::::0;;;::::1;::::0;;27715:161::o;26249:226::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;26313:14:::1;::::0;-1:-1:-1;;;26313:14:0;::::1;;;26312:15;26304:51;;;::::0;-1:-1:-1;;;26304:51:0;;12556:2:1;26304:51:0::1;::::0;::::1;12538:21:1::0;12595:2;12575:18;;;12568:30;12634:25;12614:18;;;12607:53;12677:18;;26304:51:0::1;12354:347:1::0;26304:51:0::1;26366:14;:21:::0;;-1:-1:-1;;;;26366:21:0::1;-1:-1:-1::0;;;26366:21:0::1;::::0;;26412:12:::1;26398:11;:26:::0;;;26435:17:::1;:32:::0;26249:226::o;24798:500::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;24939:34:0;;::::1;::::0;;24984;;::::1;-1:-1:-1::0;;;24984:34:0;;;;25029:22;;::::1;-1:-1:-1::0;;;25029:22:0;;25079:29:::1;24984:34:::0;24939;25079:29:::1;:::i;:::-;:39;;;;:::i;:::-;-1:-1:-1::0;;;;;25062:56:0::1;:14;::::0;::::1;:56:::0;;;25156:4:::1;-1:-1:-1::0;25137:23:0::1;::::0;:60:::1;;-1:-1:-1::0;25182:6:0::1;:15:::0;25164:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;25182:15:0;;::::1;::::0;::::1;25164:33:::0;::::1;;;25137:60;25129:91;;;::::0;-1:-1:-1;;;25129:91:0;;9526:2:1;25129:91:0::1;::::0;::::1;9508:21:1::0;9565:2;9545:18;;;9538:30;-1:-1:-1;;;9584:18:1;;;9577:48;9642:18;;25129:91:0::1;9324:342:1::0;25129:91:0::1;25250:14;::::0;::::1;::::0;25236:29:::1;::::0;-1:-1:-1;;;;;4671:31:1;;;4653:50;;25236:29:0::1;::::0;4641:2:1;4626:18;25236:29:0::1;;;;;;;25276:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;25276:14:0;;::::1;-1:-1:-1::0;;;25276:14:0::1;-1:-1:-1::0;;;;;25276:14:0;;::::1;-1:-1:-1::0;;;25276:14:0::1;::::0;;;;-1:-1:-1;;;;;25276:14:0;;::::1;-1:-1:-1::0;;;25276:14:0::1;-1:-1:-1::0;;;;;;25276:14:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;24798:500:0:o;2590:104::-;2646:13;2679:7;2672:14;;;;;:::i;4140:436::-;4233:4;873:10;4233:4;4316:25;873:10;4333:7;4316:9;:25::i;:::-;4289:52;;4380:15;4360:16;:35;;4352:85;;;;-1:-1:-1;;;4352:85:0;;12908:2:1;4352:85:0;;;12890:21:1;12947:2;12927:18;;;12920:30;12986:34;12966:18;;;12959:62;-1:-1:-1;;;13037:18:1;;;13030:35;13082:19;;4352:85:0;12706:401:1;4352:85:0;4473:60;4482:5;4489:7;4517:15;4498:16;:34;4473:8;:60::i;3054:193::-;3133:4;873:10;3189:28;873:10;3206:2;3210:6;3189:9;:28::i;23117:319::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23215:22:0;::::1;23207:47;;;::::0;-1:-1:-1;;;23207:47:0;;13314:2:1;23207:47:0::1;::::0;::::1;13296:21:1::0;13353:2;13333:18;;;13326:30;-1:-1:-1;;;13372:18:1;;;13365:42;13424:18;;23207:47:0::1;13112:336:1::0;23207:47:0::1;23293:4;-1:-1:-1::0;;;;;23273:25:0;::::1;::::0;23265:62:::1;;;::::0;-1:-1:-1;;;23265:62:0;;13655:2:1;23265:62:0::1;::::0;::::1;13637:21:1::0;13694:2;13674:18;;;13667:30;13733:26;13713:18;;;13706:54;13777:18;;23265:62:0::1;13453:348:1::0;23265:62:0::1;-1:-1:-1::0;;;;;23338:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;23338:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23390:38;;13974:51:1;;;14041:18;;;14034:50;23390:38:0::1;::::0;13947:18:1;23390:38:0::1;;;;;;;;23117:319:::0;;:::o;23444:352::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23544:22:0;::::1;23536:47;;;::::0;-1:-1:-1;;;23536:47:0;;13314:2:1;23536:47:0::1;::::0;::::1;13296:21:1::0;13353:2;13333:18;;;13326:30;-1:-1:-1;;;13372:18:1;;;13365:42;13424:18;;23536:47:0::1;13112:336:1::0;23536:47:0::1;23598:9;23594:90;;23643:6;-1:-1:-1::0;;;;;23631:18:0::1;:8;-1:-1:-1::0;;;;;23631:18:0::1;::::0;23623:49:::1;;;::::0;-1:-1:-1;;;23623:49:0;;14297:2:1;23623:49:0::1;::::0;::::1;14279:21:1::0;14336:2;14316:18;;;14309:30;-1:-1:-1;;;14355:18:1;;;14348:48;14413:18;;23623:49:0::1;14095:342:1::0;23623:49:0::1;-1:-1:-1::0;;;;;23694:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;23694:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23748:40;;13974:51:1;;;14041:18;;;14034:50;23748:40:0::1;::::0;13947:18:1;23748:40:0::1;13806:284:1::0;3255:151:0;-1:-1:-1;;;;;3371:18:0;;;3344:7;3371:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3255:151::o;7208:244::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7297:22:0;::::1;7289:73;;;::::0;-1:-1:-1;;;7289:73:0;;14644:2:1;7289:73:0::1;::::0;::::1;14626:21:1::0;14683:2;14663:18;;;14656:30;14722:34;14702:18;;;14695:62;-1:-1:-1;;;14773:18:1;;;14766:36;14819:19;;7289:73:0::1;14442:402:1::0;7289:73:0::1;7399:6;::::0;7378:38:::1;::::0;-1:-1:-1;;;;;7378:38:0;;::::1;::::0;7399:6:::1;::::0;7378:38:::1;::::0;7399:6:::1;::::0;7378:38:::1;7427:6;:17:::0;;-1:-1:-1;;;;;;7427:17:0::1;-1:-1:-1::0;;;;;7427:17:0;;;::::1;::::0;;;::::1;::::0;;7208:244::o;26990:150::-;27082:10;;27074:58;;27038:12;;-1:-1:-1;;;;;27082:10:0;;27106:21;;27038:12;27074:58;27038:12;27074:58;27106:21;27082:10;27074:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;26990:150:0:o;26814:158::-;6963:6;;-1:-1:-1;;;;;6963:6:0;873:10;6963:22;6955:67;;;;-1:-1:-1;;;6955:67:0;;;;;;;:::i;:::-;26883:20:::1;::::0;-1:-1:-1;;;26883:20:0;::::1;;;26875:50;;;::::0;-1:-1:-1;;;26875:50:0;;15261:2:1;26875:50:0::1;::::0;::::1;15243:21:1::0;15300:2;15280:18;;;15273:30;-1:-1:-1;;;15319:18:1;;;15312:47;15376:18;;26875:50:0::1;15059:341:1::0;26875:50:0::1;26936:20;:28:::0;;-1:-1:-1;;;;26936:28:0::1;::::0;;26814:158::o;11772:177::-;11882:58;;;-1:-1:-1;;;;;15597:32:1;;11882:58:0;;;15579:51:1;15646:18;;;;15639:34;;;11882:58:0;;;;;;;;;;15552:18:1;;;;11882:58:0;;;;;;;;-1:-1:-1;;;;;11882:58:0;-1:-1:-1;;;11882:58:0;;;11855:86;;11875:5;;11855:19;:86::i;:::-;11772:177;;;:::o;5732:346::-;-1:-1:-1;;;;;5834:19:0;;5826:68;;;;-1:-1:-1;;;5826:68:0;;15886:2:1;5826:68:0;;;15868:21:1;15925:2;15905:18;;;15898:30;15964:34;15944:18;;;15937:62;-1:-1:-1;;;16015:18:1;;;16008:34;16059:19;;5826:68:0;15684:400:1;5826:68:0;-1:-1:-1;;;;;5913:21:0;;5905:68;;;;-1:-1:-1;;;5905:68:0;;16291:2:1;5905:68:0;;;16273:21:1;16330:2;16310:18;;;16303:30;16369:34;16349:18;;;16342:62;-1:-1:-1;;;16420:18:1;;;16413:32;16462:19;;5905:68:0;16089:398:1;5905:68:0;-1:-1:-1;;;;;5986:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6038:32;;1676:25:1;;;6038:32:0;;1649:18:1;6038:32:0;;;;;;;5732:346;;;:::o;6086:419::-;6187:24;6214:25;6224:5;6231:7;6214:9;:25::i;:::-;6187:52;;-1:-1:-1;;6254:16:0;:37;6250:248;;6336:6;6316:16;:26;;6308:68;;;;-1:-1:-1;;;6308:68:0;;16694:2:1;6308:68:0;;;16676:21:1;16733:2;16713:18;;;16706:30;16772:31;16752:18;;;16745:59;16821:18;;6308:68:0;16492:353:1;6308:68:0;6420:51;6429:5;6436:7;6464:6;6445:16;:25;6420:8;:51::i;17582:409::-;-1:-1:-1;;;;;17728:20:0;;;;;;:14;:20;;;;;;;;17727:21;:44;;;;-1:-1:-1;;;;;;17753:18:0;;;;;;:14;:18;;;;;;;;17752:19;17727:44;17724:216;;;17795:14;;-1:-1:-1;;;17795:14:0;;;;17787:45;;;;-1:-1:-1;;;17787:45:0;;17052:2:1;17787:45:0;;;17034:21:1;17091:2;17071:18;;;17064:30;-1:-1:-1;;;17110:18:1;;;17103:48;17168:18;;17787:45:0;16850:342:1;17787:45:0;17857:27;17867:4;17873:2;17877:6;17857:9;:27::i;:::-;17847:37;;;;:::i;:::-;;;17899:29;17911:4;17917:2;17921:6;17899:11;:29::i;:::-;17952:31;17968:4;17973:2;17976:6;17952:15;:31::i;12170:333::-;12251:23;12277:69;12305:4;12277:69;;;;;;;;;;;;;;;;;12285:5;-1:-1:-1;;;;;12277:27:0;;;:69;;;;;:::i;:::-;12361:17;;12251:95;;-1:-1:-1;12361:21:0;12357:139;;12418:10;12407:30;;;;;;;;;;;;:::i;:::-;12399:85;;;;-1:-1:-1;;;12399:85:0;;17782:2:1;12399:85:0;;;17764:21:1;17821:2;17801:18;;;17794:30;17860:34;17840:18;;;17833:62;-1:-1:-1;;;17911:18:1;;;17904:40;17961:19;;12399:85:0;17580:406:1;19406:1571:0;19537:15;;19527:4;19485:7;3020:18;;;;;;;;;;;19485:7;;-1:-1:-1;19509:43:0;:63;;;;-1:-1:-1;;;;;;19557:15:0;;;;;;:9;:15;;;;;;;;19556:16;19509:63;:104;;;;;19601:12;19576:17;;19596:1;19576:21;;;;:::i;:::-;:37;;19509:104;19506:150;;;19630:14;:12;:14::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19739:13:0;;;;:9;:13;;;;;;;;19735:126;;;-1:-1:-1;19768:15:0;;;;;;;;19776:7;19768:15;-1:-1:-1;;;;;19768:15:0;;;;;-1:-1:-1;;;19768:15:0;;;;;;;;-1:-1:-1;;;19768:15:0;;;;;;;;;;;-1:-1:-1;;;19768:15:0;;;;;;;;;19735:126;;;-1:-1:-1;;;;;19804:15:0;;;;;;:9;:15;;;;;;;;19801:60;;;-1:-1:-1;19835:14:0;;;;;;;;19843:6;19835:14;-1:-1:-1;;;;;19835:14:0;;;;;-1:-1:-1;;;19835:14:0;;;;;;;;-1:-1:-1;;;19835:14:0;;;;;;;;;;;-1:-1:-1;;;19835:14:0;;;;;;;;;19801:60;19884:14;;;;-1:-1:-1;;;;;19884:18:0;;19881:1058;;19918:53;;;;;;;;19959:12;19918:53;-1:-1:-1;;;;;19918:53:0;;;;;-1:-1:-1;;;19918:53:0;;;;;;;;-1:-1:-1;;;19918:53:0;;;;;;;;;;-1:-1:-1;;;19918:53:0;;;;;;;;;;;19989:11;;20004:12;19989:27;;19986:517;;-1:-1:-1;;;;;20040:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;20059:13:0;;;;;;:9;:13;;;;;;;;20040:32;20036:127;;;20119:9;;14679:5;;20110:18;;-1:-1:-1;;;;;20119:9:0;20110:6;:18;:::i;:::-;:32;;;;:::i;:::-;20096:47;;20036:127;19986:517;;;20203:11;;:15;;20217:1;20203:15;:::i;:::-;20187:12;:31;:66;;;-1:-1:-1;20238:11:0;;:15;;20252:1;20238:15;:::i;:::-;20222:12;:31;20187:66;20184:319;;;-1:-1:-1;;;;;20277:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;20296:13:0;;;;;;:9;:13;;;;;;;;20277:32;20273:122;;;14679:5;20347:13;:6;20356:4;20347:13;:::i;20184:319::-;20458:14;;;;14679:5;;20449:23;;-1:-1:-1;;;;;20449:23:0;:6;:23;:::i;:::-;:37;;;;:::i;:::-;20435:52;;20184:319;20609:3;20592:5;:14;;;-1:-1:-1;;;;;20565:41:0;20571:5;:18;;;-1:-1:-1;;;;;20565:24:0;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;20517:18;:37;;:96;;;;;;;:::i;:::-;-1:-1:-1;;;;;20517:96:0;;;-1:-1:-1;20703:14:0;;;;20682:18;;20720:3;;-1:-1:-1;;;;;20676:41:0;;;;:24;;;:3;:24;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;20628:96;;:18;;:96;;;;;:::i;:::-;-1:-1:-1;;;;;20628:96:0;;;-1:-1:-1;20802:14:0;;;;20787:12;;;;20819:3;;-1:-1:-1;;;;;20781:35:0;;;;:18;;;:3;:18;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;20739:18;:31;;:84;;;;;;;:::i;:::-;-1:-1:-1;;;;;20739:84:0;;;;;;20838:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;20838:33:0;-1:-1:-1;;;;20838:33:0;;;-1:-1:-1;;;20838:33:0;;;;;-1:-1:-1;;;;20838:33:0;;;-1:-1:-1;;;20838:33:0;-1:-1:-1;;;;;;20838:33:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20886:41:0;20902:4;20916;-1:-1:-1;;;;;20886:41:0;;:15;:41::i;:::-;19903:1036;19881:1058;-1:-1:-1;;;;;;20959:10:0;;19406:1571;-1:-1:-1;;;;19406:1571:0:o;17999:1399::-;18085:7;;-1:-1:-1;;;18085:7:0;;;;18082:1307;;;-1:-1:-1;;;;;18130:20:0;;;18108:19;18130:20;;;:16;:20;;;;;;;;;3020:18;;;;;;;18215:36;;;;;;;18243:8;18215:36;-1:-1:-1;;;;;18215:36:0;;;;;-1:-1:-1;;;18215:36:0;;;;;;;;18290:15;;;;;:9;:15;;;;;;18130:20;;;;;3020:18;;18290:15;:34;;;;;18310:14;18309:15;18290:34;18286:538;;;18363:26;;-1:-1:-1;;;;;18353:36:0;;;;18345:56;;;;-1:-1:-1;;;18345:56:0;;18955:2:1;18345:56:0;;;18937:21:1;18994:1;18974:18;;;18967:29;-1:-1:-1;;;19012:18:1;;;19005:37;19059:18;;18345:56:0;18753:330:1;18345:56:0;18452:21;;;;-1:-1:-1;;;;;18428:45:0;:20;18437:11;18428:6;:20;:::i;:::-;:45;;18420:68;;;;-1:-1:-1;;;18420:68:0;;19290:2:1;18420:68:0;;;19272:21:1;19329:2;19309:18;;;19302:30;-1:-1:-1;;;19348:18:1;;;19341:40;19398:18;;18420:68:0;19088:334:1;18420:68:0;18286:538;;;-1:-1:-1;;;;;18549:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;18567:22:0;;;;;;:16;:22;;;;;;;;18566:23;18549:40;18545:279;;;18628:26;;-1:-1:-1;;;;;18618:36:0;;;;18610:56;;;;-1:-1:-1;;;18610:56:0;;18955:2:1;18610:56:0;;;18937:21:1;18994:1;18974:18;;;18967:29;-1:-1:-1;;;19012:18:1;;;19005:37;19059:18;;18610:56:0;18753:330:1;18545:279:0;18705:14;18701:123;;18772:21;;;;-1:-1:-1;;;;;18748:45:0;:20;18757:11;18748:6;:20;:::i;:::-;:45;;18740:68;;;;-1:-1:-1;;;18740:68:0;;19290:2:1;18740:68:0;;;19272:21:1;19329:2;19309:18;;;19302:30;-1:-1:-1;;;19348:18:1;;;19341:40;19398:18;;18740:68:0;19088:334:1;18740:68:0;18843:20;;-1:-1:-1;;;18843:20:0;;;;18840:536;;;18901:9;-1:-1:-1;;;;;18887:24:0;:2;-1:-1:-1;;;;;18887:24:0;;;:49;;;;;18929:6;-1:-1:-1;;;;;18915:21:0;:2;-1:-1:-1;;;;;18915:21:0;;;18887:49;18883:478;;;18993:9;18968:35;;;;:24;:35;;;;;;19010:12;;18968:39;;19006:1;18968:39;:::i;:::-;:54;18960:81;;;;-1:-1:-1;;;18960:81:0;;19629:2:1;18960:81:0;;;19611:21:1;19668:2;19648:18;;;19641:30;-1:-1:-1;;;19687:18:1;;;19680:44;19741:18;;18960:81:0;19427:338:1;18960:81:0;-1:-1:-1;;;;;19064:28:0;;;;;;;:24;:28;;;;;;19095:12;19064:43;;;;19155:9;19130:35;;;;:50;19222:6;19206:23;;;;;;19203:139;;19265:9;-1:-1:-1;;;;;19265:15:0;;;19257:61;;;;-1:-1:-1;;;19257:61:0;;19972:2:1;19257:61:0;;;19954:21:1;20011:2;19991:18;;;19984:30;20050:34;20030:18;;;20023:62;-1:-1:-1;;;20101:18:1;;;20094:31;20142:19;;19257:61:0;19770:397:1;19257:61:0;18093:1296;;;17999:1399;;;:::o;4584:705::-;-1:-1:-1;;;;;4681:18:0;;4673:68;;;;-1:-1:-1;;;4673:68:0;;20374:2:1;4673:68:0;;;20356:21:1;20413:2;20393:18;;;20386:30;20452:34;20432:18;;;20425:62;-1:-1:-1;;;20503:18:1;;;20496:35;20548:19;;4673:68:0;20172:401:1;4673:68:0;-1:-1:-1;;;;;4760:16:0;;4752:64;;;;-1:-1:-1;;;4752:64:0;;20780:2:1;4752:64:0;;;20762:21:1;20819:2;20799:18;;;20792:30;20858:34;20838:18;;;20831:62;-1:-1:-1;;;20909:18:1;;;20902:33;20952:19;;4752:64:0;20578:399:1;4752:64:0;-1:-1:-1;;;;;4851:15:0;;4829:19;4851:15;;;;;;;;;;;4885:21;;;;4877:72;;;;-1:-1:-1;;;4877:72:0;;21184:2:1;4877:72:0;;;21166:21:1;21223:2;21203:18;;;21196:30;21262:34;21242:18;;;21235:62;-1:-1:-1;;;21313:18:1;;;21306:36;21359:19;;4877:72:0;20982:402:1;4877:72:0;-1:-1:-1;;;;;4985:15:0;;;:9;:15;;;;;;;;;;;5003:20;;;4985:38;;5203:13;;;;;;;;;;:23;;;;;;5255:26;;1676:25:1;;;5203:13:0;;5255:26;;1649:18:1;5255:26:0;;;;;;;4662:627;4584:705;;;:::o;8125:229::-;8262:12;8294:52;8316:6;8324:4;8330:1;8333:12;8294:21;:52::i;:::-;8287:59;8125:229;-1:-1:-1;;;;8125:229:0:o;21366:1719::-;21455:4;21411:23;3020:18;;;;;;;;;;;21472:50;;;;;;;;21510:12;21472:50;-1:-1:-1;;;;;21472:50:0;;;;;;-1:-1:-1;;;21472:50:0;;;;;;;;;;-1:-1:-1;;;21472:50:0;;;;;;;;;;;-1:-1:-1;;;21472:50:0;;;;;;;;;;;21411;;-1:-1:-1;21472:50:0;;-1:-1:-1;;21472:50:0;21561:71;;;:::i;:::-;:102;;;;:::i;:::-;-1:-1:-1;;;;;21533:130:0;;-1:-1:-1;21687:20:0;;;:46;;-1:-1:-1;21711:22:0;;21687:46;21684:60;;;21736:7;;;21366:1719::o;21684:60::-;21777:15;;:20;;21795:2;21777:20;:::i;:::-;21759:15;:38;21756:107;;;21831:15;;:20;;21849:2;21831:20;:::i;:::-;21813:38;;21756:107;21878:34;;;;-1:-1:-1;;;;;21878:38:0;;21875:407;;21932:23;22013:17;21976:15;:34;;;-1:-1:-1;;;;;21958:52:0;:15;:52;;;;:::i;:::-;:72;;;;:::i;:::-;21932:98;;22045:55;22069:4;22076:6;22084:15;22045;:55::i;:::-;22127:6;-1:-1:-1;;;;;22119:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22115:37;22166:34;22185:15;22166:34;;:::i;:::-;;;22236:15;:34;;;-1:-1:-1;;;;;22215:55:0;;;;;;:::i;:::-;;;21917:365;21875:407;22297:19;;22294:555;;22334:33;22351:15;22334:16;:33::i;:::-;22487:28;;;;22417:21;;22396:18;;-1:-1:-1;;;;;22487:32:0;;22484:175;;22552:10;;22588:28;;;;-1:-1:-1;;;;;22552:10:0;;;;22619:17;;22575:41;;-1:-1:-1;;;;;22575:41:0;:10;:41;:::i;:::-;:61;;;;:::i;:::-;22552:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22539:102:0;;-1:-1:-1;;22484:175:0;22688:21;;-1:-1:-1;22729:14:0;;22726:112;;22776:16;;:44;;-1:-1:-1;;;;;22776:16:0;;;;22805:10;;22776:44;;;;22805:10;22776:16;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22763:57:0;;-1:-1:-1;;22726:112:0;22317:532;;22294:555;-1:-1:-1;22898:1:0;22861:34;;;:38;;;22910;;;22959:28;;;:32;23004:12;:30;;;;;;;;;-1:-1:-1;;;23004:30:0;-1:-1:-1;;;;;;23004:30:0;;;;;;;;;-1:-1:-1;23065:12:0;23045:17;:32;21366:1719::o;8630:455::-;8800:12;8858:5;8833:21;:30;;8825:81;;;;-1:-1:-1;;;8825:81:0;;21591:2:1;8825:81:0;;;21573:21:1;21630:2;21610:18;;;21603:30;21669:34;21649:18;;;21642:62;-1:-1:-1;;;21720:18:1;;;21713:36;21766:19;;8825:81:0;21389:402:1;8825:81:0;8918:12;8932:23;8959:6;-1:-1:-1;;;;;8959:11:0;8978:5;8985:4;8959:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8917:73;;;;9008:69;9035:6;9043:7;9052:10;9064:12;9008:26;:69::i;:::-;9001:76;8630:455;-1:-1:-1;;;;;;;8630:455:0:o;20986:372::-;21075:16;;;21089:1;21075:16;;;;;;;;21051:21;;21075:16;;;;;;;;;;-1:-1:-1;21075:16:0;21051:40;;21120:4;21102;21107:1;21102:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;21102:23:0;;;-1:-1:-1;;;;;21102:23:0;;;;;21146:4;21136;21141:1;21136:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21136:14:0;;;:7;;;;;;;;;:14;21163:187;;-1:-1:-1;;;21163:187:0;;:9;:60;;;;;;:187;;21238:8;;21261:1;;21277:4;;21304;;21324:15;;21163:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10189:644;10374:12;10403:7;10399:427;;;10431:10;:17;10452:1;10431:22;10427:290;;-1:-1:-1;;;;;7566:19:0;;;10641:60;;;;-1:-1:-1;;;10641:60:0;;23532:2:1;10641:60:0;;;23514:21:1;23571:2;23551:18;;;23544:30;23610:31;23590:18;;;23583:59;23659:18;;10641:60:0;23330:353:1;10641:60:0;-1:-1:-1;10738:10:0;10731:17;;10399:427;10781:33;10789:10;10801:12;11315:17;;:21;11311:388;;11547:10;11541:17;11604:15;11591:10;11587:2;11583:19;11576:44;11311:388;11674:12;11667:20;;-1:-1:-1;;;11667:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:418::-;532:2;521:9;514:21;495:4;564:6;558:13;607:6;602:2;591:9;587:18;580:34;666:6;661:2;653:6;649:15;644:2;633:9;629:18;623:50;722:1;717:2;708:6;697:9;693:22;689:31;682:42;792:2;785;781:7;776:2;768:6;764:15;760:29;749:9;745:45;741:54;733:62;;;383:418;;;;:::o;1033:300::-;1101:6;1109;1162:2;1150:9;1141:7;1137:23;1133:32;1130:52;;;1178:1;1175;1168:12;1130:52;1201:29;1220:9;1201:29;:::i;:::-;1191:39;1299:2;1284:18;;;;1271:32;;-1:-1:-1;;;1033:300:1:o;1712:226::-;1771:6;1824:2;1812:9;1803:7;1799:23;1795:32;1792:52;;;1840:1;1837;1830:12;1792:52;-1:-1:-1;1885:23:1;;1712:226;-1:-1:-1;1712:226:1:o;1943:374::-;2020:6;2028;2036;2089:2;2077:9;2068:7;2064:23;2060:32;2057:52;;;2105:1;2102;2095:12;2057:52;2128:29;2147:9;2128:29;:::i;:::-;2118:39;;2176:38;2210:2;2199:9;2195:18;2176:38;:::i;:::-;1943:374;;2166:48;;-1:-1:-1;;;2283:2:1;2268:18;;;;2255:32;;1943:374::o;2322:171::-;2389:20;;-1:-1:-1;;;;;2438:30:1;;2428:41;;2418:69;;2483:1;2480;2473:12;2498:328;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2680:28;2698:9;2680:28;:::i;:::-;2670:38;;2727:37;2760:2;2749:9;2745:18;2727:37;:::i;:::-;2717:47;;2783:37;2816:2;2805:9;2801:18;2783:37;:::i;:::-;2773:47;;2498:328;;;;;:::o;3020:301::-;3079:6;3132:2;3120:9;3111:7;3107:23;3103:32;3100:52;;;3148:1;3145;3138:12;3100:52;3187:9;3174:23;-1:-1:-1;;;;;3230:5:1;3226:46;3219:5;3216:57;3206:85;;3287:1;3284;3277:12;4714:118;4800:5;4793:13;4786:21;4779:5;4776:32;4766:60;;4822:1;4819;4812:12;4766:60;4714:118;:::o;4837:315::-;4902:6;4910;4963:2;4951:9;4942:7;4938:23;4934:32;4931:52;;;4979:1;4976;4969:12;4931:52;5002:29;5021:9;5002:29;:::i;:::-;4992:39;;5081:2;5070:9;5066:18;5053:32;5094:28;5116:5;5094:28;:::i;:::-;5141:5;5131:15;;;4837:315;;;;;:::o;5157:260::-;5225:6;5233;5286:2;5274:9;5265:7;5261:23;5257:32;5254:52;;;5302:1;5299;5292:12;5254:52;5325:29;5344:9;5325:29;:::i;:::-;5315:39;;5373:38;5407:2;5396:9;5392:18;5373:38;:::i;:::-;5363:48;;5157:260;;;;;:::o;6447:184::-;6517:6;6570:2;6558:9;6549:7;6545:23;6541:32;6538:52;;;6586:1;6583;6576:12;6538:52;-1:-1:-1;6609:16:1;;6447:184;-1:-1:-1;6447:184:1:o;6636:380::-;6715:1;6711:12;;;;6758;;;6779:61;;6833:4;6825:6;6821:17;6811:27;;6779:61;6886:2;6878:6;6875:14;6855:18;6852:38;6849:161;;6932:10;6927:3;6923:20;6920:1;6913:31;6967:4;6964:1;6957:15;6995:4;6992:1;6985:15;6849:161;;6636:380;;;:::o;7021:356::-;7223:2;7205:21;;;7242:18;;;7235:30;7301:34;7296:2;7281:18;;7274:62;7368:2;7353:18;;7021:356::o;7382:127::-;7443:10;7438:3;7434:20;7431:1;7424:31;7474:4;7471:1;7464:15;7498:4;7495:1;7488:15;7514:168;7587:9;;;7618;;7635:15;;;7629:22;;7615:37;7605:71;;7656:18;;:::i;7687:127::-;7748:10;7743:3;7739:20;7736:1;7729:31;7779:4;7776:1;7769:15;7803:4;7800:1;7793:15;7819:120;7859:1;7885;7875:35;;7890:18;;:::i;:::-;-1:-1:-1;7924:9:1;;7819:120::o;9128:191::-;-1:-1:-1;;;;;9196:26:1;;;9224;;;9192:59;;9263:27;;9260:53;;;9293:18;;:::i;9877:375::-;9965:1;9983:5;9997:249;10018:1;10008:8;10005:15;9997:249;;;10068:4;10063:3;10059:14;10053:4;10050:24;10047:50;;;10077:18;;:::i;:::-;10127:1;10117:8;10113:16;10110:49;;;10141:16;;;;10110:49;10224:1;10220:16;;;;;10180:15;;9997:249;;;9877:375;;;;;;:::o;10257:902::-;10306:5;10336:8;10326:80;;-1:-1:-1;10377:1:1;10391:5;;10326:80;10425:4;10415:76;;-1:-1:-1;10462:1:1;10476:5;;10415:76;10507:4;10525:1;10520:59;;;;10593:1;10588:174;;;;10500:262;;10520:59;10550:1;10541:10;;10564:5;;;10588:174;10625:3;10615:8;10612:17;10609:43;;;10632:18;;:::i;:::-;-1:-1:-1;;10688:1:1;10674:16;;10747:5;;10500:262;;10846:2;10836:8;10833:16;10827:3;10821:4;10818:13;10814:36;10808:2;10798:8;10795:16;10790:2;10784:4;10781:12;10777:35;10774:77;10771:203;;;-1:-1:-1;10883:19:1;;;10959:5;;10771:203;11006:42;-1:-1:-1;;11031:8:1;11025:4;11006:42;:::i;:::-;11084:6;11080:1;11076:6;11072:19;11063:7;11060:32;11057:58;;;11095:18;;:::i;:::-;11133:20;;10257:902;-1:-1:-1;;;10257:902:1:o;11164:140::-;11222:5;11251:47;11292:4;11282:8;11278:19;11272:4;11251:47;:::i;11867:125::-;11932:9;;;11953:10;;;11950:36;;;11966:18;;:::i;17197:128::-;17264:9;;;17285:11;;;17282:37;;;17299:18;;:::i;17330:245::-;17397:6;17450:2;17438:9;17429:7;17425:23;17421:32;17418:52;;;17466:1;17463;17456:12;17418:52;17498:9;17492:16;17517:28;17539:5;17517:28;:::i;17991:317::-;-1:-1:-1;;;;;18076:42:1;;;18120;;;18072:91;18183:52;;;;18254:24;;;18244:58;;18282:18;;:::i;:::-;18244:58;17991:317;;;;:::o;18313:227::-;18353:1;-1:-1:-1;;;;;18384:1:1;18380:42;18441:3;18431:37;;18448:18;;:::i;:::-;18530:3;-1:-1:-1;;;;;18490:1:1;18486:42;18482:52;18477:57;;;18313:227;;;;:::o;18545:203::-;-1:-1:-1;;;;;18613:30:1;;;18645;;;18609:67;;18688:31;;18685:57;;;18722:18;;:::i;21796:301::-;21925:3;21963:6;21957:13;22009:6;22002:4;21994:6;21990:17;21985:3;21979:37;22071:1;22035:16;;22060:13;;;-1:-1:-1;22035:16:1;21796:301;-1:-1:-1;21796:301:1:o;22234:127::-;22295:10;22290:3;22286:20;22283:1;22276:31;22326:4;22323:1;22316:15;22350:4;22347:1;22340:15;22366:959;22628:4;22676:3;22665:9;22661:19;22707:6;22696:9;22689:25;22750:6;22745:2;22734:9;22730:18;22723:34;22793:3;22788:2;22777:9;22773:18;22766:31;22817:6;22852;22846:13;22883:6;22875;22868:22;22921:3;22910:9;22906:19;22899:26;;22960:2;22952:6;22948:15;22934:29;;22981:1;22991:195;23005:6;23002:1;22999:13;22991:195;;;23070:13;;-1:-1:-1;;;;;23066:39:1;23054:52;;23135:2;23161:15;;;;23126:12;;;;23102:1;23020:9;22991:195;;;-1:-1:-1;;;;;;;23242:32:1;;;;23237:2;23222:18;;23215:60;-1:-1:-1;;23306:3:1;23291:19;23284:35;23203:3;22366:959;-1:-1:-1;;;22366:959:1:o

Swarm Source

ipfs://70ab1412dacf491ee47fd0bf96deb823138394e08514913cc9bbf6f19f49ac30

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.