ETH Price: $2,980.57 (+2.07%)
Gas: 1 Gwei

Token

DIEHARDER (DIEHARDER)
 

Overview

Max Total Supply

9,860,000,000 DIEHARDER

Holders

287

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,049 DIEHARDER

Value
$0.00
0xed1ad049adb40df9736ff1786a2beca8387b8b02
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:
DIEHARDER

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-17
*/

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        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 Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    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 burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    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 IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

contract DIEHARDER is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "DIEHARDER";
    string private _symbol = "DIEHARDER";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress =
        payable(0x3898141605eE9BB9f89d48E443cC35Ffda91aeEe);
    address payable public teamWalletAddress =
        payable(0x3898141605eE9BB9f89d48E443cC35Ffda91aeEe);
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;

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

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public _blackList;
    mapping(address => bool) public isMarketPair;
    bool public isLaunch = false;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 2;
    uint256 public _buyTeamFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellTeamFee = 0;

    uint256 private _liquidityShare = 0;
    uint256 private _marketingShare = 100;
    uint256 private _teamShare = 0;

    uint256 private _totalTaxIfBuying = 1;
    uint256 private _totalTaxIfSelling = 1;
    uint256 private _totalDistributionShares = 2;

    uint256 private _totalSupply = 9860000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 10000000 * 5**_decimals;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyTeamFee
        );
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellTeamFee
        );
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _teamShare
        );

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue)
        public
        onlyOwner
    {
        isMarketPair[account] = newValue;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner {
        minimumTokensBeforeSwap = newLimit;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address newRouterAddress)
        public
        onlyOwner
        returns (address newPairAddress)
    {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            newRouterAddress
        );

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        if (newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!_blackList[recipient] && !_blackList[sender], "black address");

        if (!isExcludedFromFee[sender] && !isExcludedFromFee[recipient]) {
            require(isLaunch, "Swap not open");
        }

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        } else {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >=
                minimumTokensBeforeSwap;

            if (
                overMinimumTokenBalance &&
                !inSwapAndLiquify &&
                !isMarketPair[sender] &&
                swapAndLiquifyEnabled
            ) {
                if (swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(
                amount,
                "Insufficient Balance"
            );
            uint256 finalAmount;
            if (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
                finalAmount = amount;
            } else {
                finalAmount = takeFee(sender, recipient, amount);
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 tokensForLP = tAmount
            .mul(_liquidityShare)
            .div(_totalDistributionShares)
            .div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(
            _liquidityShare.div(2)
        );

        uint256 amountBNBLiquidity = amountReceived
            .mul(_liquidityShare)
            .div(totalBNBFee)
            .div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(
            amountBNBTeam
        );

        if (amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if (amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if (amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        } else if (isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

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

        return amount.sub(feeAmount);
    }

    function setWList(address[] calldata addrs, bool status)
        external
        onlyOwner
    {
        for (uint256 i; i < addrs.length; ++i) {
            isExcludedFromFee[addrs[i]] = status;
        }
    }

    function setBList(address[] calldata addrs, bool status)
        external
        onlyOwner
    {
        for (uint256 i; i < addrs.length; ++i) {
            _blackList[addrs[i]] = status;
        }
    }

    function Launch() public onlyOwner {
        isLaunch = true;
    }

    function setBuyTaxes(uint256 _marketing, uint256 _liquidity, uint256 _team) external onlyOwner{
        _buyLiquidityFee = _liquidity;
        _buyMarketingFee = _marketing;
        _buyTeamFee = _team;
    }

    function setSellTaxes(uint256 _marketing, uint256 _liquidity, uint256 _team) external onlyOwner{
        _sellLiquidityFee = _liquidity;
        _sellMarketingFee = _marketing;
        _sellTeamFee = _team;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","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":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setWList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600981526020017f4449454841524445520000000000000000000000000000000000000000000000815250600390816200004a919062000b54565b506040518060400160405280600981526020017f44494548415244455200000000000000000000000000000000000000000000008152506004908162000091919062000b54565b50600960055f6101000a81548160ff021916908360ff160217905550733898141605ee9bb9f89d48e443cc35ffda91aeee600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733898141605ee9bb9f89d48e443cc35ffda91aeee60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600c5f6101000a81548160ff0219169083151502179055505f600d556002600e555f600f555f60105560026011555f6012555f60135560646014555f60155560016016556001601755600260185560055f9054906101000a900460ff16600a620001f7919062000dc1565b64024bb3a90062000209919062000e11565b60195560055f9054906101000a900460ff16600562000229919062000dc1565b6298968062000239919062000e11565b601a556001601c60156101000a81548160ff0219169083151502179055505f601c60166101000a81548160ff0219169083151502179055503480156200027d575f80fd5b505f6200028f6200086060201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b3919062000ec0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000419573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200043f919062000ec0565b6040518363ffffffff1660e01b81526004016200045e92919062000f01565b6020604051808303815f875af11580156200047b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a1919062000ec0565b601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060195460085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160095f620005d56200086760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620006a8600f5462000699600e54600d546200088e60201b90919060201c565b6200088e60201b90919060201c565b601681905550620006dd601254620006ce6011546010546200088e60201b90919060201c565b6200088e60201b90919060201c565b60178190555062000712601554620007036014546013546200088e60201b90919060201c565b6200088e60201b90919060201c565b6018819055506001600b5f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060195460075f620007a46200086060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550620007f16200086060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60195460405162000851919062000f3d565b60405180910390a35062001010565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8082846200089e919062000f58565b905083811015620008e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008dd9062000ff0565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200096c57607f821691505b60208210810362000982576200098162000927565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009a9565b620009f28683620009a9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000a3c62000a3662000a308462000a0a565b62000a13565b62000a0a565b9050919050565b5f819050919050565b62000a578362000a1c565b62000a6f62000a668262000a43565b848454620009b5565b825550505050565b5f90565b62000a8562000a77565b62000a9281848462000a4c565b505050565b5b8181101562000ab95762000aad5f8262000a7b565b60018101905062000a98565b5050565b601f82111562000b085762000ad28162000988565b62000add846200099a565b8101602085101562000aed578190505b62000b0562000afc856200099a565b83018262000a97565b50505b505050565b5f82821c905092915050565b5f62000b2a5f198460080262000b0d565b1980831691505092915050565b5f62000b44838362000b19565b9150826002028217905092915050565b62000b5f82620008f0565b67ffffffffffffffff81111562000b7b5762000b7a620008fa565b5b62000b87825462000954565b62000b9482828562000abd565b5f60209050601f83116001811462000bca575f841562000bb5578287015190505b62000bc1858262000b37565b86555062000c30565b601f19841662000bda8662000988565b5f5b8281101562000c035784890151825560018201915060208501945060208101905062000bdc565b8683101562000c23578489015162000c1f601f89168262000b19565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000cc25780860481111562000c9a5762000c9962000c38565b5b600185161562000caa5780820291505b808102905062000cba8562000c65565b945062000c7a565b94509492505050565b5f8262000cdc576001905062000dae565b8162000ceb575f905062000dae565b816001811462000d04576002811462000d0f5762000d45565b600191505062000dae565b60ff84111562000d245762000d2362000c38565b5b8360020a91508482111562000d3e5762000d3d62000c38565b5b5062000dae565b5060208310610133831016604e8410600b841016171562000d7f5782820a90508381111562000d795762000d7862000c38565b5b62000dae565b62000d8e848484600162000c71565b9250905081840481111562000da85762000da762000c38565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000dcd8262000a0a565b915062000dda8362000db5565b925062000e097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ccb565b905092915050565b5f62000e1d8262000a0a565b915062000e2a8362000a0a565b925082820262000e3a8162000a0a565b9150828204841483151762000e545762000e5362000c38565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e8a8262000e5f565b9050919050565b62000e9c8162000e7e565b811462000ea7575f80fd5b50565b5f8151905062000eba8162000e91565b92915050565b5f6020828403121562000ed85762000ed762000e5b565b5b5f62000ee78482850162000eaa565b91505092915050565b62000efb8162000e7e565b82525050565b5f60408201905062000f165f83018562000ef0565b62000f25602083018462000ef0565b9392505050565b62000f378162000a0a565b82525050565b5f60208201905062000f525f83018462000f2c565b92915050565b5f62000f648262000a0a565b915062000f718362000a0a565b925082820190508082111562000f8c5762000f8b62000c38565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000fd8601b8362000f92565b915062000fe58262000fa2565b602082019050919050565b5f6020820190508181035f830152620010098162000fca565b9050919050565b608051614263620010375f395f8181610de701528181610e12015261321501526142635ff3fe60806040526004361061025f575f3560e01c8063844d591c11610143578063c5d24189116100b5578063d5e9452411610079578063d5e94524146108fa578063da00097d14610922578063dc44b6a01461094c578063dd62ed3e14610976578063f2fde38b146109b2578063f5d588f5146109da57610266565b8063c5d2418914610828578063c816841b14610852578063c86079521461087c578063cab03471146108a6578063d158272d146108d057610266565b8063a073d37f11610107578063a073d37f1461070c578063a457c2d714610736578063a5d69d1f14610772578063a9059cbb1461079a578063c469b6dd146107d6578063c49b9a801461080057610266565b8063844d591c1461065057806388790a68146106785780638da5cb5b146106a2578063914eb66a146106cc57806395d89b41146106e257610266565b80632b112e49116101dc5780634a74bb02116101a05780634a74bb021461050e5780635342acb4146105385780635881f3ef14610574578063595dec3c146105b057806370a08231146105ec578063756742911461062857610266565b80632b112e491461041a578063313ce56714610444578063395093511461046e5780633b97084a146104aa5780633ecad271146104d257610266565b80631694505e116102235780631694505e1461033857806318160ddd146103625780631870517a1461038c57806323b872dd146103b457806327c8f835146103f057610266565b806302ac81681461026a57806306fdde031461028057806308733214146102aa578063095ea7b3146102d25780631245e3471461030e57610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e610a04565b005b34801561028b575f80fd5b50610294610ab4565b6040516102a19190613389565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb91906133e4565b610b44565b005b3480156102dd575f80fd5b506102f860048036038101906102f3919061348e565b610bf2565b60405161030591906134e6565b60405180910390f35b348015610319575f80fd5b50610322610c0f565b60405161032f919061351f565b60405180910390f35b348015610343575f80fd5b5061034c610c34565b6040516103599190613593565b60405180910390f35b34801561036d575f80fd5b50610376610c59565b60405161038391906135bb565b60405180910390f35b348015610397575f80fd5b506103b260048036038101906103ad91906133e4565b610c62565b005b3480156103bf575f80fd5b506103da60048036038101906103d591906135d4565b610d10565b6040516103e791906134e6565b60405180910390f35b3480156103fb575f80fd5b50610404610de5565b6040516104119190613633565b60405180910390f35b348015610425575f80fd5b5061042e610e09565b60405161043b91906135bb565b60405180910390f35b34801561044f575f80fd5b50610458610e4c565b6040516104659190613667565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f919061348e565b610e61565b6040516104a191906134e6565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb9190613680565b610f0f565b005b3480156104dd575f80fd5b506104f860048036038101906104f391906136ab565b610fad565b60405161050591906134e6565b60405180910390f35b348015610519575f80fd5b50610522610fca565b60405161052f91906134e6565b60405180910390f35b348015610543575f80fd5b5061055e600480360381019061055991906136ab565b610fdd565b60405161056b91906134e6565b60405180910390f35b34801561057f575f80fd5b5061059a600480360381019061059591906136ab565b610ffa565b6040516105a79190613633565b60405180910390f35b3480156105bb575f80fd5b506105d660048036038101906105d191906136ab565b61146c565b6040516105e391906134e6565b60405180910390f35b3480156105f7575f80fd5b50610612600480360381019061060d91906136ab565b611489565b60405161061f91906135bb565b60405180910390f35b348015610633575f80fd5b5061064e60048036038101906106499190613761565b6114cf565b005b34801561065b575f80fd5b50610676600480360381019061067191906137be565b6115fc565b005b348015610683575f80fd5b5061068c6116e8565b60405161069991906135bb565b60405180910390f35b3480156106ad575f80fd5b506106b66116ee565b6040516106c39190613633565b60405180910390f35b3480156106d7575f80fd5b506106e0611715565b005b3480156106ed575f80fd5b506106f6611867565b6040516107039190613389565b60405180910390f35b348015610717575f80fd5b506107206118f7565b60405161072d91906135bb565b60405180910390f35b348015610741575f80fd5b5061075c6004803603810190610757919061348e565b611900565b60405161076991906134e6565b60405180910390f35b34801561077d575f80fd5b50610798600480360381019061079391906137fc565b6119c8565b005b3480156107a5575f80fd5b506107c060048036038101906107bb919061348e565b611a79565b6040516107cd91906134e6565b60405180910390f35b3480156107e1575f80fd5b506107ea611a97565b6040516107f791906135bb565b60405180910390f35b34801561080b575f80fd5b50610826600480360381019061082191906137fc565b611a9d565b005b348015610833575f80fd5b5061083c611b85565b60405161084991906135bb565b60405180910390f35b34801561085d575f80fd5b50610866611b8b565b6040516108739190613633565b60405180910390f35b348015610887575f80fd5b50610890611bb0565b60405161089d91906135bb565b60405180910390f35b3480156108b1575f80fd5b506108ba611bb6565b6040516108c791906135bb565b60405180910390f35b3480156108db575f80fd5b506108e4611bbc565b6040516108f1919061351f565b60405180910390f35b348015610905575f80fd5b50610920600480360381019061091b9190613761565b611be2565b005b34801561092d575f80fd5b50610936611d0f565b60405161094391906134e6565b60405180910390f35b348015610957575f80fd5b50610960611d22565b60405161096d91906135bb565b60405180910390f35b348015610981575f80fd5b5061099c60048036038101906109979190613827565b611d28565b6040516109a991906135bb565b60405180910390f35b3480156109bd575f80fd5b506109d860048036038101906109d391906136ab565b611daa565b005b3480156109e5575f80fd5b506109ee611f67565b6040516109fb91906134e6565b60405180910390f35b610a0c611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f906138af565b60405180910390fd5b6001600c5f6101000a81548160ff021916908315150217905550565b606060038054610ac3906138fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef906138fa565b8015610b3a5780601f10610b1157610100808354040283529160200191610b3a565b820191905f5260205f20905b815481529060010190602001808311610b1d57829003601f168201915b5050505050905090565b610b4c611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf906138af565b60405180910390fd5b816010819055508260118190555080601281905550505050565b5f610c05610bfe611f79565b8484611f80565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601954905090565b610c6a611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906138af565b60405180910390fd5b81600d8190555082600e8190555080600f81905550505050565b5f610d1c848484612143565b50610dda84610d29611f79565b610dd5856040518060600160405280602881526020016141e16028913960085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d8c611f79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b611f80565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f610e47610e367f0000000000000000000000000000000000000000000000000000000000000000611489565b6019546127c090919063ffffffff16565b905090565b5f60055f9054906101000a900460ff16905090565b5f610f05610e6d611f79565b84610f008560085f610e7d611f79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b611f80565b6001905092915050565b610f17611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a906138af565b60405180910390fd5b80601a8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601c60159054906101000a900460ff1681565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f611003611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906138af565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611100919061393e565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611189919061393e565b6040518363ffffffff1660e01b81526004016111a6929190613969565b602060405180830381865afa1580156111c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e5919061393e565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611370578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611263573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611287919061393e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611310919061393e565b6040518363ffffffff1660e01b815260040161132d929190613969565b6020604051808303815f875af1158015611349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136d919061393e565b91505b81601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114d7611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a906138af565b60405180910390fd5b5f5b838390508110156115f65781600a5f86868581811061158757611586613990565b5b905060200201602081019061159c91906136ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611565565b50505050565b611604611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906138af565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171d611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a0906138af565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead5f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060048054611876906138fa565b80601f01602080910402602001604051908101604052809291908181526020018280546118a2906138fa565b80156118ed5780601f106118c4576101008083540402835291602001916118ed565b820191905f5260205f20905b8154815290600101906020018083116118d057829003601f168201915b5050505050905090565b5f601a54905090565b5f6119be61190c611f79565b846119b9856040518060600160405280602581526020016142096025913960085f611935611f79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b611f80565b6001905092915050565b6119d0611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a53906138af565b60405180910390fd5b80601c60166101000a81548160ff02191690831515021790555050565b5f611a8c611a85611f79565b8484612143565b506001905092915050565b600f5481565b611aa5611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906138af565b60405180910390fd5b80601c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611b7a91906134e6565b60405180910390a150565b600e5481565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bea611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d906138af565b60405180910390fd5b5f5b83839050811015611d09578160095f868685818110611c9a57611c99613990565b5b9050602002016020810190611caf91906136ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611c78565b50505050565b601c60169054906101000a900460ff1681565b600d5481565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611db2611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906138af565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390613a2d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590613abb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613b49565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161213691906135bb565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990613bd7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221790613c65565b60405180910390fd5b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156122be5750600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490613ccd565b60405180910390fd5b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561239b575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123ef57600c5f9054906101000a900460ff166123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590613d35565b60405180910390fd5b5b601c60149054906101000a900460ff16156124165761240f848484612866565b9050612757565b5f61242030611489565b90505f601a5482101590508080156124455750601c60149054906101000a900460ff16155b80156124985750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124b05750601c60159054906101000a900460ff165b156124da57601c60169054906101000a900460ff16156124d057601a5491505b6124d982612a30565b5b612561846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061263e575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561264b57849050612659565b612656878787612c14565b90505b6126a98160075f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161274791906135bb565b60405180910390a3600193505050505b9392505050565b5f8383111582906127a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279c9190613389565b60405180910390fd5b505f83856127b39190613d80565b9050809150509392505050565b5f61280183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061275e565b905092915050565b5f8082846128179190613db3565b90508381101561285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390613e30565b60405180910390fd5b8091505092915050565b5f6128ee826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061297f8260075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a1d91906135bb565b60405180910390a3600190509392505050565b6001601c60146101000a81548160ff0219169083151502179055505f612a886002612a7a601854612a6c60135487612e2e90919063ffffffff16565b612ea590919063ffffffff16565b612ea590919063ffffffff16565b90505f612a9e82846127c090919063ffffffff16565b9050612aa981612eee565b5f4790505f612ad8612ac76002601354612ea590919063ffffffff16565b6018546127c090919063ffffffff16565b90505f612b156002612b0784612af960135488612e2e90919063ffffffff16565b612ea590919063ffffffff16565b612ea590919063ffffffff16565b90505f612b3f83612b3160155487612e2e90919063ffffffff16565b612ea590919063ffffffff16565b90505f612b6782612b5985886127c090919063ffffffff16565b6127c090919063ffffffff16565b90505f811115612b9e57612b9d600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261315d565b5b5f821115612bd257612bd160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361315d565b5b5f83118015612be057505f87115b15612bf057612bef87846131a5565b5b505050505050505f601c60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c9757612c906064612c8260165486612e2e90919063ffffffff16565b612ea590919063ffffffff16565b9050612d12565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d1157612d0e6064612d0060175486612e2e90919063ffffffff16565b612ea590919063ffffffff16565b90505b5b5f811115612e1157612d6a8160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b60075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e0891906135bb565b60405180910390a35b612e2481846127c090919063ffffffff16565b9150509392505050565b5f808303612e3e575f9050612e9f565b5f8284612e4b9190613e4e565b9050828482612e5a9190613ebc565b14612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190613f5c565b60405180910390fd5b809150505b92915050565b5f612ee683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061329e565b905092915050565b5f600267ffffffffffffffff811115612f0a57612f09613f7a565b5b604051908082528060200260200182016040528015612f385781602001602082028036833780820191505090505b50905030815f81518110612f4f57612f4e613990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613017919061393e565b8160018151811061302b5761302a613990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061309130601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f80565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016130f3959493929190614097565b5f604051808303815f87803b15801561310a575f80fd5b505af115801561311c573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516131519291906140ef565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156131a0573d5f803e3d5ffd5b505050565b6131d130601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f80565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b81526004016132569695949392919061411d565b60606040518083038185885af1158015613272573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132979190614190565b5050505050565b5f80831182906132e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132db9190613389565b60405180910390fd5b505f83856132f29190613ebc565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561333657808201518184015260208101905061331b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61335b826132ff565b6133658185613309565b9350613375818560208601613319565b61337e81613341565b840191505092915050565b5f6020820190508181035f8301526133a18184613351565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b6133c3816133b1565b81146133cd575f80fd5b50565b5f813590506133de816133ba565b92915050565b5f805f606084860312156133fb576133fa6133a9565b5b5f613408868287016133d0565b9350506020613419868287016133d0565b925050604061342a868287016133d0565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61345d82613434565b9050919050565b61346d81613453565b8114613477575f80fd5b50565b5f8135905061348881613464565b92915050565b5f80604083850312156134a4576134a36133a9565b5b5f6134b18582860161347a565b92505060206134c2858286016133d0565b9150509250929050565b5f8115159050919050565b6134e0816134cc565b82525050565b5f6020820190506134f95f8301846134d7565b92915050565b5f61350982613434565b9050919050565b613519816134ff565b82525050565b5f6020820190506135325f830184613510565b92915050565b5f819050919050565b5f61355b61355661355184613434565b613538565b613434565b9050919050565b5f61356c82613541565b9050919050565b5f61357d82613562565b9050919050565b61358d81613573565b82525050565b5f6020820190506135a65f830184613584565b92915050565b6135b5816133b1565b82525050565b5f6020820190506135ce5f8301846135ac565b92915050565b5f805f606084860312156135eb576135ea6133a9565b5b5f6135f88682870161347a565b93505060206136098682870161347a565b925050604061361a868287016133d0565b9150509250925092565b61362d81613453565b82525050565b5f6020820190506136465f830184613624565b92915050565b5f60ff82169050919050565b6136618161364c565b82525050565b5f60208201905061367a5f830184613658565b92915050565b5f60208284031215613695576136946133a9565b5b5f6136a2848285016133d0565b91505092915050565b5f602082840312156136c0576136bf6133a9565b5b5f6136cd8482850161347a565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126136f7576136f66136d6565b5b8235905067ffffffffffffffff811115613714576137136136da565b5b6020830191508360208202830111156137305761372f6136de565b5b9250929050565b613740816134cc565b811461374a575f80fd5b50565b5f8135905061375b81613737565b92915050565b5f805f60408486031215613778576137776133a9565b5b5f84013567ffffffffffffffff811115613795576137946133ad565b5b6137a1868287016136e2565b935093505060206137b48682870161374d565b9150509250925092565b5f80604083850312156137d4576137d36133a9565b5b5f6137e18582860161347a565b92505060206137f28582860161374d565b9150509250929050565b5f60208284031215613811576138106133a9565b5b5f61381e8482850161374d565b91505092915050565b5f806040838503121561383d5761383c6133a9565b5b5f61384a8582860161347a565b925050602061385b8582860161347a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613899602083613309565b91506138a482613865565b602082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061391157607f821691505b602082108103613924576139236138cd565b5b50919050565b5f8151905061393881613464565b92915050565b5f60208284031215613953576139526133a9565b5b5f6139608482850161392a565b91505092915050565b5f60408201905061397c5f830185613624565b6139896020830184613624565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a17602683613309565b9150613a22826139bd565b604082019050919050565b5f6020820190508181035f830152613a4481613a0b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613aa5602483613309565b9150613ab082613a4b565b604082019050919050565b5f6020820190508181035f830152613ad281613a99565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b33602283613309565b9150613b3e82613ad9565b604082019050919050565b5f6020820190508181035f830152613b6081613b27565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613bc1602583613309565b9150613bcc82613b67565b604082019050919050565b5f6020820190508181035f830152613bee81613bb5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c4f602383613309565b9150613c5a82613bf5565b604082019050919050565b5f6020820190508181035f830152613c7c81613c43565b9050919050565b7f626c61636b2061646472657373000000000000000000000000000000000000005f82015250565b5f613cb7600d83613309565b9150613cc282613c83565b602082019050919050565b5f6020820190508181035f830152613ce481613cab565b9050919050565b7f53776170206e6f74206f70656e000000000000000000000000000000000000005f82015250565b5f613d1f600d83613309565b9150613d2a82613ceb565b602082019050919050565b5f6020820190508181035f830152613d4c81613d13565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d8a826133b1565b9150613d95836133b1565b9250828203905081811115613dad57613dac613d53565b5b92915050565b5f613dbd826133b1565b9150613dc8836133b1565b9250828201905080821115613de057613ddf613d53565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613e1a601b83613309565b9150613e2582613de6565b602082019050919050565b5f6020820190508181035f830152613e4781613e0e565b9050919050565b5f613e58826133b1565b9150613e63836133b1565b9250828202613e71816133b1565b91508282048414831517613e8857613e87613d53565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ec6826133b1565b9150613ed1836133b1565b925082613ee157613ee0613e8f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f46602183613309565b9150613f5182613eec565b604082019050919050565b5f6020820190508181035f830152613f7381613f3a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f613fca613fc5613fc084613fa7565b613538565b6133b1565b9050919050565b613fda81613fb0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61401281613453565b82525050565b5f6140238383614009565b60208301905092915050565b5f602082019050919050565b5f61404582613fe0565b61404f8185613fea565b935061405a83613ffa565b805f5b8381101561408a5781516140718882614018565b975061407c8361402f565b92505060018101905061405d565b5085935050505092915050565b5f60a0820190506140aa5f8301886135ac565b6140b76020830187613fd1565b81810360408301526140c9818661403b565b90506140d86060830185613624565b6140e560808301846135ac565b9695505050505050565b5f6040820190506141025f8301856135ac565b8181036020830152614114818461403b565b90509392505050565b5f60c0820190506141305f830189613624565b61413d60208301886135ac565b61414a6040830187613fd1565b6141576060830186613fd1565b6141646080830185613624565b61417160a08301846135ac565b979650505050505050565b5f8151905061418a816133ba565b92915050565b5f805f606084860312156141a7576141a66133a9565b5b5f6141b48682870161417c565b93505060206141c58682870161417c565b92505060406141d68682870161417c565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c661e5e141065e9e5bb342ad7431ac42be71c9c4208b9aaeae30ba5f7da33ecd64736f6c63430008160033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c8063844d591c11610143578063c5d24189116100b5578063d5e9452411610079578063d5e94524146108fa578063da00097d14610922578063dc44b6a01461094c578063dd62ed3e14610976578063f2fde38b146109b2578063f5d588f5146109da57610266565b8063c5d2418914610828578063c816841b14610852578063c86079521461087c578063cab03471146108a6578063d158272d146108d057610266565b8063a073d37f11610107578063a073d37f1461070c578063a457c2d714610736578063a5d69d1f14610772578063a9059cbb1461079a578063c469b6dd146107d6578063c49b9a801461080057610266565b8063844d591c1461065057806388790a68146106785780638da5cb5b146106a2578063914eb66a146106cc57806395d89b41146106e257610266565b80632b112e49116101dc5780634a74bb02116101a05780634a74bb021461050e5780635342acb4146105385780635881f3ef14610574578063595dec3c146105b057806370a08231146105ec578063756742911461062857610266565b80632b112e491461041a578063313ce56714610444578063395093511461046e5780633b97084a146104aa5780633ecad271146104d257610266565b80631694505e116102235780631694505e1461033857806318160ddd146103625780631870517a1461038c57806323b872dd146103b457806327c8f835146103f057610266565b806302ac81681461026a57806306fdde031461028057806308733214146102aa578063095ea7b3146102d25780631245e3471461030e57610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e610a04565b005b34801561028b575f80fd5b50610294610ab4565b6040516102a19190613389565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb91906133e4565b610b44565b005b3480156102dd575f80fd5b506102f860048036038101906102f3919061348e565b610bf2565b60405161030591906134e6565b60405180910390f35b348015610319575f80fd5b50610322610c0f565b60405161032f919061351f565b60405180910390f35b348015610343575f80fd5b5061034c610c34565b6040516103599190613593565b60405180910390f35b34801561036d575f80fd5b50610376610c59565b60405161038391906135bb565b60405180910390f35b348015610397575f80fd5b506103b260048036038101906103ad91906133e4565b610c62565b005b3480156103bf575f80fd5b506103da60048036038101906103d591906135d4565b610d10565b6040516103e791906134e6565b60405180910390f35b3480156103fb575f80fd5b50610404610de5565b6040516104119190613633565b60405180910390f35b348015610425575f80fd5b5061042e610e09565b60405161043b91906135bb565b60405180910390f35b34801561044f575f80fd5b50610458610e4c565b6040516104659190613667565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f919061348e565b610e61565b6040516104a191906134e6565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb9190613680565b610f0f565b005b3480156104dd575f80fd5b506104f860048036038101906104f391906136ab565b610fad565b60405161050591906134e6565b60405180910390f35b348015610519575f80fd5b50610522610fca565b60405161052f91906134e6565b60405180910390f35b348015610543575f80fd5b5061055e600480360381019061055991906136ab565b610fdd565b60405161056b91906134e6565b60405180910390f35b34801561057f575f80fd5b5061059a600480360381019061059591906136ab565b610ffa565b6040516105a79190613633565b60405180910390f35b3480156105bb575f80fd5b506105d660048036038101906105d191906136ab565b61146c565b6040516105e391906134e6565b60405180910390f35b3480156105f7575f80fd5b50610612600480360381019061060d91906136ab565b611489565b60405161061f91906135bb565b60405180910390f35b348015610633575f80fd5b5061064e60048036038101906106499190613761565b6114cf565b005b34801561065b575f80fd5b50610676600480360381019061067191906137be565b6115fc565b005b348015610683575f80fd5b5061068c6116e8565b60405161069991906135bb565b60405180910390f35b3480156106ad575f80fd5b506106b66116ee565b6040516106c39190613633565b60405180910390f35b3480156106d7575f80fd5b506106e0611715565b005b3480156106ed575f80fd5b506106f6611867565b6040516107039190613389565b60405180910390f35b348015610717575f80fd5b506107206118f7565b60405161072d91906135bb565b60405180910390f35b348015610741575f80fd5b5061075c6004803603810190610757919061348e565b611900565b60405161076991906134e6565b60405180910390f35b34801561077d575f80fd5b50610798600480360381019061079391906137fc565b6119c8565b005b3480156107a5575f80fd5b506107c060048036038101906107bb919061348e565b611a79565b6040516107cd91906134e6565b60405180910390f35b3480156107e1575f80fd5b506107ea611a97565b6040516107f791906135bb565b60405180910390f35b34801561080b575f80fd5b50610826600480360381019061082191906137fc565b611a9d565b005b348015610833575f80fd5b5061083c611b85565b60405161084991906135bb565b60405180910390f35b34801561085d575f80fd5b50610866611b8b565b6040516108739190613633565b60405180910390f35b348015610887575f80fd5b50610890611bb0565b60405161089d91906135bb565b60405180910390f35b3480156108b1575f80fd5b506108ba611bb6565b6040516108c791906135bb565b60405180910390f35b3480156108db575f80fd5b506108e4611bbc565b6040516108f1919061351f565b60405180910390f35b348015610905575f80fd5b50610920600480360381019061091b9190613761565b611be2565b005b34801561092d575f80fd5b50610936611d0f565b60405161094391906134e6565b60405180910390f35b348015610957575f80fd5b50610960611d22565b60405161096d91906135bb565b60405180910390f35b348015610981575f80fd5b5061099c60048036038101906109979190613827565b611d28565b6040516109a991906135bb565b60405180910390f35b3480156109bd575f80fd5b506109d860048036038101906109d391906136ab565b611daa565b005b3480156109e5575f80fd5b506109ee611f67565b6040516109fb91906134e6565b60405180910390f35b610a0c611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f906138af565b60405180910390fd5b6001600c5f6101000a81548160ff021916908315150217905550565b606060038054610ac3906138fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef906138fa565b8015610b3a5780601f10610b1157610100808354040283529160200191610b3a565b820191905f5260205f20905b815481529060010190602001808311610b1d57829003601f168201915b5050505050905090565b610b4c611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf906138af565b60405180910390fd5b816010819055508260118190555080601281905550505050565b5f610c05610bfe611f79565b8484611f80565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601954905090565b610c6a611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906138af565b60405180910390fd5b81600d8190555082600e8190555080600f81905550505050565b5f610d1c848484612143565b50610dda84610d29611f79565b610dd5856040518060600160405280602881526020016141e16028913960085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d8c611f79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b611f80565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f610e47610e367f000000000000000000000000000000000000000000000000000000000000dead611489565b6019546127c090919063ffffffff16565b905090565b5f60055f9054906101000a900460ff16905090565b5f610f05610e6d611f79565b84610f008560085f610e7d611f79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b611f80565b6001905092915050565b610f17611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a906138af565b60405180910390fd5b80601a8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601c60159054906101000a900460ff1681565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f611003611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906138af565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611100919061393e565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611189919061393e565b6040518363ffffffff1660e01b81526004016111a6929190613969565b602060405180830381865afa1580156111c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e5919061393e565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611370578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611263573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611287919061393e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611310919061393e565b6040518363ffffffff1660e01b815260040161132d929190613969565b6020604051808303815f875af1158015611349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136d919061393e565b91505b81601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114d7611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a906138af565b60405180910390fd5b5f5b838390508110156115f65781600a5f86868581811061158757611586613990565b5b905060200201602081019061159c91906136ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611565565b50505050565b611604611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906138af565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171d611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a0906138af565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead5f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060048054611876906138fa565b80601f01602080910402602001604051908101604052809291908181526020018280546118a2906138fa565b80156118ed5780601f106118c4576101008083540402835291602001916118ed565b820191905f5260205f20905b8154815290600101906020018083116118d057829003601f168201915b5050505050905090565b5f601a54905090565b5f6119be61190c611f79565b846119b9856040518060600160405280602581526020016142096025913960085f611935611f79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b611f80565b6001905092915050565b6119d0611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a53906138af565b60405180910390fd5b80601c60166101000a81548160ff02191690831515021790555050565b5f611a8c611a85611f79565b8484612143565b506001905092915050565b600f5481565b611aa5611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906138af565b60405180910390fd5b80601c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611b7a91906134e6565b60405180910390a150565b600e5481565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bea611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d906138af565b60405180910390fd5b5f5b83839050811015611d09578160095f868685818110611c9a57611c99613990565b5b9050602002016020810190611caf91906136ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611c78565b50505050565b601c60169054906101000a900460ff1681565b600d5481565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611db2611f79565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906138af565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390613a2d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590613abb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613b49565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161213691906135bb565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990613bd7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221790613c65565b60405180910390fd5b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156122be5750600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490613ccd565b60405180910390fd5b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561239b575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123ef57600c5f9054906101000a900460ff166123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590613d35565b60405180910390fd5b5b601c60149054906101000a900460ff16156124165761240f848484612866565b9050612757565b5f61242030611489565b90505f601a5482101590508080156124455750601c60149054906101000a900460ff16155b80156124985750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124b05750601c60159054906101000a900460ff165b156124da57601c60169054906101000a900460ff16156124d057601a5491505b6124d982612a30565b5b612561846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060075f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061263e575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561264b57849050612659565b612656878787612c14565b90505b6126a98160075f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161274791906135bb565b60405180910390a3600193505050505b9392505050565b5f8383111582906127a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279c9190613389565b60405180910390fd5b505f83856127b39190613d80565b9050809150509392505050565b5f61280183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061275e565b905092915050565b5f8082846128179190613db3565b90508381101561285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390613e30565b60405180910390fd5b8091505092915050565b5f6128ee826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461275e9092919063ffffffff16565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061297f8260075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a1d91906135bb565b60405180910390a3600190509392505050565b6001601c60146101000a81548160ff0219169083151502179055505f612a886002612a7a601854612a6c60135487612e2e90919063ffffffff16565b612ea590919063ffffffff16565b612ea590919063ffffffff16565b90505f612a9e82846127c090919063ffffffff16565b9050612aa981612eee565b5f4790505f612ad8612ac76002601354612ea590919063ffffffff16565b6018546127c090919063ffffffff16565b90505f612b156002612b0784612af960135488612e2e90919063ffffffff16565b612ea590919063ffffffff16565b612ea590919063ffffffff16565b90505f612b3f83612b3160155487612e2e90919063ffffffff16565b612ea590919063ffffffff16565b90505f612b6782612b5985886127c090919063ffffffff16565b6127c090919063ffffffff16565b90505f811115612b9e57612b9d600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261315d565b5b5f821115612bd257612bd160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361315d565b5b5f83118015612be057505f87115b15612bf057612bef87846131a5565b5b505050505050505f601c60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c9757612c906064612c8260165486612e2e90919063ffffffff16565b612ea590919063ffffffff16565b9050612d12565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d1157612d0e6064612d0060175486612e2e90919063ffffffff16565b612ea590919063ffffffff16565b90505b5b5f811115612e1157612d6a8160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461280990919063ffffffff16565b60075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e0891906135bb565b60405180910390a35b612e2481846127c090919063ffffffff16565b9150509392505050565b5f808303612e3e575f9050612e9f565b5f8284612e4b9190613e4e565b9050828482612e5a9190613ebc565b14612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190613f5c565b60405180910390fd5b809150505b92915050565b5f612ee683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061329e565b905092915050565b5f600267ffffffffffffffff811115612f0a57612f09613f7a565b5b604051908082528060200260200182016040528015612f385781602001602082028036833780820191505090505b50905030815f81518110612f4f57612f4e613990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613017919061393e565b8160018151811061302b5761302a613990565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061309130601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f80565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016130f3959493929190614097565b5f604051808303815f87803b15801561310a575f80fd5b505af115801561311c573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516131519291906140ef565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156131a0573d5f803e3d5ffd5b505050565b6131d130601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f80565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b81526004016132569695949392919061411d565b60606040518083038185885af1158015613272573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132979190614190565b5050505050565b5f80831182906132e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132db9190613389565b60405180910390fd5b505f83856132f29190613ebc565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561333657808201518184015260208101905061331b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61335b826132ff565b6133658185613309565b9350613375818560208601613319565b61337e81613341565b840191505092915050565b5f6020820190508181035f8301526133a18184613351565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b6133c3816133b1565b81146133cd575f80fd5b50565b5f813590506133de816133ba565b92915050565b5f805f606084860312156133fb576133fa6133a9565b5b5f613408868287016133d0565b9350506020613419868287016133d0565b925050604061342a868287016133d0565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61345d82613434565b9050919050565b61346d81613453565b8114613477575f80fd5b50565b5f8135905061348881613464565b92915050565b5f80604083850312156134a4576134a36133a9565b5b5f6134b18582860161347a565b92505060206134c2858286016133d0565b9150509250929050565b5f8115159050919050565b6134e0816134cc565b82525050565b5f6020820190506134f95f8301846134d7565b92915050565b5f61350982613434565b9050919050565b613519816134ff565b82525050565b5f6020820190506135325f830184613510565b92915050565b5f819050919050565b5f61355b61355661355184613434565b613538565b613434565b9050919050565b5f61356c82613541565b9050919050565b5f61357d82613562565b9050919050565b61358d81613573565b82525050565b5f6020820190506135a65f830184613584565b92915050565b6135b5816133b1565b82525050565b5f6020820190506135ce5f8301846135ac565b92915050565b5f805f606084860312156135eb576135ea6133a9565b5b5f6135f88682870161347a565b93505060206136098682870161347a565b925050604061361a868287016133d0565b9150509250925092565b61362d81613453565b82525050565b5f6020820190506136465f830184613624565b92915050565b5f60ff82169050919050565b6136618161364c565b82525050565b5f60208201905061367a5f830184613658565b92915050565b5f60208284031215613695576136946133a9565b5b5f6136a2848285016133d0565b91505092915050565b5f602082840312156136c0576136bf6133a9565b5b5f6136cd8482850161347a565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126136f7576136f66136d6565b5b8235905067ffffffffffffffff811115613714576137136136da565b5b6020830191508360208202830111156137305761372f6136de565b5b9250929050565b613740816134cc565b811461374a575f80fd5b50565b5f8135905061375b81613737565b92915050565b5f805f60408486031215613778576137776133a9565b5b5f84013567ffffffffffffffff811115613795576137946133ad565b5b6137a1868287016136e2565b935093505060206137b48682870161374d565b9150509250925092565b5f80604083850312156137d4576137d36133a9565b5b5f6137e18582860161347a565b92505060206137f28582860161374d565b9150509250929050565b5f60208284031215613811576138106133a9565b5b5f61381e8482850161374d565b91505092915050565b5f806040838503121561383d5761383c6133a9565b5b5f61384a8582860161347a565b925050602061385b8582860161347a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613899602083613309565b91506138a482613865565b602082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061391157607f821691505b602082108103613924576139236138cd565b5b50919050565b5f8151905061393881613464565b92915050565b5f60208284031215613953576139526133a9565b5b5f6139608482850161392a565b91505092915050565b5f60408201905061397c5f830185613624565b6139896020830184613624565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a17602683613309565b9150613a22826139bd565b604082019050919050565b5f6020820190508181035f830152613a4481613a0b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613aa5602483613309565b9150613ab082613a4b565b604082019050919050565b5f6020820190508181035f830152613ad281613a99565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b33602283613309565b9150613b3e82613ad9565b604082019050919050565b5f6020820190508181035f830152613b6081613b27565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613bc1602583613309565b9150613bcc82613b67565b604082019050919050565b5f6020820190508181035f830152613bee81613bb5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c4f602383613309565b9150613c5a82613bf5565b604082019050919050565b5f6020820190508181035f830152613c7c81613c43565b9050919050565b7f626c61636b2061646472657373000000000000000000000000000000000000005f82015250565b5f613cb7600d83613309565b9150613cc282613c83565b602082019050919050565b5f6020820190508181035f830152613ce481613cab565b9050919050565b7f53776170206e6f74206f70656e000000000000000000000000000000000000005f82015250565b5f613d1f600d83613309565b9150613d2a82613ceb565b602082019050919050565b5f6020820190508181035f830152613d4c81613d13565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d8a826133b1565b9150613d95836133b1565b9250828203905081811115613dad57613dac613d53565b5b92915050565b5f613dbd826133b1565b9150613dc8836133b1565b9250828201905080821115613de057613ddf613d53565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613e1a601b83613309565b9150613e2582613de6565b602082019050919050565b5f6020820190508181035f830152613e4781613e0e565b9050919050565b5f613e58826133b1565b9150613e63836133b1565b9250828202613e71816133b1565b91508282048414831517613e8857613e87613d53565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ec6826133b1565b9150613ed1836133b1565b925082613ee157613ee0613e8f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f46602183613309565b9150613f5182613eec565b604082019050919050565b5f6020820190508181035f830152613f7381613f3a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f613fca613fc5613fc084613fa7565b613538565b6133b1565b9050919050565b613fda81613fb0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61401281613453565b82525050565b5f6140238383614009565b60208301905092915050565b5f602082019050919050565b5f61404582613fe0565b61404f8185613fea565b935061405a83613ffa565b805f5b8381101561408a5781516140718882614018565b975061407c8361402f565b92505060018101905061405d565b5085935050505092915050565b5f60a0820190506140aa5f8301886135ac565b6140b76020830187613fd1565b81810360408301526140c9818661403b565b90506140d86060830185613624565b6140e560808301846135ac565b9695505050505050565b5f6040820190506141025f8301856135ac565b8181036020830152614114818461403b565b90509392505050565b5f60c0820190506141305f830189613624565b61413d60208301886135ac565b61414a6040830187613fd1565b6141576060830186613fd1565b6141646080830185613624565b61417160a08301846135ac565b979650505050505050565b5f8151905061418a816133ba565b92915050565b5f805f606084860312156141a7576141a66133a9565b5b5f6141b48682870161417c565b93505060206141c58682870161417c565b92505060406141d68682870161417c565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c661e5e141065e9e5bb342ad7431ac42be71c9c4208b9aaeae30ba5f7da33ecd64736f6c63430008160033

Deployed Bytecode Sourcemap

16384:14002:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29870:69;;;;;;;;;;;;;:::i;:::-;;19623:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30167:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21171:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16740:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17916:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19900:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29947:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23785:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16850:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22353:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19809:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20327:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21911:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17174:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18027:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17069:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22637:840;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17125:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20008:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29650:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21751:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17385:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6522:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6736:155;;;;;;;;;;;;;:::i;:::-;;19714:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21043:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20635:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22220:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23578:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17346:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22041:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17304:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17964:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17428:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17471:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16625:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29423:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18074:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17262:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20135:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6899:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17225:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29870:69;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29927:4:::1;29916:8;;:15;;;;;;;;;;;;;;;;;;29870:69::o:0;19623:83::-;19660:13;19693:5;19686:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19623:83;:::o;30167:216::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30293:10:::1;30273:17;:30;;;;30334:10;30314:17;:30;;;;30370:5;30355:12;:20;;;;30167:216:::0;;;:::o;21171:193::-;21273:4;21295:39;21304:12;:10;:12::i;:::-;21318:7;21327:6;21295:8;:39::i;:::-;21352:4;21345:11;;21171:193;;;;:::o;16740:103::-;;;;;;;;;;;;;:::o;17916:41::-;;;;;;;;;;;;;:::o;19900:100::-;19953:7;19980:12;;19973:19;;19900:100;:::o;29947:212::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30071:10:::1;30052:16;:29;;;;30111:10;30092:16;:29;;;;30146:5;30132:11;:19;;;;29947:212:::0;;;:::o;23785:446::-;23917:4;23934:36;23944:6;23952:9;23963:6;23934:9;:36::i;:::-;;23981:220;24004:6;24025:12;:10;:12::i;:::-;24052:138;24108:6;24052:138;;;;;;;;;;;;;;;;;:11;:19;24064:6;24052:19;;;;;;;;;;;;;;;:33;24072:12;:10;:12::i;:::-;24052:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;23981:8;:220::i;:::-;24219:4;24212:11;;23785:446;;;;;:::o;16850:90::-;;;:::o;22353:128::-;22406:7;22433:40;22450:22;22460:11;22450:9;:22::i;:::-;22433:12;;:16;;:40;;;;:::i;:::-;22426:47;;22353:128;:::o;19809:83::-;19850:5;19875:9;;;;;;;;;;;19868:16;;19809:83;:::o;20327:300::-;20442:4;20464:133;20487:12;:10;:12::i;:::-;20514:7;20536:50;20575:10;20536:11;:25;20548:12;:10;:12::i;:::-;20536:25;;;;;;;;;;;;;;;:34;20562:7;20536:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20464:8;:133::i;:::-;20615:4;20608:11;;20327:300;;;;:::o;21911:122::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22017:8:::1;21991:23;:34;;;;21911:122:::0;:::o;17174:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;18027:40::-;;;;;;;;;;;;;:::o;17069:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;22637:840::-;22745:22;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22785:35:::1;22856:16;22785:98;;22931:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22913:53;;;22989:4;23009:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22913:130;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22896:147;;23086:1;23060:28;;:14;:28;;::::0;23056:226:::1;;23174:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23156:74;;;23239:4;23246:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23156:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23139:131;;23056:226;23308:14;23294:11;;:28;;;;;;;;;;;;;;;;;;23374:16;23356:15;;:34;;;;;;;;;;;;;;;;;;23465:4;23428:12;:34;23449:11;;;;;;;;;;;23428:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;22774:703;22637:840:::0;;;:::o;17125:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20008:119::-;20074:7;20101:9;:18;20111:7;20101:18;;;;;;;;;;;;;;;;20094:25;;20008:119;;;:::o;29650:212::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29765:9:::1;29760:95;29780:5;;:12;;29776:1;:16;29760:95;;;29837:6;29814:10;:20;29825:5;;29831:1;29825:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29814:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29794:3;;;;;29760:95;;;;29650:212:::0;;;:::o;21751:152::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21887:8:::1;21863:12;:21;21876:7;21863:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21751:152:::0;;:::o;17385:36::-;;;;:::o;6522:79::-;6560:7;6587:6;;;;;;;;;;;6580:13;;6522:79;:::o;6736:155::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6840:6:::1;6803:45;;6824:6;::::0;::::1;;;;;;;;6803:45;;;;;;;;;;;;6876:6;6859;::::0;:24:::1;;;;;;;;;;;;;;;;;;6736:155::o:0;19714:87::-;19753:13;19786:7;19779:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19714:87;:::o;21043:120::-;21105:7;21132:23;;21125:30;;21043:120;:::o;20635:400::-;20755:4;20777:228;20800:12;:10;:12::i;:::-;20827:7;20849:145;20906:15;20849:145;;;;;;;;;;;;;;;;;:11;:25;20861:12;:10;:12::i;:::-;20849:25;;;;;;;;;;;;;;;:34;20875:7;20849:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;20777:8;:228::i;:::-;21023:4;21016:11;;20635:400;;;;:::o;22220:125::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22329:8:::1;22301:25;;:36;;;;;;;;;;;;;;;;;;22220:125:::0;:::o;23578:199::-;23683:4;23705:42;23715:12;:10;:12::i;:::-;23729:9;23740:6;23705:9;:42::i;:::-;;23765:4;23758:11;;23578:199;;;;:::o;17346:30::-;;;;:::o;22041:171::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22142:8:::1;22118:21;;:32;;;;;;;;;;;;;;;;;;22166:38;22195:8;22166:38;;;;;;:::i;:::-;;;;;;;;22041:171:::0;:::o;17304:35::-;;;;:::o;17964:26::-;;;;;;;;;;;;;:::o;17428:36::-;;;;:::o;17471:31::-;;;;:::o;16625:108::-;;;;;;;;;;;;;:::o;29423:219::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29538:9:::1;29533:102;29553:5;;:12;;29549:1;:16;29533:102;;;29617:6;29587:17;:27;29605:5;;29611:1;29605:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29587:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;29567:3;;;;;29533:102;;;;29423:219:::0;;;:::o;18074:45::-;;;;;;;;;;;;;:::o;17262:35::-;;;;:::o;20135:184::-;20252:7;20284:11;:18;20296:5;20284:18;;;;;;;;;;;;;;;:27;20303:7;20284:27;;;;;;;;;;;;;;;;20277:34;;20135:184;;;;:::o;6899:281::-;6659:12;:10;:12::i;:::-;6649:22;;:6;;;;;;;;;;:22;;;6641:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7022:1:::1;7002:22;;:8;:22;;::::0;6980:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7135:8;7106:38;;7127:6;::::0;::::1;;;;;;;;7106:38;;;;;;;;;;;;7164:8;7155:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6899:281:::0;:::o;17225:28::-;;;;;;;;;;;;;:::o;165:115::-;218:15;261:10;246:26;;165:115;:::o;21372:371::-;21516:1;21499:19;;:5;:19;;;21491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21597:1;21578:21;;:7;:21;;;21570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21681:6;21651:11;:18;21663:5;21651:18;;;;;;;;;;;;;;;:27;21670:7;21651:27;;;;;;;;;;;;;;;:36;;;;21719:7;21703:32;;21712:5;21703:32;;;21728:6;21703:32;;;;;;:::i;:::-;;;;;;;;21372:371;;;:::o;24239:1771::-;24360:4;24403:1;24385:20;;:6;:20;;;24377:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24487:1;24466:23;;:9;:23;;;24458:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24549:10;:21;24560:9;24549:21;;;;;;;;;;;;;;;;;;;;;;;;;24548:22;:45;;;;;24575:10;:18;24586:6;24575:18;;;;;;;;;;;;;;;;;;;;;;;;;24574:19;24548:45;24540:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24629:17;:25;24647:6;24629:25;;;;;;;;;;;;;;;;;;;;;;;;;24628:26;:59;;;;;24659:17;:28;24677:9;24659:28;;;;;;;;;;;;;;;;;;;;;;;;;24658:29;24628:59;24624:126;;;24712:8;;;;;;;;;;;24704:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;24624:126;24766:16;;;;;;;;;;;24762:1241;;;24806:41;24821:6;24829:9;24840:6;24806:14;:41::i;:::-;24799:48;;;;24762:1241;24880:28;24911:24;24929:4;24911:9;:24::i;:::-;24880:55;;24950:28;25022:23;;24981:20;:64;;24950:95;;25084:23;:61;;;;;25129:16;;;;;;;;;;;25128:17;25084:61;:103;;;;;25167:12;:20;25180:6;25167:20;;;;;;;;;;;;;;;;;;;;;;;;;25166:21;25084:103;:145;;;;;25208:21;;;;;;;;;;;25084:145;25062:371;;;25268:25;;;;;;;;;;;25264:98;;;25339:23;;25316:46;;25264:98;25381:36;25396:20;25381:14;:36::i;:::-;25062:371;25469:102;25509:6;25469:102;;;;;;;;;;;;;;;;;:9;:17;25479:6;25469:17;;;;;;;;;;;;;;;;:21;;:102;;;;;:::i;:::-;25449:9;:17;25459:6;25449:17;;;;;;;;;;;;;;;:122;;;;25586:19;25624:17;:25;25642:6;25624:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25653:17;:28;25671:9;25653:28;;;;;;;;;;;;;;;;;;;;;;;;;25624:57;25620:207;;;25716:6;25702:20;;25620:207;;;25777:34;25785:6;25793:9;25804:6;25777:7;:34::i;:::-;25763:48;;25620:207;25866:37;25891:11;25866:9;:20;25876:9;25866:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25843:9;:20;25853:9;25843:20;;;;;;;;;;;;;;;:60;;;;25942:9;25925:40;;25934:6;25925:40;;;25953:11;25925:40;;;;;;:::i;:::-;;;;;;;;25987:4;25980:11;;;;;24239:1771;;;;;;:::o;1687:226::-;1807:7;1840:1;1835;:6;;1843:12;1827:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1867:9;1883:1;1879;:5;;;;:::i;:::-;1867:17;;1904:1;1897:8;;;1687:226;;;;;:::o;1543:136::-;1601:7;1628:43;1632:1;1635;1628:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1621:50;;1543:136;;;;:::o;1354:181::-;1412:7;1432:9;1448:1;1444;:5;;;;:::i;:::-;1432:17;;1473:1;1468;:6;;1460:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1526:1;1519:8;;;1354:181;;;;:::o;26018:401::-;26145:4;26182:90;26218:6;26182:90;;;;;;;;;;;;;;;;;:9;:17;26192:6;26182:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;26162:9;:17;26172:6;26162:17;;;;;;;;;;;;;;;:110;;;;26306:32;26331:6;26306:9;:20;26316:9;26306:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26283:9;:20;26293:9;26283:20;;;;;;;;;;;;;;;:55;;;;26371:9;26354:35;;26363:6;26354:35;;;26382:6;26354:35;;;;;;:::i;:::-;;;;;;;;26407:4;26400:11;;26018:401;;;;;:::o;26427:1165::-;18501:4;18482:16;;:23;;;;;;;;;;;;;;;;;;26499:19:::1;26521:107;26626:1;26521:86;26582:24;;26521:42;26547:15;;26521:7;:25;;:42;;;;:::i;:::-;:60;;:86;;;;:::i;:::-;:104;;:107;;;;:::i;:::-;26499:129;;26639:21;26663:24;26675:11;26663:7;:11;;:24;;;;:::i;:::-;26639:48;;26700:31;26717:13;26700:16;:31::i;:::-;26742:22;26767:21;26742:46;;26801:19;26823:76;26866:22;26886:1;26866:15;;:19;;:22;;;;:::i;:::-;26823:24;;:28;;:76;;;;:::i;:::-;26801:98;;26912:26;26941:101;27040:1;26941:80;27009:11;26941:49;26974:15;;26941:14;:32;;:49;;;;:::i;:::-;:67;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;26912:130;;27053:21;27077:47;27112:11;27077:30;27096:10;;27077:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;27053:71;;27135:26;27164:81;27221:13;27164:38;27183:18;27164:14;:18;;:38;;;;:::i;:::-;:42;;:81;;;;:::i;:::-;27135:110;;27283:1;27262:18;:22;27258:105;;;27299:64;27320:22;;;;;;;;;;;27344:18;27299:20;:64::i;:::-;27258:105;27396:1;27380:13;:17;27376:90;;;27412:54;27433:17;;;;;;;;;;;27452:13;27412:20;:54::i;:::-;27376:90;27504:1;27483:18;:22;:41;;;;;27523:1;27509:11;:15;27483:41;27479:105;;;27539:45;27552:11;27565:18;27539:12;:45::i;:::-;27479:105;26488:1104;;;;;;;18547:5:::0;18528:16;;:24;;;;;;;;;;;;;;;;;;26427:1165;:::o;28791:624::-;28911:7;28931:17;28951:1;28931:21;;28969:12;:20;28982:6;28969:20;;;;;;;;;;;;;;;;;;;;;;;;;28965:216;;;29018:38;29052:3;29018:29;29029:17;;29018:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;29006:50;;28965:216;;;29078:12;:23;29091:9;29078:23;;;;;;;;;;;;;;;;;;;;;;;;;29074:107;;;29130:39;29165:3;29130:30;29141:18;;29130:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;29118:51;;29074:107;28965:216;29209:1;29197:9;:13;29193:174;;;29254:39;29283:9;29254;:24;29272:4;29254:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29227:9;:24;29245:4;29227:24;;;;;;;;;;;;;;;:66;;;;29338:4;29313:42;;29322:6;29313:42;;;29345:9;29313:42;;;;;;:::i;:::-;;;;;;;;29193:174;29386:21;29397:9;29386:6;:10;;:21;;;;:::i;:::-;29379:28;;;28791:624;;;;;:::o;1921:250::-;1979:7;2008:1;2003;:6;1999:47;;2033:1;2026:8;;;;1999:47;2058:9;2074:1;2070;:5;;;;:::i;:::-;2058:17;;2103:1;2098;2094;:5;;;;:::i;:::-;:10;2086:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2162:1;2155:8;;;1921:250;;;;;:::o;2179:132::-;2237:7;2264:39;2268:1;2271;2264:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2257:46;;2179:132;;;;:::o;27600:658::-;27726:21;27764:1;27750:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27726:40;;27795:4;27777;27782:1;27777:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27821:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27811:4;27816:1;27811:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27856:62;27873:4;27888:15;;;;;;;;;;;27906:11;27856:8;:62::i;:::-;27957:15;;;;;;;;;;;:66;;;28038:11;28064:1;28108:4;28135;28171:15;27957:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28215:35;28232:11;28245:4;28215:35;;;;;;;:::i;:::-;;;;;;;;27655:603;27600:658;:::o;22489:140::-;22595:9;:18;;:26;22614:6;22595:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22489:140;;:::o;28266:517::-;28414:62;28431:4;28446:15;;;;;;;;;;;28464:11;28414:8;:62::i;:::-;28519:15;;;;;;;;;;;:31;;;28558:9;28591:4;28611:11;28637:1;28680;28723:11;28749:15;28519:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28266:517;;:::o;2319:312::-;2439:7;2471:1;2467;:5;2474:12;2459:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2498:9;2514:1;2510;:5;;;;:::i;:::-;2498:17;;2622:1;2615:8;;;2319:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:104::-;4116:7;4145:24;4163:5;4145:24;:::i;:::-;4134:35;;4071:104;;;:::o;4181:142::-;4284:32;4310:5;4284:32;:::i;:::-;4279:3;4272:45;4181:142;;:::o;4329:254::-;4438:4;4476:2;4465:9;4461:18;4453:26;;4489:87;4573:1;4562:9;4558:17;4549:6;4489:87;:::i;:::-;4329:254;;;;:::o;4589:60::-;4617:3;4638:5;4631:12;;4589:60;;;:::o;4655:142::-;4705:9;4738:53;4756:34;4765:24;4783:5;4765:24;:::i;:::-;4756:34;:::i;:::-;4738:53;:::i;:::-;4725:66;;4655:142;;;:::o;4803:126::-;4853:9;4886:37;4917:5;4886:37;:::i;:::-;4873:50;;4803:126;;;:::o;4935:153::-;5012:9;5045:37;5076:5;5045:37;:::i;:::-;5032:50;;4935:153;;;:::o;5094:185::-;5208:64;5266:5;5208:64;:::i;:::-;5203:3;5196:77;5094:185;;:::o;5285:276::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:98;5551:1;5540:9;5536:17;5527:6;5456:98;:::i;:::-;5285:276;;;;:::o;5567:118::-;5654:24;5672:5;5654:24;:::i;:::-;5649:3;5642:37;5567:118;;:::o;5691:222::-;5784:4;5822:2;5811:9;5807:18;5799:26;;5835:71;5903:1;5892:9;5888:17;5879:6;5835:71;:::i;:::-;5691:222;;;;:::o;5919:619::-;5996:6;6004;6012;6061:2;6049:9;6040:7;6036:23;6032:32;6029:119;;;6067:79;;:::i;:::-;6029:119;6187:1;6212:53;6257:7;6248:6;6237:9;6233:22;6212:53;:::i;:::-;6202:63;;6158:117;6314:2;6340:53;6385:7;6376:6;6365:9;6361:22;6340:53;:::i;:::-;6330:63;;6285:118;6442:2;6468:53;6513:7;6504:6;6493:9;6489:22;6468:53;:::i;:::-;6458:63;;6413:118;5919:619;;;;;:::o;6544:118::-;6631:24;6649:5;6631:24;:::i;:::-;6626:3;6619:37;6544:118;;:::o;6668:222::-;6761:4;6799:2;6788:9;6784:18;6776:26;;6812:71;6880:1;6869:9;6865:17;6856:6;6812:71;:::i;:::-;6668:222;;;;:::o;6896:86::-;6931:7;6971:4;6964:5;6960:16;6949:27;;6896:86;;;:::o;6988:112::-;7071:22;7087:5;7071:22;:::i;:::-;7066:3;7059:35;6988:112;;:::o;7106:214::-;7195:4;7233:2;7222:9;7218:18;7210:26;;7246:67;7310:1;7299:9;7295:17;7286:6;7246:67;:::i;:::-;7106:214;;;;:::o;7326:329::-;7385:6;7434:2;7422:9;7413:7;7409:23;7405:32;7402:119;;;7440:79;;:::i;:::-;7402:119;7560:1;7585:53;7630:7;7621:6;7610:9;7606:22;7585:53;:::i;:::-;7575:63;;7531:117;7326:329;;;;:::o;7661:::-;7720:6;7769:2;7757:9;7748:7;7744:23;7740:32;7737:119;;;7775:79;;:::i;:::-;7737:119;7895:1;7920:53;7965:7;7956:6;7945:9;7941:22;7920:53;:::i;:::-;7910:63;;7866:117;7661:329;;;;:::o;7996:117::-;8105:1;8102;8095:12;8119:117;8228:1;8225;8218:12;8242:117;8351:1;8348;8341:12;8382:568;8455:8;8465:6;8515:3;8508:4;8500:6;8496:17;8492:27;8482:122;;8523:79;;:::i;:::-;8482:122;8636:6;8623:20;8613:30;;8666:18;8658:6;8655:30;8652:117;;;8688:79;;:::i;:::-;8652:117;8802:4;8794:6;8790:17;8778:29;;8856:3;8848:4;8840:6;8836:17;8826:8;8822:32;8819:41;8816:128;;;8863:79;;:::i;:::-;8816:128;8382:568;;;;;:::o;8956:116::-;9026:21;9041:5;9026:21;:::i;:::-;9019:5;9016:32;9006:60;;9062:1;9059;9052:12;9006:60;8956:116;:::o;9078:133::-;9121:5;9159:6;9146:20;9137:29;;9175:30;9199:5;9175:30;:::i;:::-;9078:133;;;;:::o;9217:698::-;9309:6;9317;9325;9374:2;9362:9;9353:7;9349:23;9345:32;9342:119;;;9380:79;;:::i;:::-;9342:119;9528:1;9517:9;9513:17;9500:31;9558:18;9550:6;9547:30;9544:117;;;9580:79;;:::i;:::-;9544:117;9693:80;9765:7;9756:6;9745:9;9741:22;9693:80;:::i;:::-;9675:98;;;;9471:312;9822:2;9848:50;9890:7;9881:6;9870:9;9866:22;9848:50;:::i;:::-;9838:60;;9793:115;9217:698;;;;;:::o;9921:468::-;9986:6;9994;10043:2;10031:9;10022:7;10018:23;10014:32;10011:119;;;10049:79;;:::i;:::-;10011:119;10169:1;10194:53;10239:7;10230:6;10219:9;10215:22;10194:53;:::i;:::-;10184:63;;10140:117;10296:2;10322:50;10364:7;10355:6;10344:9;10340:22;10322:50;:::i;:::-;10312:60;;10267:115;9921:468;;;;;:::o;10395:323::-;10451:6;10500:2;10488:9;10479:7;10475:23;10471:32;10468:119;;;10506:79;;:::i;:::-;10468:119;10626:1;10651:50;10693:7;10684:6;10673:9;10669:22;10651:50;:::i;:::-;10641:60;;10597:114;10395:323;;;;:::o;10724:474::-;10792:6;10800;10849:2;10837:9;10828:7;10824:23;10820:32;10817:119;;;10855:79;;:::i;:::-;10817:119;10975:1;11000:53;11045:7;11036:6;11025:9;11021:22;11000:53;:::i;:::-;10990:63;;10946:117;11102:2;11128:53;11173:7;11164:6;11153:9;11149:22;11128:53;:::i;:::-;11118:63;;11073:118;10724:474;;;;;:::o;11204:182::-;11344:34;11340:1;11332:6;11328:14;11321:58;11204:182;:::o;11392:366::-;11534:3;11555:67;11619:2;11614:3;11555:67;:::i;:::-;11548:74;;11631:93;11720:3;11631:93;:::i;:::-;11749:2;11744:3;11740:12;11733:19;;11392:366;;;:::o;11764:419::-;11930:4;11968:2;11957:9;11953:18;11945:26;;12017:9;12011:4;12007:20;12003:1;11992:9;11988:17;11981:47;12045:131;12171:4;12045:131;:::i;:::-;12037:139;;11764:419;;;:::o;12189:180::-;12237:77;12234:1;12227:88;12334:4;12331:1;12324:15;12358:4;12355:1;12348:15;12375:320;12419:6;12456:1;12450:4;12446:12;12436:22;;12503:1;12497:4;12493:12;12524:18;12514:81;;12580:4;12572:6;12568:17;12558:27;;12514:81;12642:2;12634:6;12631:14;12611:18;12608:38;12605:84;;12661:18;;:::i;:::-;12605:84;12426:269;12375:320;;;:::o;12701:143::-;12758:5;12789:6;12783:13;12774:22;;12805:33;12832:5;12805:33;:::i;:::-;12701:143;;;;:::o;12850:351::-;12920:6;12969:2;12957:9;12948:7;12944:23;12940:32;12937:119;;;12975:79;;:::i;:::-;12937:119;13095:1;13120:64;13176:7;13167:6;13156:9;13152:22;13120:64;:::i;:::-;13110:74;;13066:128;12850:351;;;;:::o;13207:332::-;13328:4;13366:2;13355:9;13351:18;13343:26;;13379:71;13447:1;13436:9;13432:17;13423:6;13379:71;:::i;:::-;13460:72;13528:2;13517:9;13513:18;13504:6;13460:72;:::i;:::-;13207:332;;;;;:::o;13545:180::-;13593:77;13590:1;13583:88;13690:4;13687:1;13680:15;13714:4;13711:1;13704:15;13731:225;13871:34;13867:1;13859:6;13855:14;13848:58;13940:8;13935:2;13927:6;13923:15;13916:33;13731:225;:::o;13962:366::-;14104:3;14125:67;14189:2;14184:3;14125:67;:::i;:::-;14118:74;;14201:93;14290:3;14201:93;:::i;:::-;14319:2;14314:3;14310:12;14303:19;;13962:366;;;:::o;14334:419::-;14500:4;14538:2;14527:9;14523:18;14515:26;;14587:9;14581:4;14577:20;14573:1;14562:9;14558:17;14551:47;14615:131;14741:4;14615:131;:::i;:::-;14607:139;;14334:419;;;:::o;14759:223::-;14899:34;14895:1;14887:6;14883:14;14876:58;14968:6;14963:2;14955:6;14951:15;14944:31;14759:223;:::o;14988:366::-;15130:3;15151:67;15215:2;15210:3;15151:67;:::i;:::-;15144:74;;15227:93;15316:3;15227:93;:::i;:::-;15345:2;15340:3;15336:12;15329:19;;14988:366;;;:::o;15360:419::-;15526:4;15564:2;15553:9;15549:18;15541:26;;15613:9;15607:4;15603:20;15599:1;15588:9;15584:17;15577:47;15641:131;15767:4;15641:131;:::i;:::-;15633:139;;15360:419;;;:::o;15785:221::-;15925:34;15921:1;15913:6;15909:14;15902:58;15994:4;15989:2;15981:6;15977:15;15970:29;15785:221;:::o;16012:366::-;16154:3;16175:67;16239:2;16234:3;16175:67;:::i;:::-;16168:74;;16251:93;16340:3;16251:93;:::i;:::-;16369:2;16364:3;16360:12;16353:19;;16012:366;;;:::o;16384:419::-;16550:4;16588:2;16577:9;16573:18;16565:26;;16637:9;16631:4;16627:20;16623:1;16612:9;16608:17;16601:47;16665:131;16791:4;16665:131;:::i;:::-;16657:139;;16384:419;;;:::o;16809:224::-;16949:34;16945:1;16937:6;16933:14;16926:58;17018:7;17013:2;17005:6;17001:15;16994:32;16809:224;:::o;17039:366::-;17181:3;17202:67;17266:2;17261:3;17202:67;:::i;:::-;17195:74;;17278:93;17367:3;17278:93;:::i;:::-;17396:2;17391:3;17387:12;17380:19;;17039:366;;;:::o;17411:419::-;17577:4;17615:2;17604:9;17600:18;17592:26;;17664:9;17658:4;17654:20;17650:1;17639:9;17635:17;17628:47;17692:131;17818:4;17692:131;:::i;:::-;17684:139;;17411:419;;;:::o;17836:222::-;17976:34;17972:1;17964:6;17960:14;17953:58;18045:5;18040:2;18032:6;18028:15;18021:30;17836:222;:::o;18064:366::-;18206:3;18227:67;18291:2;18286:3;18227:67;:::i;:::-;18220:74;;18303:93;18392:3;18303:93;:::i;:::-;18421:2;18416:3;18412:12;18405:19;;18064:366;;;:::o;18436:419::-;18602:4;18640:2;18629:9;18625:18;18617:26;;18689:9;18683:4;18679:20;18675:1;18664:9;18660:17;18653:47;18717:131;18843:4;18717:131;:::i;:::-;18709:139;;18436:419;;;:::o;18861:163::-;19001:15;18997:1;18989:6;18985:14;18978:39;18861:163;:::o;19030:366::-;19172:3;19193:67;19257:2;19252:3;19193:67;:::i;:::-;19186:74;;19269:93;19358:3;19269:93;:::i;:::-;19387:2;19382:3;19378:12;19371:19;;19030:366;;;:::o;19402:419::-;19568:4;19606:2;19595:9;19591:18;19583:26;;19655:9;19649:4;19645:20;19641:1;19630:9;19626:17;19619:47;19683:131;19809:4;19683:131;:::i;:::-;19675:139;;19402:419;;;:::o;19827:163::-;19967:15;19963:1;19955:6;19951:14;19944:39;19827:163;:::o;19996:366::-;20138:3;20159:67;20223:2;20218:3;20159:67;:::i;:::-;20152:74;;20235:93;20324:3;20235:93;:::i;:::-;20353:2;20348:3;20344:12;20337:19;;19996:366;;;:::o;20368:419::-;20534:4;20572:2;20561:9;20557:18;20549:26;;20621:9;20615:4;20611:20;20607:1;20596:9;20592:17;20585:47;20649:131;20775:4;20649:131;:::i;:::-;20641:139;;20368:419;;;:::o;20793:180::-;20841:77;20838:1;20831:88;20938:4;20935:1;20928:15;20962:4;20959:1;20952:15;20979:194;21019:4;21039:20;21057:1;21039:20;:::i;:::-;21034:25;;21073:20;21091:1;21073:20;:::i;:::-;21068:25;;21117:1;21114;21110:9;21102:17;;21141:1;21135:4;21132:11;21129:37;;;21146:18;;:::i;:::-;21129:37;20979:194;;;;:::o;21179:191::-;21219:3;21238:20;21256:1;21238:20;:::i;:::-;21233:25;;21272:20;21290:1;21272:20;:::i;:::-;21267:25;;21315:1;21312;21308:9;21301:16;;21336:3;21333:1;21330:10;21327:36;;;21343:18;;:::i;:::-;21327:36;21179:191;;;;:::o;21376:177::-;21516:29;21512:1;21504:6;21500:14;21493:53;21376:177;:::o;21559:366::-;21701:3;21722:67;21786:2;21781:3;21722:67;:::i;:::-;21715:74;;21798:93;21887:3;21798:93;:::i;:::-;21916:2;21911:3;21907:12;21900:19;;21559:366;;;:::o;21931:419::-;22097:4;22135:2;22124:9;22120:18;22112:26;;22184:9;22178:4;22174:20;22170:1;22159:9;22155:17;22148:47;22212:131;22338:4;22212:131;:::i;:::-;22204:139;;21931:419;;;:::o;22356:410::-;22396:7;22419:20;22437:1;22419:20;:::i;:::-;22414:25;;22453:20;22471:1;22453:20;:::i;:::-;22448:25;;22508:1;22505;22501:9;22530:30;22548:11;22530:30;:::i;:::-;22519:41;;22709:1;22700:7;22696:15;22693:1;22690:22;22670:1;22663:9;22643:83;22620:139;;22739:18;;:::i;:::-;22620:139;22404:362;22356:410;;;;:::o;22772:180::-;22820:77;22817:1;22810:88;22917:4;22914:1;22907:15;22941:4;22938:1;22931:15;22958:185;22998:1;23015:20;23033:1;23015:20;:::i;:::-;23010:25;;23049:20;23067:1;23049:20;:::i;:::-;23044:25;;23088:1;23078:35;;23093:18;;:::i;:::-;23078:35;23135:1;23132;23128:9;23123:14;;22958:185;;;;:::o;23149:220::-;23289:34;23285:1;23277:6;23273:14;23266:58;23358:3;23353:2;23345:6;23341:15;23334:28;23149:220;:::o;23375:366::-;23517:3;23538:67;23602:2;23597:3;23538:67;:::i;:::-;23531:74;;23614:93;23703:3;23614:93;:::i;:::-;23732:2;23727:3;23723:12;23716:19;;23375:366;;;:::o;23747:419::-;23913:4;23951:2;23940:9;23936:18;23928:26;;24000:9;23994:4;23990:20;23986:1;23975:9;23971:17;23964:47;24028:131;24154:4;24028:131;:::i;:::-;24020:139;;23747:419;;;:::o;24172:180::-;24220:77;24217:1;24210:88;24317:4;24314:1;24307:15;24341:4;24338:1;24331:15;24358:85;24403:7;24432:5;24421:16;;24358:85;;;:::o;24449:158::-;24507:9;24540:61;24558:42;24567:32;24593:5;24567:32;:::i;:::-;24558:42;:::i;:::-;24540:61;:::i;:::-;24527:74;;24449:158;;;:::o;24613:147::-;24708:45;24747:5;24708:45;:::i;:::-;24703:3;24696:58;24613:147;;:::o;24766:114::-;24833:6;24867:5;24861:12;24851:22;;24766:114;;;:::o;24886:184::-;24985:11;25019:6;25014:3;25007:19;25059:4;25054:3;25050:14;25035:29;;24886:184;;;;:::o;25076:132::-;25143:4;25166:3;25158:11;;25196:4;25191:3;25187:14;25179:22;;25076:132;;;:::o;25214:108::-;25291:24;25309:5;25291:24;:::i;:::-;25286:3;25279:37;25214:108;;:::o;25328:179::-;25397:10;25418:46;25460:3;25452:6;25418:46;:::i;:::-;25496:4;25491:3;25487:14;25473:28;;25328:179;;;;:::o;25513:113::-;25583:4;25615;25610:3;25606:14;25598:22;;25513:113;;;:::o;25662:732::-;25781:3;25810:54;25858:5;25810:54;:::i;:::-;25880:86;25959:6;25954:3;25880:86;:::i;:::-;25873:93;;25990:56;26040:5;25990:56;:::i;:::-;26069:7;26100:1;26085:284;26110:6;26107:1;26104:13;26085:284;;;26186:6;26180:13;26213:63;26272:3;26257:13;26213:63;:::i;:::-;26206:70;;26299:60;26352:6;26299:60;:::i;:::-;26289:70;;26145:224;26132:1;26129;26125:9;26120:14;;26085:284;;;26089:14;26385:3;26378:10;;25786:608;;;25662:732;;;;:::o;26400:831::-;26663:4;26701:3;26690:9;26686:19;26678:27;;26715:71;26783:1;26772:9;26768:17;26759:6;26715:71;:::i;:::-;26796:80;26872:2;26861:9;26857:18;26848:6;26796:80;:::i;:::-;26923:9;26917:4;26913:20;26908:2;26897:9;26893:18;26886:48;26951:108;27054:4;27045:6;26951:108;:::i;:::-;26943:116;;27069:72;27137:2;27126:9;27122:18;27113:6;27069:72;:::i;:::-;27151:73;27219:3;27208:9;27204:19;27195:6;27151:73;:::i;:::-;26400:831;;;;;;;;:::o;27237:483::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27459:71;27527:1;27516:9;27512:17;27503:6;27459:71;:::i;:::-;27577:9;27571:4;27567:20;27562:2;27551:9;27547:18;27540:48;27605:108;27708:4;27699:6;27605:108;:::i;:::-;27597:116;;27237:483;;;;;:::o;27726:807::-;27975:4;28013:3;28002:9;27998:19;27990:27;;28027:71;28095:1;28084:9;28080:17;28071:6;28027:71;:::i;:::-;28108:72;28176:2;28165:9;28161:18;28152:6;28108:72;:::i;:::-;28190:80;28266:2;28255:9;28251:18;28242:6;28190:80;:::i;:::-;28280;28356:2;28345:9;28341:18;28332:6;28280:80;:::i;:::-;28370:73;28438:3;28427:9;28423:19;28414:6;28370:73;:::i;:::-;28453;28521:3;28510:9;28506:19;28497:6;28453:73;:::i;:::-;27726:807;;;;;;;;;:::o;28539:143::-;28596:5;28627:6;28621:13;28612:22;;28643:33;28670:5;28643:33;:::i;:::-;28539:143;;;;:::o;28688:663::-;28776:6;28784;28792;28841:2;28829:9;28820:7;28816:23;28812:32;28809:119;;;28847:79;;:::i;:::-;28809:119;28967:1;28992:64;29048:7;29039:6;29028:9;29024:22;28992:64;:::i;:::-;28982:74;;28938:128;29105:2;29131:64;29187:7;29178:6;29167:9;29163:22;29131:64;:::i;:::-;29121:74;;29076:129;29244:2;29270:64;29326:7;29317:6;29306:9;29302:22;29270:64;:::i;:::-;29260:74;;29215:129;28688:663;;;;;:::o

Swarm Source

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