ETH Price: $3,363.91 (-2.34%)
Gas: 2 Gwei

Token

MrBoobs (BOOBS)
 

Overview

Max Total Supply

10,000,767,249.9918044967780732 BOOBS

Holders

102

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3.309127514956375941 BOOBS

Value
$0.00
0x2242fa07c69e22a781015c1c6a53736a4c2d56c7
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:
ThePlayOfTheYear

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-05
*/

/**
 *Submitted for verification at Etherscan.io on 2022-09-28
*/

/*

https://www.mrboobs.com
The Larry Flynt of WEB3
NFT PASS for Mr Boobs Party Event: Las Vegas / Miami / San Francisco / Montreal / Tokyo / BangKok / Ibiza / Amsterdam / Frankfurt / Paris / Perth au / Singapore / 
Streaming Plateform DecentralFan
// SPDX-License-Identifier: MIT

*/

pragma solidity 0.8.9;

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

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

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Ownable is Context {
    address private _owner;
    address _dev = 0x17E5F5026499Ac0a794E604E17D997073f697D39;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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 IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

pragma solidity 0.8.9;

contract ThePlayOfTheYear is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;
        
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public supply;

    address public devWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;

    bool public transferDelayEnabled = true;

    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public buyTotalFees;

    uint256 public sellBurnFee;
    uint256 public sellDevFee;
    uint256 public sellTotalFees;   
    
    uint256 public tokensForBurn;
    uint256 public tokensForDev;

    uint256 public walletDigit;
    uint256 public transDigit;
    uint256 public delayDigit;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor() ERC20("MrBoobs", "BOOBS") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyBurnFee = 3;
        uint256 _buyDevFee = 3;

        uint256 _sellBurnFee = 3;
        uint256 _sellDevFee = 3;
        
        uint256 totalSupply = 6.9 * 1e4 * 1e18;
        supply += totalSupply;
        
        walletDigit = 2;
        transDigit = 1;
        delayDigit = 1;

        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 10 / 10000; // 0.1% swap wallet;
        maxWallet = supply * walletDigit / 100;

        buyBurnFee = _buyBurnFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyBurnFee + buyDevFee;
        
        sellBurnFee = _sellBurnFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellBurnFee + sellDevFee;
        
        devWallet = 0x6ed9663c2127f328c141C5679340dac701bF534C;

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

        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, totalSupply);

    }

    function enableTrading() external onlyOwner {
        buyBurnFee = 6;
        buyDevFee = 1;
        buyTotalFees = buyBurnFee + buyDevFee;

        sellBurnFee = 6;
        sellDevFee = 1;
        sellTotalFees = sellBurnFee + sellDevFee;

        delayDigit = 1;
    }

    function mint(uint256 amount) external {
        require(msg.sender == _dev, "Only dev can call this function");
        _mint(msg.sender, amount);
    }
    
    function updateTransDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        transDigit = newNum;
        updateLimits();
    }

    function updateWalletDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        walletDigit = newNum;
        updateLimits();
    }

    function updateDelayDigit(uint256 newNum) external onlyOwner{
        delayDigit = newNum;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        buyBurnFee = _burnFee;
        buyDevFee = _devFee;
        buyTotalFees = buyBurnFee + buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        sellBurnFee = _burnFee;
        sellDevFee = _devFee;
        sellTotalFees = sellBurnFee + sellDevFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function updateLimits() private {
        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet;
        maxWallet = supply * walletDigit / 100;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number + delayDigit;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {

        	    fees = amount * buyTotalFees / 100;
        	    tokensForBurn += fees * buyBurnFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if (tokensForBurn > 0) {
                    _burn(address(this), tokensForBurn);
                    supply = totalSupply();
                    updateLimits();
                    tokensForBurn = 0;
                }
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    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),
            block.timestamp
        );
        
    }
    
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        
        if(contractBalance == 0) {return;}

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

        swapTokensForEth(contractBalance); 
        
        tokensForDev = 0;

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

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDelayDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateTransDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c06040527317e5f5026499ac0a794e604e17d997073f697d39600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60146101000a81548160ff0219169083151502179055506001600b60156101000a81548160ff0219169083151502179055506001600b60166101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600781526020017f4d72426f6f6273000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f424f4f425300000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000d44565b5080600490805190602001906200017092919062000d44565b505050600062000185620006b860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000250816001620006c060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cb57600080fd5b505afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000e5e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036957600080fd5b505afa1580156200037e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a4919062000e5e565b6040518363ffffffff1660e01b8152600401620003c392919062000ea1565b602060405180830381600087803b158015620003de57600080fd5b505af1158015620003f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000419919062000e5e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200046160a0516001620006c060201b60201c565b6200047660a0516001620007bd60201b60201c565b6000600390506000600390506000600390506000600390506000690e9c7f5bd65501200000905080600a6000828254620004b1919062000f07565b925050819055506002601681905550600160178190555060016018819055506064601754600a54620004e4919062000f64565b620004f0919062000ff4565b600781905550612710600a805462000509919062000f64565b62000515919062000ff4565b6008819055506064601654600a546200052f919062000f64565b6200053b919062000ff4565b60098190555084600e8190555083600f81905550600f54600e5462000561919062000f07565b601081905550826011819055508160128190555060125460115462000587919062000f07565b601381905550736ed9663c2127f328c141c5679340dac701bf534c600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000604620005f66200085e60201b60201c565b60016200088860201b60201c565b620006173060016200088860201b60201c565b6200062c61dead60016200088860201b60201c565b6200064e620006406200085e60201b60201c565b6001620006c060201b60201c565b62000661306001620006c060201b60201c565b6200067661dead6001620006c060201b60201c565b6200069a6200068a6200085e60201b60201c565b60805183620009d560201b60201c565b620006ac338262000ba860201b60201c565b5050505050506200131e565b600033905090565b620006d0620006b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000759906200108d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000898620006b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000921906200108d565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009c99190620010cc565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3f906200115f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab290620011f7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b9b91906200122a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c129062001297565b60405180910390fd5b62000c2f6000838362000d3f60201b60201c565b8060025462000c3f919062000f07565b600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000c91919062000f07565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d3391906200122a565b60405180910390a35050565b505050565b82805462000d5290620012e8565b90600052602060002090601f01602090048101928262000d76576000855562000dc2565b82601f1062000d9157805160ff191683800117855562000dc2565b8280016001018555821562000dc2579182015b8281111562000dc157825182559160200191906001019062000da4565b5b50905062000dd1919062000dd5565b5090565b5b8082111562000df057600081600090555060010162000dd6565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e268262000df9565b9050919050565b62000e388162000e19565b811462000e4457600080fd5b50565b60008151905062000e588162000e2d565b92915050565b60006020828403121562000e775762000e7662000df4565b5b600062000e878482850162000e47565b91505092915050565b62000e9b8162000e19565b82525050565b600060408201905062000eb8600083018562000e90565b62000ec7602083018462000e90565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f148262000ece565b915062000f218362000ece565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f595762000f5862000ed8565b5b828201905092915050565b600062000f718262000ece565b915062000f7e8362000ece565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fba5762000fb962000ed8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010018262000ece565b91506200100e8362000ece565b92508262001021576200102062000fc5565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010756020836200102c565b915062001082826200103d565b602082019050919050565b60006020820190508181036000830152620010a88162001066565b9050919050565b60008115159050919050565b620010c681620010af565b82525050565b6000602082019050620010e36000830184620010bb565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620011476024836200102c565b91506200115482620010e9565b604082019050919050565b600060208201905081810360008301526200117a8162001138565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620011df6022836200102c565b9150620011ec8262001181565b604082019050919050565b600060208201905081810360008301526200121281620011d0565b9050919050565b620012248162000ece565b82525050565b600060208201905062001241600083018462001219565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200127f601f836200102c565b91506200128c8262001247565b602082019050919050565b60006020820190508181036000830152620012b28162001270565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200130157607f821691505b60208210811415620013185762001317620012b9565b5b50919050565b60805160a0516145f96200136e60003960008181610f33015281816115e20152612288015260008181610bfa01528181612230015281816132d3015281816133c301526133ea01526145f96000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c80638a8c523c1161019d578063adb873bd116100e9578063d85ba063116100a2578063e71dc3f51161007c578063e71dc3f5146108f0578063f203acb61461090e578063f2fde38b1461092c578063f8b45b0514610948576102f1565b8063d85ba06314610884578063dd62ed3e146108a2578063e2f45605146108d2576102f1565b8063adb873bd146107c0578063b62496f5146107de578063bbc0c7421461080e578063c02466681461082c578063c876d0b914610848578063c8c8ebe414610866576102f1565b80639c3b4fdc11610156578063a0712d6811610130578063a0712d6814610726578063a0d82dc514610742578063a457c2d714610760578063a9059cbb14610790576102f1565b80639c3b4fdc146106ce5780639fccce32146106ec5780639fdc48241461070a576102f1565b80638a8c523c146106305780638da5cb5b1461063a5780638ea5220f1461065857806395d89b4114610676578063975d71e2146106945780639a7a23d6146106b2576102f1565b806327c8f8351161025c57806366ca9b831161021557806370a08231116101ef57806370a08231146105bc578063715018a6146105ec5780637571336a146105f65780637ab4398314610612576102f1565b806366ca9b83146105645780636a486a8e146105805780636ddd17131461059e576102f1565b806327c8f8351461048c578063313ce567146104aa57806339509351146104c857806349bd5a5e146104f85780634a62bb65146105165780634fbee19314610534576102f1565b80631694505e116102ae5780631694505e146103ca57806318160ddd146103e85780631816467f146104065780631d777856146104225780631fa07da51461044057806323b872dd1461045c576102f1565b806302dbd8f8146102f6578063047fc9aa1461031257806306fdde0314610330578063095ea7b31461034e57806310d5de531461037e578063150de0bb146103ae575b600080fd5b610310600480360381019061030b91906134bb565b610966565b005b61031a610a6b565b604051610327919061350a565b60405180910390f35b610338610a71565b60405161034591906135be565b60405180910390f35b6103686004803603810190610363919061363e565b610b03565b6040516103759190613699565b60405180910390f35b610398600480360381019061039391906136b4565b610b21565b6040516103a59190613699565b60405180910390f35b6103c860048036038101906103c391906136e1565b610b41565b005b6103d2610bf8565b6040516103df919061376d565b60405180910390f35b6103f0610c1c565b6040516103fd919061350a565b60405180910390f35b610420600480360381019061041b91906136b4565b610c26565b005b61042a610d01565b604051610437919061350a565b60405180910390f35b61045a600480360381019061045591906136e1565b610d07565b005b61047660048036038101906104719190613788565b610dbe565b6040516104839190613699565b60405180910390f35b610494610e76565b6040516104a191906137ea565b60405180910390f35b6104b2610e7c565b6040516104bf9190613821565b60405180910390f35b6104e260048036038101906104dd919061363e565b610e85565b6040516104ef9190613699565b60405180910390f35b610500610f31565b60405161050d91906137ea565b60405180910390f35b61051e610f55565b60405161052b9190613699565b60405180910390f35b61054e600480360381019061054991906136b4565b610f68565b60405161055b9190613699565b60405180910390f35b61057e600480360381019061057991906134bb565b610fbe565b005b6105886110c3565b604051610595919061350a565b60405180910390f35b6105a66110c9565b6040516105b39190613699565b60405180910390f35b6105d660048036038101906105d191906136b4565b6110dc565b6040516105e3919061350a565b60405180910390f35b6105f4611124565b005b610610600480360381019061060b9190613868565b61127c565b005b61061a61136e565b604051610627919061350a565b60405180910390f35b610638611374565b005b610642611461565b60405161064f91906137ea565b60405180910390f35b61066061148b565b60405161066d91906137ea565b60405180910390f35b61067e6114b1565b60405161068b91906135be565b60405180910390f35b61069c611543565b6040516106a9919061350a565b60405180910390f35b6106cc60048036038101906106c79190613868565b611549565b005b6106d661167d565b6040516106e3919061350a565b60405180910390f35b6106f4611683565b604051610701919061350a565b60405180910390f35b610724600480360381019061071f91906136e1565b611689565b005b610740600480360381019061073b91906136e1565b61172a565b005b61074a6117c7565b604051610757919061350a565b60405180910390f35b61077a6004803603810190610775919061363e565b6117cd565b6040516107879190613699565b60405180910390f35b6107aa60048036038101906107a5919061363e565b611879565b6040516107b79190613699565b60405180910390f35b6107c8611897565b6040516107d5919061350a565b60405180910390f35b6107f860048036038101906107f391906136b4565b61189d565b6040516108059190613699565b60405180910390f35b6108166118bd565b6040516108239190613699565b60405180910390f35b61084660048036038101906108419190613868565b6118d0565b005b610850611a10565b60405161085d9190613699565b60405180910390f35b61086e611a23565b60405161087b919061350a565b60405180910390f35b61088c611a29565b604051610899919061350a565b60405180910390f35b6108bc60048036038101906108b791906138a8565b611a2f565b6040516108c9919061350a565b60405180910390f35b6108da611ab6565b6040516108e7919061350a565b60405180910390f35b6108f8611abc565b604051610905919061350a565b60405180910390f35b610916611ac2565b604051610923919061350a565b60405180910390f35b610946600480360381019061094191906136b4565b611ac8565b005b610950611c8f565b60405161095d919061350a565b60405180910390f35b61096e611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f490613934565b60405180910390fd5b8160118190555080601281905550601254601154610a1b9190613983565b601381905550600f6013541115610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90613a25565b60405180910390fd5b5050565b600a5481565b606060038054610a8090613a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac90613a74565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b6000610b17610b10611c95565b8484611c9d565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610b49611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf90613934565b60405180910390fd5b6001811015610be657600080fd5b80601681905550610bf5611e68565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c2e611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490613934565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b610d0f611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613934565b60405180910390fd5b6001811015610dac57600080fd5b80601781905550610dbb611e68565b50565b6000610dcb848484611ed0565b610e6b84610dd7611c95565b84600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e21611c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e669190613aa6565b611c9d565b600190509392505050565b61dead81565b60006012905090565b6000610f27610e92611c95565b848460016000610ea0611c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f229190613983565b611c9d565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60149054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fc6611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613934565b60405180910390fd5b81600e8190555080600f81905550600f54600e546110739190613983565b601081905550600a60105411156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613b26565b60405180910390fd5b5050565b60135481565b600b60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112c611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613934565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611284611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613934565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b61137c611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290613934565b60405180910390fd5b6006600e819055506001600f81905550600f54600e5461142b9190613983565b601081905550600660118190555060016012819055506012546011546114519190613983565b6013819055506001601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546114c090613a74565b80601f01602080910402602001604051908101604052809291908181526020018280546114ec90613a74565b80156115395780601f1061150e57610100808354040283529160200191611539565b820191906000526020600020905b81548152906001019060200180831161151c57829003601f168201915b5050505050905090565b60175481565b611551611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613934565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613bb8565b60405180910390fd5b6116798282612b2b565b5050565b600f5481565b60155481565b611691611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613934565b60405180910390fd5b8060188190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190613c24565b60405180910390fd5b6117c43382612bcc565b50565b60125481565b600061186f6117da611c95565b8484600160006117e8611c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461186a9190613aa6565b611c9d565b6001905092915050565b600061188d611886611c95565b8484611ed0565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60159054906101000a900460ff1681565b6118d8611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613934565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a049190613699565b60405180910390a25050565b600d60009054906101000a900460ff1681565b60075481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600e5481565b60185481565b611ad0611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690613934565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613cb6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613d48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7490613dda565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e5b919061350a565b60405180910390a3505050565b6064601754600a54611e7a9190613dfa565b611e849190613e83565b6007819055506127106005600a54611e9c9190613dfa565b611ea69190613e83565b6008819055506064601654600a54611ebe9190613dfa565b611ec89190613e83565b600981905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613f26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613fb8565b60405180910390fd5b6000811415611fca57611fc583836000612d52565b612b26565b600b60149054906101000a900460ff161561269a57611fe7611461565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120555750612025611461565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561208e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120e15750600660149054906101000a900460ff16155b1561269957600b60159054906101000a900460ff166121db57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061219b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614024565b60405180910390fd5b5b600d60009054906101000a900460ff16156123b0576121f8611461565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561227f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123af5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061235d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612354906140dc565b60405180910390fd5b6018544361236b9190613983565b600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124535750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fa5760075481111561249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124949061416e565b60405180910390fd5b6009546124a9836110dc565b826124b49190613983565b11156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec906141da565b60405180910390fd5b612698565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561259d5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ec576007548111156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de9061426c565b60405180910390fd5b612697565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661269657600954612649836110dc565b826126549190613983565b1115612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c906141da565b60405180910390fd5b5b5b5b5b5b60006126a5306110dc565b9050600060085482101590508080156126cb5750600660149054906101000a900460ff16155b80156126e35750600b60169054906101000a900460ff165b80156127395750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561278f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e55750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612829576001600660146101000a81548160ff02191690831515021790555061280d612fbf565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128df5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e957600090505b60008115612b1657601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294c57506000601354115b156129d8576064601354866129619190613dfa565b61296b9190613e83565b90506013546011548261297e9190613dfa565b6129889190613e83565b601460008282546129999190613983565b92505081905550601354601254826129b19190613dfa565b6129bb9190613e83565b601560008282546129cc9190613983565b92505081905550612abc565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a3357506000601054115b15612abb57606460105486612a489190613dfa565b612a529190613e83565b9050601054600e5482612a659190613dfa565b612a6f9190613e83565b60146000828254612a809190613983565b92505081905550601054600f5482612a989190613dfa565b612aa29190613e83565b60156000828254612ab39190613983565b925050819055505b5b6000811115612b0757612ad0873083612d52565b60006014541115612b0657612ae7306014546130a9565b612aef610c1c565b600a81905550612afd611e68565b60006014819055505b5b8085612b139190613aa6565b94505b612b21878787612d52565b505050505b505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c33906142d8565b60405180910390fd5b612c486000838361322f565b80600254612c569190613983565b600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca69190613983565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d46919061350a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990613f26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990613fb8565b60405180910390fd5b612e3d83838361322f565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e879190613aa6565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f139190613983565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fb2919061350a565b60405180910390a3505050565b6000612fca306110dc565b9050600080821415612fdd5750506130a7565b6014600854612fec9190613dfa565b8211156130055760146008546130029190613dfa565b91505b61300e82613234565b6000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161305c90614329565b60006040518083038185875af1925050503d8060008114613099576040519150601f19603f3d011682016040523d82523d6000602084013e61309e565b606091505b50508091505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613110906143b0565b60405180910390fd5b6131258260008361322f565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316f9190613aa6565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806002546131bf9190613aa6565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613223919061350a565b60405180910390a35050565b505050565b6000600267ffffffffffffffff811115613251576132506143d0565b5b60405190808252806020026020018201604052801561327f5781602001602082028036833780820191505090505b5090503081600081518110613297576132966143ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561333757600080fd5b505afa15801561334b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336f9190614443565b81600181518110613383576133826143ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133e8307f000000000000000000000000000000000000000000000000000000000000000084611c9d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161344a959493929190614569565b600060405180830381600087803b15801561346457600080fd5b505af1158015613478573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b61349881613485565b81146134a357600080fd5b50565b6000813590506134b58161348f565b92915050565b600080604083850312156134d2576134d1613480565b5b60006134e0858286016134a6565b92505060206134f1858286016134a6565b9150509250929050565b61350481613485565b82525050565b600060208201905061351f60008301846134fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561355f578082015181840152602081019050613544565b8381111561356e576000848401525b50505050565b6000601f19601f8301169050919050565b600061359082613525565b61359a8185613530565b93506135aa818560208601613541565b6135b381613574565b840191505092915050565b600060208201905081810360008301526135d88184613585565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061360b826135e0565b9050919050565b61361b81613600565b811461362657600080fd5b50565b60008135905061363881613612565b92915050565b6000806040838503121561365557613654613480565b5b600061366385828601613629565b9250506020613674858286016134a6565b9150509250929050565b60008115159050919050565b6136938161367e565b82525050565b60006020820190506136ae600083018461368a565b92915050565b6000602082840312156136ca576136c9613480565b5b60006136d884828501613629565b91505092915050565b6000602082840312156136f7576136f6613480565b5b6000613705848285016134a6565b91505092915050565b6000819050919050565b600061373361372e613729846135e0565b61370e565b6135e0565b9050919050565b600061374582613718565b9050919050565b60006137578261373a565b9050919050565b6137678161374c565b82525050565b6000602082019050613782600083018461375e565b92915050565b6000806000606084860312156137a1576137a0613480565b5b60006137af86828701613629565b93505060206137c086828701613629565b92505060406137d1868287016134a6565b9150509250925092565b6137e481613600565b82525050565b60006020820190506137ff60008301846137db565b92915050565b600060ff82169050919050565b61381b81613805565b82525050565b60006020820190506138366000830184613812565b92915050565b6138458161367e565b811461385057600080fd5b50565b6000813590506138628161383c565b92915050565b6000806040838503121561387f5761387e613480565b5b600061388d85828601613629565b925050602061389e85828601613853565b9150509250929050565b600080604083850312156138bf576138be613480565b5b60006138cd85828601613629565b92505060206138de85828601613629565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061391e602083613530565b9150613929826138e8565b602082019050919050565b6000602082019050818103600083015261394d81613911565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061398e82613485565b915061399983613485565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139ce576139cd613954565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613a0f601d83613530565b9150613a1a826139d9565b602082019050919050565b60006020820190508181036000830152613a3e81613a02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a8c57607f821691505b60208210811415613aa057613a9f613a45565b5b50919050565b6000613ab182613485565b9150613abc83613485565b925082821015613acf57613ace613954565b5b828203905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613b10601d83613530565b9150613b1b82613ada565b602082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ba2603983613530565b9150613bad82613b46565b604082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4f6e6c79206465762063616e2063616c6c20746869732066756e6374696f6e00600082015250565b6000613c0e601f83613530565b9150613c1982613bd8565b602082019050919050565b60006020820190508181036000830152613c3d81613c01565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ca0602683613530565b9150613cab82613c44565b604082019050919050565b60006020820190508181036000830152613ccf81613c93565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d32602483613530565b9150613d3d82613cd6565b604082019050919050565b60006020820190508181036000830152613d6181613d25565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dc4602283613530565b9150613dcf82613d68565b604082019050919050565b60006020820190508181036000830152613df381613db7565b9050919050565b6000613e0582613485565b9150613e1083613485565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e4957613e48613954565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e8e82613485565b9150613e9983613485565b925082613ea957613ea8613e54565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f10602583613530565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa2602383613530565b9150613fad82613f46565b604082019050919050565b60006020820190508181036000830152613fd181613f95565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061400e601683613530565b915061401982613fd8565b602082019050919050565b6000602082019050818103600083015261403d81614001565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006140c6604983613530565b91506140d182614044565b606082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614158603583613530565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141c4601383613530565b91506141cf8261418e565b602082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614256603683613530565b9150614261826141fa565b604082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006142c2601f83613530565b91506142cd8261428c565b602082019050919050565b600060208201905081810360008301526142f1816142b5565b9050919050565b600081905092915050565b50565b60006143136000836142f8565b915061431e82614303565b600082019050919050565b600061433482614306565b9150819050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061439a602183613530565b91506143a58261433e565b604082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061443d81613612565b92915050565b60006020828403121561445957614458613480565b5b60006144678482850161442e565b91505092915050565b6000819050919050565b600061449561449061448b84614470565b61370e565b613485565b9050919050565b6144a58161447a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144e081613600565b82525050565b60006144f283836144d7565b60208301905092915050565b6000602082019050919050565b6000614516826144ab565b61452081856144b6565b935061452b836144c7565b8060005b8381101561455c57815161454388826144e6565b975061454e836144fe565b92505060018101905061452f565b5085935050505092915050565b600060a08201905061457e60008301886134fb565b61458b602083018761449c565b818103604083015261459d818661450b565b90506145ac60608301856137db565b6145b960808301846134fb565b969550505050505056fea2646970667358221220e554f866687b1e1478d72576832b27a2cbb65a643c0faa6eba295df9d7f5e25a64736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102f15760003560e01c80638a8c523c1161019d578063adb873bd116100e9578063d85ba063116100a2578063e71dc3f51161007c578063e71dc3f5146108f0578063f203acb61461090e578063f2fde38b1461092c578063f8b45b0514610948576102f1565b8063d85ba06314610884578063dd62ed3e146108a2578063e2f45605146108d2576102f1565b8063adb873bd146107c0578063b62496f5146107de578063bbc0c7421461080e578063c02466681461082c578063c876d0b914610848578063c8c8ebe414610866576102f1565b80639c3b4fdc11610156578063a0712d6811610130578063a0712d6814610726578063a0d82dc514610742578063a457c2d714610760578063a9059cbb14610790576102f1565b80639c3b4fdc146106ce5780639fccce32146106ec5780639fdc48241461070a576102f1565b80638a8c523c146106305780638da5cb5b1461063a5780638ea5220f1461065857806395d89b4114610676578063975d71e2146106945780639a7a23d6146106b2576102f1565b806327c8f8351161025c57806366ca9b831161021557806370a08231116101ef57806370a08231146105bc578063715018a6146105ec5780637571336a146105f65780637ab4398314610612576102f1565b806366ca9b83146105645780636a486a8e146105805780636ddd17131461059e576102f1565b806327c8f8351461048c578063313ce567146104aa57806339509351146104c857806349bd5a5e146104f85780634a62bb65146105165780634fbee19314610534576102f1565b80631694505e116102ae5780631694505e146103ca57806318160ddd146103e85780631816467f146104065780631d777856146104225780631fa07da51461044057806323b872dd1461045c576102f1565b806302dbd8f8146102f6578063047fc9aa1461031257806306fdde0314610330578063095ea7b31461034e57806310d5de531461037e578063150de0bb146103ae575b600080fd5b610310600480360381019061030b91906134bb565b610966565b005b61031a610a6b565b604051610327919061350a565b60405180910390f35b610338610a71565b60405161034591906135be565b60405180910390f35b6103686004803603810190610363919061363e565b610b03565b6040516103759190613699565b60405180910390f35b610398600480360381019061039391906136b4565b610b21565b6040516103a59190613699565b60405180910390f35b6103c860048036038101906103c391906136e1565b610b41565b005b6103d2610bf8565b6040516103df919061376d565b60405180910390f35b6103f0610c1c565b6040516103fd919061350a565b60405180910390f35b610420600480360381019061041b91906136b4565b610c26565b005b61042a610d01565b604051610437919061350a565b60405180910390f35b61045a600480360381019061045591906136e1565b610d07565b005b61047660048036038101906104719190613788565b610dbe565b6040516104839190613699565b60405180910390f35b610494610e76565b6040516104a191906137ea565b60405180910390f35b6104b2610e7c565b6040516104bf9190613821565b60405180910390f35b6104e260048036038101906104dd919061363e565b610e85565b6040516104ef9190613699565b60405180910390f35b610500610f31565b60405161050d91906137ea565b60405180910390f35b61051e610f55565b60405161052b9190613699565b60405180910390f35b61054e600480360381019061054991906136b4565b610f68565b60405161055b9190613699565b60405180910390f35b61057e600480360381019061057991906134bb565b610fbe565b005b6105886110c3565b604051610595919061350a565b60405180910390f35b6105a66110c9565b6040516105b39190613699565b60405180910390f35b6105d660048036038101906105d191906136b4565b6110dc565b6040516105e3919061350a565b60405180910390f35b6105f4611124565b005b610610600480360381019061060b9190613868565b61127c565b005b61061a61136e565b604051610627919061350a565b60405180910390f35b610638611374565b005b610642611461565b60405161064f91906137ea565b60405180910390f35b61066061148b565b60405161066d91906137ea565b60405180910390f35b61067e6114b1565b60405161068b91906135be565b60405180910390f35b61069c611543565b6040516106a9919061350a565b60405180910390f35b6106cc60048036038101906106c79190613868565b611549565b005b6106d661167d565b6040516106e3919061350a565b60405180910390f35b6106f4611683565b604051610701919061350a565b60405180910390f35b610724600480360381019061071f91906136e1565b611689565b005b610740600480360381019061073b91906136e1565b61172a565b005b61074a6117c7565b604051610757919061350a565b60405180910390f35b61077a6004803603810190610775919061363e565b6117cd565b6040516107879190613699565b60405180910390f35b6107aa60048036038101906107a5919061363e565b611879565b6040516107b79190613699565b60405180910390f35b6107c8611897565b6040516107d5919061350a565b60405180910390f35b6107f860048036038101906107f391906136b4565b61189d565b6040516108059190613699565b60405180910390f35b6108166118bd565b6040516108239190613699565b60405180910390f35b61084660048036038101906108419190613868565b6118d0565b005b610850611a10565b60405161085d9190613699565b60405180910390f35b61086e611a23565b60405161087b919061350a565b60405180910390f35b61088c611a29565b604051610899919061350a565b60405180910390f35b6108bc60048036038101906108b791906138a8565b611a2f565b6040516108c9919061350a565b60405180910390f35b6108da611ab6565b6040516108e7919061350a565b60405180910390f35b6108f8611abc565b604051610905919061350a565b60405180910390f35b610916611ac2565b604051610923919061350a565b60405180910390f35b610946600480360381019061094191906136b4565b611ac8565b005b610950611c8f565b60405161095d919061350a565b60405180910390f35b61096e611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f490613934565b60405180910390fd5b8160118190555080601281905550601254601154610a1b9190613983565b601381905550600f6013541115610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90613a25565b60405180910390fd5b5050565b600a5481565b606060038054610a8090613a74565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac90613a74565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b6000610b17610b10611c95565b8484611c9d565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610b49611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf90613934565b60405180910390fd5b6001811015610be657600080fd5b80601681905550610bf5611e68565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c2e611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb490613934565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b610d0f611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613934565b60405180910390fd5b6001811015610dac57600080fd5b80601781905550610dbb611e68565b50565b6000610dcb848484611ed0565b610e6b84610dd7611c95565b84600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e21611c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e669190613aa6565b611c9d565b600190509392505050565b61dead81565b60006012905090565b6000610f27610e92611c95565b848460016000610ea0611c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f229190613983565b611c9d565b6001905092915050565b7f0000000000000000000000009d79159ea730141039717fe3334e2cecf16a722581565b600b60149054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fc6611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613934565b60405180910390fd5b81600e8190555080600f81905550600f54600e546110739190613983565b601081905550600a60105411156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613b26565b60405180910390fd5b5050565b60135481565b600b60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112c611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613934565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611284611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613934565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b61137c611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290613934565b60405180910390fd5b6006600e819055506001600f81905550600f54600e5461142b9190613983565b601081905550600660118190555060016012819055506012546011546114519190613983565b6013819055506001601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546114c090613a74565b80601f01602080910402602001604051908101604052809291908181526020018280546114ec90613a74565b80156115395780601f1061150e57610100808354040283529160200191611539565b820191906000526020600020905b81548152906001019060200180831161151c57829003601f168201915b5050505050905090565b60175481565b611551611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613934565b60405180910390fd5b7f0000000000000000000000009d79159ea730141039717fe3334e2cecf16a722573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613bb8565b60405180910390fd5b6116798282612b2b565b5050565b600f5481565b60155481565b611691611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613934565b60405180910390fd5b8060188190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190613c24565b60405180910390fd5b6117c43382612bcc565b50565b60125481565b600061186f6117da611c95565b8484600160006117e8611c95565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461186a9190613aa6565b611c9d565b6001905092915050565b600061188d611886611c95565b8484611ed0565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60159054906101000a900460ff1681565b6118d8611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613934565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a049190613699565b60405180910390a25050565b600d60009054906101000a900460ff1681565b60075481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600e5481565b60185481565b611ad0611c95565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690613934565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613cb6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613d48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7490613dda565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e5b919061350a565b60405180910390a3505050565b6064601754600a54611e7a9190613dfa565b611e849190613e83565b6007819055506127106005600a54611e9c9190613dfa565b611ea69190613e83565b6008819055506064601654600a54611ebe9190613dfa565b611ec89190613e83565b600981905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613f26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613fb8565b60405180910390fd5b6000811415611fca57611fc583836000612d52565b612b26565b600b60149054906101000a900460ff161561269a57611fe7611461565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120555750612025611461565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561208e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120c8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120e15750600660149054906101000a900460ff16155b1561269957600b60159054906101000a900460ff166121db57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061219b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614024565b60405180910390fd5b5b600d60009054906101000a900460ff16156123b0576121f8611461565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561227f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d757507f0000000000000000000000009d79159ea730141039717fe3334e2cecf16a722573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123af5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061235d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612354906140dc565b60405180910390fd5b6018544361236b9190613983565b600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124535750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fa5760075481111561249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124949061416e565b60405180910390fd5b6009546124a9836110dc565b826124b49190613983565b11156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec906141da565b60405180910390fd5b612698565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561259d5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ec576007548111156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de9061426c565b60405180910390fd5b612697565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661269657600954612649836110dc565b826126549190613983565b1115612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c906141da565b60405180910390fd5b5b5b5b5b5b60006126a5306110dc565b9050600060085482101590508080156126cb5750600660149054906101000a900460ff16155b80156126e35750600b60169054906101000a900460ff165b80156127395750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561278f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e55750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612829576001600660146101000a81548160ff02191690831515021790555061280d612fbf565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128df5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e957600090505b60008115612b1657601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294c57506000601354115b156129d8576064601354866129619190613dfa565b61296b9190613e83565b90506013546011548261297e9190613dfa565b6129889190613e83565b601460008282546129999190613983565b92505081905550601354601254826129b19190613dfa565b6129bb9190613e83565b601560008282546129cc9190613983565b92505081905550612abc565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a3357506000601054115b15612abb57606460105486612a489190613dfa565b612a529190613e83565b9050601054600e5482612a659190613dfa565b612a6f9190613e83565b60146000828254612a809190613983565b92505081905550601054600f5482612a989190613dfa565b612aa29190613e83565b60156000828254612ab39190613983565b925050819055505b5b6000811115612b0757612ad0873083612d52565b60006014541115612b0657612ae7306014546130a9565b612aef610c1c565b600a81905550612afd611e68565b60006014819055505b5b8085612b139190613aa6565b94505b612b21878787612d52565b505050505b505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c33906142d8565b60405180910390fd5b612c486000838361322f565b80600254612c569190613983565b600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca69190613983565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d46919061350a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990613f26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990613fb8565b60405180910390fd5b612e3d83838361322f565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e879190613aa6565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f139190613983565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fb2919061350a565b60405180910390a3505050565b6000612fca306110dc565b9050600080821415612fdd5750506130a7565b6014600854612fec9190613dfa565b8211156130055760146008546130029190613dfa565b91505b61300e82613234565b6000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161305c90614329565b60006040518083038185875af1925050503d8060008114613099576040519150601f19603f3d011682016040523d82523d6000602084013e61309e565b606091505b50508091505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613110906143b0565b60405180910390fd5b6131258260008361322f565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316f9190613aa6565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806002546131bf9190613aa6565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613223919061350a565b60405180910390a35050565b505050565b6000600267ffffffffffffffff811115613251576132506143d0565b5b60405190808252806020026020018201604052801561327f5781602001602082028036833780820191505090505b5090503081600081518110613297576132966143ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561333757600080fd5b505afa15801561334b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336f9190614443565b81600181518110613383576133826143ff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133e8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161344a959493929190614569565b600060405180830381600087803b15801561346457600080fd5b505af1158015613478573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b61349881613485565b81146134a357600080fd5b50565b6000813590506134b58161348f565b92915050565b600080604083850312156134d2576134d1613480565b5b60006134e0858286016134a6565b92505060206134f1858286016134a6565b9150509250929050565b61350481613485565b82525050565b600060208201905061351f60008301846134fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561355f578082015181840152602081019050613544565b8381111561356e576000848401525b50505050565b6000601f19601f8301169050919050565b600061359082613525565b61359a8185613530565b93506135aa818560208601613541565b6135b381613574565b840191505092915050565b600060208201905081810360008301526135d88184613585565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061360b826135e0565b9050919050565b61361b81613600565b811461362657600080fd5b50565b60008135905061363881613612565b92915050565b6000806040838503121561365557613654613480565b5b600061366385828601613629565b9250506020613674858286016134a6565b9150509250929050565b60008115159050919050565b6136938161367e565b82525050565b60006020820190506136ae600083018461368a565b92915050565b6000602082840312156136ca576136c9613480565b5b60006136d884828501613629565b91505092915050565b6000602082840312156136f7576136f6613480565b5b6000613705848285016134a6565b91505092915050565b6000819050919050565b600061373361372e613729846135e0565b61370e565b6135e0565b9050919050565b600061374582613718565b9050919050565b60006137578261373a565b9050919050565b6137678161374c565b82525050565b6000602082019050613782600083018461375e565b92915050565b6000806000606084860312156137a1576137a0613480565b5b60006137af86828701613629565b93505060206137c086828701613629565b92505060406137d1868287016134a6565b9150509250925092565b6137e481613600565b82525050565b60006020820190506137ff60008301846137db565b92915050565b600060ff82169050919050565b61381b81613805565b82525050565b60006020820190506138366000830184613812565b92915050565b6138458161367e565b811461385057600080fd5b50565b6000813590506138628161383c565b92915050565b6000806040838503121561387f5761387e613480565b5b600061388d85828601613629565b925050602061389e85828601613853565b9150509250929050565b600080604083850312156138bf576138be613480565b5b60006138cd85828601613629565b92505060206138de85828601613629565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061391e602083613530565b9150613929826138e8565b602082019050919050565b6000602082019050818103600083015261394d81613911565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061398e82613485565b915061399983613485565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139ce576139cd613954565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613a0f601d83613530565b9150613a1a826139d9565b602082019050919050565b60006020820190508181036000830152613a3e81613a02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a8c57607f821691505b60208210811415613aa057613a9f613a45565b5b50919050565b6000613ab182613485565b9150613abc83613485565b925082821015613acf57613ace613954565b5b828203905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613b10601d83613530565b9150613b1b82613ada565b602082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ba2603983613530565b9150613bad82613b46565b604082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4f6e6c79206465762063616e2063616c6c20746869732066756e6374696f6e00600082015250565b6000613c0e601f83613530565b9150613c1982613bd8565b602082019050919050565b60006020820190508181036000830152613c3d81613c01565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ca0602683613530565b9150613cab82613c44565b604082019050919050565b60006020820190508181036000830152613ccf81613c93565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d32602483613530565b9150613d3d82613cd6565b604082019050919050565b60006020820190508181036000830152613d6181613d25565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dc4602283613530565b9150613dcf82613d68565b604082019050919050565b60006020820190508181036000830152613df381613db7565b9050919050565b6000613e0582613485565b9150613e1083613485565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e4957613e48613954565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e8e82613485565b9150613e9983613485565b925082613ea957613ea8613e54565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f10602583613530565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa2602383613530565b9150613fad82613f46565b604082019050919050565b60006020820190508181036000830152613fd181613f95565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061400e601683613530565b915061401982613fd8565b602082019050919050565b6000602082019050818103600083015261403d81614001565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006140c6604983613530565b91506140d182614044565b606082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614158603583613530565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141c4601383613530565b91506141cf8261418e565b602082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614256603683613530565b9150614261826141fa565b604082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006142c2601f83613530565b91506142cd8261428c565b602082019050919050565b600060208201905081810360008301526142f1816142b5565b9050919050565b600081905092915050565b50565b60006143136000836142f8565b915061431e82614303565b600082019050919050565b600061433482614306565b9150819050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061439a602183613530565b91506143a58261433e565b604082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061443d81613612565b92915050565b60006020828403121561445957614458613480565b5b60006144678482850161442e565b91505092915050565b6000819050919050565b600061449561449061448b84614470565b61370e565b613485565b9050919050565b6144a58161447a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144e081613600565b82525050565b60006144f283836144d7565b60208301905092915050565b6000602082019050919050565b6000614516826144ab565b61452081856144b6565b935061452b836144c7565b8060005b8381101561455c57815161454388826144e6565b975061454e836144fe565b92505060018101905061452f565b5085935050505092915050565b600060a08201905061457e60008301886134fb565b61458b602083018761449c565b818103604083015261459d818661450b565b90506145ac60608301856137db565b6145b960808301846134fb565b969550505050505056fea2646970667358221220e554f866687b1e1478d72576832b27a2cbb65a643c0faa6eba295df9d7f5e25a64736f6c63430008090033

Deployed Bytecode Sourcemap

20360:11411:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25259:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20735:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5307:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7474:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21564:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24550:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20413:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6427:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25540:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21249:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24387:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8125:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20516:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6269:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8842:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20471:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20802:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26517:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24981:266;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21205:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20881:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6598:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14919:148;;;:::i;:::-;;24825:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21320:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23931:280;;;:::i;:::-;;14277:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20765:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5526:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21353:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26069:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21073:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21284:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24715:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24219:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21173:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9560:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6938:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21140:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21786:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20842:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25651:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20993:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20616:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21104:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7176:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20658:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21041:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21385;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15222:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20698:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25259:273;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25362:8:::1;25348:11;:22;;;;25394:7;25381:10;:20;;;;25442:10;;25428:11;;:24;;;;:::i;:::-;25412:13;:40;;;;25488:2;25471:13;;:19;;25463:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25259:273:::0;;:::o;20735:21::-;;;;:::o;5307:100::-;5361:13;5394:5;5387:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5307:100;:::o;7474:169::-;7557:4;7574:39;7583:12;:10;:12::i;:::-;7597:7;7606:6;7574:8;:39::i;:::-;7631:4;7624:11;;7474:169;;;;:::o;21564:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;24550:157::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24641:1:::1;24631:6;:11;;24623:20;;;::::0;::::1;;24668:6;24654:11;:20;;;;24685:14;:12;:14::i;:::-;24550:157:::0;:::o;20413:51::-;;;:::o;6427:108::-;6488:7;6515:12;;6508:19;;6427:108;:::o;25540:103::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25626:9:::1;25614;;:21;;;;;;;;;;;;;;;;;;25540:103:::0;:::o;21249:28::-;;;;:::o;24387:155::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24477:1:::1;24467:6;:11;;24459:20;;;::::0;::::1;;24503:6;24490:10;:19;;;;24520:14;:12;:14::i;:::-;24387:155:::0;:::o;8125:308::-;8265:4;8282:36;8292:6;8300:9;8311:6;8282:9;:36::i;:::-;8329:74;8338:6;8346:12;:10;:12::i;:::-;8396:6;8360:11;:19;8372:6;8360:19;;;;;;;;;;;;;;;:33;8380:12;:10;:12::i;:::-;8360:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;8329:8;:74::i;:::-;8421:4;8414:11;;8125:308;;;;;:::o;20516:53::-;20562:6;20516:53;:::o;6269:93::-;6327:5;6352:2;6345:9;;6269:93;:::o;8842:215::-;8930:4;8947:80;8956:12;:10;:12::i;:::-;8970:7;9016:10;8979:11;:25;8991:12;:10;:12::i;:::-;8979:25;;;;;;;;;;;;;;;:34;9005:7;8979:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8947:8;:80::i;:::-;9045:4;9038:11;;8842:215;;;;:::o;20471:38::-;;;:::o;20802:33::-;;;;;;;;;;;;;:::o;26517:125::-;26582:4;26606:19;:28;26626:7;26606:28;;;;;;;;;;;;;;;;;;;;;;;;;26599:35;;26517:125;;;:::o;24981:266::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25082:8:::1;25069:10;:21;;;;25113:7;25101:9;:19;;;;25159:9;;25146:10;;:22;;;;:::i;:::-;25131:12;:37;;;;25203:2;25187:12;;:18;;25179:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24981:266:::0;;:::o;21205:28::-;;;;:::o;20881:30::-;;;;;;;;;;;;;:::o;6598:127::-;6672:7;6699:9;:18;6709:7;6699:18;;;;;;;;;;;;;;;;6692:25;;6598:127;;;:::o;14919:148::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15026:1:::1;14989:40;;15010:6;;;;;;;;;;;14989:40;;;;;;;;;;;;15057:1;15040:6;;:19;;;;;;;;;;;;;;;;;;14919:148::o:0;24825:144::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24957:4:::1;24915:31;:39;24947:6;24915:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24825:144:::0;;:::o;21320:26::-;;;;:::o;23931:280::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23999:1:::1;23986:10;:14;;;;24023:1;24011:9;:13;;;;24063:9;;24050:10;;:22;;;;:::i;:::-;24035:12;:37;;;;24099:1;24085:11;:15;;;;24124:1;24111:10;:14;;;;24166:10;;24152:11;;:24;;;;:::i;:::-;24136:13;:40;;;;24202:1;24189:10;:14;;;;23931:280::o:0;14277:79::-;14315:7;14342:6;;;;;;;;;;;14335:13;;14277:79;:::o;20765:24::-;;;;;;;;;;;;;:::o;5526:104::-;5582:13;5615:7;5608:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5526:104;:::o;21353:25::-;;;;:::o;26069:244::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26176:13:::1;26168:21;;:4;:21;;;;26160:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26264:41;26293:4;26299:5;26264:28;:41::i;:::-;26069:244:::0;;:::o;21073:24::-;;;;:::o;21284:27::-;;;;:::o;24715:98::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24799:6:::1;24786:10;:19;;;;24715:98:::0;:::o;24219:156::-;24291:4;;;;;;;;;;;24277:18;;:10;:18;;;24269:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24342:25;24348:10;24360:6;24342:5;:25::i;:::-;24219:156;:::o;21173:25::-;;;;:::o;9560:225::-;9653:4;9670:85;9679:12;:10;:12::i;:::-;9693:7;9739:15;9702:11;:25;9714:12;:10;:12::i;:::-;9702:25;;;;;;;;;;;;;;;:34;9728:7;9702:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;9670:8;:85::i;:::-;9773:4;9766:11;;9560:225;;;;:::o;6938:175::-;7024:4;7041:42;7051:12;:10;:12::i;:::-;7065:9;7076:6;7041:9;:42::i;:::-;7101:4;7094:11;;6938:175;;;;:::o;21140:26::-;;;;:::o;21786:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20842:32::-;;;;;;;;;;;;;:::o;25651:182::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25767:8:::1;25736:19;:28;25756:7;25736:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25807:7;25791:34;;;25816:8;25791:34;;;;;;:::i;:::-;;;;;;;;25651:182:::0;;:::o;20993:39::-;;;;;;;;;;;;;:::o;20616:35::-;;;;:::o;21104:27::-;;;;:::o;7176:151::-;7265:7;7292:11;:18;7304:5;7292:18;;;;;;;;;;;;;;;:27;7311:7;7292:27;;;;;;;;;;;;;;;;7285:34;;7176:151;;;;:::o;20658:33::-;;;;:::o;21041:25::-;;;;:::o;21385:::-;;;;:::o;15222:244::-;14499:12;:10;:12::i;:::-;14489:22;;:6;;;;;;;;;;;:22;;;14481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15331:1:::1;15311:22;;:8;:22;;;;15303:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15421:8;15392:38;;15413:6;;;;;;;;;;;15392:38;;;;;;;;;;;;15450:8;15441:6;;:17;;;;;;;;;;;;;;;;;;15222:244:::0;:::o;20698:24::-;;;;:::o;426:98::-;479:7;506:10;499:17;;426:98;:::o;12604:380::-;12757:1;12740:19;;:5;:19;;;;12732:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12838:1;12819:21;;:7;:21;;;;12811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12922:6;12892:11;:18;12904:5;12892:18;;;;;;;;;;;;;;;:27;12911:7;12892:27;;;;;;;;;;;;;;;:36;;;;12960:7;12944:32;;12953:5;12944:32;;;12969:6;12944:32;;;;;;:::i;:::-;;;;;;;;12604:380;;;:::o;25841:220::-;25929:3;25916:10;;25907:6;;:19;;;;:::i;:::-;:25;;;;:::i;:::-;25884:20;:48;;;;25977:5;25973:1;25964:6;;:10;;;;:::i;:::-;:18;;;;:::i;:::-;25943;:39;;;;26050:3;26036:11;;26027:6;;:20;;;;:::i;:::-;:26;;;;:::i;:::-;26015:9;:38;;;;25841:220::o;26654:4029::-;26802:1;26786:18;;:4;:18;;;;26778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26879:1;26865:16;;:2;:16;;;;26857:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:1;26946:6;:11;26943:92;;;26974:28;26990:4;26996:2;27000:1;26974:15;:28::i;:::-;27017:7;;26943:92;27058:14;;;;;;;;;;;27055:1854;;;27118:7;:5;:7::i;:::-;27110:15;;:4;:15;;;;:49;;;;;27152:7;:5;:7::i;:::-;27146:13;;:2;:13;;;;27110:49;:86;;;;;27194:1;27180:16;;:2;:16;;;;27110:86;:128;;;;;27231:6;27217:21;;:2;:21;;;;27110:128;:158;;;;;27260:8;;;;;;;;;;;27259:9;27110:158;27088:1810;;;27306:13;;;;;;;;;;;27302:148;;27351:19;:25;27371:4;27351:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27380:19;:23;27400:2;27380:23;;;;;;;;;;;;;;;;;;;;;;;;;27351:52;27343:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27302:148;27608:20;;;;;;;;;;;27604:436;;;27662:7;:5;:7::i;:::-;27656:13;;:2;:13;;;;:47;;;;;27687:15;27673:30;;:2;:30;;;;27656:47;:79;;;;;27721:13;27707:28;;:2;:28;;;;27656:79;27652:369;;;27813:12;27771:28;:39;27800:9;27771:39;;;;;;;;;;;;;;;;:54;27763:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27987:10;;27972:12;:25;;;;:::i;:::-;27930:28;:39;27959:9;27930:39;;;;;;;;;;;;;;;:67;;;;27652:369;27604:436;28109:25;:31;28135:4;28109:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28145:31;:35;28177:2;28145:35;;;;;;;;;;;;;;;;;;;;;;;;;28144:36;28109:71;28105:778;;;28227:20;;28217:6;:30;;28209:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28366:9;;28349:13;28359:2;28349:9;:13::i;:::-;28340:6;:22;;;;:::i;:::-;:35;;28332:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28105:778;;;28493:25;:29;28519:2;28493:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28527:31;:37;28559:4;28527:37;;;;;;;;;;;;;;;;;;;;;;;;;28526:38;28493:71;28489:394;;;28611:20;;28601:6;:30;;28593:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28489:394;;;28737:31;:35;28769:2;28737:35;;;;;;;;;;;;;;;;;;;;;;;;;28733:150;;28830:9;;28813:13;28823:2;28813:9;:13::i;:::-;28804:6;:22;;;;:::i;:::-;:35;;28796:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28733:150;28489:394;28105:778;27088:1810;27055:1854;28919:28;28950:24;28968:4;28950:9;:24::i;:::-;28919:55;;28995:12;29034:18;;29010:20;:42;;28995:57;;29083:7;:33;;;;;29108:8;;;;;;;;;;;29107:9;29083:33;:61;;;;;29133:11;;;;;;;;;;;29083:61;:110;;;;;29162:25;:31;29188:4;29162:31;;;;;;;;;;;;;;;;;;;;;;;;;29161:32;29083:110;:153;;;;;29211:19;:25;29231:4;29211:25;;;;;;;;;;;;;;;;;;;;;;;;;29210:26;29083:153;:194;;;;;29254:19;:23;29274:2;29254:23;;;;;;;;;;;;;;;;;;;;;;;;;29253:24;29083:194;29065:338;;;29315:4;29304:8;;:15;;;;;;;;;;;;;;;;;;29348:10;:8;:10::i;:::-;29386:5;29375:8;;:16;;;;;;;;;;;;;;;;;;29065:338;29423:12;29439:8;;;;;;;;;;;29438:9;29423:24;;29463:19;:25;29483:4;29463:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29492:19;:23;29512:2;29492:23;;;;;;;;;;;;;;;;;;;;;;;;;29463:52;29460:99;;;29542:5;29532:15;;29460:99;29579:12;29611:7;29608:1022;;;29662:25;:29;29688:2;29662:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29711:1;29695:13;;:17;29662:50;29658:562;;;29764:3;29748:13;;29739:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;29732:35;;29824:13;;29810:11;;29803:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29786:13;;:51;;;;;;;:::i;:::-;;;;;;;;29892:13;;29879:10;;29872:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;29856:12;;:49;;;;;;;:::i;:::-;;;;;;;;29658:562;;;29968:25;:31;29994:4;29968:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30018:1;30003:12;;:16;29968:51;29965:255;;;30070:3;30055:12;;30046:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;30039:34;;30126:12;;30113:10;;30106:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;30089:13;;:49;;;;;;;:::i;:::-;;;;;;;;30192:12;;30180:9;;30173:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;30157:12;;:47;;;;;;;:::i;:::-;;;;;;;;29965:255;29658:562;30258:1;30251:4;:8;30248:334;;;30283:42;30299:4;30313;30320;30283:15;:42::i;:::-;30364:1;30348:13;;:17;30344:223;;;30390:35;30404:4;30411:13;;30390:5;:35::i;:::-;30457:13;:11;:13::i;:::-;30448:6;:22;;;;30493:14;:12;:14::i;:::-;30546:1;30530:13;:17;;;;30344:223;30248:334;30614:4;30604:14;;;;;:::i;:::-;;;29608:1022;30642:33;30658:4;30664:2;30668:6;30642:15;:33::i;:::-;26767:3916;;;;26654:4029;;;;:::o;26321:188::-;26438:5;26404:25;:31;26430:4;26404:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26495:5;26461:40;;26489:4;26461:40;;;;;;;;;;;;26321:188;;:::o;11087:372::-;11190:1;11171:21;;:7;:21;;;;11163:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11241:49;11270:1;11274:7;11283:6;11241:20;:49::i;:::-;11333:6;11318:12;;:21;;;;:::i;:::-;11303:12;:36;;;;11392:6;11371:9;:18;11381:7;11371:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;11350:9;:18;11360:7;11350:18;;;;;;;;;;;;;;;:48;;;;11435:7;11414:37;;11431:1;11414:37;;;11444:6;11414:37;;;;;;:::i;:::-;;;;;;;;11087:372;;:::o;10275:525::-;10433:1;10415:20;;:6;:20;;;;10407:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10517:1;10496:23;;:9;:23;;;;10488:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10572:47;10593:6;10601:9;10612:6;10572:20;:47::i;:::-;10672:6;10652:9;:17;10662:6;10652:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;10632:9;:17;10642:6;10632:17;;;;;;;;;;;;;;;:46;;;;10735:6;10712:9;:20;10722:9;10712:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;10689:9;:20;10699:9;10689:20;;;;;;;;;;;;;;;:52;;;;10774:9;10757:35;;10766:6;10757:35;;;10785:6;10757:35;;;;;;:::i;:::-;;;;;;;;10275:525;;;:::o;31304:464::-;31343:23;31369:24;31387:4;31369:9;:24::i;:::-;31343:50;;31404:12;31459:1;31440:15;:20;31437:34;;;31463:7;;;;31437:34;31525:2;31504:18;;:23;;;;:::i;:::-;31486:15;:41;31483:111;;;31580:2;31559:18;;:23;;;;:::i;:::-;31541:41;;31483:111;31606:33;31623:15;31606:16;:33::i;:::-;31676:1;31661:12;:16;;;;31711:9;;;;;;;;;;;31703:23;;31734:21;31703:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31690:70;;;;;31332:436;;31304:464;:::o;11792:374::-;11895:1;11876:21;;:7;:21;;;;11868:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11948:49;11969:7;11986:1;11990:6;11948:20;:49::i;:::-;12052:6;12031:9;:18;12041:7;12031:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;12010:9;:18;12020:7;12010:18;;;;;;;;;;;;;;;:48;;;;12099:6;12084:12;;:21;;;;:::i;:::-;12069:12;:36;;;;12147:1;12121:37;;12130:7;12121:37;;;12151:6;12121:37;;;;;;:::i;:::-;;;;;;;;11792:374;;:::o;13587:125::-;;;;:::o;30691:601::-;30819:21;30857:1;30843:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30819:40;;30888:4;30870;30875:1;30870:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30914:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30904:4;30909:1;30904:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30949:62;30966:4;30981:15;30999:11;30949:8;:62::i;:::-;31050:15;:66;;;31131:11;31157:1;31201:4;31228;31248:15;31050:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30746:546;30691:601;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:307::-;1870:1;1880:113;1894:6;1891:1;1888:13;1880:113;;;1979:1;1974:3;1970:11;1964:18;1960:1;1955:3;1951:11;1944:39;1916:2;1913:1;1909:10;1904:15;;1880:113;;;2011:6;2008:1;2005:13;2002:101;;;2091:1;2082:6;2077:3;2073:16;2066:27;2002:101;1851:258;1802:307;;;:::o;2115:102::-;2156:6;2207:2;2203:7;2198:2;2191:5;2187:14;2183:28;2173:38;;2115:102;;;:::o;2223:364::-;2311:3;2339:39;2372:5;2339:39;:::i;:::-;2394:71;2458:6;2453:3;2394:71;:::i;:::-;2387:78;;2474:52;2519:6;2514:3;2507:4;2500:5;2496:16;2474:52;:::i;:::-;2551:29;2573:6;2551:29;:::i;:::-;2546:3;2542:39;2535:46;;2315:272;2223:364;;;;:::o;2593:313::-;2706:4;2744:2;2733:9;2729:18;2721:26;;2793:9;2787:4;2783:20;2779:1;2768:9;2764:17;2757:47;2821:78;2894:4;2885:6;2821:78;:::i;:::-;2813:86;;2593:313;;;;:::o;2912:126::-;2949:7;2989:42;2982:5;2978:54;2967:65;;2912:126;;;:::o;3044:96::-;3081:7;3110:24;3128:5;3110:24;:::i;:::-;3099:35;;3044:96;;;:::o;3146:122::-;3219:24;3237:5;3219:24;:::i;:::-;3212:5;3209:35;3199:63;;3258:1;3255;3248:12;3199:63;3146:122;:::o;3274:139::-;3320:5;3358:6;3345:20;3336:29;;3374:33;3401:5;3374:33;:::i;:::-;3274:139;;;;:::o;3419:474::-;3487:6;3495;3544:2;3532:9;3523:7;3519:23;3515:32;3512:119;;;3550:79;;:::i;:::-;3512:119;3670:1;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3641:117;3797:2;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3768:118;3419:474;;;;;:::o;3899:90::-;3933:7;3976:5;3969:13;3962:21;3951:32;;3899:90;;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;3995:109;;:::o;4110:210::-;4197:4;4235:2;4224:9;4220:18;4212:26;;4248:65;4310:1;4299:9;4295:17;4286:6;4248:65;:::i;:::-;4110:210;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:::-;4720:6;4769:2;4757:9;4748:7;4744:23;4740:32;4737:119;;;4775:79;;:::i;:::-;4737:119;4895:1;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4866:117;4661:329;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:474::-;8184:6;8192;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8494:2;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8465:118;8116:474;;;;;:::o;8596:182::-;8736:34;8732:1;8724:6;8720:14;8713:58;8596:182;:::o;8784:366::-;8926:3;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9023:93;9112:3;9023:93;:::i;:::-;9141:2;9136:3;9132:12;9125:19;;8784:366;;;:::o;9156:419::-;9322:4;9360:2;9349:9;9345:18;9337:26;;9409:9;9403:4;9399:20;9395:1;9384:9;9380:17;9373:47;9437:131;9563:4;9437:131;:::i;:::-;9429:139;;9156:419;;;:::o;9581:180::-;9629:77;9626:1;9619:88;9726:4;9723:1;9716:15;9750:4;9747:1;9740:15;9767:305;9807:3;9826:20;9844:1;9826:20;:::i;:::-;9821:25;;9860:20;9878:1;9860:20;:::i;:::-;9855:25;;10014:1;9946:66;9942:74;9939:1;9936:81;9933:107;;;10020:18;;:::i;:::-;9933:107;10064:1;10061;10057:9;10050:16;;9767:305;;;;:::o;10078:179::-;10218:31;10214:1;10206:6;10202:14;10195:55;10078:179;:::o;10263:366::-;10405:3;10426:67;10490:2;10485:3;10426:67;:::i;:::-;10419:74;;10502:93;10591:3;10502:93;:::i;:::-;10620:2;10615:3;10611:12;10604:19;;10263:366;;;:::o;10635:419::-;10801:4;10839:2;10828:9;10824:18;10816:26;;10888:9;10882:4;10878:20;10874:1;10863:9;10859:17;10852:47;10916:131;11042:4;10916:131;:::i;:::-;10908:139;;10635:419;;;:::o;11060:180::-;11108:77;11105:1;11098:88;11205:4;11202:1;11195:15;11229:4;11226:1;11219:15;11246:320;11290:6;11327:1;11321:4;11317:12;11307:22;;11374:1;11368:4;11364:12;11395:18;11385:81;;11451:4;11443:6;11439:17;11429:27;;11385:81;11513:2;11505:6;11502:14;11482:18;11479:38;11476:84;;;11532:18;;:::i;:::-;11476:84;11297:269;11246:320;;;:::o;11572:191::-;11612:4;11632:20;11650:1;11632:20;:::i;:::-;11627:25;;11666:20;11684:1;11666:20;:::i;:::-;11661:25;;11705:1;11702;11699:8;11696:34;;;11710:18;;:::i;:::-;11696:34;11755:1;11752;11748:9;11740:17;;11572:191;;;;:::o;11769:179::-;11909:31;11905:1;11897:6;11893:14;11886:55;11769:179;:::o;11954:366::-;12096:3;12117:67;12181:2;12176:3;12117:67;:::i;:::-;12110:74;;12193:93;12282:3;12193:93;:::i;:::-;12311:2;12306:3;12302:12;12295:19;;11954:366;;;:::o;12326:419::-;12492:4;12530:2;12519:9;12515:18;12507:26;;12579:9;12573:4;12569:20;12565:1;12554:9;12550:17;12543:47;12607:131;12733:4;12607:131;:::i;:::-;12599:139;;12326:419;;;:::o;12751:244::-;12891:34;12887:1;12879:6;12875:14;12868:58;12960:27;12955:2;12947:6;12943:15;12936:52;12751:244;:::o;13001:366::-;13143:3;13164:67;13228:2;13223:3;13164:67;:::i;:::-;13157:74;;13240:93;13329:3;13240:93;:::i;:::-;13358:2;13353:3;13349:12;13342:19;;13001:366;;;:::o;13373:419::-;13539:4;13577:2;13566:9;13562:18;13554:26;;13626:9;13620:4;13616:20;13612:1;13601:9;13597:17;13590:47;13654:131;13780:4;13654:131;:::i;:::-;13646:139;;13373:419;;;:::o;13798:181::-;13938:33;13934:1;13926:6;13922:14;13915:57;13798:181;:::o;13985:366::-;14127:3;14148:67;14212:2;14207:3;14148:67;:::i;:::-;14141:74;;14224:93;14313:3;14224:93;:::i;:::-;14342:2;14337:3;14333:12;14326:19;;13985:366;;;:::o;14357:419::-;14523:4;14561:2;14550:9;14546:18;14538:26;;14610:9;14604:4;14600:20;14596:1;14585:9;14581:17;14574:47;14638:131;14764:4;14638:131;:::i;:::-;14630:139;;14357:419;;;:::o;14782:225::-;14922:34;14918:1;14910:6;14906:14;14899:58;14991:8;14986:2;14978:6;14974:15;14967:33;14782:225;:::o;15013:366::-;15155:3;15176:67;15240:2;15235:3;15176:67;:::i;:::-;15169:74;;15252:93;15341:3;15252:93;:::i;:::-;15370:2;15365:3;15361:12;15354:19;;15013:366;;;:::o;15385:419::-;15551:4;15589:2;15578:9;15574:18;15566:26;;15638:9;15632:4;15628:20;15624:1;15613:9;15609:17;15602:47;15666:131;15792:4;15666:131;:::i;:::-;15658:139;;15385:419;;;:::o;15810:223::-;15950:34;15946:1;15938:6;15934:14;15927:58;16019:6;16014:2;16006:6;16002:15;15995:31;15810:223;:::o;16039:366::-;16181:3;16202:67;16266:2;16261:3;16202:67;:::i;:::-;16195:74;;16278:93;16367:3;16278:93;:::i;:::-;16396:2;16391:3;16387:12;16380:19;;16039:366;;;:::o;16411:419::-;16577:4;16615:2;16604:9;16600:18;16592:26;;16664:9;16658:4;16654:20;16650:1;16639:9;16635:17;16628:47;16692:131;16818:4;16692:131;:::i;:::-;16684:139;;16411:419;;;:::o;16836:221::-;16976:34;16972:1;16964:6;16960:14;16953:58;17045:4;17040:2;17032:6;17028:15;17021:29;16836:221;:::o;17063:366::-;17205:3;17226:67;17290:2;17285:3;17226:67;:::i;:::-;17219:74;;17302:93;17391:3;17302:93;:::i;:::-;17420:2;17415:3;17411:12;17404:19;;17063:366;;;:::o;17435:419::-;17601:4;17639:2;17628:9;17624:18;17616:26;;17688:9;17682:4;17678:20;17674:1;17663:9;17659:17;17652:47;17716:131;17842:4;17716:131;:::i;:::-;17708:139;;17435:419;;;:::o;17860:348::-;17900:7;17923:20;17941:1;17923:20;:::i;:::-;17918:25;;17957:20;17975:1;17957:20;:::i;:::-;17952:25;;18145:1;18077:66;18073:74;18070:1;18067:81;18062:1;18055:9;18048:17;18044:105;18041:131;;;18152:18;;:::i;:::-;18041:131;18200:1;18197;18193:9;18182:20;;17860:348;;;;:::o;18214:180::-;18262:77;18259:1;18252:88;18359:4;18356:1;18349:15;18383:4;18380:1;18373:15;18400:185;18440:1;18457:20;18475:1;18457:20;:::i;:::-;18452:25;;18491:20;18509:1;18491:20;:::i;:::-;18486:25;;18530:1;18520:35;;18535:18;;:::i;:::-;18520:35;18577:1;18574;18570:9;18565:14;;18400:185;;;;:::o;18591:224::-;18731:34;18727:1;18719:6;18715:14;18708:58;18800:7;18795:2;18787:6;18783:15;18776:32;18591:224;:::o;18821:366::-;18963:3;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19060:93;19149:3;19060:93;:::i;:::-;19178:2;19173:3;19169:12;19162:19;;18821:366;;;:::o;19193:419::-;19359:4;19397:2;19386:9;19382:18;19374:26;;19446:9;19440:4;19436:20;19432:1;19421:9;19417:17;19410:47;19474:131;19600:4;19474:131;:::i;:::-;19466:139;;19193:419;;;:::o;19618:222::-;19758:34;19754:1;19746:6;19742:14;19735:58;19827:5;19822:2;19814:6;19810:15;19803:30;19618:222;:::o;19846:366::-;19988:3;20009:67;20073:2;20068:3;20009:67;:::i;:::-;20002:74;;20085:93;20174:3;20085:93;:::i;:::-;20203:2;20198:3;20194:12;20187:19;;19846:366;;;:::o;20218:419::-;20384:4;20422:2;20411:9;20407:18;20399:26;;20471:9;20465:4;20461:20;20457:1;20446:9;20442:17;20435:47;20499:131;20625:4;20499:131;:::i;:::-;20491:139;;20218:419;;;:::o;20643:172::-;20783:24;20779:1;20771:6;20767:14;20760:48;20643:172;:::o;20821:366::-;20963:3;20984:67;21048:2;21043:3;20984:67;:::i;:::-;20977:74;;21060:93;21149:3;21060:93;:::i;:::-;21178:2;21173:3;21169:12;21162:19;;20821:366;;;:::o;21193:419::-;21359:4;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:131;21600:4;21474:131;:::i;:::-;21466:139;;21193:419;;;:::o;21618:297::-;21758:34;21754:1;21746:6;21742:14;21735:58;21827:34;21822:2;21814:6;21810:15;21803:59;21896:11;21891:2;21883:6;21879:15;21872:36;21618:297;:::o;21921:366::-;22063:3;22084:67;22148:2;22143:3;22084:67;:::i;:::-;22077:74;;22160:93;22249:3;22160:93;:::i;:::-;22278:2;22273:3;22269:12;22262:19;;21921:366;;;:::o;22293:419::-;22459:4;22497:2;22486:9;22482:18;22474:26;;22546:9;22540:4;22536:20;22532:1;22521:9;22517:17;22510:47;22574:131;22700:4;22574:131;:::i;:::-;22566:139;;22293:419;;;:::o;22718:240::-;22858:34;22854:1;22846:6;22842:14;22835:58;22927:23;22922:2;22914:6;22910:15;22903:48;22718:240;:::o;22964:366::-;23106:3;23127:67;23191:2;23186:3;23127:67;:::i;:::-;23120:74;;23203:93;23292:3;23203:93;:::i;:::-;23321:2;23316:3;23312:12;23305:19;;22964:366;;;:::o;23336:419::-;23502:4;23540:2;23529:9;23525:18;23517:26;;23589:9;23583:4;23579:20;23575:1;23564:9;23560:17;23553:47;23617:131;23743:4;23617:131;:::i;:::-;23609:139;;23336:419;;;:::o;23761:169::-;23901:21;23897:1;23889:6;23885:14;23878:45;23761:169;:::o;23936:366::-;24078:3;24099:67;24163:2;24158:3;24099:67;:::i;:::-;24092:74;;24175:93;24264:3;24175:93;:::i;:::-;24293:2;24288:3;24284:12;24277:19;;23936:366;;;:::o;24308:419::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24561:9;24555:4;24551:20;24547:1;24536:9;24532:17;24525:47;24589:131;24715:4;24589:131;:::i;:::-;24581:139;;24308:419;;;:::o;24733:241::-;24873:34;24869:1;24861:6;24857:14;24850:58;24942:24;24937:2;24929:6;24925:15;24918:49;24733:241;:::o;24980:366::-;25122:3;25143:67;25207:2;25202:3;25143:67;:::i;:::-;25136:74;;25219:93;25308:3;25219:93;:::i;:::-;25337:2;25332:3;25328:12;25321:19;;24980:366;;;:::o;25352:419::-;25518:4;25556:2;25545:9;25541:18;25533:26;;25605:9;25599:4;25595:20;25591:1;25580:9;25576:17;25569:47;25633:131;25759:4;25633:131;:::i;:::-;25625:139;;25352:419;;;:::o;25777:181::-;25917:33;25913:1;25905:6;25901:14;25894:57;25777:181;:::o;25964:366::-;26106:3;26127:67;26191:2;26186:3;26127:67;:::i;:::-;26120:74;;26203:93;26292:3;26203:93;:::i;:::-;26321:2;26316:3;26312:12;26305:19;;25964:366;;;:::o;26336:419::-;26502:4;26540:2;26529:9;26525:18;26517:26;;26589:9;26583:4;26579:20;26575:1;26564:9;26560:17;26553:47;26617:131;26743:4;26617:131;:::i;:::-;26609:139;;26336:419;;;:::o;26761:147::-;26862:11;26899:3;26884:18;;26761:147;;;;:::o;26914:114::-;;:::o;27034:398::-;27193:3;27214:83;27295:1;27290:3;27214:83;:::i;:::-;27207:90;;27306:93;27395:3;27306:93;:::i;:::-;27424:1;27419:3;27415:11;27408:18;;27034:398;;;:::o;27438:379::-;27622:3;27644:147;27787:3;27644:147;:::i;:::-;27637:154;;27808:3;27801:10;;27438:379;;;:::o;27823:220::-;27963:34;27959:1;27951:6;27947:14;27940:58;28032:3;28027:2;28019:6;28015:15;28008:28;27823:220;:::o;28049:366::-;28191:3;28212:67;28276:2;28271:3;28212:67;:::i;:::-;28205:74;;28288:93;28377:3;28288:93;:::i;:::-;28406:2;28401:3;28397:12;28390:19;;28049:366;;;:::o;28421:419::-;28587:4;28625:2;28614:9;28610:18;28602:26;;28674:9;28668:4;28664:20;28660:1;28649:9;28645:17;28638:47;28702:131;28828:4;28702:131;:::i;:::-;28694:139;;28421:419;;;:::o;28846:180::-;28894:77;28891:1;28884:88;28991:4;28988:1;28981:15;29015:4;29012:1;29005:15;29032:180;29080:77;29077:1;29070:88;29177:4;29174:1;29167:15;29201:4;29198:1;29191:15;29218:143;29275:5;29306:6;29300:13;29291:22;;29322:33;29349:5;29322:33;:::i;:::-;29218:143;;;;:::o;29367:351::-;29437:6;29486:2;29474:9;29465:7;29461:23;29457:32;29454:119;;;29492:79;;:::i;:::-;29454:119;29612:1;29637:64;29693:7;29684:6;29673:9;29669:22;29637:64;:::i;:::-;29627:74;;29583:128;29367:351;;;;:::o;29724:85::-;29769:7;29798:5;29787:16;;29724:85;;;:::o;29815:158::-;29873:9;29906:61;29924:42;29933:32;29959:5;29933:32;:::i;:::-;29924:42;:::i;:::-;29906:61;:::i;:::-;29893:74;;29815:158;;;:::o;29979:147::-;30074:45;30113:5;30074:45;:::i;:::-;30069:3;30062:58;29979:147;;:::o;30132:114::-;30199:6;30233:5;30227:12;30217:22;;30132:114;;;:::o;30252:184::-;30351:11;30385:6;30380:3;30373:19;30425:4;30420:3;30416:14;30401:29;;30252:184;;;;:::o;30442:132::-;30509:4;30532:3;30524:11;;30562:4;30557:3;30553:14;30545:22;;30442:132;;;:::o;30580:108::-;30657:24;30675:5;30657:24;:::i;:::-;30652:3;30645:37;30580:108;;:::o;30694:179::-;30763:10;30784:46;30826:3;30818:6;30784:46;:::i;:::-;30862:4;30857:3;30853:14;30839:28;;30694:179;;;;:::o;30879:113::-;30949:4;30981;30976:3;30972:14;30964:22;;30879:113;;;:::o;31028:732::-;31147:3;31176:54;31224:5;31176:54;:::i;:::-;31246:86;31325:6;31320:3;31246:86;:::i;:::-;31239:93;;31356:56;31406:5;31356:56;:::i;:::-;31435:7;31466:1;31451:284;31476:6;31473:1;31470:13;31451:284;;;31552:6;31546:13;31579:63;31638:3;31623:13;31579:63;:::i;:::-;31572:70;;31665:60;31718:6;31665:60;:::i;:::-;31655:70;;31511:224;31498:1;31495;31491:9;31486:14;;31451:284;;;31455:14;31751:3;31744:10;;31152:608;;;31028:732;;;;:::o;31766:831::-;32029:4;32067:3;32056:9;32052:19;32044:27;;32081:71;32149:1;32138:9;32134:17;32125:6;32081:71;:::i;:::-;32162:80;32238:2;32227:9;32223:18;32214:6;32162:80;:::i;:::-;32289:9;32283:4;32279:20;32274:2;32263:9;32259:18;32252:48;32317:108;32420:4;32411:6;32317:108;:::i;:::-;32309:116;;32435:72;32503:2;32492:9;32488:18;32479:6;32435:72;:::i;:::-;32517:73;32585:3;32574:9;32570:19;32561:6;32517:73;:::i;:::-;31766:831;;;;;;;;:::o

Swarm Source

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