ETH Price: $3,463.04 (+1.61%)
Gas: 6 Gwei

Contract

0xaB870d48bE679A8c2d1eC40CF40E6eC0c97D8ED1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve167775772023-03-07 16:21:23482 days ago1678206083IN
0xaB870d48...0c97D8ED1
0 ETH0.0017047936.58048046
Approve166611732023-02-19 7:32:11498 days ago1676791931IN
0xaB870d48...0c97D8ED1
0 ETH0.0010733723.06158801
Approve166081452023-02-11 21:15:59505 days ago1676150159IN
0xaB870d48...0c97D8ED1
0 ETH0.0007016315.07474632
Approve166052072023-02-11 11:25:47506 days ago1676114747IN
0xaB870d48...0c97D8ED1
0 ETH0.0006960514.95469138
Approve166038222023-02-11 6:46:59506 days ago1676098019IN
0xaB870d48...0c97D8ED1
0 ETH0.0010718923
Approve166025752023-02-11 2:35:47506 days ago1676082947IN
0xaB870d48...0c97D8ED1
0 ETH0.0008203217.62474792
Approve166014712023-02-10 22:54:23506 days ago1676069663IN
0xaB870d48...0c97D8ED1
0 ETH0.0010163521.83646564
Approve166010772023-02-10 21:35:35506 days ago1676064935IN
0xaB870d48...0c97D8ED1
0 ETH0.0012098925.99468441
Approve166008692023-02-10 20:52:59506 days ago1676062379IN
0xaB870d48...0c97D8ED1
0 ETH0.0010713223.01737879
Approve166003312023-02-10 19:05:23506 days ago1676055923IN
0xaB870d48...0c97D8ED1
0 ETH0.0014447231
Approve166000162023-02-10 18:02:23506 days ago1676052143IN
0xaB870d48...0c97D8ED1
0 ETH0.0015985134.34412041
Approve165999472023-02-10 17:48:35506 days ago1676051315IN
0xaB870d48...0c97D8ED1
0 ETH0.0013480228.96231731
Approve165998452023-02-10 17:27:47507 days ago1676050067IN
0xaB870d48...0c97D8ED1
0 ETH0.0014421330.98427482
Approve165997222023-02-10 17:03:11507 days ago1676048591IN
0xaB870d48...0c97D8ED1
0 ETH0.0024806253.29626637
Approve165996022023-02-10 16:38:47507 days ago1676047127IN
0xaB870d48...0c97D8ED1
0 ETH0.0015904334.12648421
Transfer165994802023-02-10 16:14:23507 days ago1676045663IN
0xaB870d48...0c97D8ED1
0 ETH0.0027708239.56960957
Approve165994162023-02-10 16:01:23507 days ago1676044883IN
0xaB870d48...0c97D8ED1
0 ETH0.0035384576.02381066
Approve165993742023-02-10 15:52:47507 days ago1676044367IN
0xaB870d48...0c97D8ED1
0 ETH0.0020246243.49925243
Transfer165993722023-02-10 15:52:23507 days ago1676044343IN
0xaB870d48...0c97D8ED1
0 ETH0.0036230839.42424209
Approve165993692023-02-10 15:51:47507 days ago1676044307IN
0xaB870d48...0c97D8ED1
0 ETH0.0020289243.5353458
Transfer165993632023-02-10 15:50:35507 days ago1676044235IN
0xaB870d48...0c97D8ED1
0 ETH0.0042381448.6315563
Approve165993312023-02-10 15:43:59507 days ago1676043839IN
0xaB870d48...0c97D8ED1
0 ETH0.0018570239.84695536
Approve165993212023-02-10 15:41:59507 days ago1676043719IN
0xaB870d48...0c97D8ED1
0 ETH0.0014565831.294832
Approve165993162023-02-10 15:40:59507 days ago1676043659IN
0xaB870d48...0c97D8ED1
0 ETH0.0015919934.20414135
Approve165993102023-02-10 15:39:47507 days ago1676043587IN
0xaB870d48...0c97D8ED1
0 ETH0.0015665433.61388083
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
167776252023-03-07 16:30:59482 days ago1678206659
0xaB870d48...0c97D8ED1
0.00093969 ETH
167776252023-03-07 16:30:59482 days ago1678206659
0xaB870d48...0c97D8ED1
0.00009371 ETH
167776252023-03-07 16:30:59482 days ago1678206659
0xaB870d48...0c97D8ED1
0.00021149 ETH
167776252023-03-07 16:30:59482 days ago1678206659
0xaB870d48...0c97D8ED1
0.00105748 ETH
166096382023-02-12 2:17:11505 days ago1676168231
0xaB870d48...0c97D8ED1
0.00066972 ETH
166096382023-02-12 2:17:11505 days ago1676168231
0xaB870d48...0c97D8ED1
0.00006677 ETH
166096382023-02-12 2:17:11505 days ago1676168231
0xaB870d48...0c97D8ED1
0.00015073 ETH
166096382023-02-12 2:17:11505 days ago1676168231
0xaB870d48...0c97D8ED1
0.00075368 ETH
166081492023-02-11 21:16:47505 days ago1676150207
0xaB870d48...0c97D8ED1
0.00092914 ETH
166081492023-02-11 21:16:47505 days ago1676150207
0xaB870d48...0c97D8ED1
0.00009265 ETH
166081492023-02-11 21:16:47505 days ago1676150207
0xaB870d48...0c97D8ED1
0.00020912 ETH
166081492023-02-11 21:16:47505 days ago1676150207
0xaB870d48...0c97D8ED1
0.0010456 ETH
166047892023-02-11 10:01:11506 days ago1676109671
0xaB870d48...0c97D8ED1
0.0004238 ETH
166047892023-02-11 10:01:11506 days ago1676109671
0xaB870d48...0c97D8ED1
0.00004224 ETH
166047892023-02-11 10:01:11506 days ago1676109671
0xaB870d48...0c97D8ED1
0.00009539 ETH
166047892023-02-11 10:01:11506 days ago1676109671
0xaB870d48...0c97D8ED1
0.00047695 ETH
166038282023-02-11 6:48:11506 days ago1676098091
0xaB870d48...0c97D8ED1
0.0007871 ETH
166038282023-02-11 6:48:11506 days ago1676098091
0xaB870d48...0c97D8ED1
0.00007848 ETH
166038282023-02-11 6:48:11506 days ago1676098091
0xaB870d48...0c97D8ED1
0.00017715 ETH
166038282023-02-11 6:48:11506 days ago1676098091
0xaB870d48...0c97D8ED1
0.00088577 ETH
166025882023-02-11 2:38:35506 days ago1676083115
0xaB870d48...0c97D8ED1
0.00208541 ETH
166025882023-02-11 2:38:35506 days ago1676083115
0xaB870d48...0c97D8ED1
0.00020811 ETH
166025882023-02-11 2:38:35506 days ago1676083115
0xaB870d48...0c97D8ED1
0.00046932 ETH
166025882023-02-11 2:38:35506 days ago1676083115
0xaB870d48...0c97D8ED1
0.00234662 ETH
166025622023-02-11 2:33:11506 days ago1676082791
0xaB870d48...0c97D8ED1
0.00209814 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CASSAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-10
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.18;

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

interface IUniswapV2Router02 {
    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);

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

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

interface IUniswapV2Pair {
    function sync() external;
}

contract CASSAI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;

    event NewMessageFromCasshan(string value);

    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxWallet;
    mapping (address => bool) private _isFriender;

    mapping (address => bool) private _isBuraiking;
    mapping (address => uint256) private _lastBuy;

    string private constant _name = "Casshan AI";
    string private constant _symbol = "CASSAI";
    uint256 private _feeRate = 50;
    uint8 private constant _decimals = 18;
    uint256 private _tTotal =  1000000000  * 10**_decimals;
    uint256 private _mWallet = 20000000  * 10**_decimals;

    string public _message;
    address public messageCasshan;

    uint256 public lastEnemyTime;
    address public lastEnemyAddress;

    address payable public liquidityReceiver = payable(0x4C288662dc1e6fD54E58897F722f56983a78B98C);
    address payable public marketingAddress = payable(0x4C288662dc1e6fD54E58897F722f56983a78B98C);

    struct BuyFees{
        uint256 liquidity;
        uint256 marketing;
    }

    struct SellFees{
        uint256 liquidity;
        uint256 marketing;
    }

    BuyFees public buyFee;
    SellFees public sellFee;

    uint256 private liquidityFee;
    uint256 private marketingFee;

    uint256 private buraikingFee;

    bool private isPowerToolDisabled;

    bool private watchFriender;
    bool private stopHere;
    bool private snipeFriender;

    uint256 public buraikingsDown;
    uint256 public buraikingTxDown;

    bool private swapping;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    constructor () {
        buyFee.liquidity = 1;
        buyFee.marketing = 1;

        sellFee.liquidity = 1;
        sellFee.marketing = 1;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0x00)] = true;
        _isExcludedFromFee[address(0xdead)] = true;
        _isExcludedFromFee[marketingAddress] = true;

        _isExcludedFromMaxWallet[msg.sender] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[uniswapV2Pair] = true;
        _isExcludedFromMaxWallet[marketingAddress] = true;

        _isFriender[msg.sender] = true;
        _isFriender[marketingAddress] = true;

        messageCasshan = _msgSender();
        _message = "Stake Victory on the Moonlight";

        lastEnemyTime = 0;
        lastEnemyAddress = 0x0000000000000000000000000000000000000000;

        buraikingFee = 89;

        isPowerToolDisabled = false;

        watchFriender = true;
        stopHere = true;
        snipeFriender = true;

        buraikingsDown = 0;
        buraikingTxDown = 0;

        balances[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 view 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];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[address(account)] = excluded;
    }

    function excludeFromMaxWallet(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxWallet[address(account)] = excluded;
    }

    function includeInFrienders(address account, bool included) public onlyOwner {
        _isFriender[address(account)] = included;
    }

    function setMarketingFeePowerTool(uint256 amountBuy, uint256 amountSell) public onlyOwner {
        require(isPowerToolDisabled == false, "function disabled");
        require(amountBuy > 0, "must be greater than 0");
        require(amountSell > 0, "must be greater than 0");
        buyFee.marketing = amountBuy;
        sellFee.marketing = amountSell;
    }

    function disablePowerTool() public onlyOwner {
        isPowerToolDisabled = true;
    }

    function disableWatchFriender() public onlyOwner {
        watchFriender = false;
    }

    function disableSnipeFriender() public onlyOwner {
        snipeFriender = false;
    }

    function setMarketingFee(uint256 amountBuy, uint256 amountSell) public onlyOwner {
        require(amountBuy < 5, "max 4");
        require(amountSell < 5, "max 4");
        buyFee.marketing = amountBuy;
        sellFee.marketing = amountSell;
    }

    function setBuraikingFee(uint256 amount) public onlyOwner {
        require(amount > 0, "must be greater than 0");
        buraikingFee = amount;
    }

    function changeMessageFromCasshan(string memory messageText) external {
        require(_msgSender() == messageCasshan, "only Casshan can do this");
        _message = messageText;
        emit NewMessageFromCasshan(_message);
    }

    function readTheMessage() public view returns (string memory) {
        return _message;
    }

    function setMarketingAddress(address payable newMarketingAddress) external onlyOwner {
        marketingAddress = newMarketingAddress;
    }

    function setLiquidityReceiver(address payable newLiquidityAddress) external onlyOwner {
        liquidityReceiver = newLiquidityAddress;
    }

    function getMarketingBuyFee() public view returns (uint256) {
        return buyFee.marketing;
    }

    function getMarketingSellFee() public view returns (uint256) {
        return sellFee.marketing;
    }

    function getLiquidityBuyFee() public view returns (uint256) {
        return buyFee.liquidity;
    }

    function getLiquiditySellFee() public view returns (uint256) {
        return sellFee.liquidity;
    }

    receive() external payable {}

    function takeBuyFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * buyFee.liquidity / 100;
        uint256 marketingFeeTokens = amount * buyFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken);
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function takeSellFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * sellFee.liquidity / 100;
        uint256 marketingFeeTokens = amount * sellFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken );
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function takeBuraikingFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * sellFee.liquidity / 100;
        uint256 marketingFeeTokens = amount * buraikingFee / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken );
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isExcludedFromMaxWallet(address account) public view returns(bool) {
        return _isExcludedFromMaxWallet[account];
    }

    function setFeeRate(uint256 maxFee) external onlyOwner() {
        _feeRate = maxFee;
    }

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

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

        if(from != owner() && to != owner() && !_isExcludedFromMaxWallet[to]){
            require(balanceOf(to).add(amount) <= _mWallet, "Max Balance is reached.");
        }

        bool buraikingTx;

        if(watchFriender != false && !_isFriender[from] && !_isFriender[to]){
          require(stopHere == false, "Transfer is not possible");
        }

        if(snipeFriender != false && !_isFriender[from] && !_isFriender[to]){
          require(from == uniswapV2Pair, "Sell is temporary not possible");
          addToBuraikings(to);
          buraikingTx = true;
        }

        balances[from] -= amount;
        uint256 transferAmount = amount;

        bool takeFee;

        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            takeFee = true;
        }

        uint256 blockHelp = block.number - 5;

        if(!_isBuraiking[from] && !_isBuraiking[to]){
            buraikingTx = false;
        } else {
            buraikingTx = true;
        }

        if(_lastBuy[from] > blockHelp) {
            buraikingTx = true;
        }

        if(takeFee && !_isBuraiking[from] && !_isBuraiking[to] && !buraikingTx){
            if(to != uniswapV2Pair){
                transferAmount = takeBuyFees(amount, to);
                saveLastBuy(to);
            } else {
                transferAmount = takeSellFees(amount, from);
                uint256 swapTokenAtAmount = balanceOf(uniswapV2Pair).mul(_feeRate).div(1000);

                if (balanceOf(address(this)) >= swapTokenAtAmount && !swapping) {
                    swapping = true;
                    swapBack(swapTokenAtAmount);
                    swapping = false;
                }

                if (!swapping) {
                    swapping = true;
                    swapBack(balanceOf(address(this)));
                    swapping = false;
                }
            }
        }

        if(buraikingTx){
          if(to != uniswapV2Pair){
              transferAmount = takeBuraikingFees(amount, to);
          } else {
              transferAmount = takeBuraikingFees(amount, from);
              uint256 swapTokenAtAmount = balanceOf(uniswapV2Pair).mul(_feeRate).div(1000);

                if (balanceOf(address(this)) >= swapTokenAtAmount && !swapping) {
                    swapping = true;
                    swapBackBuraiking(swapTokenAtAmount);
                    swapping = false;
                }

                if (!swapping) {
                    swapping = true;
                    swapBackBuraiking(balanceOf(address(this)));
                    swapping = false;
                }
          }
          if (to == uniswapV2Pair) {
            addToBuraikings(from);
            lastEnemyTime = block.timestamp;
            lastEnemyAddress = from;
          }
          uint256 oldBuraikingTxDown = buraikingTxDown;
          buraikingTxDown = oldBuraikingTxDown + 1;
        }

        balances[to] += transferAmount;
        emit Transfer(from, to, transferAmount);
    }

    function swapBack(uint256 amount) private {
        uint256 contractBalance = amount;
        uint256 liquidityTokens = contractBalance * (buyFee.liquidity + sellFee.liquidity) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 marketingTokens = contractBalance * (buyFee.marketing + sellFee.marketing) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 totalTokensToSwap = liquidityTokens + marketingTokens;

        uint256 tokensForLiquidity = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForLiquidity = ethBalance.mul(liquidityTokens).div(totalTokensToSwap);
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        payable(marketingAddress).transfer(address(this).balance);
    }

    function swapBackBuraiking(uint256 amount) private {
        uint256 contractBalance = amount;
        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);
        payable(marketingAddress).transfer(address(this).balance);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        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
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH {value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function addToBuraikings(address account) private {
        _isBuraiking[address(account)] = true;
        uint256 buraikings = buraikingsDown;
        buraikingsDown = buraikings + 1;
    }

    function saveLastBuy(address account) private {
        _lastBuy[address(account)] = block.number;
    }

    function amIBuraiking(address account) public view returns(bool) {
        return _isBuraiking[account];
    }

    function amIFriender(address account) public view returns(bool) {
        return _isFriender[account];
    }

    function watchFrienderState() public view returns(bool) {
        return watchFriender;
    }

    function snipeFrienderState() public view returns(bool) {
        return snipeFriender;
    }

    function getBuraikingFee() public view returns(uint256) {
        return buraikingFee;
    }

    function getBuyMarketingFee() public view returns(uint256) {
        return buyFee.marketing;
    }

    function getSellMarketingFee() public view returns(uint256) {
        return sellFee.marketing;
    }

    function getLastEnemyTime() public view returns(uint256) {
        return lastEnemyTime;
    }

    function getLastEnemyAddress() public view returns(address) {
        return lastEnemyAddress;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"NewMessageFromCasshan","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"_message","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"account","type":"address"}],"name":"amIBuraiking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"amIFriender","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":"buraikingTxDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buraikingsDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"messageText","type":"string"}],"name":"changeMessageFromCasshan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"disablePowerTool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSnipeFriender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWatchFriender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuraikingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastEnemyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastEnemyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"included","type":"bool"}],"name":"includeInFrienders","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastEnemyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastEnemyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageCasshan","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readTheMessage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuraikingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxFee","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newLiquidityAddress","type":"address"}],"name":"setLiquidityReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountBuy","type":"uint256"},{"internalType":"uint256","name":"amountSell","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountBuy","type":"uint256"},{"internalType":"uint256","name":"amountSell","type":"uint256"}],"name":"setMarketingFeePowerTool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeFrienderState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"watchFrienderState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526032600a556012600a620000199190620005b1565b6200002990633b9aca00620005c9565b600b556200003a6012600a620005b1565b6200004a906301312d00620005c9565b600c5560118054734c288662dc1e6fd54e58897f722f56983a78b98c6001600160a01b031991821681179092556012805490911690911790553480156200009057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016013819055601481905560158190556016556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa1580156200013c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001629190620005e3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d69190620005e3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a9190620005e3565b600180546001600160a01b038086166001600160a01b0319928316178355600280548286169316929092178255336000818152600560209081526040808320805460ff19908116891790915530808552828520805483168a1790557f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc805483168a1790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805483168a1790556012805488168652838620805484168b17905586865260068552838620805484168b179055908552828520805483168a1790559654861684528184208054821689179055865486168452818420805482168917905593835260079091528082208054841687179055935490921682529190208054909116909117905590506200037d3390565b600e80546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152601e81527f5374616b6520566963746f7279206f6e20746865204d6f6f6e6c6967687400006020820152600d90620003e09082620006b3565b506000600f819055601080546001600160a01b03191690556059601955601a805463ffffffff19166301010100179055601b819055601c819055600b5490600390620004293390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200048c91815260200190565b60405180910390a350506200077f565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004f3578160001904821115620004d757620004d76200049c565b80851615620004e557918102915b93841c9390800290620004b7565b509250929050565b6000826200050c57506001620005ab565b816200051b57506000620005ab565b81600181146200053457600281146200053f576200055f565b6001915050620005ab565b60ff8411156200055357620005536200049c565b50506001821b620005ab565b5060208310610133831016604e8410600b841016171562000584575081810a620005ab565b620005908383620004b2565b8060001904821115620005a757620005a76200049c565b0290505b92915050565b6000620005c260ff841683620004fb565b9392505050565b8082028115828204841417620005ab57620005ab6200049c565b600060208284031215620005f657600080fd5b81516001600160a01b0381168114620005c257600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200063957607f821691505b6020821081036200065a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006ae57600081815260208120601f850160051c81016020861015620006895750805b601f850160051c820191505b81811015620006aa5782815560010162000695565b5050505b505050565b81516001600160401b03811115620006cf57620006cf6200060e565b620006e781620006e0845462000624565b8462000660565b602080601f8311600181146200071f5760008415620007065750858301515b600019600386901b1c1916600185901b178555620006aa565b600085815260208120601f198616915b8281101562000750578886015182559484019460019091019084016200072f565b50858210156200076f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612826806200078f6000396000f3fe6080604052600436106103545760003560e01c80638ca0a647116101c6578063c0246668116100f7578063e15c69aa11610095578063f1441e0f1161006f578063f1441e0f146109b8578063f2fde38b146109f1578063f976fb5c14610a11578063fd49575914610a2757600080fd5b8063e15c69aa14610978578063ea7e1cb61461098e578063f034ca37146109a357600080fd5b8063d38e07fe116100d1578063d38e07fe146108df578063d68dff19146108fd578063dd62ed3e14610912578063de55f1751461095857600080fd5b8063c024666814610866578063ce4b290a14610886578063d2fcc001146108bf57600080fd5b8063a5ece94111610164578063b533d4431161013e578063b533d4431461042b578063b57e368214610811578063b793967914610831578063bc4dd66a1461084657600080fd5b8063a5ece941146107bc578063a9059cbb146107dc578063b532aabe146107fc57600080fd5b806395d89b41116101a057806395d89b41146107395780639f9ed0c914610768578063a37f5a6f1461077d578063a457c2d71461079c57600080fd5b80638ca0a647146106e65780638da5cb5b146106fb578063906e9dd01461071957600080fd5b80633ae3b894116102a05780634f4b281e1161023e5780636dd3d39f116102185780636dd3d39f1461066357806370a082311461069c578063715018a6146106bc5780637b8ad885146106d157600080fd5b80634f4b281e146105f45780635342acb4146106145780636cc79ec91461064d57600080fd5b806345596e2e1161027a57806345596e2e14610579578063470624021461059957806349bd5a5e146105b45780634a050157146105d457600080fd5b80633ae3b894146103ea5780633c961f0c146105395780633f3018931461055957600080fd5b80631694505e1161030d578063264d26dd116102e7578063264d26dd146104ad5780632b14ca56146104cd578063313ce567146104fd578063395093511461051957600080fd5b80631694505e1461044057806318160ddd1461047857806323b872dd1461048d57600080fd5b806306fdde0314610360578063095ea7b3146103a55780630adde0eb146103d55780630e155a82146103ea578063122157c4146104095780631299aec41461042b57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5060408051808201909152600a8152694361737368616e20414960b01b60208201525b60405161039c9190612216565b60405180910390f35b3480156103b157600080fd5b506103c56103c036600461227c565b610a44565b604051901515815260200161039c565b3480156103e157600080fd5b5061038f610a5b565b3480156103f657600080fd5b506016545b60405190815260200161039c565b34801561041557600080fd5b506104296104243660046122a8565b610ae9565b005b34801561043757600080fd5b506014546103fb565b34801561044c57600080fd5b50600154610460906001600160a01b031681565b6040516001600160a01b03909116815260200161039c565b34801561048457600080fd5b50600b546103fb565b34801561049957600080fd5b506103c56104a83660046122e6565b610b47565b3480156104b957600080fd5b50601154610460906001600160a01b031681565b3480156104d957600080fd5b506015546016546104e8919082565b6040805192835260208301919091520161039c565b34801561050957600080fd5b506040516012815260200161039c565b34801561052557600080fd5b506103c561053436600461227c565b610b99565b34801561054557600080fd5b50610429610554366004612327565b610bd0565b34801561056557600080fd5b50610429610574366004612327565b610c8c565b34801561058557600080fd5b50610429610594366004612349565b610d26565b3480156105a557600080fd5b506013546014546104e8919082565b3480156105c057600080fd5b50600254610460906001600160a01b031681565b3480156105e057600080fd5b50600e54610460906001600160a01b031681565b34801561060057600080fd5b5061042961060f366004612378565b610d55565b34801561062057600080fd5b506103c561062f366004612429565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561065957600080fd5b506103fb601b5481565b34801561066f57600080fd5b506103c561067e366004612429565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106a857600080fd5b506103fb6106b7366004612429565b610e00565b3480156106c857600080fd5b50610429610e1b565b3480156106dd57600080fd5b50610429610e8f565b3480156106f257600080fd5b506015546103fb565b34801561070757600080fd5b506000546001600160a01b0316610460565b34801561072557600080fd5b50610429610734366004612429565b610ec8565b34801561074557600080fd5b5060408051808201909152600681526543415353414960d01b602082015261038f565b34801561077457600080fd5b506013546103fb565b34801561078957600080fd5b50601a546301000000900460ff166103c5565b3480156107a857600080fd5b506103c56107b736600461227c565b610f14565b3480156107c857600080fd5b50601254610460906001600160a01b031681565b3480156107e857600080fd5b506103c56107f736600461227c565b610f4b565b34801561080857600080fd5b50610429610f58565b34801561081d57600080fd5b5061042961082c366004612429565b610f91565b34801561083d57600080fd5b50600f546103fb565b34801561085257600080fd5b50610429610861366004612349565b610fdd565b34801561087257600080fd5b506104296108813660046122a8565b61102c565b34801561089257600080fd5b506103c56108a1366004612429565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108cb57600080fd5b506104296108da3660046122a8565b611081565b3480156108eb57600080fd5b506010546001600160a01b0316610460565b34801561090957600080fd5b5061038f6110d6565b34801561091e57600080fd5b506103fb61092d366004612446565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561096457600080fd5b50601054610460906001600160a01b031681565b34801561098457600080fd5b506103fb600f5481565b34801561099a57600080fd5b506019546103fb565b3480156109af57600080fd5b50610429611168565b3480156109c457600080fd5b506103c56109d3366004612429565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156109fd57600080fd5b50610429610a0c366004612429565b61119f565b348015610a1d57600080fd5b506103fb601c5481565b348015610a3357600080fd5b50601a54610100900460ff166103c5565b6000610a51338484611289565b5060015b92915050565b600d8054610a6890612474565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9490612474565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b505050505081565b6000546001600160a01b03163314610b1c5760405162461bcd60e51b8152600401610b13906124ae565b60405180910390fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000610b548484846113ad565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610b8f918691610b8a9086906124f9565b611289565b5060019392505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a51918590610b8a90869061250c565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610b13906124ae565b601a5460ff1615610c415760405162461bcd60e51b8152602060048201526011602482015270199d5b98dd1a5bdb88191a5cd8589b1959607a1b6044820152606401610b13565b60008211610c615760405162461bcd60e51b8152600401610b139061251f565b60008111610c815760405162461bcd60e51b8152600401610b139061251f565b601491909155601655565b6000546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610b13906124ae565b60058210610cee5760405162461bcd60e51b81526020600482015260056024820152641b585e080d60da1b6044820152606401610b13565b60058110610c815760405162461bcd60e51b81526020600482015260056024820152641b585e080d60da1b6044820152606401610b13565b6000546001600160a01b03163314610d505760405162461bcd60e51b8152600401610b13906124ae565b600a55565b600e546001600160a01b0316336001600160a01b031614610db85760405162461bcd60e51b815260206004820152601860248201527f6f6e6c79204361737368616e2063616e20646f207468697300000000000000006044820152606401610b13565b600d610dc4828261259a565b507f165888d2f050de2fb4551c219bb5f76b8ccc5674623cdf30ffdf59ed6fce1ce8600d604051610df5919061265a565b60405180910390a150565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610b13906124ae565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610eb95760405162461bcd60e51b8152600401610b13906124ae565b601a805460ff19166001179055565b6000546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b13906124ae565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a51918590610b8a9086906124f9565b6000610a513384846113ad565b6000546001600160a01b03163314610f825760405162461bcd60e51b8152600401610b13906124ae565b601a805463ff00000019169055565b6000546001600160a01b03163314610fbb5760405162461bcd60e51b8152600401610b13906124ae565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110075760405162461bcd60e51b8152600401610b13906124ae565b600081116110275760405162461bcd60e51b8152600401610b139061251f565b601955565b6000546001600160a01b031633146110565760405162461bcd60e51b8152600401610b13906124ae565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110ab5760405162461bcd60e51b8152600401610b13906124ae565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6060600d80546110e590612474565b80601f016020809104026020016040519081016040528092919081815260200182805461111190612474565b801561115e5780601f106111335761010080835404028352916020019161115e565b820191906000526020600020905b81548152906001019060200180831161114157829003601f168201915b5050505050905090565b6000546001600160a01b031633146111925760405162461bcd60e51b8152600401610b13906124ae565b601a805461ff0019169055565b6000546001600160a01b031633146111c95760405162461bcd60e51b8152600401610b13906124ae565b6001600160a01b03811661122e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b13565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166112eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b13565b6001600160a01b03821661134c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b13565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b13565b6001600160a01b0382166114735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b13565b600081116114d55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b13565b6000546001600160a01b0384811691161480159061150157506000546001600160a01b03838116911614155b801561152657506001600160a01b03821660009081526006602052604090205460ff16155b1561158f57600c546115418261153b85610e00565b90611b23565b111561158f5760405162461bcd60e51b815260206004820152601760248201527f4d61782042616c616e636520697320726561636865642e0000000000000000006044820152606401610b13565b601a54600090610100900460ff16158015906115c457506001600160a01b03841660009081526007602052604090205460ff16155b80156115e957506001600160a01b03831660009081526007602052604090205460ff16155b1561164757601a5462010000900460ff16156116475760405162461bcd60e51b815260206004820152601860248201527f5472616e73666572206973206e6f7420706f737369626c6500000000000000006044820152606401610b13565b601a546301000000900460ff161580159061167b57506001600160a01b03841660009081526007602052604090205460ff16155b80156116a057506001600160a01b03831660009081526007602052604090205460ff16155b1561170f576002546001600160a01b038581169116146117025760405162461bcd60e51b815260206004820152601e60248201527f53656c6c2069732074656d706f72617279206e6f7420706f737369626c6500006044820152606401610b13565b61170b83611b89565b5060015b6001600160a01b038416600090815260036020526040812080548492906117379084906124f9565b90915550506001600160a01b03841660009081526005602052604081205483919060ff1615801561178157506001600160a01b03851660009081526005602052604090205460ff16155b1561178a575060015b60006117976005436124f9565b6001600160a01b03881660009081526008602052604090205490915060ff161580156117dc57506001600160a01b03861660009081526008602052604090205460ff16155b156117ea57600093506117ef565b600193505b6001600160a01b03871660009081526009602052604090205481101561181457600193505b81801561183a57506001600160a01b03871660009081526008602052604090205460ff16155b801561185f57506001600160a01b03861660009081526008602052604090205460ff16155b8015611869575083155b15611970576002546001600160a01b038781169116146118b45761188d8587611bc5565b92506118af866001600160a01b03166000908152600960205260409020439055565b611970565b6118be8588611c9c565b925060006118f86103e86118f2600a546118ec600260009054906101000a90046001600160a01b0316610e00565b90611cd3565b90611d55565b90508061190430610e00565b101580156119155750601d5460ff16155b1561193b57601d805460ff1916600117905561193081611d97565b601d805460ff191690555b601d5460ff1661196e57601d805460ff1916600117905561196361195e30610e00565b611d97565b601d805460ff191690555b505b8315611a9e576002546001600160a01b0387811691161461199c576119958587611ee9565b9250611a4c565b6119a68588611ee9565b925060006119d46103e86118f2600a546118ec600260009054906101000a90046001600160a01b0316610e00565b9050806119e030610e00565b101580156119f15750601d5460ff16155b15611a1757601d805460ff19166001179055611a0c81611f1d565b601d805460ff191690555b601d5460ff16611a4a57601d805460ff19166001179055611a3f611a3a30610e00565b611f1d565b601d805460ff191690555b505b6002546001600160a01b0390811690871603611a8b57611a6b87611b89565b42600f55601080546001600160a01b0319166001600160a01b0389161790555b601c54611a9981600161250c565b601c55505b6001600160a01b03861660009081526003602052604081208054859290611ac690849061250c565b92505081905550856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611b1291815260200190565b60405180910390a350505050505050565b600080611b30838561250c565b905083811015611b825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b13565b9392505050565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155601b5490611bbe90829061250c565b601b555050565b600080606460136000015485611bdb91906126e5565b611be591906126fc565b90506000606460136001015486611bfc91906126e5565b611c0691906126fc565b9050611c12818361250c565b3060009081526003602052604081208054909190611c3190849061250c565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611c6d858561250c565b60405190815260200160405180910390a380611c8983876124f9565b611c9391906124f9565b95945050505050565b600080606460156000015485611cb291906126e5565b611cbc91906126fc565b90506000606460156001015486611bfc91906126e5565b600082600003611ce557506000610a55565b6000611cf183856126e5565b905082611cfe85836126fc565b14611b825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b13565b6000611b8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f67565b601554601654601354601454849360009390929091611db6919061250c565b611dc0919061250c565b611dca919061250c565b601554601354611dda919061250c565b611de490846126e5565b611dee91906126fc565b601554601654601354601454939450600093611e0a919061250c565b611e14919061250c565b611e1e919061250c565b601654601454611e2e919061250c565b611e3890856126e5565b611e4291906126fc565b90506000611e50828461250c565b90506000611e5f846002611d55565b90506000611e6d8683611f95565b905047611e7982611fd7565b6000611e854783611f95565b90506000611e97866118f2848b611cd3565b9050611ea38582612131565b6012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611edc573d6000803e3d6000fd5b5050505050505050505050565b600080606460156000015485611eff91906126e5565b611f0991906126fc565b90506000606460195486611bfc91906126e5565b8080611f2881611fd7565b6012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f61573d6000803e3d6000fd5b50505050565b60008183611f885760405162461bcd60e51b8152600401610b139190612216565b506000611c9384866126fc565b6000611b8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121e5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061200c5761200c61271e565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120899190612734565b8160018151811061209c5761209c61271e565b6001600160a01b0392831660209182029290920101526001546120c29130911684611289565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906120fb908590600090869030904290600401612751565b600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050505050565b6001546121499030906001600160a01b031684611289565b60015460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156121b9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121de91906127c2565b5050505050565b600081848411156122095760405162461bcd60e51b8152600401610b139190612216565b506000611c9384866124f9565b600060208083528351808285015260005b8181101561224357858101830151858201604001528201612227565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461227957600080fd5b50565b6000806040838503121561228f57600080fd5b823561229a81612264565b946020939093013593505050565b600080604083850312156122bb57600080fd5b82356122c681612264565b9150602083013580151581146122db57600080fd5b809150509250929050565b6000806000606084860312156122fb57600080fd5b833561230681612264565b9250602084013561231681612264565b929592945050506040919091013590565b6000806040838503121561233a57600080fd5b50508035926020909101359150565b60006020828403121561235b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561238a57600080fd5b813567ffffffffffffffff808211156123a257600080fd5b818401915084601f8301126123b657600080fd5b8135818111156123c8576123c8612362565b604051601f8201601f19908116603f011681019083821181831017156123f0576123f0612362565b8160405282815287602084870101111561240957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561243b57600080fd5b8135611b8281612264565b6000806040838503121561245957600080fd5b823561246481612264565b915060208301356122db81612264565b600181811c9082168061248857607f821691505b6020821081036124a857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a5557610a556124e3565b80820180821115610a5557610a556124e3565b60208082526016908201527506d7573742062652067726561746572207468616e20360541b604082015260600190565b601f82111561259557600081815260208120601f850160051c810160208610156125765750805b601f850160051c820191505b8181101561212957828155600101612582565b505050565b815167ffffffffffffffff8111156125b4576125b4612362565b6125c8816125c28454612474565b8461254f565b602080601f8311600181146125fd57600084156125e55750858301515b600019600386901b1c1916600185901b178555612129565b600085815260208120601f198616915b8281101561262c5788860151825594840194600190910190840161260d565b508582101561264a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083526000845461266e81612474565b8084870152604060018084166000811461268f57600181146126a9576126d7565b60ff1985168984015283151560051b8901830195506126d7565b896000528660002060005b858110156126cf5781548b82018601529083019088016126b4565b8a0184019650505b509398975050505050505050565b8082028115828204841417610a5557610a556124e3565b60008261271957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561274657600080fd5b8151611b8281612264565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127a15784516001600160a01b03168352938301939183019160010161277c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127d757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220138cad458ca7b926debf0117cabf497817444e9ac4de3705f4fc947ba4e4831064736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638ca0a647116101c6578063c0246668116100f7578063e15c69aa11610095578063f1441e0f1161006f578063f1441e0f146109b8578063f2fde38b146109f1578063f976fb5c14610a11578063fd49575914610a2757600080fd5b8063e15c69aa14610978578063ea7e1cb61461098e578063f034ca37146109a357600080fd5b8063d38e07fe116100d1578063d38e07fe146108df578063d68dff19146108fd578063dd62ed3e14610912578063de55f1751461095857600080fd5b8063c024666814610866578063ce4b290a14610886578063d2fcc001146108bf57600080fd5b8063a5ece94111610164578063b533d4431161013e578063b533d4431461042b578063b57e368214610811578063b793967914610831578063bc4dd66a1461084657600080fd5b8063a5ece941146107bc578063a9059cbb146107dc578063b532aabe146107fc57600080fd5b806395d89b41116101a057806395d89b41146107395780639f9ed0c914610768578063a37f5a6f1461077d578063a457c2d71461079c57600080fd5b80638ca0a647146106e65780638da5cb5b146106fb578063906e9dd01461071957600080fd5b80633ae3b894116102a05780634f4b281e1161023e5780636dd3d39f116102185780636dd3d39f1461066357806370a082311461069c578063715018a6146106bc5780637b8ad885146106d157600080fd5b80634f4b281e146105f45780635342acb4146106145780636cc79ec91461064d57600080fd5b806345596e2e1161027a57806345596e2e14610579578063470624021461059957806349bd5a5e146105b45780634a050157146105d457600080fd5b80633ae3b894146103ea5780633c961f0c146105395780633f3018931461055957600080fd5b80631694505e1161030d578063264d26dd116102e7578063264d26dd146104ad5780632b14ca56146104cd578063313ce567146104fd578063395093511461051957600080fd5b80631694505e1461044057806318160ddd1461047857806323b872dd1461048d57600080fd5b806306fdde0314610360578063095ea7b3146103a55780630adde0eb146103d55780630e155a82146103ea578063122157c4146104095780631299aec41461042b57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5060408051808201909152600a8152694361737368616e20414960b01b60208201525b60405161039c9190612216565b60405180910390f35b3480156103b157600080fd5b506103c56103c036600461227c565b610a44565b604051901515815260200161039c565b3480156103e157600080fd5b5061038f610a5b565b3480156103f657600080fd5b506016545b60405190815260200161039c565b34801561041557600080fd5b506104296104243660046122a8565b610ae9565b005b34801561043757600080fd5b506014546103fb565b34801561044c57600080fd5b50600154610460906001600160a01b031681565b6040516001600160a01b03909116815260200161039c565b34801561048457600080fd5b50600b546103fb565b34801561049957600080fd5b506103c56104a83660046122e6565b610b47565b3480156104b957600080fd5b50601154610460906001600160a01b031681565b3480156104d957600080fd5b506015546016546104e8919082565b6040805192835260208301919091520161039c565b34801561050957600080fd5b506040516012815260200161039c565b34801561052557600080fd5b506103c561053436600461227c565b610b99565b34801561054557600080fd5b50610429610554366004612327565b610bd0565b34801561056557600080fd5b50610429610574366004612327565b610c8c565b34801561058557600080fd5b50610429610594366004612349565b610d26565b3480156105a557600080fd5b506013546014546104e8919082565b3480156105c057600080fd5b50600254610460906001600160a01b031681565b3480156105e057600080fd5b50600e54610460906001600160a01b031681565b34801561060057600080fd5b5061042961060f366004612378565b610d55565b34801561062057600080fd5b506103c561062f366004612429565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561065957600080fd5b506103fb601b5481565b34801561066f57600080fd5b506103c561067e366004612429565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106a857600080fd5b506103fb6106b7366004612429565b610e00565b3480156106c857600080fd5b50610429610e1b565b3480156106dd57600080fd5b50610429610e8f565b3480156106f257600080fd5b506015546103fb565b34801561070757600080fd5b506000546001600160a01b0316610460565b34801561072557600080fd5b50610429610734366004612429565b610ec8565b34801561074557600080fd5b5060408051808201909152600681526543415353414960d01b602082015261038f565b34801561077457600080fd5b506013546103fb565b34801561078957600080fd5b50601a546301000000900460ff166103c5565b3480156107a857600080fd5b506103c56107b736600461227c565b610f14565b3480156107c857600080fd5b50601254610460906001600160a01b031681565b3480156107e857600080fd5b506103c56107f736600461227c565b610f4b565b34801561080857600080fd5b50610429610f58565b34801561081d57600080fd5b5061042961082c366004612429565b610f91565b34801561083d57600080fd5b50600f546103fb565b34801561085257600080fd5b50610429610861366004612349565b610fdd565b34801561087257600080fd5b506104296108813660046122a8565b61102c565b34801561089257600080fd5b506103c56108a1366004612429565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108cb57600080fd5b506104296108da3660046122a8565b611081565b3480156108eb57600080fd5b506010546001600160a01b0316610460565b34801561090957600080fd5b5061038f6110d6565b34801561091e57600080fd5b506103fb61092d366004612446565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561096457600080fd5b50601054610460906001600160a01b031681565b34801561098457600080fd5b506103fb600f5481565b34801561099a57600080fd5b506019546103fb565b3480156109af57600080fd5b50610429611168565b3480156109c457600080fd5b506103c56109d3366004612429565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156109fd57600080fd5b50610429610a0c366004612429565b61119f565b348015610a1d57600080fd5b506103fb601c5481565b348015610a3357600080fd5b50601a54610100900460ff166103c5565b6000610a51338484611289565b5060015b92915050565b600d8054610a6890612474565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9490612474565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b505050505081565b6000546001600160a01b03163314610b1c5760405162461bcd60e51b8152600401610b13906124ae565b60405180910390fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000610b548484846113ad565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610b8f918691610b8a9086906124f9565b611289565b5060019392505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a51918590610b8a90869061250c565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610b13906124ae565b601a5460ff1615610c415760405162461bcd60e51b8152602060048201526011602482015270199d5b98dd1a5bdb88191a5cd8589b1959607a1b6044820152606401610b13565b60008211610c615760405162461bcd60e51b8152600401610b139061251f565b60008111610c815760405162461bcd60e51b8152600401610b139061251f565b601491909155601655565b6000546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610b13906124ae565b60058210610cee5760405162461bcd60e51b81526020600482015260056024820152641b585e080d60da1b6044820152606401610b13565b60058110610c815760405162461bcd60e51b81526020600482015260056024820152641b585e080d60da1b6044820152606401610b13565b6000546001600160a01b03163314610d505760405162461bcd60e51b8152600401610b13906124ae565b600a55565b600e546001600160a01b0316336001600160a01b031614610db85760405162461bcd60e51b815260206004820152601860248201527f6f6e6c79204361737368616e2063616e20646f207468697300000000000000006044820152606401610b13565b600d610dc4828261259a565b507f165888d2f050de2fb4551c219bb5f76b8ccc5674623cdf30ffdf59ed6fce1ce8600d604051610df5919061265a565b60405180910390a150565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610b13906124ae565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610eb95760405162461bcd60e51b8152600401610b13906124ae565b601a805460ff19166001179055565b6000546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b13906124ae565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a51918590610b8a9086906124f9565b6000610a513384846113ad565b6000546001600160a01b03163314610f825760405162461bcd60e51b8152600401610b13906124ae565b601a805463ff00000019169055565b6000546001600160a01b03163314610fbb5760405162461bcd60e51b8152600401610b13906124ae565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110075760405162461bcd60e51b8152600401610b13906124ae565b600081116110275760405162461bcd60e51b8152600401610b139061251f565b601955565b6000546001600160a01b031633146110565760405162461bcd60e51b8152600401610b13906124ae565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110ab5760405162461bcd60e51b8152600401610b13906124ae565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6060600d80546110e590612474565b80601f016020809104026020016040519081016040528092919081815260200182805461111190612474565b801561115e5780601f106111335761010080835404028352916020019161115e565b820191906000526020600020905b81548152906001019060200180831161114157829003601f168201915b5050505050905090565b6000546001600160a01b031633146111925760405162461bcd60e51b8152600401610b13906124ae565b601a805461ff0019169055565b6000546001600160a01b031633146111c95760405162461bcd60e51b8152600401610b13906124ae565b6001600160a01b03811661122e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b13565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166112eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b13565b6001600160a01b03821661134c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b13565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b13565b6001600160a01b0382166114735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b13565b600081116114d55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b13565b6000546001600160a01b0384811691161480159061150157506000546001600160a01b03838116911614155b801561152657506001600160a01b03821660009081526006602052604090205460ff16155b1561158f57600c546115418261153b85610e00565b90611b23565b111561158f5760405162461bcd60e51b815260206004820152601760248201527f4d61782042616c616e636520697320726561636865642e0000000000000000006044820152606401610b13565b601a54600090610100900460ff16158015906115c457506001600160a01b03841660009081526007602052604090205460ff16155b80156115e957506001600160a01b03831660009081526007602052604090205460ff16155b1561164757601a5462010000900460ff16156116475760405162461bcd60e51b815260206004820152601860248201527f5472616e73666572206973206e6f7420706f737369626c6500000000000000006044820152606401610b13565b601a546301000000900460ff161580159061167b57506001600160a01b03841660009081526007602052604090205460ff16155b80156116a057506001600160a01b03831660009081526007602052604090205460ff16155b1561170f576002546001600160a01b038581169116146117025760405162461bcd60e51b815260206004820152601e60248201527f53656c6c2069732074656d706f72617279206e6f7420706f737369626c6500006044820152606401610b13565b61170b83611b89565b5060015b6001600160a01b038416600090815260036020526040812080548492906117379084906124f9565b90915550506001600160a01b03841660009081526005602052604081205483919060ff1615801561178157506001600160a01b03851660009081526005602052604090205460ff16155b1561178a575060015b60006117976005436124f9565b6001600160a01b03881660009081526008602052604090205490915060ff161580156117dc57506001600160a01b03861660009081526008602052604090205460ff16155b156117ea57600093506117ef565b600193505b6001600160a01b03871660009081526009602052604090205481101561181457600193505b81801561183a57506001600160a01b03871660009081526008602052604090205460ff16155b801561185f57506001600160a01b03861660009081526008602052604090205460ff16155b8015611869575083155b15611970576002546001600160a01b038781169116146118b45761188d8587611bc5565b92506118af866001600160a01b03166000908152600960205260409020439055565b611970565b6118be8588611c9c565b925060006118f86103e86118f2600a546118ec600260009054906101000a90046001600160a01b0316610e00565b90611cd3565b90611d55565b90508061190430610e00565b101580156119155750601d5460ff16155b1561193b57601d805460ff1916600117905561193081611d97565b601d805460ff191690555b601d5460ff1661196e57601d805460ff1916600117905561196361195e30610e00565b611d97565b601d805460ff191690555b505b8315611a9e576002546001600160a01b0387811691161461199c576119958587611ee9565b9250611a4c565b6119a68588611ee9565b925060006119d46103e86118f2600a546118ec600260009054906101000a90046001600160a01b0316610e00565b9050806119e030610e00565b101580156119f15750601d5460ff16155b15611a1757601d805460ff19166001179055611a0c81611f1d565b601d805460ff191690555b601d5460ff16611a4a57601d805460ff19166001179055611a3f611a3a30610e00565b611f1d565b601d805460ff191690555b505b6002546001600160a01b0390811690871603611a8b57611a6b87611b89565b42600f55601080546001600160a01b0319166001600160a01b0389161790555b601c54611a9981600161250c565b601c55505b6001600160a01b03861660009081526003602052604081208054859290611ac690849061250c565b92505081905550856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611b1291815260200190565b60405180910390a350505050505050565b600080611b30838561250c565b905083811015611b825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b13565b9392505050565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155601b5490611bbe90829061250c565b601b555050565b600080606460136000015485611bdb91906126e5565b611be591906126fc565b90506000606460136001015486611bfc91906126e5565b611c0691906126fc565b9050611c12818361250c565b3060009081526003602052604081208054909190611c3190849061250c565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611c6d858561250c565b60405190815260200160405180910390a380611c8983876124f9565b611c9391906124f9565b95945050505050565b600080606460156000015485611cb291906126e5565b611cbc91906126fc565b90506000606460156001015486611bfc91906126e5565b600082600003611ce557506000610a55565b6000611cf183856126e5565b905082611cfe85836126fc565b14611b825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b13565b6000611b8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f67565b601554601654601354601454849360009390929091611db6919061250c565b611dc0919061250c565b611dca919061250c565b601554601354611dda919061250c565b611de490846126e5565b611dee91906126fc565b601554601654601354601454939450600093611e0a919061250c565b611e14919061250c565b611e1e919061250c565b601654601454611e2e919061250c565b611e3890856126e5565b611e4291906126fc565b90506000611e50828461250c565b90506000611e5f846002611d55565b90506000611e6d8683611f95565b905047611e7982611fd7565b6000611e854783611f95565b90506000611e97866118f2848b611cd3565b9050611ea38582612131565b6012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611edc573d6000803e3d6000fd5b5050505050505050505050565b600080606460156000015485611eff91906126e5565b611f0991906126fc565b90506000606460195486611bfc91906126e5565b8080611f2881611fd7565b6012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f61573d6000803e3d6000fd5b50505050565b60008183611f885760405162461bcd60e51b8152600401610b139190612216565b506000611c9384866126fc565b6000611b8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121e5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061200c5761200c61271e565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120899190612734565b8160018151811061209c5761209c61271e565b6001600160a01b0392831660209182029290920101526001546120c29130911684611289565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906120fb908590600090869030904290600401612751565b600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050505050565b6001546121499030906001600160a01b031684611289565b60015460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156121b9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121de91906127c2565b5050505050565b600081848411156122095760405162461bcd60e51b8152600401610b139190612216565b506000611c9384866124f9565b600060208083528351808285015260005b8181101561224357858101830151858201604001528201612227565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461227957600080fd5b50565b6000806040838503121561228f57600080fd5b823561229a81612264565b946020939093013593505050565b600080604083850312156122bb57600080fd5b82356122c681612264565b9150602083013580151581146122db57600080fd5b809150509250929050565b6000806000606084860312156122fb57600080fd5b833561230681612264565b9250602084013561231681612264565b929592945050506040919091013590565b6000806040838503121561233a57600080fd5b50508035926020909101359150565b60006020828403121561235b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561238a57600080fd5b813567ffffffffffffffff808211156123a257600080fd5b818401915084601f8301126123b657600080fd5b8135818111156123c8576123c8612362565b604051601f8201601f19908116603f011681019083821181831017156123f0576123f0612362565b8160405282815287602084870101111561240957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561243b57600080fd5b8135611b8281612264565b6000806040838503121561245957600080fd5b823561246481612264565b915060208301356122db81612264565b600181811c9082168061248857607f821691505b6020821081036124a857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a5557610a556124e3565b80820180821115610a5557610a556124e3565b60208082526016908201527506d7573742062652067726561746572207468616e20360541b604082015260600190565b601f82111561259557600081815260208120601f850160051c810160208610156125765750805b601f850160051c820191505b8181101561212957828155600101612582565b505050565b815167ffffffffffffffff8111156125b4576125b4612362565b6125c8816125c28454612474565b8461254f565b602080601f8311600181146125fd57600084156125e55750858301515b600019600386901b1c1916600185901b178555612129565b600085815260208120601f198616915b8281101561262c5788860151825594840194600190910190840161260d565b508582101561264a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083526000845461266e81612474565b8084870152604060018084166000811461268f57600181146126a9576126d7565b60ff1985168984015283151560051b8901830195506126d7565b896000528660002060005b858110156126cf5781548b82018601529083019088016126b4565b8a0184019650505b509398975050505050505050565b8082028115828204841417610a5557610a556124e3565b60008261271957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561274657600080fd5b8151611b8281612264565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127a15784516001600160a01b03168352938301939183019160010161277c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127d757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220138cad458ca7b926debf0117cabf497817444e9ac4de3705f4fc947ba4e4831064736f6c63430008120033

Deployed Bytecode Sourcemap

4651:17020:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8212:83;;;;;;;;;;-1:-1:-1;8282:5:0;;;;;;;;;;;;-1:-1:-1;;;8282:5:0;;;;8212:83;;;;;;;:::i;:::-;;;;;;;;9044:161;;;;;;;;;;-1:-1:-1;9044:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9044:161:0;1023:187:1;5587:22:0;;;;;;;;;;;;;:::i;12244:104::-;;;;;;;;;;-1:-1:-1;12323:17:0;;12244:104;;;1361:25:1;;;1349:2;1334:18;12244:104:0;1215:177:1;10250:136:0;;;;;;;;;;-1:-1:-1;10250:136:0;;;;;:::i;:::-;;:::i;:::-;;12134:102;;;;;;;;;;-1:-1:-1;12212:16:0;;12134:102;;4735:41;;;;;;;;;;-1:-1:-1;4735:41:0;;;;-1:-1:-1;;;;;4735:41:0;;;;;;-1:-1:-1;;;;;2008:32:1;;;1990:51;;1978:2;1963:18;4735:41:0;1818:229:1;8489:95:0;;;;;;;;;;-1:-1:-1;8569:7:0;;8489:95;;9213:266;;;;;;;;;;-1:-1:-1;9213:266:0;;;;;:::i;:::-;;:::i;5729:94::-;;;;;;;;;;-1:-1:-1;5729:94:0;;;;-1:-1:-1;;;;;5729:94:0;;;6133:23;;;;;;;;;;-1:-1:-1;6133:23:0;;;;;;;;;;;;;2911:25:1;;;2967:2;2952:18;;2945:34;;;;2884:18;6133:23:0;2737:248:1;8398:83:0;;;;;;;;;;-1:-1:-1;8398:83:0;;5456:2;3132:36:1;;3120:2;3105:18;8398:83:0;2990:184:1;9487:215:0;;;;;;;;;;-1:-1:-1;9487:215:0;;;;;:::i;:::-;;:::i;10394:366::-;;;;;;;;;;-1:-1:-1;10394:366:0;;;;;:::i;:::-;;:::i;11060:254::-;;;;;;;;;;-1:-1:-1;11060:254:0;;;;;:::i;:::-;;:::i;14286:93::-;;;;;;;;;;-1:-1:-1;14286:93:0;;;;;:::i;:::-;;:::i;6105:21::-;;;;;;;;;;-1:-1:-1;6105:21:0;;;;;;;;;4785:28;;;;;;;;;;-1:-1:-1;4785:28:0;;;;-1:-1:-1;;;;;4785:28:0;;;5616:29;;;;;;;;;;-1:-1:-1;5616:29:0;;;;-1:-1:-1;;;;;5616:29:0;;;11484:236;;;;;;;;;;-1:-1:-1;11484:236:0;;;;;:::i;:::-;;:::i;14012:123::-;;;;;;;;;;-1:-1:-1;14012:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;14100:27:0;14076:4;14100:27;;;:18;:27;;;;;;;;;14012:123;6411:29;;;;;;;;;;;;;;;;14143:135;;;;;;;;;;-1:-1:-1;14143:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;14237:33:0;14213:4;14237:33;;;:24;:33;;;;;;;;;14143:135;8592:118;;;;;;;;;;-1:-1:-1;8592:118:0;;;;;:::i;:::-;;:::i;3112:148::-;;;;;;;;;;;;;:::i;10768:90::-;;;;;;;;;;;;;:::i;12466:104::-;;;;;;;;;;-1:-1:-1;12545:7:0;:17;12466:104;;2898:79;;;;;;;;;;-1:-1:-1;2936:7:0;2963:6;-1:-1:-1;;;;;2963:6:0;2898:79;;11832:142;;;;;;;;;;-1:-1:-1;11832:142:0;;;;;:::i;:::-;;:::i;8303:87::-;;;;;;;;;;-1:-1:-1;8375:7:0;;;;;;;;;;;;-1:-1:-1;;;8375:7:0;;;;8303:87;;12356:102;;;;;;;;;;-1:-1:-1;12434:6:0;:16;12356:102;;21035:95;;;;;;;;;;-1:-1:-1;21109:13:0;;;;;;;21035:95;;9710:225;;;;;;;;;;-1:-1:-1;9710:225:0;;;;;:::i;:::-;;:::i;5830:93::-;;;;;;;;;;-1:-1:-1;5830:93:0;;;;-1:-1:-1;;;;;5830:93:0;;;8718:167;;;;;;;;;;-1:-1:-1;8718:167:0;;;;;:::i;:::-;;:::i;10963:89::-;;;;;;;;;;;;;:::i;11982:144::-;;;;;;;;;;-1:-1:-1;11982:144:0;;;;;:::i;:::-;;:::i;21460:96::-;;;;;;;;;;-1:-1:-1;21535:13:0;;21460:96;;11322:154;;;;;;;;;;-1:-1:-1;11322:154:0;;;;;:::i;:::-;;:::i;9943:140::-;;;;;;;;;;-1:-1:-1;9943:140:0;;;;;:::i;:::-;;:::i;20694:112::-;;;;;;;;;;-1:-1:-1;20694:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;20777:21:0;20753:4;20777:21;;;:12;:21;;;;;;;;;20694:112;10091:151;;;;;;;;;;-1:-1:-1;10091:151:0;;;;;:::i;:::-;;:::i;21564:102::-;;;;;;;;;;-1:-1:-1;21642:16:0;;-1:-1:-1;;;;;21642:16:0;21564:102;;11728:96;;;;;;;;;;;;;:::i;8893:143::-;;;;;;;;;;-1:-1:-1;8893:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9001:18:0;;;8974:7;9001:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8893:143;5689:31;;;;;;;;;;-1:-1:-1;5689:31:0;;;;-1:-1:-1;;;;;5689:31:0;;;5654:28;;;;;;;;;;;;;;;;21138:94;;;;;;;;;;-1:-1:-1;21212:12:0;;21138:94;;10866:89;;;;;;;;;;;;;:::i;20814:110::-;;;;;;;;;;-1:-1:-1;20814:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;20896:20:0;20872:4;20896:20;;;:11;:20;;;;;;;;;20814:110;3268:244;;;;;;;;;;-1:-1:-1;3268:244:0;;;;;:::i;:::-;;:::i;6447:30::-;;;;;;;;;;;;;;;;20932:95;;;;;;;;;;-1:-1:-1;21006:13:0;;;;;;;20932:95;;9044:161;9119:4;9136:39;2430:10;9159:7;9168:6;9136:8;:39::i;:::-;-1:-1:-1;9193:4:0;9044:161;;;;;:::o;5587:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10250:136::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;10338:29:0;;;::::1;;::::0;;;:11:::1;:29;::::0;;;;:40;;-1:-1:-1;;10338:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10250:136::o;9213:266::-;9311:4;9328:36;9338:6;9346:9;9357:6;9328:9;:36::i;:::-;-1:-1:-1;;;;;9406:19:0;;;;;;:11;:19;;;;;;;;2430:10;9406:33;;;;;;;;;9375:74;;9384:6;;9406:42;;9442:6;;9406:42;:::i;:::-;9375:8;:74::i;:::-;-1:-1:-1;9467:4:0;9213:266;;;;;:::o;9487:215::-;2430:10;9575:4;9624:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9624:34:0;;;;;;;;;;9575:4;;9592:80;;9615:7;;9624:47;;9661:10;;9624:47;:::i;10394:366::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;10503:19:::1;::::0;::::1;;:28;10495:58;;;::::0;-1:-1:-1;;;10495:58:0;;7132:2:1;10495:58:0::1;::::0;::::1;7114:21:1::0;7171:2;7151:18;;;7144:30;-1:-1:-1;;;7190:18:1;;;7183:47;7247:18;;10495:58:0::1;6930:341:1::0;10495:58:0::1;10584:1;10572:9;:13;10564:48;;;;-1:-1:-1::0;;;10564:48:0::1;;;;;;;:::i;:::-;10644:1;10631:10;:14;10623:49;;;;-1:-1:-1::0;;;10623:49:0::1;;;;;;;:::i;:::-;10683:16:::0;:28;;;;10722:17;:30;10394:366::o;11060:254::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;11172:1:::1;11160:9;:13;11152:31;;;::::0;-1:-1:-1;;;11152:31:0;;7829:2:1;11152:31:0::1;::::0;::::1;7811:21:1::0;7868:1;7848:18;;;7841:29;-1:-1:-1;;;7886:18:1;;;7879:35;7931:18;;11152:31:0::1;7627:328:1::0;11152:31:0::1;11215:1;11202:10;:14;11194:32;;;::::0;-1:-1:-1;;;11194:32:0;;7829:2:1;11194:32:0::1;::::0;::::1;7811:21:1::0;7868:1;7848:18;;;7841:29;-1:-1:-1;;;7886:18:1;;;7879:35;7931:18;;11194:32:0::1;7627:328:1::0;14286:93:0;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;14354:8:::1;:17:::0;14286:93::o;11484:236::-;11589:14;;-1:-1:-1;;;;;11589:14:0;2430:10;-1:-1:-1;;;;;11573:30:0;;11565:67;;;;-1:-1:-1;;;11565:67:0;;8162:2:1;11565:67:0;;;8144:21:1;8201:2;8181:18;;;8174:30;8240:26;8220:18;;;8213:54;8284:18;;11565:67:0;7960:348:1;11565:67:0;11643:8;:22;11654:11;11643:8;:22;:::i;:::-;;11681:31;11703:8;11681:31;;;;;;:::i;:::-;;;;;;;;11484:236;:::o;8592:118::-;-1:-1:-1;;;;;8685:17:0;8658:7;8685:17;;;:8;:17;;;;;;;8592:118::o;3112:148::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;3219:1:::1;3203:6:::0;;3182:40:::1;::::0;-1:-1:-1;;;;;3203:6:0;;::::1;::::0;3182:40:::1;::::0;3219:1;;3182:40:::1;3250:1;3233:19:::0;;-1:-1:-1;;;;;;3233:19:0::1;::::0;;3112:148::o;10768:90::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;10824:19:::1;:26:::0;;-1:-1:-1;;10824:26:0::1;10846:4;10824:26;::::0;;10768:90::o;11832:142::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;11928:16:::1;:38:::0;;-1:-1:-1;;;;;;11928:38:0::1;-1:-1:-1::0;;;;;11928:38:0;;;::::1;::::0;;;::::1;::::0;;11832:142::o;9710:225::-;2430:10;9803:4;9852:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9852:34:0;;;;;;;;;;9803:4;;9820:85;;9843:7;;9852:52;;9889:15;;9852:52;:::i;8718:167::-;8796:4;8813:42;2430:10;8837:9;8848:6;8813:9;:42::i;10963:89::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;11023:13:::1;:21:::0;;-1:-1:-1;;11023:21:0::1;::::0;;10963:89::o;11982:144::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;12079:17:::1;:39:::0;;-1:-1:-1;;;;;;12079:39:0::1;-1:-1:-1::0;;;;;12079:39:0;;;::::1;::::0;;;::::1;::::0;;11982:144::o;11322:154::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;11408:1:::1;11399:6;:10;11391:45;;;;-1:-1:-1::0;;;11391:45:0::1;;;;;;;:::i;:::-;11447:12;:21:::0;11322:154::o;9943:140::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10028:36:0;;;::::1;;::::0;;;:18:::1;:36;::::0;;;;:47;;-1:-1:-1;;10028:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9943:140::o;10091:151::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10181:42:0;;;::::1;;::::0;;;:24:::1;:42;::::0;;;;:53;;-1:-1:-1;;10181:53:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10091:151::o;11728:96::-;11775:13;11808:8;11801:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11728:96;:::o;10866:89::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;10926:13:::1;:21:::0;;-1:-1:-1;;10926:21:0::1;::::0;;10866:89::o;3268:244::-;3025:6;;-1:-1:-1;;;;;3025:6:0;2430:10;3025:22;3017:67;;;;-1:-1:-1;;;3017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3357:22:0;::::1;3349:73;;;::::0;-1:-1:-1;;;3349:73:0;;11687:2:1;3349:73:0::1;::::0;::::1;11669:21:1::0;11726:2;11706:18;;;11699:30;11765:34;11745:18;;;11738:62;-1:-1:-1;;;11816:18:1;;;11809:36;11862:19;;3349:73:0::1;11485:402:1::0;3349:73:0::1;3459:6;::::0;;3438:38:::1;::::0;-1:-1:-1;;;;;3438:38:0;;::::1;::::0;3459:6;::::1;::::0;3438:38:::1;::::0;::::1;3487:6;:17:::0;;-1:-1:-1;;;;;;3487:17:0::1;-1:-1:-1::0;;;;;3487:17:0;;;::::1;::::0;;;::::1;::::0;;3268:244::o;14387:337::-;-1:-1:-1;;;;;14480:19:0;;14472:68;;;;-1:-1:-1;;;14472:68:0;;12094:2:1;14472:68:0;;;12076:21:1;12133:2;12113:18;;;12106:30;12172:34;12152:18;;;12145:62;-1:-1:-1;;;12223:18:1;;;12216:34;12267:19;;14472:68:0;11892:400:1;14472:68:0;-1:-1:-1;;;;;14559:21:0;;14551:68;;;;-1:-1:-1;;;14551:68:0;;12499:2:1;14551:68:0;;;12481:21:1;12538:2;12518:18;;;12511:30;12577:34;12557:18;;;12550:62;-1:-1:-1;;;12628:18:1;;;12621:32;12670:19;;14551:68:0;12297:398:1;14551:68:0;-1:-1:-1;;;;;14632:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14684:32;;1361:25:1;;;14684:32:0;;1334:18:1;14684:32:0;;;;;;;14387:337;;;:::o;14732:3425::-;-1:-1:-1;;;;;14854:18:0;;14846:68;;;;-1:-1:-1;;;14846:68:0;;12902:2:1;14846:68:0;;;12884:21:1;12941:2;12921:18;;;12914:30;12980:34;12960:18;;;12953:62;-1:-1:-1;;;13031:18:1;;;13024:35;13076:19;;14846:68:0;12700:401:1;14846:68:0;-1:-1:-1;;;;;14933:16:0;;14925:64;;;;-1:-1:-1;;;14925:64:0;;13308:2:1;14925:64:0;;;13290:21:1;13347:2;13327:18;;;13320:30;13386:34;13366:18;;;13359:62;-1:-1:-1;;;13437:18:1;;;13430:33;13480:19;;14925:64:0;13106:399:1;14925:64:0;15017:1;15008:6;:10;15000:64;;;;-1:-1:-1;;;15000:64:0;;13712:2:1;15000:64:0;;;13694:21:1;13751:2;13731:18;;;13724:30;13790:34;13770:18;;;13763:62;-1:-1:-1;;;13841:18:1;;;13834:39;13890:19;;15000:64:0;13510:405:1;15000:64:0;2936:7;2963:6;-1:-1:-1;;;;;15080:15:0;;;2963:6;;15080:15;;;;:32;;-1:-1:-1;2936:7:0;2963:6;-1:-1:-1;;;;;15099:13:0;;;2963:6;;15099:13;;15080:32;:65;;;;-1:-1:-1;;;;;;15117:28:0;;;;;;:24;:28;;;;;;;;15116:29;15080:65;15077:169;;;15198:8;;15169:25;15187:6;15169:13;15179:2;15169:9;:13::i;:::-;:17;;:25::i;:::-;:37;;15161:73;;;;-1:-1:-1;;;15161:73:0;;14122:2:1;15161:73:0;;;14104:21:1;14161:2;14141:18;;;14134:30;14200:25;14180:18;;;14173:53;14243:18;;15161:73:0;13920:347:1;15161:73:0;15290:13;;15258:16;;15290:13;;;;;:22;;;;:44;;-1:-1:-1;;;;;;15317:17:0;;;;;;:11;:17;;;;;;;;15316:18;15290:44;:64;;;;-1:-1:-1;;;;;;15339:15:0;;;;;;:11;:15;;;;;;;;15338:16;15290:64;15287:147;;;15376:8;;;;;;;:17;15368:54;;;;-1:-1:-1;;;15368:54:0;;14474:2:1;15368:54:0;;;14456:21:1;14513:2;14493:18;;;14486:30;14552:26;14532:18;;;14525:54;14596:18;;15368:54:0;14272:348:1;15368:54:0;15449:13;;;;;;;:22;;;;:44;;-1:-1:-1;;;;;;15476:17:0;;;;;;:11;:17;;;;;;;;15475:18;15449:44;:64;;;;-1:-1:-1;;;;;;15498:15:0;;;;;;:11;:15;;;;;;;;15497:16;15449:64;15446:220;;;15543:13;;-1:-1:-1;;;;;15535:21:0;;;15543:13;;15535:21;15527:64;;;;-1:-1:-1;;;15527:64:0;;14827:2:1;15527:64:0;;;14809:21:1;14866:2;14846:18;;;14839:30;14905:32;14885:18;;;14878:60;14955:18;;15527:64:0;14625:354:1;15527:64:0;15604:19;15620:2;15604:15;:19::i;:::-;-1:-1:-1;15650:4:0;15446:220;-1:-1:-1;;;;;15678:14:0;;;;;;:8;:14;;;;;:24;;15696:6;;15678:14;:24;;15696:6;;15678:24;:::i;:::-;;;;-1:-1:-1;;;;;;;15786:24:0;;15713:22;15786:24;;;:18;:24;;;;;;15738:6;;15713:22;15786:24;;15785:25;:52;;;;-1:-1:-1;;;;;;15815:22:0;;;;;;:18;:22;;;;;;;;15814:23;15785:52;15782:97;;;-1:-1:-1;15863:4:0;15782:97;15891:17;15911:16;15926:1;15911:12;:16;:::i;:::-;-1:-1:-1;;;;;15944:18:0;;;;;;:12;:18;;;;;;15891:36;;-1:-1:-1;15944:18:0;;15943:19;:40;;;;-1:-1:-1;;;;;;15967:16:0;;;;;;:12;:16;;;;;;;;15966:17;15943:40;15940:141;;;16013:5;15999:19;;15940:141;;;16065:4;16051:18;;15940:141;-1:-1:-1;;;;;16096:14:0;;;;;;:8;:14;;;;;;:26;-1:-1:-1;16093:76:0;;;16153:4;16139:18;;16093:76;16184:7;:30;;;;-1:-1:-1;;;;;;16196:18:0;;;;;;:12;:18;;;;;;;;16195:19;16184:30;:51;;;;-1:-1:-1;;;;;;16219:16:0;;;;;;:12;:16;;;;;;;;16218:17;16184:51;:67;;;;;16240:11;16239:12;16184:67;16181:828;;;16276:13;;-1:-1:-1;;;;;16270:19:0;;;16276:13;;16270:19;16267:731;;16326:23;16338:6;16346:2;16326:11;:23::i;:::-;16309:40;;16368:15;16380:2;-1:-1:-1;;;;;20637:26:0;;;;;:8;:26;;;;;20666:12;20637:41;;20580:106;16368:15;16267:731;;;16441:26;16454:6;16462:4;16441:12;:26::i;:::-;16424:43;;16486:25;16514:48;16557:4;16514:38;16543:8;;16514:24;16524:13;;;;;;;;;-1:-1:-1;;;;;16524:13:0;16514:9;:24::i;:::-;:28;;:38::i;:::-;:42;;:48::i;:::-;16486:76;;16615:17;16587:24;16605:4;16587:9;:24::i;:::-;:45;;:58;;;;-1:-1:-1;16637:8:0;;;;16636:9;16587:58;16583:211;;;16670:8;:15;;-1:-1:-1;;16670:15:0;16681:4;16670:15;;;16708:27;16717:17;16708:8;:27::i;:::-;16758:8;:16;;-1:-1:-1;;16758:16:0;;;16583:211;16819:8;;;;16814:169;;16852:8;:15;;-1:-1:-1;;16852:15:0;16863:4;16852:15;;;16890:34;16899:24;16917:4;16899:9;:24::i;:::-;16890:8;:34::i;:::-;16947:8;:16;;-1:-1:-1;;16947:16:0;;;16814:169;16405:593;16267:731;17024:11;17021:1036;;;17058:13;;-1:-1:-1;;;;;17052:19:0;;;17058:13;;17052:19;17049:716;;17106:29;17124:6;17132:2;17106:17;:29::i;:::-;17089:46;;17049:716;;;17189:31;17207:6;17215:4;17189:17;:31::i;:::-;17172:48;;17237:25;17265:48;17308:4;17265:38;17294:8;;17265:24;17275:13;;;;;;;;;-1:-1:-1;;;;;17275:13:0;17265:9;:24::i;:48::-;17237:76;;17366:17;17338:24;17356:4;17338:9;:24::i;:::-;:45;;:58;;;;-1:-1:-1;17388:8:0;;;;17387:9;17338:58;17334:220;;;17421:8;:15;;-1:-1:-1;;17421:15:0;17432:4;17421:15;;;17459:36;17477:17;17459;:36::i;:::-;17518:8;:16;;-1:-1:-1;;17518:16:0;;;17334:220;17579:8;;;;17574:178;;17612:8;:15;;-1:-1:-1;;17612:15:0;17623:4;17612:15;;;17650:43;17668:24;17686:4;17668:9;:24::i;:::-;17650:17;:43::i;:::-;17716:8;:16;;-1:-1:-1;;17716:16:0;;;17574:178;17155:610;17049:716;17787:13;;-1:-1:-1;;;;;17787:13:0;;;17781:19;;;;17777:159;;17817:21;17833:4;17817:15;:21::i;:::-;17869:15;17853:13;:31;17899:16;:23;;-1:-1:-1;;;;;;17899:23:0;-1:-1:-1;;;;;17899:23:0;;;;;17777:159;17977:15;;18023:22;17977:15;18044:1;18023:22;:::i;:::-;18005:15;:40;-1:-1:-1;17021:1036:0;-1:-1:-1;;;;;18069:12:0;;;;;;:8;:12;;;;;:30;;18085:14;;18069:12;:30;;18085:14;;18069:30;:::i;:::-;;;;;;;;18130:2;-1:-1:-1;;;;;18115:34:0;18124:4;-1:-1:-1;;;;;18115:34:0;;18134:14;18115:34;;;;1361:25:1;;1349:2;1334:18;;1215:177;18115:34:0;;;;;;;;14835:3322;;;;14732:3425;;;:::o;773:181::-;831:7;;863:5;867:1;863;:5;:::i;:::-;851:17;;892:1;887;:6;;879:46;;;;-1:-1:-1;;;879:46:0;;15186:2:1;879:46:0;;;15168:21:1;15225:2;15205:18;;;15198:30;15264:29;15244:18;;;15237:57;15311:18;;879:46:0;14984:351:1;879:46:0;945:1;773:181;-1:-1:-1;;;773:181:0:o;20378:194::-;-1:-1:-1;;;;;20439:30:0;;;;;;:12;:30;;;;;:37;;-1:-1:-1;;20439:37:0;20472:4;20439:37;;;;;;20508:14;;;20550;;20508;;20550;:::i;:::-;20533;:31;-1:-1:-1;;20378:194:0:o;12615:455::-;12683:7;12703:25;12759:3;12740:6;:16;;;12731:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;12703:59;;12773:26;12830:3;12811:6;:16;;;12802:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;12773:60;-1:-1:-1;12873:38:0;12773:60;12873:17;:38;:::i;:::-;12863:4;12846:23;;;;:8;:23;;;;;:65;;:23;;;:65;;;;;:::i;:::-;;;;-1:-1:-1;12951:4:0;;-1:-1:-1;;;;;;12927:70:0;;;12958:38;12979:17;12958:18;:38;:::i;:::-;12927:70;;1361:25:1;;;1349:2;1334:18;12927:70:0;;;;;;;13043:18;13016:25;13024:17;13016:6;:25;:::i;:::-;:45;;;;:::i;:::-;13008:54;12615:455;-1:-1:-1;;;;;12615:455:0:o;13078:459::-;13147:7;13167:25;13224:3;13204:7;:17;;;13195:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;13167:60;;13238:26;13296:3;13276:7;:17;;;13267:6;:26;;;;:::i;1306:250::-;1364:7;1388:1;1393;1388:6;1384:47;;-1:-1:-1;1418:1:0;1411:8;;1384:47;1443:9;1455:5;1459:1;1455;:5;:::i;:::-;1443:17;-1:-1:-1;1488:1:0;1479:5;1483:1;1443:17;1479:5;:::i;:::-;:10;1471:56;;;;-1:-1:-1;;;1471:56:0;;15937:2:1;1471:56:0;;;15919:21:1;15976:2;15956:18;;;15949:30;16015:34;15995:18;;;15988:62;-1:-1:-1;;;16066:18:1;;;16059:31;16107:19;;1471:56:0;15735:397:1;1564:132:0;1622:7;1649:39;1653:1;1656;1649:39;;;;;;;;;;;;;;;;;:3;:39::i;18165:1058::-;18405:7;:17;18385;;18366:6;:16;18347;;18244:6;;18218:23;;18405:17;;18385;;18347:35;;18366:16;18347:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;18325:7;:17;18306:6;:16;:36;;18325:17;18306:36;:::i;:::-;18287:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;18578:7;:17;18558;;18539:6;:16;18520;;18261:162;;-1:-1:-1;18434:23:0;;18520:35;;18539:16;18520:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;18498:17;;18479:16;;:36;;18498:17;18479:36;:::i;:::-;18460:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;18434:162;-1:-1:-1;18607:25:0;18635:33;18434:162;18635:15;:33;:::i;:::-;18607:61;-1:-1:-1;18681:26:0;18710:22;:15;18730:1;18710:19;:22::i;:::-;18681:51;-1:-1:-1;18743:26:0;18772:39;:15;18681:51;18772:19;:39::i;:::-;18743:68;-1:-1:-1;18850:21:0;18882:36;18743:68;18882:16;:36::i;:::-;18929:18;18950:44;:21;18976:17;18950:25;:44::i;:::-;18929:65;-1:-1:-1;19007:23:0;19033:54;19069:17;19033:31;18929:65;19048:15;19033:14;:31::i;:54::-;19007:80;;19098:49;19111:18;19131:15;19098:12;:49::i;:::-;19166:16;;19158:57;;-1:-1:-1;;;;;19166:16:0;;;;19193:21;19158:57;;;;;19166:16;19158:57;19166:16;19158:57;19193:21;19166:16;19158:57;;;;;;;;;;;;;;;;;;;;;18207:1016;;;;;;;;;18165:1058;:::o;13545:459::-;13619:7;13639:25;13696:3;13676:7;:17;;;13667:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;13639:60;;13710:26;13763:3;13748:12;;13739:6;:21;;;;:::i;19231:274::-;19319:6;;19393:36;19319:6;19393:16;:36::i;:::-;19448:16;;19440:57;;-1:-1:-1;;;;;19448:16:0;;;;19475:21;19440:57;;;;;19448:16;19440:57;19448:16;19440:57;19475:21;19448:16;19440:57;;;;;;;;;;;;;;;;;;;;;19282:223;;19231:274;:::o;1704:278::-;1790:7;1825:12;1818:5;1810:28;;;;-1:-1:-1;;;1810:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1849:9:0;1861:5;1865:1;1861;:5;:::i;962:136::-;1020:7;1047:43;1051:1;1054;1047:43;;;;;;;;;;;;;;;;;:3;:43::i;19513:475::-;19603:16;;;19617:1;19603:16;;;;;;;;19579:21;;19603:16;;;;;;;;;;-1:-1:-1;19603:16:0;19579:40;;19648:4;19630;19635:1;19630:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19630:23:0;;;:7;;;;;;;;;;:23;;;;19674:15;;:22;;;-1:-1:-1;;;19674:22:0;;;;:15;;;;;:20;;:22;;;;;19630:7;;19674:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19664:4;19669:1;19664:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19664:32:0;;;:7;;;;;;;;;:32;19741:15;;19709:62;;19726:4;;19741:15;19759:11;19709:8;:62::i;:::-;19784:15;;:196;;-1:-1:-1;;;19784:196:0;;-1:-1:-1;;;;;19784:15:0;;;;:66;;:196;;19865:11;;19784:15;;19907:4;;19934;;19954:15;;19784:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19568:420;19513:475;:::o;19996:374::-;20109:15;;20077:62;;20094:4;;-1:-1:-1;;;;;20109:15:0;20127:11;20077:8;:62::i;:::-;20152:15;;20304:17;;20152:210;;-1:-1:-1;;;20152:210:0;;20226:4;20152:210;;;17859:34:1;17909:18;;;17902:34;;;20152:15:0;17952:18:1;;;17945:34;;;17995:18;;;17988:34;-1:-1:-1;;;;;20304:17:0;;;18038:19:1;;;18031:44;20336:15:0;18091:19:1;;;18084:35;20152:15:0;;;:31;;20192:9;;17793:19:1;;20152:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19996:374;;:::o;1106:192::-;1192:7;1228:12;1220:6;;;;1212:29;;;;-1:-1:-1;;;1212:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1252:9:0;1264:5;1268:1;1264;: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;1397:416::-;1462:6;1470;1523:2;1511:9;1502:7;1498:23;1494:32;1491:52;;;1539:1;1536;1529:12;1491:52;1578:9;1565:23;1597:31;1622:5;1597:31;:::i;:::-;1647:5;-1:-1:-1;1704:2:1;1689:18;;1676:32;1746:15;;1739:23;1727:36;;1717:64;;1777:1;1774;1767:12;1717:64;1800:7;1790:17;;;1397:416;;;;;:::o;2052:456::-;2129:6;2137;2145;2198:2;2186:9;2177:7;2173:23;2169:32;2166:52;;;2214:1;2211;2204:12;2166:52;2253:9;2240:23;2272:31;2297:5;2272:31;:::i;:::-;2322:5;-1:-1:-1;2379:2:1;2364:18;;2351:32;2392:33;2351:32;2392:33;:::i;:::-;2052:456;;2444:7;;-1:-1:-1;;;2498:2:1;2483:18;;;;2470:32;;2052:456::o;3179:248::-;3247:6;3255;3308:2;3296:9;3287:7;3283:23;3279:32;3276:52;;;3324:1;3321;3314:12;3276:52;-1:-1:-1;;3347:23:1;;;3417:2;3402:18;;;3389:32;;-1:-1:-1;3179:248:1:o;3432:180::-;3491:6;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;-1:-1:-1;3583:23:1;;3432:180;-1:-1:-1;3432:180:1:o;3825:127::-;3886:10;3881:3;3877:20;3874:1;3867:31;3917:4;3914:1;3907:15;3941:4;3938:1;3931:15;3957:922;4026:6;4079:2;4067:9;4058:7;4054:23;4050:32;4047:52;;;4095:1;4092;4085:12;4047:52;4135:9;4122:23;4164:18;4205:2;4197:6;4194:14;4191:34;;;4221:1;4218;4211:12;4191:34;4259:6;4248:9;4244:22;4234:32;;4304:7;4297:4;4293:2;4289:13;4285:27;4275:55;;4326:1;4323;4316:12;4275:55;4362:2;4349:16;4384:2;4380;4377:10;4374:36;;;4390:18;;:::i;:::-;4465:2;4459:9;4433:2;4519:13;;-1:-1:-1;;4515:22:1;;;4539:2;4511:31;4507:40;4495:53;;;4563:18;;;4583:22;;;4560:46;4557:72;;;4609:18;;:::i;:::-;4649:10;4645:2;4638:22;4684:2;4676:6;4669:18;4724:7;4719:2;4714;4710;4706:11;4702:20;4699:33;4696:53;;;4745:1;4742;4735:12;4696:53;4801:2;4796;4792;4788:11;4783:2;4775:6;4771:15;4758:46;4846:1;4824:15;;;4841:2;4820:24;4813:35;;;;-1:-1:-1;4828:6:1;3957:922;-1:-1:-1;;;;;3957:922:1:o;4884:247::-;4943:6;4996:2;4984:9;4975:7;4971:23;4967:32;4964:52;;;5012:1;5009;5002:12;4964:52;5051:9;5038:23;5070:31;5095:5;5070:31;:::i;5396:388::-;5464:6;5472;5525:2;5513:9;5504:7;5500:23;5496:32;5493:52;;;5541:1;5538;5531:12;5493:52;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5706:2:1;5691:18;;5678:32;5719:33;5678:32;5719:33;:::i;5789:380::-;5868:1;5864:12;;;;5911;;;5932:61;;5986:4;5978:6;5974:17;5964:27;;5932:61;6039:2;6031:6;6028:14;6008:18;6005:38;6002:161;;6085:10;6080:3;6076:20;6073:1;6066:31;6120:4;6117:1;6110:15;6148:4;6145:1;6138:15;6002:161;;5789:380;;;:::o;6174:356::-;6376:2;6358:21;;;6395:18;;;6388:30;6454:34;6449:2;6434:18;;6427:62;6521:2;6506:18;;6174:356::o;6535:127::-;6596:10;6591:3;6587:20;6584:1;6577:31;6627:4;6624:1;6617:15;6651:4;6648:1;6641:15;6667:128;6734:9;;;6755:11;;;6752:37;;;6769:18;;:::i;6800:125::-;6865:9;;;6886:10;;;6883:36;;;6899:18;;:::i;7276:346::-;7478:2;7460:21;;;7517:2;7497:18;;;7490:30;-1:-1:-1;;;7551:2:1;7536:18;;7529:52;7613:2;7598:18;;7276:346::o;8439:545::-;8541:2;8536:3;8533:11;8530:448;;;8577:1;8602:5;8598:2;8591:17;8647:4;8643:2;8633:19;8717:2;8705:10;8701:19;8698:1;8694:27;8688:4;8684:38;8753:4;8741:10;8738:20;8735:47;;;-1:-1:-1;8776:4:1;8735:47;8831:2;8826:3;8822:12;8819:1;8815:20;8809:4;8805:31;8795:41;;8886:82;8904:2;8897:5;8894:13;8886:82;;;8949:17;;;8930:1;8919:13;8886:82;;8530:448;8439:545;;;:::o;9160:1352::-;9286:3;9280:10;9313:18;9305:6;9302:30;9299:56;;;9335:18;;:::i;:::-;9364:97;9454:6;9414:38;9446:4;9440:11;9414:38;:::i;:::-;9408:4;9364:97;:::i;:::-;9516:4;;9580:2;9569:14;;9597:1;9592:663;;;;10299:1;10316:6;10313:89;;;-1:-1:-1;10368:19:1;;;10362:26;10313:89;-1:-1:-1;;9117:1:1;9113:11;;;9109:24;9105:29;9095:40;9141:1;9137:11;;;9092:57;10415:81;;9562:944;;9592:663;8386:1;8379:14;;;8423:4;8410:18;;-1:-1:-1;;9628:20:1;;;9746:236;9760:7;9757:1;9754:14;9746:236;;;9849:19;;;9843:26;9828:42;;9941:27;;;;9909:1;9897:14;;;;9776:19;;9746:236;;;9750:3;10010:6;10001:7;9998:19;9995:201;;;10071:19;;;10065:26;-1:-1:-1;;10154:1:1;10150:14;;;10166:3;10146:24;10142:37;10138:42;10123:58;10108:74;;9995:201;-1:-1:-1;;;;;10242:1:1;10226:14;;;10222:22;10209:36;;-1:-1:-1;9160:1352:1:o;10517:963::-;10626:4;10655:2;10684;10673:9;10666:21;10707:1;10740:6;10734:13;10770:36;10796:9;10770:36;:::i;:::-;10842:6;10837:2;10826:9;10822:18;10815:34;10868:2;10889:1;10921:2;10910:9;10906:18;10938:1;10933:158;;;;11105:1;11100:354;;;;10899:555;;10933:158;-1:-1:-1;;10981:24:1;;10961:18;;;10954:52;11059:14;;11052:22;11049:1;11045:30;11030:46;;11026:55;;;-1:-1:-1;10933:158:1;;11100:354;11131:6;11128:1;11121:17;11179:2;11176:1;11166:16;11204:1;11218:180;11232:6;11229:1;11226:13;11218:180;;;11325:14;;11301:17;;;11297:26;;11290:50;11368:16;;;;11247:10;;11218:180;;;11422:17;;11418:26;;;-1:-1:-1;;10899:555:1;-1:-1:-1;11471:3:1;;10517:963;-1:-1:-1;;;;;;;;10517:963:1:o;15340:168::-;15413:9;;;15444;;15461:15;;;15455:22;;15441:37;15431:71;;15482:18;;:::i;15513:217::-;15553:1;15579;15569:132;;15623:10;15618:3;15614:20;15611:1;15604:31;15658:4;15655:1;15648:15;15686:4;15683:1;15676:15;15569:132;-1:-1:-1;15715:9:1;;15513:217::o;16137:127::-;16198:10;16193:3;16189:20;16186:1;16179:31;16229:4;16226:1;16219:15;16253:4;16250:1;16243:15;16269:251;16339:6;16392:2;16380:9;16371:7;16367:23;16363:32;16360:52;;;16408:1;16405;16398:12;16360:52;16440:9;16434:16;16459:31;16484:5;16459:31;:::i;16525:980::-;16787:4;16835:3;16824:9;16820:19;16866:6;16855:9;16848:25;16892:2;16930:6;16925:2;16914:9;16910:18;16903:34;16973:3;16968:2;16957:9;16953:18;16946:31;16997:6;17032;17026:13;17063:6;17055;17048:22;17101:3;17090:9;17086:19;17079:26;;17140:2;17132:6;17128:15;17114:29;;17161:1;17171:195;17185:6;17182:1;17179:13;17171:195;;;17250:13;;-1:-1:-1;;;;;17246:39:1;17234:52;;17341:15;;;;17306:12;;;;17282:1;17200:9;17171:195;;;-1:-1:-1;;;;;;;17422:32:1;;;;17417:2;17402:18;;17395:60;-1:-1:-1;;;17486:3:1;17471:19;17464:35;17383:3;16525:980;-1:-1:-1;;;16525:980:1:o;18130:306::-;18218:6;18226;18234;18287:2;18275:9;18266:7;18262:23;18258:32;18255:52;;;18303:1;18300;18293:12;18255:52;18332:9;18326:16;18316:26;;18382:2;18371:9;18367:18;18361:25;18351:35;;18426:2;18415:9;18411:18;18405:25;18395:35;;18130:306;;;;;:::o

Swarm Source

ipfs://138cad458ca7b926debf0117cabf497817444e9ac4de3705f4fc947ba4e48310

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.