ETH Price: $3,710.22 (+3.23%)

Token

ERC-20: BUILD ALPHA (ALPHA)
 

Overview

Max Total Supply

1,000,000,000,000 ALPHA

Holders

137

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
22,659,372,490.058333254224114532 ALPHA

Value
$0.00
0x8ee5e9c41fab091cf829a3f72cadcb74ad0766a8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ALPHA

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : ALPHA.sol
/**
 *Submitted for verification at Etherscan.io on 2022-12-26
*/

/**
Telegram: https://t.me/build_alpha
Website: https://www.buildalpha.io
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.16;

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

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "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 {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
     
    function createPair(address tokenA, address tokenB) external returns (address pair);
 }

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

library SignedSafeMath {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

library SafeCast {
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(
            value <= type(uint224).max,
            "SafeCast: value doesn't fit in 224 bits"
        );
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(
            value <= type(uint128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return uint128(value);
    }

    function toUint96(uint256 value) internal pure returns (uint96) {
        require(
            value <= type(uint96).max,
            "SafeCast: value doesn't fit in 96 bits"
        );
        return uint96(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(
            value <= type(uint64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(
            value <= type(uint32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(
            value <= type(uint16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(
            value <= type(uint8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return uint8(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt128(int256 value) internal pure returns (int128) {
        require(
            value >= type(int128).min && value <= type(int128).max,
            "SafeCast: value doesn't fit in 128 bits"
        );
        return int128(value);
    }

    function toInt64(int256 value) internal pure returns (int64) {
        require(
            value >= type(int64).min && value <= type(int64).max,
            "SafeCast: value doesn't fit in 64 bits"
        );
        return int64(value);
    }

    function toInt32(int256 value) internal pure returns (int32) {
        require(
            value >= type(int32).min && value <= type(int32).max,
            "SafeCast: value doesn't fit in 32 bits"
        );
        return int32(value);
    }

    function toInt16(int256 value) internal pure returns (int16) {
        require(
            value >= type(int16).min && value <= type(int16).max,
            "SafeCast: value doesn't fit in 16 bits"
        );
        return int16(value);
    }

    function toInt8(int256 value) internal pure returns (int8) {
        require(
            value >= type(int8).min && value <= type(int8).max,
            "SafeCast: value doesn't fit in 8 bits"
        );
        return int8(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(
            value <= uint256(type(int256).max),
            "SafeCast: value doesn't fit in an int256"
        );
        return int256(value);
    }
}


contract ALPHA is ERC20, Ownable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;

    string private constant _name = "BUILD ALPHA";
    string private constant _symbol = "ALPHA";
    uint8 private constant _decimals = 18;
    uint256 private constant _tTotal = 1e12 * 10**18;

    IUniswapV2Router02 private uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    bool private tradingOpen = false;
    uint256 private launchBlock = 0;
    address private uniswapV2Pair;

    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) public isExcludeFromFee;
    mapping(address => bool) public isBot;
    mapping(address => bool) public isExcludeFromMaxWalletAmount;

    uint256 public maxWalletAmount;

    uint256 public baseBuyTax = 5;
    uint256 public baseSellTax = 5;

    uint256 private autoLP = 20;
    uint256 private dev1Fee = 35;
    uint256 private dev2Fee = 20;
    uint256 private marketingFee = 25;

    uint256 public minContractTokensToSwap = 1e9 * 10**18;

    mapping(address => uint256) public initialBuyTimestamp;

    address private dev1WalletAddress;
    address private dev2WalletAddress;
    address private marketingWalletAddress;

    event BuyFees(address from, address to, uint256 amountTokens);
    event SellFees(address from, address to, uint256 amountTokens);
    event AddLiquidity(uint256 amountTokens, uint256 amountEth);
    event SwapTokensForEth(uint256 sentTokens, uint256 receivedEth);
    event SwapEthForTokens(uint256 sentEth, uint256 receivedTokens);
    event DistributeFees(uint256 dev1Eth, uint256 dev2Eth, uint256 remarketingEth);


    constructor(
        address _dev1WalletAddress,
        address _dev2WalletAddress,
        address _marketingWalletAddress
    ) ERC20(_name, _symbol) {
        dev1WalletAddress = _dev1WalletAddress;
        dev2WalletAddress = _dev2WalletAddress;
        marketingWalletAddress = _marketingWalletAddress;

        maxWalletAmount = (_tTotal * 5) / 10000; // 0.05% maxWalletAmount (initial limit)

        isExcludeFromFee[owner()] = true;
        isExcludeFromFee[address(this)] = true;
        isExcludeFromFee[dev1WalletAddress] = true;
        isExcludeFromFee[dev2WalletAddress] = true;
        isExcludeFromFee[marketingWalletAddress] = true;
        isExcludeFromMaxWalletAmount[owner()] = true;
        isExcludeFromMaxWalletAmount[address(this)] = true;
        isExcludeFromMaxWalletAmount[address(uniswapV2Router)] = true;
        isExcludeFromMaxWalletAmount[dev1WalletAddress] = true;
        isExcludeFromMaxWalletAmount[dev2WalletAddress] = true;
        isExcludeFromMaxWalletAmount[marketingWalletAddress] = true;

        _mint(owner(), _tTotal);

    }

    /**
     * @dev Function to recover any ETH sent to Contract by Mistake.
    */
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{ value: address(this).balance }(
            ""
        );
    }

    /**
     * @dev Function to recover any ERC20 Tokens sent to Contract by Mistake.
    */
    function recoverAnyERC20TokensFromContract(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    function openTrading() external onlyOwner {
        require(!tradingOpen, "ALPHA: Trading is already open");
        uint256 _launchTime;
        
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );
        isExcludeFromMaxWalletAmount[address(uniswapV2Pair)] = true;

        automatedMarketMakerPairs[uniswapV2Pair] = true;

        addLiquidity(balanceOf(address(this)), address(this).balance);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        tradingOpen = true;
        _launchTime = block.timestamp;
        launchBlock = block.number;
    }

    function manualSwap() external onlyOwner {
        uint256 totalTokens = balanceOf(address(this));

        swapTokensForEth(totalTokens);
    }

    function manualSend() external onlyOwner {
        uint256 totalEth = address(this).balance;

        uint256 dev1FeesToSend = totalEth.mul(dev1Fee).div(
            uint256(100).sub(autoLP)
        );
        uint256 dev2FeesToSend = totalEth.mul(dev2Fee).div(
            uint256(100).sub(autoLP)
        );
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(
            uint256(100).sub(autoLP)
        );
        uint256 remainingEthForFees = totalEth.sub(dev1FeesToSend).sub(dev2FeesToSend).sub(marketingFeesToSend);
        dev1FeesToSend = dev1FeesToSend.add(remainingEthForFees);

        sendEthToWallets(dev1FeesToSend, dev2FeesToSend, marketingFeesToSend);
    }

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

    function _transfer(
        address _from,
        address _to,
        uint256 _amount
    ) internal virtual override {
        require(!isBot[_from] && !isBot[_to]);

        uint256 transferAmount = _amount;
        if (
            tradingOpen &&
            (automatedMarketMakerPairs[_from] ||
                automatedMarketMakerPairs[_to]) &&
            !isExcludeFromFee[_from] &&
            !isExcludeFromFee[_to]
        ) {
             
            transferAmount = takeFees(_from, _to, _amount);
        }


        if (!automatedMarketMakerPairs[_to] && !isExcludeFromMaxWalletAmount[_to]) {
            require(balanceOf(_to) + transferAmount <= maxWalletAmount,
                "ALPHA: Wallet balance limit reached"
            );
        }

        super._transfer(_from, _to, transferAmount);

    }

    function _setAutomatedMarketMakerPair(address _pair, bool _value) private {
        require(
            automatedMarketMakerPairs[_pair] != _value,
            "ALPHA: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[_pair] = _value;
    }

    function _setLiquidityPair(address _pair, bool _value) external onlyOwner {
        require(
            automatedMarketMakerPairs[_pair] != _value,
            "ALPHA: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[_pair] = _value;
    }

    function setExcludeFromFee(address _address, bool _isExludeFromFee)
        external onlyOwner {
        isExcludeFromFee[_address] = _isExludeFromFee;
    }

    function setExcludeFromMaxWalletAmount(address _address, bool _isExludeFromMaxWalletAmount)
        external onlyOwner {
        isExcludeFromMaxWalletAmount[_address] = _isExludeFromMaxWalletAmount;
    }

    function setMaxWallet(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 0.1%");
        maxWalletAmount = newMaxWallet * (10**_decimals);
    }
    

    function setTaxes(
        uint256 _baseBuyTax,
        uint256 _baseSellTax,
        uint256 _autoLP,
        uint256 _dev1Fee,
        uint256 _dev2Fee,
        uint256 _marketingFee
    ) external onlyOwner {
        require(_baseBuyTax <= 10 && _baseSellTax <= 10);

        baseBuyTax = _baseBuyTax;
        baseSellTax = _baseSellTax;
        autoLP = _autoLP;
        dev1Fee = _dev1Fee;
        dev2Fee = _dev2Fee;
        marketingFee = _marketingFee;
    }

    function setMinContractTokensToSwap(uint256 _numToken) public onlyOwner {
        minContractTokensToSwap = _numToken * (10**_decimals);
    }

    function setBots(address[] calldata _bots) public onlyOwner {
        for (uint256 i = 0; i < _bots.length; i++) {
            if (
                _bots[i] != uniswapV2Pair &&
                _bots[i] != address(uniswapV2Router)
            ) {
                isBot[_bots[i]] = true;
            }
        }
    }

    function setWalletAddress(address _dev1WalletAddress, address _dev2WalletAddress, address _marketingWalletAddress) external onlyOwner {
        dev1WalletAddress = _dev1WalletAddress;
        dev2WalletAddress = _dev2WalletAddress;
        marketingWalletAddress = _marketingWalletAddress;
    }

    function takeFees(
        address _from,
        address _to,
        uint256 _amount
    ) private returns (uint256) {
        uint256 fees;
        uint256 remainingAmount;
        require(
            automatedMarketMakerPairs[_from] || automatedMarketMakerPairs[_to],
            "ALPHA: No market makers found"
        );

        if (automatedMarketMakerPairs[_from]) {
            uint256 totalBuyTax;

            totalBuyTax = baseBuyTax;

            fees = _amount.mul(totalBuyTax).div(100);

            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);

            emit BuyFees(_from, address(this), fees);
        } else {
            uint256 totalSellTax;
            
            totalSellTax = baseSellTax;

            fees = _amount.mul(totalSellTax).div(100);

            remainingAmount = _amount.sub(fees);

            super._transfer(_from, address(this), fees);
            uint256 tokensToSwap = balanceOf(address(this));

            if (tokensToSwap > minContractTokensToSwap) {
                distributeTokensEth(tokensToSwap);
            }

            emit SellFees(_from, address(this), fees);
        }

        return remainingAmount;
    }

    function distributeTokensEth(uint256 _tokenAmount) private {
        uint256 tokensForLiquidity = _tokenAmount.mul(autoLP).div(100);

        uint256 halfLiquidity = tokensForLiquidity.div(2);
        uint256 tokensForSwap = _tokenAmount.sub(halfLiquidity);

        uint256 totalEth = swapTokensForEth(tokensForSwap);

        uint256 ethForAddLP = totalEth.mul(autoLP).div(100);
        uint256 dev1FeesToSend = totalEth.mul(dev1Fee).div(100);
        uint256 dev2FeesToSend = totalEth.mul(dev2Fee).div(100);
        uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(100);
        uint256 remainingEthForFees = totalEth
            .sub(ethForAddLP)
            .sub(dev1FeesToSend)
            .sub(dev2FeesToSend)
            .sub(marketingFeesToSend);
        dev1FeesToSend = dev1FeesToSend.add(remainingEthForFees);

        sendEthToWallets(dev1FeesToSend, dev2FeesToSend, marketingFeesToSend);

        if (halfLiquidity > 0 && ethForAddLP > 0) {
            addLiquidity(halfLiquidity, ethForAddLP);
        }
    }

    function sendEthToWallets(uint256 _dev1Fees, uint256 _dev2Fees, uint256 _marketingFees)
        private
    {
        if (_dev1Fees > 0) {
            payable(dev1WalletAddress).transfer(_dev1Fees);
        }
        if (_dev2Fees > 0) {
            payable(dev2WalletAddress).transfer(_dev2Fees);
        }
        if (_marketingFees > 0) {
            payable(marketingWalletAddress).transfer(_marketingFees);
        }
        emit DistributeFees(_dev1Fees, _dev2Fees, _marketingFees);
    }

    function swapTokensForEth(uint256 _tokenAmount) private returns (uint256) {
        uint256 initialEthBalance = address(this).balance;
        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
        );

        uint256 receivedEth = address(this).balance.sub(initialEthBalance);

        emit SwapTokensForEth(_tokenAmount, receivedEth);
        return receivedEth;
    }

    function swapEthForTokens(uint256 _ethAmount, address _to)
        private
        returns (uint256)
    {
        uint256 initialTokenBalance = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: _ethAmount
        }(0, path, _to, block.timestamp);

        uint256 receivedTokens = balanceOf(address(this)).sub(
            initialTokenBalance
        );

        emit SwapEthForTokens(_ethAmount, receivedTokens);
        return receivedTokens;
    }

    function addLiquidity(uint256 _tokenAmount, uint256 _ethAmount) private {
        _approve(address(this), address(uniswapV2Router), _tokenAmount);
        uniswapV2Router.addLiquidityETH{value: _ethAmount}(
            address(this),
            _tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
        emit AddLiquidity(_tokenAmount, _ethAmount);
    }

    function availableContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this));
    }

    receive() external payable {}
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dev1WalletAddress","type":"address"},{"internalType":"address","name":"_dev2WalletAddress","type":"address"},{"internalType":"address","name":"_marketingWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"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":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"BuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dev1Eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dev2Eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remarketingEth","type":"uint256"}],"name":"DistributeFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"SellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sentEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedTokens","type":"uint256"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sentTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedEth","type":"uint256"}],"name":"SwapTokensForEth","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":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"_setLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availableContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minContractTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverAnyERC20TokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_bots","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromFee","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExludeFromMaxWalletAmount","type":"bool"}],"name":"setExcludeFromMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numToken","type":"uint256"}],"name":"setMinContractTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseBuyTax","type":"uint256"},{"internalType":"uint256","name":"_baseSellTax","type":"uint256"},{"internalType":"uint256","name":"_autoLP","type":"uint256"},{"internalType":"uint256","name":"_dev1Fee","type":"uint256"},{"internalType":"uint256","name":"_dev2Fee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev1WalletAddress","type":"address"},{"internalType":"address","name":"_dev2WalletAddress","type":"address"},{"internalType":"address","name":"_marketingWalletAddress","type":"address"}],"name":"setWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760146101000a81548160ff02191690831515021790555060006008556005600f55600560105560146011556023601255601460135560196014556b033b2e3c9fd0803ce8000000601555348015620000b457600080fd5b50604051620059b7380380620059b78339818101604052810190620000da919062000a3f565b6040518060400160405280600b81526020017f4255494c4420414c5048410000000000000000000000000000000000000000008152506040518060400160405280600581526020017f414c504841000000000000000000000000000000000000000000000000000000815250816003908162000157919062000d15565b50806004908162000169919062000d15565b50505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a382601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061271060056c0c9f2c9cd04674edea400000006200030c919062000e2b565b62000318919062000ebb565b600e819055506001600b6000620003346200082960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620005616200082960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000820620008066200082960201b60201c565b6c0c9f2c9cd04674edea400000006200085360201b60201c565b50505062000fdf565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008bc9062000f54565b60405180910390fd5b620008d960008383620009cb60201b60201c565b8060026000828254620008ed919062000f76565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000944919062000f76565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009ab919062000fc2565b60405180910390a3620009c760008383620009d060201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a0782620009da565b9050919050565b62000a1981620009fa565b811462000a2557600080fd5b50565b60008151905062000a398162000a0e565b92915050565b60008060006060848603121562000a5b5762000a5a620009d5565b5b600062000a6b8682870162000a28565b935050602062000a7e8682870162000a28565b925050604062000a918682870162000a28565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b1d57607f821691505b60208210810362000b335762000b3262000ad5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b9d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b5e565b62000ba9868362000b5e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bf662000bf062000bea8462000bc1565b62000bcb565b62000bc1565b9050919050565b6000819050919050565b62000c128362000bd5565b62000c2a62000c218262000bfd565b84845462000b6b565b825550505050565b600090565b62000c4162000c32565b62000c4e81848462000c07565b505050565b5b8181101562000c765762000c6a60008262000c37565b60018101905062000c54565b5050565b601f82111562000cc55762000c8f8162000b39565b62000c9a8462000b4e565b8101602085101562000caa578190505b62000cc262000cb98562000b4e565b83018262000c53565b50505b505050565b600082821c905092915050565b600062000cea6000198460080262000cca565b1980831691505092915050565b600062000d05838362000cd7565b9150826002028217905092915050565b62000d208262000a9b565b67ffffffffffffffff81111562000d3c5762000d3b62000aa6565b5b62000d48825462000b04565b62000d5582828562000c7a565b600060209050601f83116001811462000d8d576000841562000d78578287015190505b62000d84858262000cf7565b86555062000df4565b601f19841662000d9d8662000b39565b60005b8281101562000dc75784890151825560018201915060208501945060208101905062000da0565b8683101562000de7578489015162000de3601f89168262000cd7565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e388262000bc1565b915062000e458362000bc1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e815762000e8062000dfc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ec88262000bc1565b915062000ed58362000bc1565b92508262000ee85762000ee762000e8c565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f3c601f8362000ef3565b915062000f498262000f04565b602082019050919050565b6000602082019050818103600083015262000f6f8162000f2d565b9050919050565b600062000f838262000bc1565b915062000f908362000bc1565b925082820190508082111562000fab5762000faa62000dfc565b5b92915050565b62000fbc8162000bc1565b82525050565b600060208201905062000fd9600083018462000fb1565b92915050565b6149c88062000fef6000396000f3fe6080604052600436106102135760003560e01c80638e5916b211610118578063ba762ddd116100a0578063dd62ed3e1161006f578063dd62ed3e146107bc578063ea084eef146107f9578063f2fde38b14610822578063f42938901461084b578063f5648a4f146108625761021a565b8063ba762ddd14610712578063c2b1b1991461073d578063c9567bf914610768578063c9e8714c1461077f5761021a565b8063a457c2d7116100e7578063a457c2d71461061b578063a9059cbb14610658578063aa4bde2814610695578063af9549e0146106c0578063b515566a146106e95761021a565b80638e5916b21461054d578063906778331461058a57806395d89b41146105c757806397c44ed9146105f25761021a565b80633bbac5791161019b57806370a082311161016a57806370a082311461047a578063715018a6146104b757806389a5c691146104ce5780638c8f8c04146104f95780638da5cb5b146105225761021a565b80633bbac579146103d257806351bc3c851461040f5780635b683e66146104265780635d0044ca146104515761021a565b806312dfbd33116101e257806312dfbd33146102d957806318160ddd1461030257806323b872dd1461032d578063313ce5671461036a57806339509351146103955761021a565b806304d4c9901461021f578063062e1c4a1461024857806306fdde0314610271578063095ea7b31461029c5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613584565b610879565b005b34801561025457600080fd5b5061026f600480360381019061026a91906136a7565b610956565b005b34801561027d57600080fd5b50610286610ad3565b6040516102939190613777565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613799565b610b65565b6040516102d091906137e8565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613803565b610b88565b005b34801561030e57600080fd5b50610317610c3a565b604051610324919061383f565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061385a565b610c44565b60405161036191906137e8565b60405180910390f35b34801561037657600080fd5b5061037f610c73565b60405161038c91906138c9565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613799565b610c7c565b6040516103c991906137e8565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906138e4565b610d26565b60405161040691906137e8565b60405180910390f35b34801561041b57600080fd5b50610424610d46565b005b34801561043257600080fd5b5061043b610df0565b604051610448919061383f565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613803565b610df6565b005b34801561048657600080fd5b506104a1600480360381019061049c91906138e4565b610f1e565b6040516104ae919061383f565b60405180910390f35b3480156104c357600080fd5b506104cc610f66565b005b3480156104da57600080fd5b506104e36110b7565b6040516104f0919061383f565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b919061385a565b6110bd565b005b34801561052e57600080fd5b506105376111d1565b6040516105449190613920565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906138e4565b6111fb565b60405161058191906137e8565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906138e4565b61121b565b6040516105be919061383f565b60405180910390f35b3480156105d357600080fd5b506105dc611233565b6040516105e99190613777565b60405180910390f35b3480156105fe57600080fd5b506106196004803603810190610614919061393b565b6112c5565b005b34801561062757600080fd5b50610642600480360381019061063d9190613799565b61141d565b60405161064f91906137e8565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190613799565b611507565b60405161068c91906137e8565b60405180910390f35b3480156106a157600080fd5b506106aa61152a565b6040516106b7919061383f565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e291906136a7565b611530565b005b3480156106f557600080fd5b50610710600480360381019061070b91906139f3565b61161b565b005b34801561071e57600080fd5b50610727611850565b604051610734919061383f565b60405180910390f35b34801561074957600080fd5b50610752611860565b60405161075f919061383f565b60405180910390f35b34801561077457600080fd5b5061077d611866565b005b34801561078b57600080fd5b506107a660048036038101906107a191906138e4565b611d37565b6040516107b391906137e8565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613a40565b611d57565b6040516107f0919061383f565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b91906136a7565b611dde565b005b34801561082e57600080fd5b50610849600480360381019061084491906138e4565b611ec9565b005b34801561085757600080fd5b50610860612088565b005b34801561086e57600080fd5b5061087761223f565b005b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090090613acc565b60405180910390fd5b600a861115801561091b5750600a8511155b61092457600080fd5b85600f819055508460108190555083601181905550826012819055508160138190555080601481905550505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd90613acc565b60405180910390fd5b801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613b5e565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060038054610ae290613bad565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e90613bad565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b5050505050905090565b600080610b70612340565b9050610b7d818585612348565b600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613acc565b60405180910390fd5b6012600a610c269190613d40565b81610c319190613d8b565b60158190555050565b6000600254905090565b600080610c4f612340565b9050610c5c858285612511565b610c6785858561259d565b60019150509392505050565b60006012905090565b600080610c87612340565b9050610d1b818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d169190613de5565b612348565b600191505092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613acc565b60405180910390fd5b6000610de130610f1e565b9050610dec816128da565b5050565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613acc565b60405180910390fd5b670de0b6b3a76400006103e86001610e9c610c3a565b610ea69190613d8b565b610eb09190613e48565b610eba9190613e48565b811015610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390613eeb565b60405180910390fd5b6012600a610f0a9190613d40565b81610f159190613d8b565b600e8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90613acc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490613acc565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611188929190613f0b565b6020604051808303816000875af11580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb9190613f49565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b60166020528060005260406000206000915090505481565b60606004805461124290613bad565b80601f016020809104026020016040519081016040528092919081815260200182805461126e90613bad565b80156112bb5780601f10611290576101008083540402835291602001916112bb565b820191906000526020600020905b81548152906001019060200180831161129e57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613acc565b60405180910390fd5b82601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080611428612340565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590613fe8565b60405180910390fd5b6114fb8286868403612348565b60019250505092915050565b600080611512612340565b905061151f81858561259d565b600191505092915050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b790613acc565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613acc565b60405180910390fd5b60005b8282905081101561184b57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683838381811061170557611704614008565b5b905060200201602081019061171a91906138e4565b73ffffffffffffffffffffffffffffffffffffffff16141580156117b35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683838381811061178557611784614008565b5b905060200201602081019061179a91906138e4565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611838576001600c60008585858181106117d1576117d0614008565b5b90506020020160208101906117e691906138e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061184390614037565b9150506116ae565b505050565b600061185b30610f1e565b905090565b600f5481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613acc565b60405180910390fd5b600760149054906101000a900460ff1615611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d906140cb565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d99190614100565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a869190614100565b6040518363ffffffff1660e01b8152600401611aa392919061412d565b6020604051808303816000875af1158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae69190614100565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c2c611c2630610f1e565b47612b7a565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ccb929190613f0b565b6020604051808303816000875af1158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190613f49565b506001600760146101000a81548160ff0219169083151502179055504290504360088190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590613acc565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090613acc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf906141c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90613acc565b60405180910390fd5b6000479050600061215b6121386011546064612c9890919063ffffffff16565b61214d60125485612cae90919063ffffffff16565b612cc490919063ffffffff16565b9050600061219b6121786011546064612c9890919063ffffffff16565b61218d60135486612cae90919063ffffffff16565b612cc490919063ffffffff16565b905060006121db6121b86011546064612c9890919063ffffffff16565b6121cd60145487612cae90919063ffffffff16565b612cc490919063ffffffff16565b9050600061221682612208856121fa888a612c9890919063ffffffff16565b612c9890919063ffffffff16565b612c9890919063ffffffff16565b905061222b8185612cda90919063ffffffff16565b9350612238848484612cf0565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690613acc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516122f590614219565b60006040518083038185875af1925050503d8060008114612332576040519150601f19603f3d011682016040523d82523d6000602084013e612337565b606091505b50508091505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906142a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90614332565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612504919061383f565b60405180910390a3505050565b600061251d8484611d57565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125975781811015612589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125809061439e565b60405180910390fd5b6125968484848403612348565b5b50505050565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126415750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61264a57600080fd5b6000819050600760149054906101000a900460ff1680156127085750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127075750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b801561275e5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127b45750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127c7576127c4848484612e89565b90505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286b5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128c957600e548161287d85610f1e565b6128879190613de5565b11156128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614430565b60405180910390fd5b5b6128d484848361310a565b50505050565b6000804790506000600267ffffffffffffffff8111156128fd576128fc614450565b5b60405190808252806020026020018201604052801561292b5781602001602082028036833780820191505090505b509050308160008151811061294357612942614008565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0e9190614100565b81600181518110612a2257612a21614008565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a8930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686612348565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401612aed959493929190614582565b600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505050506000612b348347612c9890919063ffffffff16565b90507f4a6c12eb4e479a4ea28c8acad8efde466ef9bf69cf473501dd768652344962738582604051612b679291906145dc565b60405180910390a1809350505050919050565b612ba730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612348565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bf36111d1565b426040518863ffffffff1660e01b8152600401612c1596959493929190614605565b60606040518083038185885af1158015612c33573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c58919061467b565b5050507fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb48282604051612c8c9291906145dc565b60405180910390a15050565b60008183612ca691906146ce565b905092915050565b60008183612cbc9190613d8b565b905092915050565b60008183612cd29190613e48565b905092915050565b60008183612ce89190613de5565b905092915050565b6000831115612d6357601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612d61573d6000803e3d6000fd5b505b6000821115612dd657601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612dd4573d6000803e3d6000fd5b505b6000811115612e4957601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612e47573d6000803e3d6000fd5b505b7f125472b1b527506b5b8381590760f796fd9c88ba5886399d71abc083c6dafa20838383604051612e7c93929190614702565b60405180910390a1505050565b6000806000600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f2f5750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6590614785565b60405180910390fd5b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613050576000600f549050612fed6064612fdf8388612cae90919063ffffffff16565b612cc490919063ffffffff16565b92506130028386612c9890919063ffffffff16565b915061300f87308561310a565b7f6b0b46d0273ce53f1de696d2100b35dd3a405dcecbcbeede66215d858d5c401d873085604051613042939291906147a5565b60405180910390a1506130fe565b6000601054905061307d606461306f8388612cae90919063ffffffff16565b612cc490919063ffffffff16565b92506130928386612c9890919063ffffffff16565b915061309f87308561310a565b60006130aa30610f1e565b90506015548111156130c0576130bf81613389565b5b7f4ab5e0df8ff1605133dbdd1b8e3f52edb9539abe64595f6f70b30d2fea7f204a8830866040516130f3939291906147a5565b60405180910390a150505b80925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131709061484e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df906148e0565b60405180910390fd5b6131f383838361353a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327090614972565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330c9190613de5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613370919061383f565b60405180910390a361338384848461353f565b50505050565b60006133b360646133a560115485612cae90919063ffffffff16565b612cc490919063ffffffff16565b905060006133cb600283612cc490919063ffffffff16565b905060006133e28285612c9890919063ffffffff16565b905060006133ef826128da565b9050600061341b606461340d60115485612cae90919063ffffffff16565b612cc490919063ffffffff16565b90506000613447606461343960125486612cae90919063ffffffff16565b612cc490919063ffffffff16565b90506000613473606461346560135487612cae90919063ffffffff16565b612cc490919063ffffffff16565b9050600061349f606461349160145488612cae90919063ffffffff16565b612cc490919063ffffffff16565b905060006134ec826134de856134d0886134c28b8d612c9890919063ffffffff16565b612c9890919063ffffffff16565b612c9890919063ffffffff16565b612c9890919063ffffffff16565b90506135018185612cda90919063ffffffff16565b935061350e848484612cf0565b60008811801561351e5750600085115b1561352e5761352d8886612b7a565b5b50505050505050505050565b505050565b505050565b600080fd5b600080fd5b6000819050919050565b6135618161354e565b811461356c57600080fd5b50565b60008135905061357e81613558565b92915050565b60008060008060008060c087890312156135a1576135a0613544565b5b60006135af89828a0161356f565b96505060206135c089828a0161356f565b95505060406135d189828a0161356f565b94505060606135e289828a0161356f565b93505060806135f389828a0161356f565b92505060a061360489828a0161356f565b9150509295509295509295565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061363c82613611565b9050919050565b61364c81613631565b811461365757600080fd5b50565b60008135905061366981613643565b92915050565b60008115159050919050565b6136848161366f565b811461368f57600080fd5b50565b6000813590506136a18161367b565b92915050565b600080604083850312156136be576136bd613544565b5b60006136cc8582860161365a565b92505060206136dd85828601613692565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613721578082015181840152602081019050613706565b60008484015250505050565b6000601f19601f8301169050919050565b6000613749826136e7565b61375381856136f2565b9350613763818560208601613703565b61376c8161372d565b840191505092915050565b60006020820190508181036000830152613791818461373e565b905092915050565b600080604083850312156137b0576137af613544565b5b60006137be8582860161365a565b92505060206137cf8582860161356f565b9150509250929050565b6137e28161366f565b82525050565b60006020820190506137fd60008301846137d9565b92915050565b60006020828403121561381957613818613544565b5b60006138278482850161356f565b91505092915050565b6138398161354e565b82525050565b60006020820190506138546000830184613830565b92915050565b60008060006060848603121561387357613872613544565b5b60006138818682870161365a565b93505060206138928682870161365a565b92505060406138a38682870161356f565b9150509250925092565b600060ff82169050919050565b6138c3816138ad565b82525050565b60006020820190506138de60008301846138ba565b92915050565b6000602082840312156138fa576138f9613544565b5b60006139088482850161365a565b91505092915050565b61391a81613631565b82525050565b60006020820190506139356000830184613911565b92915050565b60008060006060848603121561395457613953613544565b5b60006139628682870161365a565b93505060206139738682870161365a565b92505060406139848682870161365a565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126139b3576139b261398e565b5b8235905067ffffffffffffffff8111156139d0576139cf613993565b5b6020830191508360208202830111156139ec576139eb613998565b5b9250929050565b60008060208385031215613a0a57613a09613544565b5b600083013567ffffffffffffffff811115613a2857613a27613549565b5b613a348582860161399d565b92509250509250929050565b60008060408385031215613a5757613a56613544565b5b6000613a658582860161365a565b9250506020613a768582860161365a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab66020836136f2565b9150613ac182613a80565b602082019050919050565b60006020820190508181036000830152613ae581613aa9565b9050919050565b7f414c5048413a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000613b48603f836136f2565b9150613b5382613aec565b604082019050919050565b60006020820190508181036000830152613b7781613b3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc557607f821691505b602082108103613bd857613bd7613b7e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613c6457808604811115613c4057613c3f613bde565b5b6001851615613c4f5780820291505b8081029050613c5d85613c0d565b9450613c24565b94509492505050565b600082613c7d5760019050613d39565b81613c8b5760009050613d39565b8160018114613ca15760028114613cab57613cda565b6001915050613d39565b60ff841115613cbd57613cbc613bde565b5b8360020a915084821115613cd457613cd3613bde565b5b50613d39565b5060208310610133831016604e8410600b8410161715613d0f5782820a905083811115613d0a57613d09613bde565b5b613d39565b613d1c8484846001613c1a565b92509050818404811115613d3357613d32613bde565b5b81810290505b9392505050565b6000613d4b8261354e565b9150613d56836138ad565b9250613d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c6d565b905092915050565b6000613d968261354e565b9150613da18361354e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dda57613dd9613bde565b5b828202905092915050565b6000613df08261354e565b9150613dfb8361354e565b9250828201905080821115613e1357613e12613bde565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e538261354e565b9150613e5e8361354e565b925082613e6e57613e6d613e19565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b6000613ed56024836136f2565b9150613ee082613e79565b604082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b6000604082019050613f206000830185613911565b613f2d6020830184613830565b9392505050565b600081519050613f438161367b565b92915050565b600060208284031215613f5f57613f5e613544565b5b6000613f6d84828501613f34565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fd26025836136f2565b9150613fdd82613f76565b604082019050919050565b6000602082019050818103600083015261400181613fc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006140428261354e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361407457614073613bde565b5b600182019050919050565b7f414c5048413a2054726164696e6720697320616c7265616479206f70656e0000600082015250565b60006140b5601e836136f2565b91506140c08261407f565b602082019050919050565b600060208201905081810360008301526140e4816140a8565b9050919050565b6000815190506140fa81613643565b92915050565b60006020828403121561411657614115613544565b5b6000614124848285016140eb565b91505092915050565b60006040820190506141426000830185613911565b61414f6020830184613911565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141b26026836136f2565b91506141bd82614156565b604082019050919050565b600060208201905081810360008301526141e1816141a5565b9050919050565b600081905092915050565b50565b60006142036000836141e8565b915061420e826141f3565b600082019050919050565b6000614224826141f6565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061428a6024836136f2565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061431c6022836136f2565b9150614327826142c0565b604082019050919050565b6000602082019050818103600083015261434b8161430f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614388601d836136f2565b915061439382614352565b602082019050919050565b600060208201905081810360008301526143b78161437b565b9050919050565b7f414c5048413a2057616c6c65742062616c616e6365206c696d6974207265616360008201527f6865640000000000000000000000000000000000000000000000000000000000602082015250565b600061441a6023836136f2565b9150614425826143be565b604082019050919050565b600060208201905081810360008301526144498161440d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b60006144ae6144a96144a48461447f565b614489565b61354e565b9050919050565b6144be81614493565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144f981613631565b82525050565b600061450b83836144f0565b60208301905092915050565b6000602082019050919050565b600061452f826144c4565b61453981856144cf565b9350614544836144e0565b8060005b8381101561457557815161455c88826144ff565b975061456783614517565b925050600181019050614548565b5085935050505092915050565b600060a0820190506145976000830188613830565b6145a460208301876144b5565b81810360408301526145b68186614524565b90506145c56060830185613911565b6145d26080830184613830565b9695505050505050565b60006040820190506145f16000830185613830565b6145fe6020830184613830565b9392505050565b600060c08201905061461a6000830189613911565b6146276020830188613830565b61463460408301876144b5565b61464160608301866144b5565b61464e6080830185613911565b61465b60a0830184613830565b979650505050505050565b60008151905061467581613558565b92915050565b60008060006060848603121561469457614693613544565b5b60006146a286828701614666565b93505060206146b386828701614666565b92505060406146c486828701614666565b9150509250925092565b60006146d98261354e565b91506146e48361354e565b92508282039050818111156146fc576146fb613bde565b5b92915050565b60006060820190506147176000830186613830565b6147246020830185613830565b6147316040830184613830565b949350505050565b7f414c5048413a204e6f206d61726b6574206d616b65727320666f756e64000000600082015250565b600061476f601d836136f2565b915061477a82614739565b602082019050919050565b6000602082019050818103600083015261479e81614762565b9050919050565b60006060820190506147ba6000830186613911565b6147c76020830185613911565b6147d46040830184613830565b949350505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148386025836136f2565b9150614843826147dc565b604082019050919050565b600060208201905081810360008301526148678161482b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148ca6023836136f2565b91506148d58261486e565b604082019050919050565b600060208201905081810360008301526148f9816148bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061495c6026836136f2565b915061496782614900565b604082019050919050565b6000602082019050818103600083015261498b8161494f565b905091905056fea26469706673582212209fae7950e01a349e17d84cca7a2ec9df655948c4d44a3a6858442892a28d956464736f6c634300081000330000000000000000000000001d0991e7438e8c02e2b38f110af452fe72c66ed50000000000000000000000001b39365411f37912ba8c6a8a3d375c08572c0af50000000000000000000000006640984e492bbf8815be144e22a358336d51c82d

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638e5916b211610118578063ba762ddd116100a0578063dd62ed3e1161006f578063dd62ed3e146107bc578063ea084eef146107f9578063f2fde38b14610822578063f42938901461084b578063f5648a4f146108625761021a565b8063ba762ddd14610712578063c2b1b1991461073d578063c9567bf914610768578063c9e8714c1461077f5761021a565b8063a457c2d7116100e7578063a457c2d71461061b578063a9059cbb14610658578063aa4bde2814610695578063af9549e0146106c0578063b515566a146106e95761021a565b80638e5916b21461054d578063906778331461058a57806395d89b41146105c757806397c44ed9146105f25761021a565b80633bbac5791161019b57806370a082311161016a57806370a082311461047a578063715018a6146104b757806389a5c691146104ce5780638c8f8c04146104f95780638da5cb5b146105225761021a565b80633bbac579146103d257806351bc3c851461040f5780635b683e66146104265780635d0044ca146104515761021a565b806312dfbd33116101e257806312dfbd33146102d957806318160ddd1461030257806323b872dd1461032d578063313ce5671461036a57806339509351146103955761021a565b806304d4c9901461021f578063062e1c4a1461024857806306fdde0314610271578063095ea7b31461029c5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613584565b610879565b005b34801561025457600080fd5b5061026f600480360381019061026a91906136a7565b610956565b005b34801561027d57600080fd5b50610286610ad3565b6040516102939190613777565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613799565b610b65565b6040516102d091906137e8565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613803565b610b88565b005b34801561030e57600080fd5b50610317610c3a565b604051610324919061383f565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061385a565b610c44565b60405161036191906137e8565b60405180910390f35b34801561037657600080fd5b5061037f610c73565b60405161038c91906138c9565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613799565b610c7c565b6040516103c991906137e8565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906138e4565b610d26565b60405161040691906137e8565b60405180910390f35b34801561041b57600080fd5b50610424610d46565b005b34801561043257600080fd5b5061043b610df0565b604051610448919061383f565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613803565b610df6565b005b34801561048657600080fd5b506104a1600480360381019061049c91906138e4565b610f1e565b6040516104ae919061383f565b60405180910390f35b3480156104c357600080fd5b506104cc610f66565b005b3480156104da57600080fd5b506104e36110b7565b6040516104f0919061383f565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b919061385a565b6110bd565b005b34801561052e57600080fd5b506105376111d1565b6040516105449190613920565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906138e4565b6111fb565b60405161058191906137e8565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906138e4565b61121b565b6040516105be919061383f565b60405180910390f35b3480156105d357600080fd5b506105dc611233565b6040516105e99190613777565b60405180910390f35b3480156105fe57600080fd5b506106196004803603810190610614919061393b565b6112c5565b005b34801561062757600080fd5b50610642600480360381019061063d9190613799565b61141d565b60405161064f91906137e8565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190613799565b611507565b60405161068c91906137e8565b60405180910390f35b3480156106a157600080fd5b506106aa61152a565b6040516106b7919061383f565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e291906136a7565b611530565b005b3480156106f557600080fd5b50610710600480360381019061070b91906139f3565b61161b565b005b34801561071e57600080fd5b50610727611850565b604051610734919061383f565b60405180910390f35b34801561074957600080fd5b50610752611860565b60405161075f919061383f565b60405180910390f35b34801561077457600080fd5b5061077d611866565b005b34801561078b57600080fd5b506107a660048036038101906107a191906138e4565b611d37565b6040516107b391906137e8565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613a40565b611d57565b6040516107f0919061383f565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b91906136a7565b611dde565b005b34801561082e57600080fd5b50610849600480360381019061084491906138e4565b611ec9565b005b34801561085757600080fd5b50610860612088565b005b34801561086e57600080fd5b5061087761223f565b005b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090090613acc565b60405180910390fd5b600a861115801561091b5750600a8511155b61092457600080fd5b85600f819055508460108190555083601181905550826012819055508160138190555080601481905550505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd90613acc565b60405180910390fd5b801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613b5e565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060038054610ae290613bad565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e90613bad565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b5050505050905090565b600080610b70612340565b9050610b7d818585612348565b600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613acc565b60405180910390fd5b6012600a610c269190613d40565b81610c319190613d8b565b60158190555050565b6000600254905090565b600080610c4f612340565b9050610c5c858285612511565b610c6785858561259d565b60019150509392505050565b60006012905090565b600080610c87612340565b9050610d1b818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d169190613de5565b612348565b600191505092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613acc565b60405180910390fd5b6000610de130610f1e565b9050610dec816128da565b5050565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613acc565b60405180910390fd5b670de0b6b3a76400006103e86001610e9c610c3a565b610ea69190613d8b565b610eb09190613e48565b610eba9190613e48565b811015610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390613eeb565b60405180910390fd5b6012600a610f0a9190613d40565b81610f159190613d8b565b600e8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90613acc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490613acc565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611188929190613f0b565b6020604051808303816000875af11580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb9190613f49565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b60166020528060005260406000206000915090505481565b60606004805461124290613bad565b80601f016020809104026020016040519081016040528092919081815260200182805461126e90613bad565b80156112bb5780601f10611290576101008083540402835291602001916112bb565b820191906000526020600020905b81548152906001019060200180831161129e57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613acc565b60405180910390fd5b82601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080611428612340565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590613fe8565b60405180910390fd5b6114fb8286868403612348565b60019250505092915050565b600080611512612340565b905061151f81858561259d565b600191505092915050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b790613acc565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613acc565b60405180910390fd5b60005b8282905081101561184b57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683838381811061170557611704614008565b5b905060200201602081019061171a91906138e4565b73ffffffffffffffffffffffffffffffffffffffff16141580156117b35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683838381811061178557611784614008565b5b905060200201602081019061179a91906138e4565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611838576001600c60008585858181106117d1576117d0614008565b5b90506020020160208101906117e691906138e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061184390614037565b9150506116ae565b505050565b600061185b30610f1e565b905090565b600f5481565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613acc565b60405180910390fd5b600760149054906101000a900460ff1615611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d906140cb565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d99190614100565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a869190614100565b6040518363ffffffff1660e01b8152600401611aa392919061412d565b6020604051808303816000875af1158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae69190614100565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c2c611c2630610f1e565b47612b7a565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ccb929190613f0b565b6020604051808303816000875af1158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e9190613f49565b506001600760146101000a81548160ff0219169083151502179055504290504360088190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590613acc565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090613acc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf906141c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f90613acc565b60405180910390fd5b6000479050600061215b6121386011546064612c9890919063ffffffff16565b61214d60125485612cae90919063ffffffff16565b612cc490919063ffffffff16565b9050600061219b6121786011546064612c9890919063ffffffff16565b61218d60135486612cae90919063ffffffff16565b612cc490919063ffffffff16565b905060006121db6121b86011546064612c9890919063ffffffff16565b6121cd60145487612cae90919063ffffffff16565b612cc490919063ffffffff16565b9050600061221682612208856121fa888a612c9890919063ffffffff16565b612c9890919063ffffffff16565b612c9890919063ffffffff16565b905061222b8185612cda90919063ffffffff16565b9350612238848484612cf0565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690613acc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516122f590614219565b60006040518083038185875af1925050503d8060008114612332576040519150601f19603f3d011682016040523d82523d6000602084013e612337565b606091505b50508091505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ae906142a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90614332565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612504919061383f565b60405180910390a3505050565b600061251d8484611d57565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125975781811015612589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125809061439e565b60405180910390fd5b6125968484848403612348565b5b50505050565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126415750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61264a57600080fd5b6000819050600760149054906101000a900460ff1680156127085750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127075750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b801561275e5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127b45750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127c7576127c4848484612e89565b90505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286b5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128c957600e548161287d85610f1e565b6128879190613de5565b11156128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614430565b60405180910390fd5b5b6128d484848361310a565b50505050565b6000804790506000600267ffffffffffffffff8111156128fd576128fc614450565b5b60405190808252806020026020018201604052801561292b5781602001602082028036833780820191505090505b509050308160008151811061294357612942614008565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0e9190614100565b81600181518110612a2257612a21614008565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a8930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686612348565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401612aed959493929190614582565b600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b505050506000612b348347612c9890919063ffffffff16565b90507f4a6c12eb4e479a4ea28c8acad8efde466ef9bf69cf473501dd768652344962738582604051612b679291906145dc565b60405180910390a1809350505050919050565b612ba730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612348565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bf36111d1565b426040518863ffffffff1660e01b8152600401612c1596959493929190614605565b60606040518083038185885af1158015612c33573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c58919061467b565b5050507fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb48282604051612c8c9291906145dc565b60405180910390a15050565b60008183612ca691906146ce565b905092915050565b60008183612cbc9190613d8b565b905092915050565b60008183612cd29190613e48565b905092915050565b60008183612ce89190613de5565b905092915050565b6000831115612d6357601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612d61573d6000803e3d6000fd5b505b6000821115612dd657601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612dd4573d6000803e3d6000fd5b505b6000811115612e4957601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612e47573d6000803e3d6000fd5b505b7f125472b1b527506b5b8381590760f796fd9c88ba5886399d71abc083c6dafa20838383604051612e7c93929190614702565b60405180910390a1505050565b6000806000600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f2f5750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6590614785565b60405180910390fd5b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613050576000600f549050612fed6064612fdf8388612cae90919063ffffffff16565b612cc490919063ffffffff16565b92506130028386612c9890919063ffffffff16565b915061300f87308561310a565b7f6b0b46d0273ce53f1de696d2100b35dd3a405dcecbcbeede66215d858d5c401d873085604051613042939291906147a5565b60405180910390a1506130fe565b6000601054905061307d606461306f8388612cae90919063ffffffff16565b612cc490919063ffffffff16565b92506130928386612c9890919063ffffffff16565b915061309f87308561310a565b60006130aa30610f1e565b90506015548111156130c0576130bf81613389565b5b7f4ab5e0df8ff1605133dbdd1b8e3f52edb9539abe64595f6f70b30d2fea7f204a8830866040516130f3939291906147a5565b60405180910390a150505b80925050509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131709061484e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df906148e0565b60405180910390fd5b6131f383838361353a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327090614972565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330c9190613de5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613370919061383f565b60405180910390a361338384848461353f565b50505050565b60006133b360646133a560115485612cae90919063ffffffff16565b612cc490919063ffffffff16565b905060006133cb600283612cc490919063ffffffff16565b905060006133e28285612c9890919063ffffffff16565b905060006133ef826128da565b9050600061341b606461340d60115485612cae90919063ffffffff16565b612cc490919063ffffffff16565b90506000613447606461343960125486612cae90919063ffffffff16565b612cc490919063ffffffff16565b90506000613473606461346560135487612cae90919063ffffffff16565b612cc490919063ffffffff16565b9050600061349f606461349160145488612cae90919063ffffffff16565b612cc490919063ffffffff16565b905060006134ec826134de856134d0886134c28b8d612c9890919063ffffffff16565b612c9890919063ffffffff16565b612c9890919063ffffffff16565b612c9890919063ffffffff16565b90506135018185612cda90919063ffffffff16565b935061350e848484612cf0565b60008811801561351e5750600085115b1561352e5761352d8886612b7a565b5b50505050505050505050565b505050565b505050565b600080fd5b600080fd5b6000819050919050565b6135618161354e565b811461356c57600080fd5b50565b60008135905061357e81613558565b92915050565b60008060008060008060c087890312156135a1576135a0613544565b5b60006135af89828a0161356f565b96505060206135c089828a0161356f565b95505060406135d189828a0161356f565b94505060606135e289828a0161356f565b93505060806135f389828a0161356f565b92505060a061360489828a0161356f565b9150509295509295509295565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061363c82613611565b9050919050565b61364c81613631565b811461365757600080fd5b50565b60008135905061366981613643565b92915050565b60008115159050919050565b6136848161366f565b811461368f57600080fd5b50565b6000813590506136a18161367b565b92915050565b600080604083850312156136be576136bd613544565b5b60006136cc8582860161365a565b92505060206136dd85828601613692565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613721578082015181840152602081019050613706565b60008484015250505050565b6000601f19601f8301169050919050565b6000613749826136e7565b61375381856136f2565b9350613763818560208601613703565b61376c8161372d565b840191505092915050565b60006020820190508181036000830152613791818461373e565b905092915050565b600080604083850312156137b0576137af613544565b5b60006137be8582860161365a565b92505060206137cf8582860161356f565b9150509250929050565b6137e28161366f565b82525050565b60006020820190506137fd60008301846137d9565b92915050565b60006020828403121561381957613818613544565b5b60006138278482850161356f565b91505092915050565b6138398161354e565b82525050565b60006020820190506138546000830184613830565b92915050565b60008060006060848603121561387357613872613544565b5b60006138818682870161365a565b93505060206138928682870161365a565b92505060406138a38682870161356f565b9150509250925092565b600060ff82169050919050565b6138c3816138ad565b82525050565b60006020820190506138de60008301846138ba565b92915050565b6000602082840312156138fa576138f9613544565b5b60006139088482850161365a565b91505092915050565b61391a81613631565b82525050565b60006020820190506139356000830184613911565b92915050565b60008060006060848603121561395457613953613544565b5b60006139628682870161365a565b93505060206139738682870161365a565b92505060406139848682870161365a565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126139b3576139b261398e565b5b8235905067ffffffffffffffff8111156139d0576139cf613993565b5b6020830191508360208202830111156139ec576139eb613998565b5b9250929050565b60008060208385031215613a0a57613a09613544565b5b600083013567ffffffffffffffff811115613a2857613a27613549565b5b613a348582860161399d565b92509250509250929050565b60008060408385031215613a5757613a56613544565b5b6000613a658582860161365a565b9250506020613a768582860161365a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab66020836136f2565b9150613ac182613a80565b602082019050919050565b60006020820190508181036000830152613ae581613aa9565b9050919050565b7f414c5048413a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000613b48603f836136f2565b9150613b5382613aec565b604082019050919050565b60006020820190508181036000830152613b7781613b3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc557607f821691505b602082108103613bd857613bd7613b7e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613c6457808604811115613c4057613c3f613bde565b5b6001851615613c4f5780820291505b8081029050613c5d85613c0d565b9450613c24565b94509492505050565b600082613c7d5760019050613d39565b81613c8b5760009050613d39565b8160018114613ca15760028114613cab57613cda565b6001915050613d39565b60ff841115613cbd57613cbc613bde565b5b8360020a915084821115613cd457613cd3613bde565b5b50613d39565b5060208310610133831016604e8410600b8410161715613d0f5782820a905083811115613d0a57613d09613bde565b5b613d39565b613d1c8484846001613c1a565b92509050818404811115613d3357613d32613bde565b5b81810290505b9392505050565b6000613d4b8261354e565b9150613d56836138ad565b9250613d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c6d565b905092915050565b6000613d968261354e565b9150613da18361354e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dda57613dd9613bde565b5b828202905092915050565b6000613df08261354e565b9150613dfb8361354e565b9250828201905080821115613e1357613e12613bde565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e538261354e565b9150613e5e8361354e565b925082613e6e57613e6d613e19565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b6000613ed56024836136f2565b9150613ee082613e79565b604082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b6000604082019050613f206000830185613911565b613f2d6020830184613830565b9392505050565b600081519050613f438161367b565b92915050565b600060208284031215613f5f57613f5e613544565b5b6000613f6d84828501613f34565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fd26025836136f2565b9150613fdd82613f76565b604082019050919050565b6000602082019050818103600083015261400181613fc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006140428261354e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361407457614073613bde565b5b600182019050919050565b7f414c5048413a2054726164696e6720697320616c7265616479206f70656e0000600082015250565b60006140b5601e836136f2565b91506140c08261407f565b602082019050919050565b600060208201905081810360008301526140e4816140a8565b9050919050565b6000815190506140fa81613643565b92915050565b60006020828403121561411657614115613544565b5b6000614124848285016140eb565b91505092915050565b60006040820190506141426000830185613911565b61414f6020830184613911565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141b26026836136f2565b91506141bd82614156565b604082019050919050565b600060208201905081810360008301526141e1816141a5565b9050919050565b600081905092915050565b50565b60006142036000836141e8565b915061420e826141f3565b600082019050919050565b6000614224826141f6565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061428a6024836136f2565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061431c6022836136f2565b9150614327826142c0565b604082019050919050565b6000602082019050818103600083015261434b8161430f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614388601d836136f2565b915061439382614352565b602082019050919050565b600060208201905081810360008301526143b78161437b565b9050919050565b7f414c5048413a2057616c6c65742062616c616e6365206c696d6974207265616360008201527f6865640000000000000000000000000000000000000000000000000000000000602082015250565b600061441a6023836136f2565b9150614425826143be565b604082019050919050565b600060208201905081810360008301526144498161440d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b60006144ae6144a96144a48461447f565b614489565b61354e565b9050919050565b6144be81614493565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144f981613631565b82525050565b600061450b83836144f0565b60208301905092915050565b6000602082019050919050565b600061452f826144c4565b61453981856144cf565b9350614544836144e0565b8060005b8381101561457557815161455c88826144ff565b975061456783614517565b925050600181019050614548565b5085935050505092915050565b600060a0820190506145976000830188613830565b6145a460208301876144b5565b81810360408301526145b68186614524565b90506145c56060830185613911565b6145d26080830184613830565b9695505050505050565b60006040820190506145f16000830185613830565b6145fe6020830184613830565b9392505050565b600060c08201905061461a6000830189613911565b6146276020830188613830565b61463460408301876144b5565b61464160608301866144b5565b61464e6080830185613911565b61465b60a0830184613830565b979650505050505050565b60008151905061467581613558565b92915050565b60008060006060848603121561469457614693613544565b5b60006146a286828701614666565b93505060206146b386828701614666565b92505060406146c486828701614666565b9150509250925092565b60006146d98261354e565b91506146e48361354e565b92508282039050818111156146fc576146fb613bde565b5b92915050565b60006060820190506147176000830186613830565b6147246020830185613830565b6147316040830184613830565b949350505050565b7f414c5048413a204e6f206d61726b6574206d616b65727320666f756e64000000600082015250565b600061476f601d836136f2565b915061477a82614739565b602082019050919050565b6000602082019050818103600083015261479e81614762565b9050919050565b60006060820190506147ba6000830186613911565b6147c76020830185613911565b6147d46040830184613830565b949350505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148386025836136f2565b9150614843826147dc565b604082019050919050565b600060208201905081810360008301526148678161482b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148ca6023836136f2565b91506148d58261486e565b604082019050919050565b600060208201905081810360008301526148f9816148bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061495c6026836136f2565b915061496782614900565b604082019050919050565b6000602082019050818103600083015261498b8161494f565b905091905056fea26469706673582212209fae7950e01a349e17d84cca7a2ec9df655948c4d44a3a6858442892a28d956464736f6c63430008100033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001d0991e7438e8c02e2b38f110af452fe72c66ed50000000000000000000000001b39365411f37912ba8c6a8a3d375c08572c0af50000000000000000000000006640984e492bbf8815be144e22a358336d51c82d

-----Decoded View---------------
Arg [0] : _dev1WalletAddress (address): 0x1d0991E7438e8C02E2b38f110Af452FE72c66eD5
Arg [1] : _dev2WalletAddress (address): 0x1B39365411f37912BA8c6A8A3D375C08572C0AF5
Arg [2] : _marketingWalletAddress (address): 0x6640984e492Bbf8815be144e22A358336D51c82D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001d0991e7438e8c02e2b38f110af452fe72c66ed5
Arg [1] : 0000000000000000000000001b39365411f37912ba8c6a8a3d375c08572c0af5
Arg [2] : 0000000000000000000000006640984e492bbf8815be144e22a358336d51c82d


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.