ETH Price: $3,330.72 (-1.24%)

Contract

0x87E75025d6607564Ad005088Ab549DD76CA2cE48
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve215958542025-01-10 18:25:475 days ago1736533547IN
0x87E75025...76CA2cE48
0 ETH0.000230119.46183747
Transfer215265812025-01-01 2:18:3515 days ago1735697915IN
0x87E75025...76CA2cE48
0 ETH0.000172253.70787537
Transfer212892562024-11-28 22:43:3548 days ago1732833815IN
0x87E75025...76CA2cE48
0 ETH0.00053948.48533401
Approve211044032024-11-03 3:23:5974 days ago1730604239IN
0x87E75025...76CA2cE48
0 ETH0.000109254.50338291
Transfer210380742024-10-24 21:13:2383 days ago1729804403IN
0x87E75025...76CA2cE48
0 ETH0.0009332414.63664679
Approve208843572024-10-03 10:21:23105 days ago1727950883IN
0x87E75025...76CA2cE48
0 ETH0.000429339.26718675
Transfer208832512024-10-03 6:39:35105 days ago1727937575IN
0x87E75025...76CA2cE48
0 ETH0.000334685.24800878
Approve205642732024-08-19 17:50:35150 days ago1724089835IN
0x87E75025...76CA2cE48
0 ETH0.000055742.29764994
Transfer205479832024-08-17 11:15:47152 days ago1723893347IN
0x87E75025...76CA2cE48
0 ETH0.000088871.7961914
Approve204981152024-08-10 12:09:35159 days ago1723291775IN
0x87E75025...76CA2cE48
0 ETH0.000150223.24690668
Approve204129142024-07-29 14:47:35171 days ago1722264455IN
0x87E75025...76CA2cE48
0 ETH0.000252995.43568437
Approve204114562024-07-29 9:55:23171 days ago1722246923IN
0x87E75025...76CA2cE48
0 ETH0.000157173.37253471
Approve203818532024-07-25 6:44:23175 days ago1721889863IN
0x87E75025...76CA2cE48
0 ETH0.000226364.85711408
Approve203805442024-07-25 2:22:11175 days ago1721874131IN
0x87E75025...76CA2cE48
0 ETH0.000074552.79828549
Approve203805362024-07-25 2:20:35175 days ago1721874035IN
0x87E75025...76CA2cE48
0 ETH0.00013032.79956012
Transfer203748992024-07-24 7:26:35176 days ago1721805995IN
0x87E75025...76CA2cE48
0 ETH0.000221563.2311216
Approve203621312024-07-22 12:40:35178 days ago1721652035IN
0x87E75025...76CA2cE48
0 ETH0.0004714710.12960139
Approve203350062024-07-18 17:49:47182 days ago1721324987IN
0x87E75025...76CA2cE48
0 ETH0.0017579737.7215422
Approve203048122024-07-14 12:42:23186 days ago1720960943IN
0x87E75025...76CA2cE48
0 ETH0.000136672.93652604
Approve202600412024-07-08 6:35:35192 days ago1720420535IN
0x87E75025...76CA2cE48
0 ETH0.000065842.70735466
Approve202054622024-06-30 15:41:23200 days ago1719762083IN
0x87E75025...76CA2cE48
0 ETH0.0000973.99836531
Approve201936802024-06-29 0:11:11201 days ago1719619871IN
0x87E75025...76CA2cE48
0 ETH0.000154953.32913979
Approve201886252024-06-28 7:14:59202 days ago1719558899IN
0x87E75025...76CA2cE48
0 ETH0.000186054.02126994
Approve201764502024-06-26 14:25:47204 days ago1719411947IN
0x87E75025...76CA2cE48
0 ETH0.0008571718.50714936
Approve201764192024-06-26 14:19:35204 days ago1719411575IN
0x87E75025...76CA2cE48
0 ETH0.000742815.93859968
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
204439972024-08-02 23:00:35166 days ago1722639635
0x87E75025...76CA2cE48
0.00175 ETH
204439972024-08-02 23:00:35166 days ago1722639635
0x87E75025...76CA2cE48
0.002625 ETH
204439972024-08-02 23:00:35166 days ago1722639635
0x87E75025...76CA2cE48
0.004375 ETH
201764512024-06-26 14:25:59204 days ago1719411959
0x87E75025...76CA2cE48
0.00340127 ETH
201764512024-06-26 14:25:59204 days ago1719411959
0x87E75025...76CA2cE48
0.00510191 ETH
201764512024-06-26 14:25:59204 days ago1719411959
0x87E75025...76CA2cE48
0.00850319 ETH
200840772024-06-13 16:24:47217 days ago1718295887
0x87E75025...76CA2cE48
0.00408087 ETH
200840772024-06-13 16:24:47217 days ago1718295887
0x87E75025...76CA2cE48
0.00612131 ETH
200840772024-06-13 16:24:47217 days ago1718295887
0x87E75025...76CA2cE48
0.01020218 ETH
197507502024-04-28 2:11:23263 days ago1714270283
0x87E75025...76CA2cE48
0.0041442 ETH
197507502024-04-28 2:11:23263 days ago1714270283
0x87E75025...76CA2cE48
0.0062163 ETH
197507502024-04-28 2:11:23263 days ago1714270283
0x87E75025...76CA2cE48
0.0103605 ETH
196691642024-04-16 16:14:35275 days ago1713284075
0x87E75025...76CA2cE48
0.00482839 ETH
196691642024-04-16 16:14:35275 days ago1713284075
0x87E75025...76CA2cE48
0.00724259 ETH
196691642024-04-16 16:14:35275 days ago1713284075
0x87E75025...76CA2cE48
0.01207099 ETH
196008002024-04-07 2:19:23284 days ago1712456363
0x87E75025...76CA2cE48
0.00509288 ETH
196008002024-04-07 2:19:23284 days ago1712456363
0x87E75025...76CA2cE48
0.00763932 ETH
196008002024-04-07 2:19:23284 days ago1712456363
0x87E75025...76CA2cE48
0.01273221 ETH
195392562024-03-29 11:06:23293 days ago1711710383
0x87E75025...76CA2cE48
0.00467241 ETH
195392562024-03-29 11:06:23293 days ago1711710383
0x87E75025...76CA2cE48
0.00700861 ETH
195392562024-03-29 11:06:23293 days ago1711710383
0x87E75025...76CA2cE48
0.01168103 ETH
195042722024-03-24 12:01:59298 days ago1711281719
0x87E75025...76CA2cE48
0.00584404 ETH
195042722024-03-24 12:01:59298 days ago1711281719
0x87E75025...76CA2cE48
0.00876607 ETH
195042722024-03-24 12:01:59298 days ago1711281719
0x87E75025...76CA2cE48
0.01461012 ETH
194408102024-03-15 14:01:35307 days ago1710511295
0x87E75025...76CA2cE48
0.0155328 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Pier

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-15
*/

/**
                                                                       
                                      =#+@@#                   
                            +@@@@@@@@@@@@@@@.                  
                            =@@@%        #@@                   
                              *@@@       @@@                   
                        @@%    #@@%      @@-                   
                      #@@#   #@@#   :=  =@@:                   
                    #@@%=  @@@@-  .%@%%%-@@                    
                  @@@@.  +@%@:   #%@@+@%@@@                    
         @%+    =%@@@   @%%@   =@@#    #@@%                    
        *@@%@ +%%%%   #%@#   +@@%                              
        @%%%@@@@@   #@@*   #@@%                                
        @%=  ##   %@@%   =%@%.                                 
       %@@      =@@@.   @%@                                    
       #@@      .@@@%                                          
       @@#        @@@%=                                        
       @@%+@@@@@@@@@@@%                                        
       @@@@#+%+                                                

    Pier Protocol - A cutting-edge multi-chain peer-to-peer protocol.
    Telegram: https://t.me/PierProtocolERC
    Website:  https://pierprotocol.com/
    dApp: https://pierprotocol.com/dashboard
    Twitter:  https://twitter.com/protocolpier
**/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

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

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

/// @title A ERC-20 token contract for Pier Protocol
contract Pier is Context, IERC20, Ownable {
    using SafeMath for uint256;

    /// @notice Fallback function that allows the contract to receive ETH directly
    receive() external payable {}

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                            constants                            */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @dev Number of decimals the token uses.
    uint8 private constant _decimals = 18;
    /// @dev Total supply of the token.
    uint256 private constant _tTotal = 10_000_000 * 10**_decimals;

    /// @dev Name of the token.
    string private constant _name = unicode"Pier Protocol";
    /// @dev Symbol of the token.
    string private constant _symbol = unicode"Pier";

    /// @dev The threshold at which accumulated tokens will be swapped to ETH.
    uint256 public _taxSwapThreshold = 5_000 * 10**_decimals;
    /// @dev Maximum number of tokens to swap to ETH at once.
    uint256 public _maxTaxSwap = 100_000 * 10**_decimals;
    /// @dev Maximum amount that can be bought in a single transaction
    uint256 public _maxTxAmount = 50_000 * 10**_decimals;
    /// @dev Maximum amount a wallet can hold
    uint256 public _maxWalletAmount = 50_000 * 10**_decimals;

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                            mappings                             */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @dev Stores the balance of each address.
    mapping (address => uint256) private _balances;
    /// @dev Stores allowances one account has given to another.
    mapping (address => mapping (address => uint256)) private _allowances;
    /// @dev Records whether an account is excluded from paying fees.
    mapping (address => bool) public _isExcludedFromFee;
    /// @dev Records whether an address is considered a swap contract (and taxes are charged on transfers to/from it).
    mapping (address => bool) private _isSwapContract;

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                            variables                            */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @dev Addresses where collected taxes are sent.
    address payable public _taxWallet;
    address payable public _taxWallet2;

    /// @dev Custom tax rate that can be updated, if 0, the default tax rate is used.
    uint256 public _customTax = 0;
    /// @dev The block number when trading was enabled.
    uint256 public tradingOpenBlock;

    /// @dev The Uniswap V2 Router for token swaps.
    IUniswapV2Router02 private uniswapV2Router;
    /// @dev The Uniswap V2 Pair address for Pier-ETH liquidity pool.
    address public uniswapV2Pair;

    /// @dev Indicates if trading is open and transfers (not from/to owner) are possible.
    bool private tradingOpen;
    /// @dev Indicates if currently in swap operation to prevent reentrancy.
    bool private inSwap;
    /// @dev Indicates if automatic swapping of taxes to ETH is enabled.
    bool private swapEnabled;
    /// @dev Indicates if the maxTxAmount and maxWalletAmount limits are enabled.
    bool public _limitsEnabled = true;

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                         custom events                           */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @dev Emmited when the tax percentage is updated
    event TaxChanged(uint256 _oldTax, uint256 _newTax);
    /// @dev Emmited when a swap contract is updated
    event SwapContractUpdated(address _contract, bool _isSwapContract);

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                   modifiers and constructor                     */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @dev Modifier to lock the swap during its execution to prevent reentrancy.
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    /// @notice Initializes contract with initial settings
    constructor () {
        _taxWallet = payable(0x37335beA9Fb09c94d5346c2030217445b05464b2);
        _taxWallet2 = payable(0xAcE5e3c796Fd40f6a0D52964592CC885BAf71524);

        _balances[_msgSender()] = _tTotal;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;
        _isExcludedFromFee[_taxWallet2] = true;

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        _isSwapContract[address(uniswapV2Router)] = true;
        _isSwapContract[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                 standard ERC-20 view functions                  */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    function name() public pure returns (string memory) {
        return _name;
    }

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                    standard ERC-20 functions                    */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @notice Sets amount as the allowance of spender over the caller’s tokens
    /// @param spender The address which will spend the funds
    /// @param amount The amount of tokens to be spent
    /// @return A boolean value indicating whether the operation was successful 
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /// @notice Transfers tokens from one address to another with allowance check
    /// @dev Transfers tokens between two addresses and automatically deducts the allowance
    /// @param sender The address to transfer tokens from
    /// @param recipient The address to transfer tokens to
    /// @param amount The amount of tokens to be transferred
    /// @return A boolean value indicating whether the transfer was successful
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /// @dev Approves spending of a specified amount of tokens by a spender
    /// @param owner The address of the token holder
    /// @param spender The address of the spender
    /// @param amount The amount of tokens to approve
    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    /// @dev Handles the internal transfer logic, applying tax if necessary
    /// @param from The address to transfer tokens from
    /// @param to The address to transfer tokens to
    /// @param amount The amount of tokens to transfer
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 taxAmount = 0;
        if (from != owner() && to != owner()) {
            require(tradingOpen, "ERC20: Trading is not enabled");

            if (_isSwapContract[from] && !_isExcludedFromFee[to] && _limitsEnabled){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount");
                require(_balances[to].add(amount) <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount");
            }
               
            if (_isSwapContract[to] && from != address(this)){
                taxAmount = amount.mul(_getTax()).div(100);
            } else if (_isSwapContract[from]){
                taxAmount = amount.mul(_getTax()).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _taxSwapThreshold) {
                swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            taxAmount = 0;
        }

        if (taxAmount > 0){
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }

        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                     internal helper functions                   */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @dev Calculates the tax rate based on the difference between current block number and trading open block
    /// @return The current tax rate as a percentage
    function _getTax() internal view returns (uint256) {
        if (_customTax != 0) return _customTax;

        if (block.number - tradingOpenBlock <= 5) {
            return 25;
        } else if (block.number - tradingOpenBlock <= 12) {
            return 12;
        } else {
            return 2;
        }
    }

    /// @dev Utility function to return the lesser of two values
    /// @param a The first value
    /// @param b The second value
    /// @return The lesser of the two values
    function min(uint256 a, uint256 b) private pure returns (uint256){
        return (a > b) ? b : a;
    }

    /// @dev Swaps tokens for ETH using the Uniswap V2 Router
    /// @param tokenAmount The amount of tokens to swap for ETH
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        if (!tradingOpen || tokenAmount == 0) return;

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    /// @dev Transfers ETH to the tax wallet
    /// @param amount The amount of ETH to transfer
    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount.mul(60).div(100));
        _taxWallet2.transfer(amount.mul(40).div(100));
    }

    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */
    /*                       protected functions                       */
    /* .:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:. */

    /// @notice Manually triggers a swap from tokens to ETH and send the proceeds to the tax wallet
    /// @dev Can only be called by the tax wallet address
    function manualSwap() external {
        require(_msgSender() == owner() || _msgSender() == _taxWallet || _msgSender() == _taxWallet2, "only owner or tax wallets");

        uint256 tokenBalance = balanceOf(address(this));
        if (tokenBalance > 0){
            swapTokensForEth(tokenBalance);
        }

        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0){
            sendETHToFee(ethBalance);
        }
    }

    /// @notice Opens trading on the token, enabling swaps and transfers
    /// @dev Can only be called by the contract owner
    function openTrading() external onlyOwner() {
        require(!tradingOpen, "Trading is already open");

        swapEnabled = true;
        tradingOpen = true;
        tradingOpenBlock = block.number;
    }

    /// @notice Sets a custom tax rate for token transfers
    /// @dev Can only be called by the contract owner, tax rate must be <= 50%
    /// @param tax The new tax rate as a percentage
    function setCustomTax(uint256 tax) external onlyOwner {
        require(tax <= 50, "Tax must be less than or equal to 50%");
        emit TaxChanged(_customTax, tax);
        _customTax = tax;
    }

    /// @notice Toggles if an address is excluded from paying taxes on buys and sells
    function toggleIsExcludedFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = !_isExcludedFromFee[account];
    }

    /// @notice Recovers tokens or ETH mistakenly sent to the contract
    /// @dev Can only be called by the contract owner
    function recover(address token, uint256 amount) external {
        require(_msgSender() == owner() || _msgSender() == _taxWallet || _msgSender() == _taxWallet2, "only owner or tax wallets");

        if (token == address(0)){
            (bool sent, bytes memory data) = payable(msg.sender).call{value: amount}("");
        } else {
            IERC20(token).transfer(msg.sender, amount);
        }
    }

    /// @notice Toggles a contract address as a recognized swap contract
    /// @dev Can only be called by the contract owner
    /// @param contractAddress The address of the contract to toggle
    function toggleSwapContract(address contractAddress) external {
        require(_msgSender() == owner() || _msgSender() == _taxWallet || _msgSender() == _taxWallet2, "only owner or tax wallets");

        _isSwapContract[contractAddress] = !_isSwapContract[contractAddress];
        emit SwapContractUpdated(contractAddress, _isSwapContract[contractAddress]);
    }

    /// @notice Toggles if the automatic swap of taxes to ETH is enabled
    function toggleSwapEnabled() external {
        require(_msgSender() == owner() || _msgSender() == _taxWallet || _msgSender() == _taxWallet2, "only owner or tax wallets");
        swapEnabled = !swapEnabled;
    }

    /// @notice Sets the tax wallet address
    function setTaxWallet(address payable wallet, address payable wallet2) external {
        require(_msgSender() == owner() || _msgSender() == _taxWallet || _msgSender() == _taxWallet2, "only owner or tax wallets");
        _taxWallet = wallet;
        _taxWallet2 = wallet2;
    }

    /// @notice Toggles if the maxTxAmount and maxWalletAmount limits are enabled
    function toggleLimits() external onlyOwner() {
        _limitsEnabled = !_limitsEnabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"bool","name":"_isSwapContract","type":"bool"}],"name":"SwapContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_oldTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"TaxChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_customTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallet2","outputs":[{"internalType":"address payable","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":[{"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setCustomTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"},{"internalType":"address payable","name":"wallet2","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"toggleIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"toggleSwapContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpenBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000513565b62000020906113886200052b565b600155620000316012600a62000513565b6200004090620186a06200052b565b600255620000516012600a62000513565b6200005f9061c3506200052b565b600355620000706012600a62000513565b6200007e9061c3506200052b565b6004556000600b55600e805460ff60b81b1916600160b81b179055348015620000a657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b03199081167337335bea9fb09c94d5346c2030217445b05464b217909155600a805490911673ace5e3c796fd40f6a0d52964592cc885baf715241781556200013e9060129062000513565b6200014d90629896806200052b565b3360009081526005602090815260408083209390935581546001600160a01b039081168352600782528383208054600160ff1991821681179092553085528585208054821683179055600954831685528585208054821683179055600a549092168452928490208054909116909217909155600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155825163c45a015560e01b81529251909263c45a01559260048083019391928290030181865afa15801562000220573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000246919062000545565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000545565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200031d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000343919062000545565b600e80546001600160a01b0319166001600160a01b03928316178155600d548216600090815260086020526040808220805460ff199081166001908117909255935490941682529020805490911690911790556200039e3390565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620003d86012600a62000513565b620003e790629896806200052b565b60405190815260200160405180910390a362000570565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000455578160001904821115620004395762000439620003fe565b808516156200044757918102915b93841c939080029062000419565b509250929050565b6000826200046e575060016200050d565b816200047d575060006200050d565b8160018114620004965760028114620004a157620004c1565b60019150506200050d565b60ff841115620004b557620004b5620003fe565b50506001821b6200050d565b5060208310610133831016604e8410600b8410161715620004e6575081810a6200050d565b620004f2838362000414565b8060001904821115620005095762000509620003fe565b0290505b92915050565b60006200052460ff8416836200045d565b9392505050565b80820281158282048414176200050d576200050d620003fe565b6000602082840312156200055857600080fd5b81516001600160a01b03811681146200052457600080fd5b611c4a80620005806000396000f3fe6080604052600436106101dc5760003560e01c80636c0a24eb11610102578063a9059cbb11610095578063cc7494d311610064578063cc7494d314610558578063dd62ed3e14610578578063e6b0ed02146105be578063f8492b1a146105de57600080fd5b8063a9059cbb146104ed578063b7d307bf1461050d578063bf474bed1461052d578063c9567bf91461054357600080fd5b8063768dc710116100d1578063768dc7101461045c5780637d1db4a51461048c5780638da5cb5b146104a257806395d89b41146104c057600080fd5b80636c0a24eb146103db5780636f268a99146103f157806370a0823114610411578063715018a61461044757600080fd5b80631f57414f1161017a57806349bd5a5e1161014957806349bd5a5e1461037157806351bc3c85146103915780635705ae43146103a65780635ef46022146103c657600080fd5b80631f57414f146102fe57806323b872dd1461031f5780632e0882141461033f578063313ce5671461035557600080fd5b80630faee56f116101b65780630faee56f1461028457806314228b0b1461029a57806317198564146102b157806318160ddd146102e957600080fd5b806306fdde03146101e8578063095ea7b3146102305780630e23500e1461026057600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060408051808201909152600d81526c141a595c88141c9bdd1bd8dbdb609a1b60208201525b6040516102279190611810565b60405180910390f35b34801561023c57600080fd5b5061025061024b366004611876565b6105fe565b6040519015158152602001610227565b34801561026c57600080fd5b50610276600c5481565b604051908152602001610227565b34801561029057600080fd5b5061027660025481565b3480156102a657600080fd5b506102af610615565b005b3480156102bd57600080fd5b50600a546102d1906001600160a01b031681565b6040516001600160a01b039091168152602001610227565b3480156102f557600080fd5b50610276610669565b34801561030a57600080fd5b50600e5461025090600160b81b900460ff1681565b34801561032b57600080fd5b5061025061033a3660046118a2565b610689565b34801561034b57600080fd5b50610276600b5481565b34801561036157600080fd5b5060405160128152602001610227565b34801561037d57600080fd5b50600e546102d1906001600160a01b031681565b34801561039d57600080fd5b506102af6106f2565b3480156103b257600080fd5b506102af6103c1366004611876565b61078b565b3480156103d257600080fd5b506102af6108c9565b3480156103e757600080fd5b5061027660045481565b3480156103fd57600080fd5b506009546102d1906001600160a01b031681565b34801561041d57600080fd5b5061027661042c3660046118e3565b6001600160a01b031660009081526005602052604090205490565b34801561045357600080fd5b506102af610950565b34801561046857600080fd5b506102506104773660046118e3565b60076020526000908152604090205460ff1681565b34801561049857600080fd5b5061027660035481565b3480156104ae57600080fd5b506000546001600160a01b03166102d1565b3480156104cc57600080fd5b506040805180820190915260048152632834b2b960e11b602082015261021a565b3480156104f957600080fd5b50610250610508366004611876565b6109c4565b34801561051957600080fd5b506102af610528366004611900565b6109d1565b34801561053957600080fd5b5061027660015481565b34801561054f57600080fd5b506102af610a9b565b34801561056457600080fd5b506102af6105733660046118e3565b610b3c565b34801561058457600080fd5b50610276610593366004611919565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156105ca57600080fd5b506102af6105d9366004611919565b610c0b565b3480156105ea57600080fd5b506102af6105f93660046118e3565b610c9f565b600061060b338484610cf2565b5060015b92915050565b6000546001600160a01b031633146106485760405162461bcd60e51b815260040161063f90611952565b60405180910390fd5b600e805460ff60b81b198116600160b81b9182900460ff1615909102179055565b60006106776012600a611a81565b6106849062989680611a90565b905090565b6000610696848484610e16565b6106e884336106e385604051806060016040528060288152602001611bed602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906113b6565b610cf2565b5060019392505050565b6000546001600160a01b031633148061071e57506009546001600160a01b0316336001600160a01b0316145b8061073c5750600a546001600160a01b0316336001600160a01b0316145b6107585760405162461bcd60e51b815260040161063f90611aa7565b30600090815260056020526040902054801561077757610777816113f0565b4780156107875761078781611585565b5050565b6000546001600160a01b03163314806107b757506009546001600160a01b0316336001600160a01b0316145b806107d55750600a546001600160a01b0316336001600160a01b0316145b6107f15760405162461bcd60e51b815260040161063f90611aa7565b6001600160a01b038216610853576040516000908190339084908381818185875af1925050503d8060008114610843576040519150601f19603f3d011682016040523d82523d6000602084013e610848565b606091505b506107879350505050565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c49190611ade565b505050565b6000546001600160a01b03163314806108f557506009546001600160a01b0316336001600160a01b0316145b806109135750600a546001600160a01b0316336001600160a01b0316145b61092f5760405162461bcd60e51b815260040161063f90611aa7565b600e805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000546001600160a01b0316331461097a5760405162461bcd60e51b815260040161063f90611952565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061060b338484610e16565b6000546001600160a01b031633146109fb5760405162461bcd60e51b815260040161063f90611952565b6032811115610a5a5760405162461bcd60e51b815260206004820152602560248201527f546178206d757374206265206c657373207468616e206f7220657175616c20746044820152646f2035302560d81b606482015260840161063f565b600b5460408051918252602082018390527f4ac0d6b0d694ec6c120242feaca94cfb6fbfe646756cd7026301e3a5984f0450910160405180910390a1600b55565b6000546001600160a01b03163314610ac55760405162461bcd60e51b815260040161063f90611952565b600e54600160a01b900460ff1615610b1f5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161063f565b600e805462ff00ff60a01b19166201000160a01b17905543600c55565b6000546001600160a01b0316331480610b6857506009546001600160a01b0316336001600160a01b0316145b80610b865750600a546001600160a01b0316336001600160a01b0316145b610ba25760405162461bcd60e51b815260040161063f90611aa7565b6001600160a01b038116600081815260086020908152604091829020805460ff8082161560ff1990921682179092558351948552161515908301527f2238b752bde5f0cb64dbc11c545edec44c801a7a4898bcb6bccb834964d13a6e910160405180910390a150565b6000546001600160a01b0316331480610c3757506009546001600160a01b0316336001600160a01b0316145b80610c555750600a546001600160a01b0316336001600160a01b0316145b610c715760405162461bcd60e51b815260040161063f90611aa7565b600980546001600160a01b039384166001600160a01b031991821617909155600a8054929093169116179055565b6000546001600160a01b03163314610cc95760405162461bcd60e51b815260040161063f90611952565b6001600160a01b03166000908152600760205260409020805460ff19811660ff90911615179055565b6001600160a01b038316610d545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161063f565b6001600160a01b038216610db55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161063f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161063f565b6001600160a01b038216610edc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161063f565b60008111610f3e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161063f565b600080546001600160a01b03858116911614801590610f6b57506000546001600160a01b03848116911614155b1561122b57600e54600160a01b900460ff16610fc95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420656e61626c6564000000604482015260640161063f565b6001600160a01b03841660009081526008602052604090205460ff16801561100a57506001600160a01b03831660009081526007602052604090205460ff16155b801561101f5750600e54600160b81b900460ff165b1561110e576003548211156110865760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152661e105b5bdd5b9d60ca1b606482015260840161063f565b6004546001600160a01b0384166000908152600560205260409020546110ac9084611614565b111561110e5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526a185b1b195d105b5bdd5b9d60aa1b606482015260840161063f565b6001600160a01b03831660009081526008602052604090205460ff16801561113f57506001600160a01b0384163014155b1561116857611161606461115b61115461167a565b85906116c7565b90611749565b905061119c565b6001600160a01b03841660009081526008602052604090205460ff161561119c57611199606461115b61115461167a565b90505b30600090815260056020526040902054600e54600160a81b900460ff161580156111d35750600e546001600160a01b038581169116145b80156111e85750600e54600160b01b900460ff165b80156111f5575060015481115b15611229576112176112128461120d8460025461178b565b61178b565b6113f0565b4780156112275761122747611585565b505b505b6001600160a01b03841660009081526007602052604090205460ff168061126a57506001600160a01b03831660009081526007602052604090205460ff165b15611273575060005b80156112ed57306000908152600560205260409020546112939082611614565b30600081815260056020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112e49085815260200190565b60405180910390a35b6001600160a01b03841660009081526005602052604090205461131090836117a0565b6001600160a01b03851660009081526005602052604090205561135561133683836117a0565b6001600160a01b03851660009081526005602052604090205490611614565b6001600160a01b0380851660008181526005602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61139f85856117a0565b60405190815260200160405180910390a350505050565b600081848411156113da5760405162461bcd60e51b815260040161063f9190611810565b5060006113e78486611b00565b95945050505050565b600e805460ff60a81b1916600160a81b1790819055600160a01b900460ff161580611419575080155b61157557604080516002808252606082018352600092602083019080368337019050509050308160008151811061145257611452611b13565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190611b29565b816001815181106114e2576114e2611b13565b6001600160a01b039283166020918202929092010152600d546115089130911684610cf2565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611541908590600090869030904290600401611b46565b600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50505050505b50600e805460ff60a81b19169055565b6009546001600160a01b03166108fc6115a4606461115b85603c6116c7565b6040518115909202916000818181858888f193505050501580156115cc573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6115ec606461115b8560286116c7565b6040518115909202916000818181858888f19350505050158015610787573d6000803e3d6000fd5b6000806116218385611bb7565b9050838110156116735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161063f565b9392505050565b6000600b5460001461168d5750600b5490565b6005600c544361169d9190611b00565b116116a85750601990565b600c80546116b69043611b00565b116116c15750600c90565b50600290565b6000826000036116d95750600061060f565b60006116e58385611a90565b9050826116f28583611bca565b146116735760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161063f565b600061167383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117e2565b600081831161179a5782611673565b50919050565b600061167383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113b6565b600081836118035760405162461bcd60e51b815260040161063f9190611810565b5060006113e78486611bca565b600060208083528351808285015260005b8181101561183d57858101830151858201604001528201611821565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461187357600080fd5b50565b6000806040838503121561188957600080fd5b82356118948161185e565b946020939093013593505050565b6000806000606084860312156118b757600080fd5b83356118c28161185e565b925060208401356118d28161185e565b929592945050506040919091013590565b6000602082840312156118f557600080fd5b81356116738161185e565b60006020828403121561191257600080fd5b5035919050565b6000806040838503121561192c57600080fd5b82356119378161185e565b915060208301356119478161185e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156119d85781600019048211156119be576119be611987565b808516156119cb57918102915b93841c93908002906119a2565b509250929050565b6000826119ef5750600161060f565b816119fc5750600061060f565b8160018114611a125760028114611a1c57611a38565b600191505061060f565b60ff841115611a2d57611a2d611987565b50506001821b61060f565b5060208310610133831016604e8410600b8410161715611a5b575081810a61060f565b611a65838361199d565b8060001904821115611a7957611a79611987565b029392505050565b600061167360ff8416836119e0565b808202811582820484141761060f5761060f611987565b60208082526019908201527f6f6e6c79206f776e6572206f72207461782077616c6c65747300000000000000604082015260600190565b600060208284031215611af057600080fd5b8151801515811461167357600080fd5b8181038181111561060f5761060f611987565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b3b57600080fd5b81516116738161185e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611b965784516001600160a01b031683529383019391830191600101611b71565b50506001600160a01b03969096166060850152505050608001529392505050565b8082018082111561060f5761060f611987565b600082611be757634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212202ac5c9a71a0ad6b8f3aebe3a752bb7bc76ad69ccbceaabf3ddd0329354f62e5464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80636c0a24eb11610102578063a9059cbb11610095578063cc7494d311610064578063cc7494d314610558578063dd62ed3e14610578578063e6b0ed02146105be578063f8492b1a146105de57600080fd5b8063a9059cbb146104ed578063b7d307bf1461050d578063bf474bed1461052d578063c9567bf91461054357600080fd5b8063768dc710116100d1578063768dc7101461045c5780637d1db4a51461048c5780638da5cb5b146104a257806395d89b41146104c057600080fd5b80636c0a24eb146103db5780636f268a99146103f157806370a0823114610411578063715018a61461044757600080fd5b80631f57414f1161017a57806349bd5a5e1161014957806349bd5a5e1461037157806351bc3c85146103915780635705ae43146103a65780635ef46022146103c657600080fd5b80631f57414f146102fe57806323b872dd1461031f5780632e0882141461033f578063313ce5671461035557600080fd5b80630faee56f116101b65780630faee56f1461028457806314228b0b1461029a57806317198564146102b157806318160ddd146102e957600080fd5b806306fdde03146101e8578063095ea7b3146102305780630e23500e1461026057600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060408051808201909152600d81526c141a595c88141c9bdd1bd8dbdb609a1b60208201525b6040516102279190611810565b60405180910390f35b34801561023c57600080fd5b5061025061024b366004611876565b6105fe565b6040519015158152602001610227565b34801561026c57600080fd5b50610276600c5481565b604051908152602001610227565b34801561029057600080fd5b5061027660025481565b3480156102a657600080fd5b506102af610615565b005b3480156102bd57600080fd5b50600a546102d1906001600160a01b031681565b6040516001600160a01b039091168152602001610227565b3480156102f557600080fd5b50610276610669565b34801561030a57600080fd5b50600e5461025090600160b81b900460ff1681565b34801561032b57600080fd5b5061025061033a3660046118a2565b610689565b34801561034b57600080fd5b50610276600b5481565b34801561036157600080fd5b5060405160128152602001610227565b34801561037d57600080fd5b50600e546102d1906001600160a01b031681565b34801561039d57600080fd5b506102af6106f2565b3480156103b257600080fd5b506102af6103c1366004611876565b61078b565b3480156103d257600080fd5b506102af6108c9565b3480156103e757600080fd5b5061027660045481565b3480156103fd57600080fd5b506009546102d1906001600160a01b031681565b34801561041d57600080fd5b5061027661042c3660046118e3565b6001600160a01b031660009081526005602052604090205490565b34801561045357600080fd5b506102af610950565b34801561046857600080fd5b506102506104773660046118e3565b60076020526000908152604090205460ff1681565b34801561049857600080fd5b5061027660035481565b3480156104ae57600080fd5b506000546001600160a01b03166102d1565b3480156104cc57600080fd5b506040805180820190915260048152632834b2b960e11b602082015261021a565b3480156104f957600080fd5b50610250610508366004611876565b6109c4565b34801561051957600080fd5b506102af610528366004611900565b6109d1565b34801561053957600080fd5b5061027660015481565b34801561054f57600080fd5b506102af610a9b565b34801561056457600080fd5b506102af6105733660046118e3565b610b3c565b34801561058457600080fd5b50610276610593366004611919565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156105ca57600080fd5b506102af6105d9366004611919565b610c0b565b3480156105ea57600080fd5b506102af6105f93660046118e3565b610c9f565b600061060b338484610cf2565b5060015b92915050565b6000546001600160a01b031633146106485760405162461bcd60e51b815260040161063f90611952565b60405180910390fd5b600e805460ff60b81b198116600160b81b9182900460ff1615909102179055565b60006106776012600a611a81565b6106849062989680611a90565b905090565b6000610696848484610e16565b6106e884336106e385604051806060016040528060288152602001611bed602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906113b6565b610cf2565b5060019392505050565b6000546001600160a01b031633148061071e57506009546001600160a01b0316336001600160a01b0316145b8061073c5750600a546001600160a01b0316336001600160a01b0316145b6107585760405162461bcd60e51b815260040161063f90611aa7565b30600090815260056020526040902054801561077757610777816113f0565b4780156107875761078781611585565b5050565b6000546001600160a01b03163314806107b757506009546001600160a01b0316336001600160a01b0316145b806107d55750600a546001600160a01b0316336001600160a01b0316145b6107f15760405162461bcd60e51b815260040161063f90611aa7565b6001600160a01b038216610853576040516000908190339084908381818185875af1925050503d8060008114610843576040519150601f19603f3d011682016040523d82523d6000602084013e610848565b606091505b506107879350505050565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c49190611ade565b505050565b6000546001600160a01b03163314806108f557506009546001600160a01b0316336001600160a01b0316145b806109135750600a546001600160a01b0316336001600160a01b0316145b61092f5760405162461bcd60e51b815260040161063f90611aa7565b600e805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000546001600160a01b0316331461097a5760405162461bcd60e51b815260040161063f90611952565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061060b338484610e16565b6000546001600160a01b031633146109fb5760405162461bcd60e51b815260040161063f90611952565b6032811115610a5a5760405162461bcd60e51b815260206004820152602560248201527f546178206d757374206265206c657373207468616e206f7220657175616c20746044820152646f2035302560d81b606482015260840161063f565b600b5460408051918252602082018390527f4ac0d6b0d694ec6c120242feaca94cfb6fbfe646756cd7026301e3a5984f0450910160405180910390a1600b55565b6000546001600160a01b03163314610ac55760405162461bcd60e51b815260040161063f90611952565b600e54600160a01b900460ff1615610b1f5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161063f565b600e805462ff00ff60a01b19166201000160a01b17905543600c55565b6000546001600160a01b0316331480610b6857506009546001600160a01b0316336001600160a01b0316145b80610b865750600a546001600160a01b0316336001600160a01b0316145b610ba25760405162461bcd60e51b815260040161063f90611aa7565b6001600160a01b038116600081815260086020908152604091829020805460ff8082161560ff1990921682179092558351948552161515908301527f2238b752bde5f0cb64dbc11c545edec44c801a7a4898bcb6bccb834964d13a6e910160405180910390a150565b6000546001600160a01b0316331480610c3757506009546001600160a01b0316336001600160a01b0316145b80610c555750600a546001600160a01b0316336001600160a01b0316145b610c715760405162461bcd60e51b815260040161063f90611aa7565b600980546001600160a01b039384166001600160a01b031991821617909155600a8054929093169116179055565b6000546001600160a01b03163314610cc95760405162461bcd60e51b815260040161063f90611952565b6001600160a01b03166000908152600760205260409020805460ff19811660ff90911615179055565b6001600160a01b038316610d545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161063f565b6001600160a01b038216610db55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161063f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161063f565b6001600160a01b038216610edc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161063f565b60008111610f3e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161063f565b600080546001600160a01b03858116911614801590610f6b57506000546001600160a01b03848116911614155b1561122b57600e54600160a01b900460ff16610fc95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420656e61626c6564000000604482015260640161063f565b6001600160a01b03841660009081526008602052604090205460ff16801561100a57506001600160a01b03831660009081526007602052604090205460ff16155b801561101f5750600e54600160b81b900460ff165b1561110e576003548211156110865760405162461bcd60e51b815260206004820152602760248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152661e105b5bdd5b9d60ca1b606482015260840161063f565b6004546001600160a01b0384166000908152600560205260409020546110ac9084611614565b111561110e5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526a185b1b195d105b5bdd5b9d60aa1b606482015260840161063f565b6001600160a01b03831660009081526008602052604090205460ff16801561113f57506001600160a01b0384163014155b1561116857611161606461115b61115461167a565b85906116c7565b90611749565b905061119c565b6001600160a01b03841660009081526008602052604090205460ff161561119c57611199606461115b61115461167a565b90505b30600090815260056020526040902054600e54600160a81b900460ff161580156111d35750600e546001600160a01b038581169116145b80156111e85750600e54600160b01b900460ff165b80156111f5575060015481115b15611229576112176112128461120d8460025461178b565b61178b565b6113f0565b4780156112275761122747611585565b505b505b6001600160a01b03841660009081526007602052604090205460ff168061126a57506001600160a01b03831660009081526007602052604090205460ff165b15611273575060005b80156112ed57306000908152600560205260409020546112939082611614565b30600081815260056020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112e49085815260200190565b60405180910390a35b6001600160a01b03841660009081526005602052604090205461131090836117a0565b6001600160a01b03851660009081526005602052604090205561135561133683836117a0565b6001600160a01b03851660009081526005602052604090205490611614565b6001600160a01b0380851660008181526005602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61139f85856117a0565b60405190815260200160405180910390a350505050565b600081848411156113da5760405162461bcd60e51b815260040161063f9190611810565b5060006113e78486611b00565b95945050505050565b600e805460ff60a81b1916600160a81b1790819055600160a01b900460ff161580611419575080155b61157557604080516002808252606082018352600092602083019080368337019050509050308160008151811061145257611452611b13565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190611b29565b816001815181106114e2576114e2611b13565b6001600160a01b039283166020918202929092010152600d546115089130911684610cf2565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611541908590600090869030904290600401611b46565b600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50505050505b50600e805460ff60a81b19169055565b6009546001600160a01b03166108fc6115a4606461115b85603c6116c7565b6040518115909202916000818181858888f193505050501580156115cc573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6115ec606461115b8560286116c7565b6040518115909202916000818181858888f19350505050158015610787573d6000803e3d6000fd5b6000806116218385611bb7565b9050838110156116735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161063f565b9392505050565b6000600b5460001461168d5750600b5490565b6005600c544361169d9190611b00565b116116a85750601990565b600c80546116b69043611b00565b116116c15750600c90565b50600290565b6000826000036116d95750600061060f565b60006116e58385611a90565b9050826116f28583611bca565b146116735760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161063f565b600061167383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117e2565b600081831161179a5782611673565b50919050565b600061167383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113b6565b600081836118035760405162461bcd60e51b815260040161063f9190611810565b5060006113e78486611bca565b600060208083528351808285015260005b8181101561183d57858101830151858201604001528201611821565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461187357600080fd5b50565b6000806040838503121561188957600080fd5b82356118948161185e565b946020939093013593505050565b6000806000606084860312156118b757600080fd5b83356118c28161185e565b925060208401356118d28161185e565b929592945050506040919091013590565b6000602082840312156118f557600080fd5b81356116738161185e565b60006020828403121561191257600080fd5b5035919050565b6000806040838503121561192c57600080fd5b82356119378161185e565b915060208301356119478161185e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156119d85781600019048211156119be576119be611987565b808516156119cb57918102915b93841c93908002906119a2565b509250929050565b6000826119ef5750600161060f565b816119fc5750600061060f565b8160018114611a125760028114611a1c57611a38565b600191505061060f565b60ff841115611a2d57611a2d611987565b50506001821b61060f565b5060208310610133831016604e8410600b8410161715611a5b575081810a61060f565b611a65838361199d565b8060001904821115611a7957611a79611987565b029392505050565b600061167360ff8416836119e0565b808202811582820484141761060f5761060f611987565b60208082526019908201527f6f6e6c79206f776e6572206f72207461782077616c6c65747300000000000000604082015260600190565b600060208284031215611af057600080fd5b8151801515811461167357600080fd5b8181038181111561060f5761060f611987565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b3b57600080fd5b81516116738161185e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611b965784516001600160a01b031683529383019391830191600101611b71565b50506001600160a01b03969096166060850152505050608001529392505050565b8082018082111561060f5761060f611987565b600082611be757634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212202ac5c9a71a0ad6b8f3aebe3a752bb7bc76ad69ccbceaabf3ddd0329354f62e5464736f6c63430008130033

Deployed Bytecode Sourcemap

4969:16192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10302:83;;;;;;;;;;-1:-1:-1;10372:5:0;;;;;;;;;;;;-1:-1:-1;;;10372:5:0;;;;10302:83;;;;;;;:::i;:::-;;;;;;;;11647:161;;;;;;;;;;-1:-1:-1;11647:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11647:161:0;1023:187:1;7623:31:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;7623:31:0;1215:177:1;5996:52:0;;;;;;;;;;;;;;;;21062:96;;;;;;;;;;;;;:::i;:::-;;7400:34;;;;;;;;;;-1:-1:-1;7400:34:0;;;;-1:-1:-1;;;;;7400:34:0;;;;;;-1:-1:-1;;;;;1577:32:1;;;1559:51;;1547:2;1532:18;7400:34:0;1397:219:1;10579:95:0;;;;;;;;;;;;;:::i;8287:33::-;;;;;;;;;;-1:-1:-1;8287:33:0;;;;-1:-1:-1;;;8287:33:0;;;;;;12253:313;;;;;;;;;;-1:-1:-1;12253:313:0;;;;;:::i;:::-;;:::i;7530:29::-;;;;;;;;;;;;;;;;10488:83;;;;;;;;;;-1:-1:-1;10488:83:0;;5485:2;2224:36:1;;2212:2;2197:18;10488:83:0;2082:184:1;7836:28:0;;;;;;;;;;-1:-1:-1;7836:28:0;;;;-1:-1:-1;;;;;7836:28:0;;;17764:455;;;;;;;;;;;;;:::i;19348:412::-;;;;;;;;;;-1:-1:-1;19348:412:0;;;;;:::i;:::-;;:::i;20419:216::-;;;;;;;;;;;;;:::i;6233:56::-;;;;;;;;;;;;;;;;7360:33;;;;;;;;;;-1:-1:-1;7360:33:0;;;;-1:-1:-1;;;;;7360:33:0;;;10682:119;;;;;;;;;;-1:-1:-1;10682:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;10775:18:0;10748:7;10775:18;;;:9;:18;;;;;;;10682:119;3996:148;;;;;;;;;;;;;:::i;6841:51::-;;;;;;;;;;-1:-1:-1;6841:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6127:52;;;;;;;;;;;;;;;;3782:79;;;;;;;;;;-1:-1:-1;3820:7:0;3847:6;-1:-1:-1;;;;;3847:6:0;3782:79;;10393:87;;;;;;;;;;-1:-1:-1;10465:7:0;;;;;;;;;;;;-1:-1:-1;;;10465:7:0;;;;10393:87;;10809:167;;;;;;;;;;-1:-1:-1;10809:167:0;;;;;:::i;:::-;;:::i;18770:202::-;;;;;;;;;;-1:-1:-1;18770:202:0;;;;;:::i;:::-;;:::i;5870:56::-;;;;;;;;;;;;;;;;18356:213;;;;;;;;;;;;;:::i;19967:370::-;;;;;;;;;;-1:-1:-1;19967:370:0;;;;;:::i;:::-;;:::i;10984:143::-;;;;;;;;;;-1:-1:-1;10984:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;11092:18:0;;;11065:7;11092:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10984:143;20688:283;;;;;;;;;;-1:-1:-1;20688:283:0;;;;;:::i;:::-;;:::i;19067:146::-;;;;;;;;;;-1:-1:-1;19067:146:0;;;;;:::i;:::-;;:::i;11647:161::-;11722:4;11739:39;1617:10;11762:7;11771:6;11739:8;:39::i;:::-;-1:-1:-1;11796:4:0;11647:161;;;;;:::o;21062:96::-;3909:6;;-1:-1:-1;;;;;3909:6:0;1617:10;3909:22;3901:67;;;;-1:-1:-1;;;3901:67:0;;;;;;;:::i;:::-;;;;;;;;;21136:14:::1;::::0;;-1:-1:-1;;;;21118:32:0;::::1;-1:-1:-1::0;;;21136:14:0;;;::::1;;;21135:15;21118:32:::0;;::::1;;::::0;;21062:96::o;10579:95::-;10632:7;5583:13;5485:2;5583;:13;:::i;:::-;5570:26;;:10;:26;:::i;:::-;10652:14;;10579:95;:::o;12253:313::-;12351:4;12368:36;12378:6;12386:9;12397:6;12368:9;:36::i;:::-;12415:121;12424:6;1617:10;12446:89;12484:6;12446:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12446:19:0;;;;;;:11;:19;;;;;;;;1617:10;12446:33;;;;;;;;;;:37;:89::i;:::-;12415:8;:121::i;:::-;-1:-1:-1;12554:4:0;12253:313;;;;;:::o;17764:455::-;3820:7;3847:6;-1:-1:-1;;;;;3847:6:0;1617:10;17814:23;;:53;;-1:-1:-1;17857:10:0;;-1:-1:-1;;;;;17857:10:0;1617;-1:-1:-1;;;;;17841:26:0;;17814:53;:84;;;-1:-1:-1;17887:11:0;;-1:-1:-1;;;;;17887:11:0;1617:10;-1:-1:-1;;;;;17871:27:0;;17814:84;17806:122;;;;-1:-1:-1;;;17806:122:0;;;;;;;:::i;:::-;17982:4;17941:20;10775:18;;;:9;:18;;;;;;18003:16;;17999:78;;18035:30;18052:12;18035:16;:30::i;:::-;18110:21;18146:14;;18142:70;;18176:24;18189:10;18176:12;:24::i;:::-;17795:424;;17764:455::o;19348:412::-;3820:7;3847:6;-1:-1:-1;;;;;3847:6:0;1617:10;19424:23;;:53;;-1:-1:-1;19467:10:0;;-1:-1:-1;;;;;19467:10:0;1617;-1:-1:-1;;;;;19451:26:0;;19424:53;:84;;;-1:-1:-1;19497:11:0;;-1:-1:-1;;;;;19497:11:0;1617:10;-1:-1:-1;;;;;19481:27:0;;19424:84;19416:122;;;;-1:-1:-1;;;19416:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19555:19:0;;19551:202;;19623:43;;19591:9;;;;19631:10;;19655:6;;19591:9;19623:43;19591:9;19623:43;19655:6;19631:10;19623:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19551:202:0;;-1:-1:-1;;;;19551:202:0;;19699:42;;-1:-1:-1;;;19699:42:0;;19722:10;19699:42;;;6505:51:1;6572:18;;;6565:34;;;-1:-1:-1;;;;;19699:22:0;;;;;6478:18:1;;19699:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19348:412;;:::o;20419:216::-;3820:7;3847:6;-1:-1:-1;;;;;3847:6:0;1617:10;20476:23;;:53;;-1:-1:-1;20519:10:0;;-1:-1:-1;;;;;20519:10:0;1617;-1:-1:-1;;;;;20503:26:0;;20476:53;:84;;;-1:-1:-1;20549:11:0;;-1:-1:-1;;;;;20549:11:0;1617:10;-1:-1:-1;;;;;20533:27:0;;20476:84;20468:122;;;;-1:-1:-1;;;20468:122:0;;;;;;;:::i;:::-;20616:11;;;-1:-1:-1;;;;20601:26:0;;-1:-1:-1;;;20616:11:0;;;;;;20615:12;20601:26;;;;;;20419:216::o;3996:148::-;3909:6;;-1:-1:-1;;;;;3909:6:0;1617:10;3909:22;3901:67;;;;-1:-1:-1;;;3901:67:0;;;;;;;:::i;:::-;4103:1:::1;4087:6:::0;;4066:40:::1;::::0;-1:-1:-1;;;;;4087:6:0;;::::1;::::0;4066:40:::1;::::0;4103:1;;4066:40:::1;4134:1;4117:19:::0;;-1:-1:-1;;;;;;4117:19:0::1;::::0;;3996:148::o;10809:167::-;10887:4;10904:42;1617:10;10928:9;10939:6;10904:9;:42::i;18770:202::-;3909:6;;-1:-1:-1;;;;;3909:6:0;1617:10;3909:22;3901:67;;;;-1:-1:-1;;;3901:67:0;;;;;;;:::i;:::-;18850:2:::1;18843:3;:9;;18835:59;;;::::0;-1:-1:-1;;;18835:59:0;;7094:2:1;18835:59:0::1;::::0;::::1;7076:21:1::0;7133:2;7113:18;;;7106:30;7172:34;7152:18;;;7145:62;-1:-1:-1;;;7223:18:1;;;7216:35;7268:19;;18835:59:0::1;6892:401:1::0;18835:59:0::1;18921:10;::::0;18910:27:::1;::::0;;7472:25:1;;;7528:2;7513:18;;7506:34;;;18910:27:0::1;::::0;7445:18:1;18910:27:0::1;;;;;;;18948:10;:16:::0;18770:202::o;18356:213::-;3909:6;;-1:-1:-1;;;;;3909:6:0;1617:10;3909:22;3901:67;;;;-1:-1:-1;;;3901:67:0;;;;;;;:::i;:::-;18420:11:::1;::::0;-1:-1:-1;;;18420:11:0;::::1;;;18419:12;18411:48;;;::::0;-1:-1:-1;;;18411:48:0;;7753:2:1;18411:48:0::1;::::0;::::1;7735:21:1::0;7792:2;7772:18;;;7765:30;7831:25;7811:18;;;7804:53;7874:18;;18411:48:0::1;7551:347:1::0;18411:48:0::1;18472:11;:18:::0;;-1:-1:-1;;;;18501:18:0;-1:-1:-1;;;18501:18:0;;;18549:12:::1;18530:16;:31:::0;18356:213::o;19967:370::-;3820:7;3847:6;-1:-1:-1;;;;;3847:6:0;1617:10;20048:23;;:53;;-1:-1:-1;20091:10:0;;-1:-1:-1;;;;;20091:10:0;1617;-1:-1:-1;;;;;20075:26:0;;20048:53;:84;;;-1:-1:-1;20121:11:0;;-1:-1:-1;;;;;20121:11:0;1617:10;-1:-1:-1;;;;;20105:27:0;;20048:84;20040:122;;;;-1:-1:-1;;;20040:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20211:32:0;;;;;;:15;:32;;;;;;;;;;;;;;;20210:33;-1:-1:-1;;20175:68:0;;;;;;;;20259:70;;8071:51:1;;;20296:32:0;8165:14:1;8158:22;8138:18;;;8131:50;20259:70:0;;8044:18:1;20259:70:0;;;;;;;19967:370;:::o;20688:283::-;3820:7;3847:6;-1:-1:-1;;;;;3847:6:0;1617:10;20787:23;;:53;;-1:-1:-1;20830:10:0;;-1:-1:-1;;;;;20830:10:0;1617;-1:-1:-1;;;;;20814:26:0;;20787:53;:84;;;-1:-1:-1;20860:11:0;;-1:-1:-1;;;;;20860:11:0;1617:10;-1:-1:-1;;;;;20844:27:0;;20787:84;20779:122;;;;-1:-1:-1;;;20779:122:0;;;;;;;:::i;:::-;20912:10;:19;;-1:-1:-1;;;;;20912:19:0;;;-1:-1:-1;;;;;;20912:19:0;;;;;;;20942:11;:21;;;;;;;;;;;20688:283::o;19067:146::-;3909:6;;-1:-1:-1;;;;;3909:6:0;1617:10;3909:22;3901:67;;;;-1:-1:-1;;;3901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19178:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;;;-1:-1:-1;;19147:58:0;::::1;19178:27;::::0;;::::1;19177:28;19147:58;::::0;;19067:146::o;12811:335::-;-1:-1:-1;;;;;12904:19:0;;12896:68;;;;-1:-1:-1;;;12896:68:0;;8394:2:1;12896:68:0;;;8376:21:1;8433:2;8413:18;;;8406:30;8472:34;8452:18;;;8445:62;-1:-1:-1;;;8523:18:1;;;8516:34;8567:19;;12896:68:0;8192:400:1;12896:68:0;-1:-1:-1;;;;;12983:21:0;;12975:68;;;;-1:-1:-1;;;12975:68:0;;8799:2:1;12975:68:0;;;8781:21:1;8838:2;8818:18;;;8811:30;8877:34;8857:18;;;8850:62;-1:-1:-1;;;8928:18:1;;;8921:32;8970:19;;12975:68:0;8597:398:1;12975:68:0;-1:-1:-1;;;;;13054:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13106:32;;1361:25:1;;;13106:32:0;;1334:18:1;13106:32:0;;;;;;;12811:335;;;:::o;13397:2000::-;-1:-1:-1;;;;;13485:18:0;;13477:68;;;;-1:-1:-1;;;13477:68:0;;9202:2:1;13477:68:0;;;9184:21:1;9241:2;9221:18;;;9214:30;9280:34;9260:18;;;9253:62;-1:-1:-1;;;9331:18:1;;;9324:35;9376:19;;13477:68:0;9000:401:1;13477:68:0;-1:-1:-1;;;;;13564:16:0;;13556:64;;;;-1:-1:-1;;;13556:64:0;;9608:2:1;13556:64:0;;;9590:21:1;9647:2;9627:18;;;9620:30;9686:34;9666:18;;;9659:62;-1:-1:-1;;;9737:18:1;;;9730:33;9780:19;;13556:64:0;9406:399:1;13556:64:0;13648:1;13639:6;:10;13631:64;;;;-1:-1:-1;;;13631:64:0;;10012:2:1;13631:64:0;;;9994:21:1;10051:2;10031:18;;;10024:30;10090:34;10070:18;;;10063:62;-1:-1:-1;;;10141:18:1;;;10134:39;10190:19;;13631:64:0;9810:405:1;13631:64:0;13708:17;3847:6;;-1:-1:-1;;;;;13744:15:0;;;3847:6;;13744:15;;;;:32;;-1:-1:-1;3820:7:0;3847:6;-1:-1:-1;;;;;13763:13:0;;;3847:6;;13763:13;;13744:32;13740:1178;;;13801:11;;-1:-1:-1;;;13801:11:0;;;;13793:53;;;;-1:-1:-1;;;13793:53:0;;10422:2:1;13793:53:0;;;10404:21:1;10461:2;10441:18;;;10434:30;10500:31;10480:18;;;10473:59;10549:18;;13793:53:0;10220:353:1;13793:53:0;-1:-1:-1;;;;;13867:21:0;;;;;;:15;:21;;;;;;;;:48;;;;-1:-1:-1;;;;;;13893:22:0;;;;;;:18;:22;;;;;;;;13892:23;13867:48;:66;;;;-1:-1:-1;13919:14:0;;-1:-1:-1;;;13919:14:0;;;;13867:66;13863:300;;;13971:12;;13961:6;:22;;13953:74;;;;-1:-1:-1;;;13953:74:0;;10780:2:1;13953:74:0;;;10762:21:1;10819:2;10799:18;;;10792:30;10858:34;10838:18;;;10831:62;-1:-1:-1;;;10909:18:1;;;10902:37;10956:19;;13953:74:0;10578:403:1;13953:74:0;14083:16;;-1:-1:-1;;;;;14054:13:0;;;;;;:9;:13;;;;;;:25;;14072:6;14054:17;:25::i;:::-;:45;;14046:101;;;;-1:-1:-1;;;14046:101:0;;11188:2:1;14046:101:0;;;11170:21:1;11227:2;11207:18;;;11200:30;11266:34;11246:18;;;11239:62;-1:-1:-1;;;11317:18:1;;;11310:41;11368:19;;14046:101:0;10986:407:1;14046:101:0;-1:-1:-1;;;;;14198:19:0;;;;;;:15;:19;;;;;;;;:44;;;;-1:-1:-1;;;;;;14221:21:0;;14237:4;14221:21;;14198:44;14194:235;;;14274:30;14300:3;14274:21;14285:9;:7;:9::i;:::-;14274:6;;:10;:21::i;:::-;:25;;:30::i;:::-;14262:42;;14194:235;;;-1:-1:-1;;;;;14330:21:0;;;;;;:15;:21;;;;;;;;14326:103;;;14383:30;14409:3;14383:21;14394:9;:7;:9::i;14383:30::-;14371:42;;14326:103;14494:4;14445:28;10775:18;;;:9;:18;;;;;;14520:6;;-1:-1:-1;;;14520:6:0;;;;14519:7;:30;;;;-1:-1:-1;14536:13:0;;-1:-1:-1;;;;;14530:19:0;;;14536:13;;14530:19;14519:30;:45;;;;-1:-1:-1;14553:11:0;;-1:-1:-1;;;14553:11:0;;;;14519:45;:89;;;;;14591:17;;14568:20;:40;14519:89;14515:392;;;14629:69;14646:51;14650:6;14658:38;14662:20;14684:11;;14658:3;:38::i;:::-;14646:3;:51::i;:::-;14629:16;:69::i;:::-;14746:21;14790:22;;14786:106;;14837:35;14850:21;14837:12;:35::i;:::-;14610:297;14515:392;13778:1140;13740:1178;-1:-1:-1;;;;;14934:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;14962:22:0;;;;;;:18;:22;;;;;;;;14934:50;14930:95;;;-1:-1:-1;15012:1:0;14930:95;15041:13;;15037:171;;15115:4;15097:24;;;;:9;:24;;;;;;:39;;15126:9;15097:28;:39::i;:::-;15088:4;15070:24;;;;:9;:24;;;;;;;:66;;;;15156:40;;-1:-1:-1;;;;;15156:40:0;;;;;;;15186:9;1361:25:1;;1349:2;1334:18;;1215:177;15156:40:0;;;;;;;;15037:171;-1:-1:-1;;;;;15238:15:0;;;;;;:9;:15;;;;;;:27;;15258:6;15238:19;:27::i;:::-;-1:-1:-1;;;;;15220:15:0;;;;;;:9;:15;;;;;:45;15292:40;15310:21;:6;15321:9;15310:10;:21::i;:::-;-1:-1:-1;;;;;15292:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;15276:13:0;;;;;;;:9;:13;;;;;:56;;;;15348:41;;;15367:21;:6;15378:9;15367:10;:21::i;:::-;15348:41;;1361:25:1;;;1349:2;1334:18;15348:41:0;;;;;;;13466:1931;13397:2000;;;:::o;2674:190::-;2760:7;2796:12;2788:6;;;;2780:29;;;;-1:-1:-1;;;2780:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2820:9:0;2832:5;2836:1;2832;:5;:::i;:::-;2820:17;2674:190;-1:-1:-1;;;;;2674:190:0:o;16555:542::-;9142:6;:13;;-1:-1:-1;;;;9142:13:0;-1:-1:-1;;;9142:13:0;;;;;-1:-1:-1;;;16638:11:0;::::1;9142:13:::0;16638:11:::1;16637:12;::::0;:32:::1;;-1:-1:-1::0;16653:16:0;;16637:32:::1;16671:7;16633:45;16714:16;::::0;;16728:1:::1;16714:16:::0;;;;;::::1;::::0;;16690:21:::1;::::0;16714:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;16714:16:0::1;16690:40;;16759:4;16741;16746:1;16741:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16741:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;16785:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;16785:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;16741:7;;16785:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16775:4;16780:1;16775:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16775:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;16852:15:::1;::::0;16820:62:::1;::::0;16837:4:::1;::::0;16852:15:::1;16870:11:::0;16820:8:::1;:62::i;:::-;16893:15;::::0;:196:::1;::::0;-1:-1:-1;;;16893:196:0;;-1:-1:-1;;;;;16893:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;16974:11;;16893:15:::1;::::0;17016:4;;17043::::1;::::0;17063:15:::1;::::0;16893:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16622:475;9166:1;-1:-1:-1::0;9178:6:0;:14;;-1:-1:-1;;;;9178:14:0;;;16555:542::o;17204:165::-;17261:10;;-1:-1:-1;;;;;17261:10:0;:44;17281:23;17300:3;17281:14;:6;17292:2;17281:10;:14::i;:23::-;17261:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17316:11:0;;-1:-1:-1;;;;;17316:11:0;:45;17337:23;17356:3;17337:14;:6;17348:2;17337:10;:14::i;:23::-;17316:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:179;2401:7;;2433:5;2437:1;2433;:5;:::i;:::-;2421:17;;2462:1;2457;:6;;2449:46;;;;-1:-1:-1;;;2449:46:0;;13368:2:1;2449:46:0;;;13350:21:1;13407:2;13387:18;;;13380:30;13446:29;13426:18;;;13419:57;13493:18;;2449:46:0;13166:351:1;2449:46:0;2513:1;2343:179;-1:-1:-1;;;2343:179:0:o;15800:324::-;15842:7;15866:10;;15880:1;15866:15;15862:38;;-1:-1:-1;15890:10:0;;;15800:324::o;15862:38::-;15952:1;15932:16;;15917:12;:31;;;;:::i;:::-;:36;15913:204;;-1:-1:-1;15977:2:0;;15800:324::o;15913:204::-;16036:2;16016:16;;16001:31;;:12;:31;:::i;:::-;:37;15997:120;;-1:-1:-1;16062:2:0;;15800:324::o;15997:120::-;-1:-1:-1;16104:1:0;;15800:324::o;2872:246::-;2930:7;2954:1;2959;2954:6;2950:47;;-1:-1:-1;2984:1:0;2977:8;;2950:47;3007:9;3019:5;3023:1;3019;:5;:::i;:::-;3007:17;-1:-1:-1;3052:1:0;3043:5;3047:1;3007:17;3043:5;:::i;:::-;:10;3035:56;;;;-1:-1:-1;;;3035:56:0;;13946:2:1;3035:56:0;;;13928:21:1;13985:2;13965:18;;;13958:30;14024:34;14004:18;;;13997:62;-1:-1:-1;;;14075:18:1;;;14068:31;14116:19;;3035:56:0;13744:397:1;3126:132:0;3184:7;3211:39;3215:1;3218;3211:39;;;;;;;;;;;;;;;;;:3;:39::i;16313:106::-;16370:7;16401:1;16397;:5;16396:15;;16410:1;16396:15;;;-1:-1:-1;16406:1:0;16313:106;-1:-1:-1;16313:106:0:o;2530:136::-;2588:7;2615:43;2619:1;2622;2615:43;;;;;;;;;;;;;;;;;:3;:43::i;3266:189::-;3352:7;3387:12;3380:5;3372:28;;;;-1:-1:-1;;;3372:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3411:9:0;3423:5;3427:1;3423;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1621:456::-;1698:6;1706;1714;1767:2;1755:9;1746:7;1742:23;1738:32;1735:52;;;1783:1;1780;1773:12;1735:52;1822:9;1809:23;1841:31;1866:5;1841:31;:::i;:::-;1891:5;-1:-1:-1;1948:2:1;1933:18;;1920:32;1961:33;1920:32;1961:33;:::i;:::-;1621:456;;2013:7;;-1:-1:-1;;;2067:2:1;2052:18;;;;2039:32;;1621:456::o;2479:247::-;2538:6;2591:2;2579:9;2570:7;2566:23;2562:32;2559:52;;;2607:1;2604;2597:12;2559:52;2646:9;2633:23;2665:31;2690:5;2665:31;:::i;2731:180::-;2790:6;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;-1:-1:-1;2882:23:1;;2731:180;-1:-1:-1;2731:180:1:o;2916:388::-;2984:6;2992;3045:2;3033:9;3024:7;3020:23;3016:32;3013:52;;;3061:1;3058;3051:12;3013:52;3100:9;3087:23;3119:31;3144:5;3119:31;:::i;:::-;3169:5;-1:-1:-1;3226:2:1;3211:18;;3198:32;3239:33;3198:32;3239:33;:::i;:::-;3291:7;3281:17;;;2916:388;;;;;:::o;3718:356::-;3920:2;3902:21;;;3939:18;;;3932:30;3998:34;3993:2;3978:18;;3971:62;4065:2;4050:18;;3718:356::o;4079:127::-;4140:10;4135:3;4131:20;4128:1;4121:31;4171:4;4168:1;4161:15;4195:4;4192:1;4185:15;4211:422;4300:1;4343:5;4300:1;4357:270;4378:7;4368:8;4365:21;4357:270;;;4437:4;4433:1;4429:6;4425:17;4419:4;4416:27;4413:53;;;4446:18;;:::i;:::-;4496:7;4486:8;4482:22;4479:55;;;4516:16;;;;4479:55;4595:22;;;;4555:15;;;;4357:270;;;4361:3;4211:422;;;;;:::o;4638:806::-;4687:5;4717:8;4707:80;;-1:-1:-1;4758:1:1;4772:5;;4707:80;4806:4;4796:76;;-1:-1:-1;4843:1:1;4857:5;;4796:76;4888:4;4906:1;4901:59;;;;4974:1;4969:130;;;;4881:218;;4901:59;4931:1;4922:10;;4945:5;;;4969:130;5006:3;4996:8;4993:17;4990:43;;;5013:18;;:::i;:::-;-1:-1:-1;;5069:1:1;5055:16;;5084:5;;4881:218;;5183:2;5173:8;5170:16;5164:3;5158:4;5155:13;5151:36;5145:2;5135:8;5132:16;5127:2;5121:4;5118:12;5114:35;5111:77;5108:159;;;-1:-1:-1;5220:19:1;;;5252:5;;5108:159;5299:34;5324:8;5318:4;5299:34;:::i;:::-;5369:6;5365:1;5361:6;5357:19;5348:7;5345:32;5342:58;;;5380:18;;:::i;:::-;5418:20;;4638:806;-1:-1:-1;;;4638:806:1:o;5449:140::-;5507:5;5536:47;5577:4;5567:8;5563:19;5557:4;5536:47;:::i;5594:168::-;5667:9;;;5698;;5715:15;;;5709:22;;5695:37;5685:71;;5736:18;;:::i;5767:349::-;5969:2;5951:21;;;6008:2;5988:18;;;5981:30;6047:27;6042:2;6027:18;;6020:55;6107:2;6092:18;;5767:349::o;6610:277::-;6677:6;6730:2;6718:9;6709:7;6705:23;6701:32;6698:52;;;6746:1;6743;6736:12;6698:52;6778:9;6772:16;6831:5;6824:13;6817:21;6810:5;6807:32;6797:60;;6853:1;6850;6843:12;11398:128;11465:9;;;11486:11;;;11483:37;;;11500:18;;:::i;11663:127::-;11724:10;11719:3;11715:20;11712:1;11705:31;11755:4;11752:1;11745:15;11779:4;11776:1;11769:15;11795:251;11865:6;11918:2;11906:9;11897:7;11893:23;11889:32;11886:52;;;11934:1;11931;11924:12;11886:52;11966:9;11960:16;11985:31;12010:5;11985:31;:::i;12051:980::-;12313:4;12361:3;12350:9;12346:19;12392:6;12381:9;12374:25;12418:2;12456:6;12451:2;12440:9;12436:18;12429:34;12499:3;12494:2;12483:9;12479:18;12472:31;12523:6;12558;12552:13;12589:6;12581;12574:22;12627:3;12616:9;12612:19;12605:26;;12666:2;12658:6;12654:15;12640:29;;12687:1;12697:195;12711:6;12708:1;12705:13;12697:195;;;12776:13;;-1:-1:-1;;;;;12772:39:1;12760:52;;12867:15;;;;12832:12;;;;12808:1;12726:9;12697:195;;;-1:-1:-1;;;;;;;12948:32:1;;;;12943:2;12928:18;;12921:60;-1:-1:-1;;;13012:3:1;12997:19;12990:35;12909:3;12051:980;-1:-1:-1;;;12051:980:1:o;13036:125::-;13101:9;;;13122:10;;;13119:36;;;13135:18;;:::i;13522:217::-;13562:1;13588;13578:132;;13632:10;13627:3;13623:20;13620:1;13613:31;13667:4;13664:1;13657:15;13695:4;13692:1;13685:15;13578:132;-1:-1:-1;13724:9:1;;13522:217::o

Swarm Source

ipfs://2ac5c9a71a0ad6b8f3aebe3a752bb7bc76ad69ccbceaabf3ddd0329354f62e54

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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