ETH Price: $2,871.35 (-9.30%)
Gas: 14 Gwei

Contract

0x47F7b78436D5d93Fa36953FD6540B397D305C0df
 

Overview

ETH Balance

7 wei

Eth Value

Less Than $0.01 (@ $2,871.35/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201849182024-06-27 18:48:597 days ago1719514139IN
0x47F7b784...7D305C0df
0 ETH0.0004827110.23293964
Approve201805992024-06-27 4:20:598 days ago1719462059IN
0x47F7b784...7D305C0df
0 ETH0.000250055.29401053
Approve201168212024-06-18 6:19:4717 days ago1718691587IN
0x47F7b784...7D305C0df
0 ETH0.000200844.2805966
Approve201135782024-06-17 19:26:1117 days ago1718652371IN
0x47F7b784...7D305C0df
0 ETH0.0005531911.71197895
Approve200616582024-06-10 13:13:5924 days ago1718025239IN
0x47F7b784...7D305C0df
0 ETH0.000467949.95525458
Approve200477642024-06-08 14:39:4726 days ago1717857587IN
0x47F7b784...7D305C0df
0 ETH0.000438519.28397603
Approve200445972024-06-08 4:02:3527 days ago1717819355IN
0x47F7b784...7D305C0df
0 ETH0.0005973312.66255245
Approve200341152024-06-06 16:56:1128 days ago1717692971IN
0x47F7b784...7D305C0df
0 ETH0.0012633726.78177616
Approve200050482024-06-02 15:32:1132 days ago1717342331IN
0x47F7b784...7D305C0df
0 ETH0.0008392117.79021403
Approve200048312024-06-02 14:48:3532 days ago1717339715IN
0x47F7b784...7D305C0df
0 ETH0.0007287515.50372336
Approve200047162024-06-02 14:25:1132 days ago1717338311IN
0x47F7b784...7D305C0df
0 ETH0.0006360613.53176548
Approve199833842024-05-30 14:54:1135 days ago1717080851IN
0x47F7b784...7D305C0df
0 ETH0.0010675722.63096822
Approve199668722024-05-28 7:27:4738 days ago1716881267IN
0x47F7b784...7D305C0df
0 ETH0.0007635216.16516335
Transfer199648262024-05-28 0:36:4738 days ago1716856607IN
0x47F7b784...7D305C0df
0 ETH0.0011266312.69917515
Approve199583052024-05-27 2:44:5939 days ago1716777899IN
0x47F7b784...7D305C0df
0 ETH0.000348057.37833968
Approve199556852024-05-26 17:56:4739 days ago1716746207IN
0x47F7b784...7D305C0df
0 ETH0.000394038.35301805
Approve199467812024-05-25 12:06:1140 days ago1716638771IN
0x47F7b784...7D305C0df
0 ETH0.000291726.2077922
Approve199341912024-05-23 17:52:2342 days ago1716486743IN
0x47F7b784...7D305C0df
0 ETH0.0005509911.68036416
Approve198960052024-05-18 9:41:5947 days ago1716025319IN
0x47F7b784...7D305C0df
0 ETH0.000260065.51290381
Approve198888462024-05-17 9:37:5948 days ago1715938679IN
0x47F7b784...7D305C0df
0 ETH0.000244385.20718092
Approve198868082024-05-17 2:46:5949 days ago1715914019IN
0x47F7b784...7D305C0df
0 ETH0.000310816.5888607
Transfer198415932024-05-10 19:01:4755 days ago1715367707IN
0x47F7b784...7D305C0df
0 ETH0.0010187511.48324658
Approve198380242024-05-10 7:04:2356 days ago1715324663IN
0x47F7b784...7D305C0df
0 ETH0.000241455.11849791
Approve198362142024-05-10 0:58:3556 days ago1715302715IN
0x47F7b784...7D305C0df
0 ETH0.000244745.18154892
Approve198012752024-05-05 3:41:1161 days ago1714880471IN
0x47F7b784...7D305C0df
0 ETH0.000252075.34371316
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
189350682024-01-04 16:11:35182 days ago1704384695
0x47F7b784...7D305C0df
0.17449569 ETH
189350682024-01-04 16:11:35182 days ago1704384695
0x47F7b784...7D305C0df
0.17449569 ETH
188142482023-12-18 17:06:23199 days ago1702919183
0x47F7b784...7D305C0df
0.1943812 ETH
188142482023-12-18 17:06:23199 days ago1702919183
0x47F7b784...7D305C0df
0.1943812 ETH
187771892023-12-13 12:15:47204 days ago1702469747
0x47F7b784...7D305C0df
0.23278054 ETH
187771892023-12-13 12:15:47204 days ago1702469747
0x47F7b784...7D305C0df
0.23278054 ETH
187714482023-12-12 16:59:11205 days ago1702400351
0x47F7b784...7D305C0df
0.31687029 ETH
187714482023-12-12 16:59:11205 days ago1702400351
0x47F7b784...7D305C0df
0.31687029 ETH
187654292023-12-11 20:45:47206 days ago1702327547
0x47F7b784...7D305C0df
0.39987903 ETH
187654292023-12-11 20:45:47206 days ago1702327547
0x47F7b784...7D305C0df
0.39987903 ETH
187601662023-12-11 3:04:59207 days ago1702263899
0x47F7b784...7D305C0df
0.45506869 ETH
187601662023-12-11 3:04:59207 days ago1702263899
0x47F7b784...7D305C0df
0.45506869 ETH
187511002023-12-09 20:39:23208 days ago1702154363
0x47F7b784...7D305C0df
0.56535392 ETH
187511002023-12-09 20:39:23208 days ago1702154363
0x47F7b784...7D305C0df
0.56535392 ETH
187479102023-12-09 9:54:59208 days ago1702115699
0x47F7b784...7D305C0df
0.45369871 ETH
187479102023-12-09 9:54:59208 days ago1702115699
0x47F7b784...7D305C0df
0.45369871 ETH
187453902023-12-09 1:26:47209 days ago1702085207
0x47F7b784...7D305C0df
0.59878155 ETH
187453902023-12-09 1:26:47209 days ago1702085207
0x47F7b784...7D305C0df
0.59878155 ETH
187445532023-12-08 22:36:59209 days ago1702075019
0x47F7b784...7D305C0df
0.80932743 ETH
187445532023-12-08 22:36:59209 days ago1702075019
0x47F7b784...7D305C0df
0.80932743 ETH
187440152023-12-08 20:47:47209 days ago1702068467
0x47F7b784...7D305C0df
0.53324377 ETH
187440152023-12-08 20:47:47209 days ago1702068467
0x47F7b784...7D305C0df
0.53324377 ETH
187439782023-12-08 20:40:23209 days ago1702068023
0x47F7b784...7D305C0df
0.51646538 ETH
187439782023-12-08 20:40:23209 days ago1702068023
0x47F7b784...7D305C0df
0.51646538 ETH
187439772023-12-08 20:40:11209 days ago1702068011
0x47F7b784...7D305C0df
0.52166893 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Mongoose

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-01
*/

/*
    OG Mong. The relaunch of the year.

    Telegram: https://t.me/mongoose_portal
    
    Website: https://officialmongoose.com/

    X: https://twitter.com/Mongoose_Coin

    Youtube: https://youtu.be/X3Lj5M26vEY?si=VklT7V7CugMQpAg5

    Docs: https://mongoosetoken.gitbook.io/main/

*/
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;


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

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

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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

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) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut 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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - 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)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - 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);

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

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: generation to the zero address");

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

        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, 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
     * generation 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 generated 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 {}
}

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

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

contract Mongoose is ERC20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _liquidityMutex = false;
    bool private  providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 private tokenLiquidityThreshold = 4206900000000 * 10**18;
    uint256 public maxWalletLimit = 8506900000000 * 10**18;

    uint256 private  genesis_block;
    uint256 private deadline = 0;
    uint256 private launchtax = 0;

    address private  marketingWallet = 0xD9d815Ea0B226fA552fe3855F7D4BeEd0B835949;
    address private devWallet = 0x01d6A69931B5150BCC3E9153A25835B6eb80907E;
    address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 dev;   
    }

    Taxes public taxes = Taxes(0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;
    mapping(address => bool) private isearlybuyer;


    modifier mutexLock() {
        if (!_liquidityMutex) {
            _liquidityMutex = true;
            _;
            _liquidityMutex = false;
        }
    }

    constructor() ERC20("Mongoose", "MONGOOSE") {
        _tokengeneration(msg.sender, 420690000000000 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a pair for this new token
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[devWallet] = true;
        exemptFee[deadWallet] = true;
        exemptFee[0xD152f549545093347A162Dce210e7293f1452150] = true;

    }

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

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

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

        return true;
    }

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

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

        return true;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isearlybuyer[sender] && !isearlybuyer[recipient],
            "You can't transfer tokens"
        );

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_liquidityMutex) {
            require(balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_liquidityMutex) {
           
            if (recipient != pair) {
                require(balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (_liquidityMutex || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing +           
                sellTaxes.dev ;
            feesum = feeswap;
            currentTaxes = sellTaxes;
        } else if (!useLaunchFee) {
            feeswap =
                taxes.liquidity +
                taxes.marketing +
                taxes.dev ;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) handle_fees(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function handle_fees(uint256 feeswap, Taxes memory swapTaxes) private mutexLock {

    if(feeswap == 0){
            return;
        }   

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

            uint256 devAmt = unitBalance * 2 * swapTaxes.dev;
            if (devAmt > 0) {
                payable(devWallet).sendValue(devAmt);
            }

        }
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function UpdateBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        taxes = Taxes(_marketing, _liquidity, _dev);
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        sellTaxes = Taxes(_marketing, _liquidity, _dev);
    }

    function updateLaunchSettings(
        uint256 _launchtax, 
        uint256 _deadline
    ) external onlyOwner {
        require(_deadline < 3, "Block should be less than 3");
        launchtax = _launchtax;
        deadline = _deadline;
    }

   function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        require(_deadline < 3, "Block should be less than 3");
        deadline = _deadline;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

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

    function updateIsEarlyBuyer(address account, bool state) external onlyOwner {
        isearlybuyer[account] = state;
    }

    function bulkIsEarlyBuyer(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            isearlybuyer[accounts[i]] = state;
        }
    }

    function updateExemptFee(address _address, bool state) external onlyOwner {
        exemptFee[_address] = state;
    }

    function bulkExemptFee(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = state;
        }
    }

    function updateMaxWalletLimit(uint256 maxWallet) external onlyOwner {
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function rescueETH(uint256 weiAmount) external {
        payable(devWallet).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external {
        IERC20(tokenAdd).transfer(devWallet, amount);
    }

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"SetSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"UpdateBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsEarlyBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsEarlyBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_launchtax","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updateLaunchSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff0219169083151502179055506000600760166101000a81548160ff0219169083151502179055506c35193a1e7376a35c15b40000006008556c6b5f46c0bfd8cd5b1e940000006009556000600b556000600c5573d9d815ea0b226fa552fe3855f7d4beed0b835949600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507301d6a69931b5150bcc3e9153a25835b6eb80907e600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060008152602001600081526020016000815250600f600082015181600001556020820151816001015560408201518160020155505060405180606001604052806000815260200160008152602001600081525060126000820151816000015560208201518160010155604082015181600201555050348015620001b857600080fd5b506040518060400160405280600881526020017f4d6f6e676f6f73650000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4d4f4e474f4f5345000000000000000000000000000000000000000000000000815250816003908162000236919062000bb6565b50806004908162000248919062000bb6565b5050506200026b6200025f6200072460201b60201c565b6200072c60201b60201c565b620002ae3362000280620007f260201b60201c565b600a6200028e919062000e2d565b66017e9d8602b400620002a2919062000e7e565b620007fb60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c9919062000f33565b6040518363ffffffff1660e01b8152600401620003e892919062000f76565b6020604051808303816000875af115801562000408573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042e919062000f33565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600073d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200107a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000864906200102a565b60405180910390fd5b62000881600083836200093760201b60201c565b80600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200092b91906200105d565b60405180910390a35050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009be57607f821691505b602082108103620009d457620009d362000976565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a3e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009ff565b62000a4a8683620009ff565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a9762000a9162000a8b8462000a62565b62000a6c565b62000a62565b9050919050565b6000819050919050565b62000ab38362000a76565b62000acb62000ac28262000a9e565b84845462000a0c565b825550505050565b600090565b62000ae262000ad3565b62000aef81848462000aa8565b505050565b5b8181101562000b175762000b0b60008262000ad8565b60018101905062000af5565b5050565b601f82111562000b665762000b3081620009da565b62000b3b84620009ef565b8101602085101562000b4b578190505b62000b6362000b5a85620009ef565b83018262000af4565b50505b505050565b600082821c905092915050565b600062000b8b6000198460080262000b6b565b1980831691505092915050565b600062000ba6838362000b78565b9150826002028217905092915050565b62000bc1826200093c565b67ffffffffffffffff81111562000bdd5762000bdc62000947565b5b62000be98254620009a5565b62000bf682828562000b1b565b600060209050601f83116001811462000c2e576000841562000c19578287015190505b62000c25858262000b98565b86555062000c95565b601f19841662000c3e86620009da565b60005b8281101562000c685784890151825560018201915060208501945060208101905062000c41565b8683101562000c88578489015162000c84601f89168262000b78565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d2b5780860481111562000d035762000d0262000c9d565b5b600185161562000d135780820291505b808102905062000d238562000ccc565b945062000ce3565b94509492505050565b60008262000d46576001905062000e19565b8162000d56576000905062000e19565b816001811462000d6f576002811462000d7a5762000db0565b600191505062000e19565b60ff84111562000d8f5762000d8e62000c9d565b5b8360020a91508482111562000da95762000da862000c9d565b5b5062000e19565b5060208310610133831016604e8410600b841016171562000dea5782820a90508381111562000de45762000de362000c9d565b5b62000e19565b62000df9848484600162000cd9565b9250905081840481111562000e135762000e1262000c9d565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e3a8262000a62565b915062000e478362000e20565b925062000e767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d34565b905092915050565b600062000e8b8262000a62565b915062000e988362000a62565b925082820262000ea88162000a62565b9150828204841483151762000ec25762000ec162000c9d565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efb8262000ece565b9050919050565b62000f0d8162000eee565b811462000f1957600080fd5b50565b60008151905062000f2d8162000f02565b92915050565b60006020828403121562000f4c5762000f4b62000ec9565b5b600062000f5c8482850162000f1c565b91505092915050565b62000f708162000eee565b82525050565b600060408201905062000f8d600083018562000f65565b62000f9c602083018462000f65565b9392505050565b600082825260208201905092915050565b7f45524332303a2067656e65726174696f6e20746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006200101260258362000fa3565b91506200101f8262000fb4565b604082019050919050565b60006020820190508181036000830152620010458162001003565b9050919050565b620010578162000a62565b82525050565b60006020820190506200107460008301846200104c565b92915050565b6147f9806200108a6000396000f3fe6080604052600436106102295760003560e01c80638514022d11610123578063a8aa1b31116100ab578063e5da4ce91161006f578063e5da4ce914610810578063edaa116814610839578063f2fde38b14610862578063f66895a31461088b578063f887ea40146108b857610230565b8063a8aa1b3114610705578063a9059cbb14610730578063aacebbe31461076d578063c5d32bb214610796578063dd62ed3e146107d357610230565b80638da5cb5b116100f25780638da5cb5b1461062057806395d89b411461064b5780639d282cd6146106765780639e252f001461069f578063a457c2d7146106c857610230565b80638514022d1461058c57806385141a77146105b55780638a8c523c146105e05780638cd4426d146105f757610230565b8063355496ca116101b15780634e736f22116101755780634e736f22146104b757806366a88d96146104e057806370a082311461050b578063715018a614610548578063728f8eea1461055f57610230565b8063355496ca146103d457806339509351146103fd57806342b6fa111461043a5780634324deae146104635780634ada218b1461048c57610230565b806318160ddd116101f857806318160ddd146102ef5780631816467f1461031a578063215d92a61461034357806323b872dd1461036c578063313ce567146103a957610230565b806306fdde0314610235578063095ea7b3146102605780630e375a5c1461029d5780631340538f146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108e3565b60405161025791906131b3565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061327d565b610975565b60405161029491906132d8565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613467565b610993565b005b3480156102d257600080fd5b506102ed60048036038101906102e891906134c3565b610aa4565b005b3480156102fb57600080fd5b50610304610b3d565b60405161031191906134ff565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c919061351a565b610b47565b005b34801561034f57600080fd5b5061036a60048036038101906103659190613467565b610c07565b005b34801561037857600080fd5b50610393600480360381019061038e9190613547565b610d18565b6040516103a091906132d8565b60405180910390f35b3480156103b557600080fd5b506103be610e19565b6040516103cb91906135b6565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f691906135d1565b610e22565b005b34801561040957600080fd5b50610424600480360381019061041f919061327d565b610ef9565b60405161043191906132d8565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613611565b610fa5565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613611565b611049565b005b34801561049857600080fd5b506104a16110ed565b6040516104ae91906132d8565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d9919061363e565b611100565b005b3480156104ec57600080fd5b506104f56111bf565b60405161050291906134ff565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d919061351a565b6111c5565b60405161053f91906134ff565b60405180910390f35b34801561055457600080fd5b5061055d61120d565b005b34801561056b57600080fd5b50610574611295565b60405161058393929190613691565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae91906135d1565b6112ad565b005b3480156105c157600080fd5b506105ca611384565b6040516105d791906136d7565b60405180910390f35b3480156105ec57600080fd5b506105f561138a565b005b34801561060357600080fd5b5061061e6004803603810190610619919061327d565b611495565b005b34801561062c57600080fd5b5061063561153a565b60405161064291906136d7565b60405180910390f35b34801561065757600080fd5b50610660611564565b60405161066d91906131b3565b60405180910390f35b34801561068257600080fd5b5061069d6004803603810190610698919061363e565b6115f6565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613611565b6116b5565b005b3480156106d457600080fd5b506106ef60048036038101906106ea919061327d565b611721565b6040516106fc91906132d8565b60405180910390f35b34801561071157600080fd5b5061071a611815565b60405161072791906136d7565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061327d565b61183b565b60405161076491906132d8565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f919061351a565b611852565b005b3480156107a257600080fd5b506107bd60048036038101906107b8919061351a565b611912565b6040516107ca91906132d8565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906136f2565b611932565b60405161080791906134ff565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190613732565b6119b9565b005b34801561084557600080fd5b50610860600480360381019061085b9190613611565b611a8a565b005b34801561086e57600080fd5b506108896004803603810190610884919061351a565b611ba3565b005b34801561089757600080fd5b506108a0611c9a565b6040516108af93929190613691565b60405180910390f35b3480156108c457600080fd5b506108cd611cb2565b6040516108da91906137d1565b60405180910390f35b6060600380546108f29061381b565b80601f016020809104026020016040519081016040528092919081815260200182805461091e9061381b565b801561096b5780601f106109405761010080835404028352916020019161096b565b820191906000526020600020905b81548152906001019060200180831161094e57829003601f168201915b5050505050905090565b6000610989610982611cd8565b8484611ce0565b6001905092915050565b61099b611cd8565b73ffffffffffffffffffffffffffffffffffffffff166109b961153a565b73ffffffffffffffffffffffffffffffffffffffff1614610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690613898565b60405180910390fd5b60005b8251811015610a9f578160156000858481518110610a3357610a326138b8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a9790613916565b915050610a12565b505050565b610aac611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610aca61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790613898565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b6000600254905090565b610b4f611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610b6d61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613898565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c0f611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610c2d61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613898565b60405180910390fd5b60005b8251811015610d13578160166000858481518110610ca757610ca66138b8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d0b90613916565b915050610c86565b505050565b6000610d25848484611ea9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d70611cd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906139d0565b60405180910390fd5b610e0d85610dfc611cd8565b8584610e0891906139f0565b611ce0565b60019150509392505050565b60006012905090565b610e2a611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610e4861153a565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613898565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610f9b610f06611cd8565b848460016000610f14611cd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f969190613a24565b611ce0565b6001905092915050565b610fad611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610fcb61153a565b73ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890613898565b60405180910390fd5b611029610e19565b600a6110359190613b8b565b816110409190613bd6565b60088190555050565b611051611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661106f61153a565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613898565b60405180910390fd5b6110cd610e19565b600a6110d99190613b8b565b816110e49190613bd6565b60098190555050565b600760169054906101000a900460ff1681565b611108611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661112661153a565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390613898565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050505050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611215611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661123361153a565b73ffffffffffffffffffffffffffffffffffffffff1614611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613898565b60405180910390fd5b6112936000612769565b565b600f8060000154908060010154908060020154905083565b6112b5611cd8565b73ffffffffffffffffffffffffffffffffffffffff166112d361153a565b73ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090613898565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61dead81565b611392611cd8565b73ffffffffffffffffffffffffffffffffffffffff166113b061153a565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613898565b60405180910390fd5b600760169054906101000a900460ff1615611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90613c64565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600a81905550565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016114f2929190613c84565b6020604051808303816000875af1158015611511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115359190613cc2565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115739061381b565b80601f016020809104026020016040519081016040528092919081815260200182805461159f9061381b565b80156115ec5780601f106115c1576101008083540402835291602001916115ec565b820191906000526020600020905b8154815290600101906020018083116115cf57829003601f168201915b5050505050905090565b6115fe611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661161c61153a565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613898565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f600082015181600001556020820151816001015560408201518160020155905050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561171d573d6000803e3d6000fd5b5050565b60008060016000611730611cd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613d61565b60405180910390fd5b61180a6117f8611cd8565b85858461180591906139f0565b611ce0565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611848338484611ea9565b6001905092915050565b61185a611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661187861153a565b73ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613898565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c1611cd8565b73ffffffffffffffffffffffffffffffffffffffff166119df61153a565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613898565b60405180910390fd5b60038110611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90613dcd565b60405180910390fd5b81600c8190555080600b819055505050565b611a92611cd8565b73ffffffffffffffffffffffffffffffffffffffff16611ab061153a565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90613898565b60405180910390fd5b600760169054906101000a900460ff1615611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90613e5f565b60405180910390fd5b60038110611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613dcd565b60405180910390fd5b80600b8190555050565b611bab611cd8565b73ffffffffffffffffffffffffffffffffffffffff16611bc961153a565b73ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690613898565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613ef1565b60405180910390fd5b611c9781612769565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613f83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614015565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e9c91906134ff565b60405180910390a3505050565b60008111611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906140a7565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f905750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690614113565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120735750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120c857600760169054906101000a900460ff166120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be9061417f565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561216f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121885750600760149054906101000a900460ff16155b156121e6576009548161219a846111c5565b6121a49190613a24565b11156121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906141eb565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561228e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122e45750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122fd5750600760149054906101000a900460ff16155b156123b157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123b05760095481612364846111c5565b61236e9190613a24565b11156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a6906141eb565b60405180910390fd5b5b5b60008060006123be613102565b6000601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124645750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561247e5750600b54600a5461247b9190613a24565b43105b9050600760149054906101000a900460ff16806124e45750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125385750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125465760009250612679565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156125a1575080155b15612603576012600201546012600001546012600101546125c29190613a24565b6125cc9190613a24565b9450849350601260405180606001604052908160008201548152602001600182015481526020016002820154815250509150612678565b8061266557600f60020154600f60000154600f600101546126249190613a24565b61262e9190613a24565b9450849350600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509150612677565b801561267657600c549450600c5493505b5b5b5b606484876126879190613bd6565b612691919061423a565b9250600760159054906101000a900460ff1680156126fd5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561270d5761270c858361282f565b5b6127238888858961271e91906139f0565b612a49565b600083111561275f57600085111561275e576000606486886127459190613bd6565b61274f919061423a565b905061275c893083612a49565b505b5b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff16612a45576001600760146101000a81548160ff0219169083151502179055506000820315612a29576000612872306111c5565b90506008548110612a27576001600854111561288e5760085490505b600060028461289d9190613bd6565b90506000818460200151846128b29190613bd6565b6128bc919061423a565b9050600081846128cc91906139f0565b905060004790506128dc82612cc6565b600081476128ea91906139f0565b905060008760200151866128fe91906139f0565b82612909919061423a565b9050600088602001518261291d9190613bd6565b90506000811115612933576129328682612f09565b5b600089600001516002846129479190613bd6565b6129519190613bd6565b905060008111156129a8576129a781600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661300990919063ffffffff16565b5b60008a604001516002856129bc9190613bd6565b6129c69190613bd6565b90506000811115612a1d57612a1c81600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661300990919063ffffffff16565b5b5050505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaf906142dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e9061436f565b60405180910390fd5b612b328383836130fd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf90614401565b60405180910390fd5b8181612bc491906139f0565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c549190613a24565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb891906134ff565b60405180910390a350505050565b6000600267ffffffffffffffff811115612ce357612ce26132f8565b5b604051908082528060200260200182016040528015612d115781602001602082028036833780820191505090505b5090503081600081518110612d2957612d286138b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df49190614436565b81600181518110612e0857612e076138b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e6f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ce0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ed395949392919061455c565b600060405180830381600087803b158015612eed57600080fd5b505af1158015612f01573d6000803e3d6000fd5b505050505050565b612f3630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ce0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612fbf969594939291906145b6565b60606040518083038185885af1158015612fdd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613002919061462c565b5050505050565b8047101561304c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613043906146cb565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516130729061471c565b60006040518083038185875af1925050503d80600081146130af576040519150601f19603f3d011682016040523d82523d6000602084013e6130b4565b606091505b50509050806130f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ef906147a3565b60405180910390fd5b505050565b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561315d578082015181840152602081019050613142565b60008484015250505050565b6000601f19601f8301169050919050565b600061318582613123565b61318f818561312e565b935061319f81856020860161313f565b6131a881613169565b840191505092915050565b600060208201905081810360008301526131cd818461317a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613214826131e9565b9050919050565b61322481613209565b811461322f57600080fd5b50565b6000813590506132418161321b565b92915050565b6000819050919050565b61325a81613247565b811461326557600080fd5b50565b60008135905061327781613251565b92915050565b60008060408385031215613294576132936131df565b5b60006132a285828601613232565b92505060206132b385828601613268565b9150509250929050565b60008115159050919050565b6132d2816132bd565b82525050565b60006020820190506132ed60008301846132c9565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61333082613169565b810181811067ffffffffffffffff8211171561334f5761334e6132f8565b5b80604052505050565b60006133626131d5565b905061336e8282613327565b919050565b600067ffffffffffffffff82111561338e5761338d6132f8565b5b602082029050602081019050919050565b600080fd5b60006133b76133b284613373565b613358565b905080838252602082019050602084028301858111156133da576133d961339f565b5b835b8181101561340357806133ef8882613232565b8452602084019350506020810190506133dc565b5050509392505050565b600082601f830112613422576134216132f3565b5b81356134328482602086016133a4565b91505092915050565b613444816132bd565b811461344f57600080fd5b50565b6000813590506134618161343b565b92915050565b6000806040838503121561347e5761347d6131df565b5b600083013567ffffffffffffffff81111561349c5761349b6131e4565b5b6134a88582860161340d565b92505060206134b985828601613452565b9150509250929050565b6000602082840312156134d9576134d86131df565b5b60006134e784828501613452565b91505092915050565b6134f981613247565b82525050565b600060208201905061351460008301846134f0565b92915050565b6000602082840312156135305761352f6131df565b5b600061353e84828501613232565b91505092915050565b6000806000606084860312156135605761355f6131df565b5b600061356e86828701613232565b935050602061357f86828701613232565b925050604061359086828701613268565b9150509250925092565b600060ff82169050919050565b6135b08161359a565b82525050565b60006020820190506135cb60008301846135a7565b92915050565b600080604083850312156135e8576135e76131df565b5b60006135f685828601613232565b925050602061360785828601613452565b9150509250929050565b600060208284031215613627576136266131df565b5b600061363584828501613268565b91505092915050565b600080600060608486031215613657576136566131df565b5b600061366586828701613268565b935050602061367686828701613268565b925050604061368786828701613268565b9150509250925092565b60006060820190506136a660008301866134f0565b6136b360208301856134f0565b6136c060408301846134f0565b949350505050565b6136d181613209565b82525050565b60006020820190506136ec60008301846136c8565b92915050565b60008060408385031215613709576137086131df565b5b600061371785828601613232565b925050602061372885828601613232565b9150509250929050565b60008060408385031215613749576137486131df565b5b600061375785828601613268565b925050602061376885828601613268565b9150509250929050565b6000819050919050565b600061379761379261378d846131e9565b613772565b6131e9565b9050919050565b60006137a98261377c565b9050919050565b60006137bb8261379e565b9050919050565b6137cb816137b0565b82525050565b60006020820190506137e660008301846137c2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061383357607f821691505b602082108103613846576138456137ec565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061388260208361312e565b915061388d8261384c565b602082019050919050565b600060208201905081810360008301526138b181613875565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392182613247565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613953576139526138e7565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006139ba60288361312e565b91506139c58261395e565b604082019050919050565b600060208201905081810360008301526139e9816139ad565b9050919050565b60006139fb82613247565b9150613a0683613247565b9250828203905081811115613a1e57613a1d6138e7565b5b92915050565b6000613a2f82613247565b9150613a3a83613247565b9250828201905080821115613a5257613a516138e7565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115613aaf57808604811115613a8b57613a8a6138e7565b5b6001851615613a9a5780820291505b8081029050613aa885613a58565b9450613a6f565b94509492505050565b600082613ac85760019050613b84565b81613ad65760009050613b84565b8160018114613aec5760028114613af657613b25565b6001915050613b84565b60ff841115613b0857613b076138e7565b5b8360020a915084821115613b1f57613b1e6138e7565b5b50613b84565b5060208310610133831016604e8410600b8410161715613b5a5782820a905083811115613b5557613b546138e7565b5b613b84565b613b678484846001613a65565b92509050818404811115613b7e57613b7d6138e7565b5b81810290505b9392505050565b6000613b9682613247565b9150613ba18361359a565b9250613bce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613ab8565b905092915050565b6000613be182613247565b9150613bec83613247565b9250828202613bfa81613247565b91508282048414831517613c1157613c106138e7565b5b5092915050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613c4e601a8361312e565b9150613c5982613c18565b602082019050919050565b60006020820190508181036000830152613c7d81613c41565b9050919050565b6000604082019050613c9960008301856136c8565b613ca660208301846134f0565b9392505050565b600081519050613cbc8161343b565b92915050565b600060208284031215613cd857613cd76131df565b5b6000613ce684828501613cad565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d4b60258361312e565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b7f426c6f636b2073686f756c64206265206c657373207468616e20330000000000600082015250565b6000613db7601b8361312e565b9150613dc282613d81565b602082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e672068617320737460008201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b6000613e4960258361312e565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613edb60268361312e565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f6d60248361312e565b9150613f7882613f11565b604082019050919050565b60006020820190508181036000830152613f9c81613f60565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fff60228361312e565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061409160298361312e565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e7300000000000000600082015250565b60006140fd60198361312e565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b600061416960138361312e565b915061417482614133565b602082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b60006141d560208361312e565b91506141e08261419f565b602082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061424582613247565b915061425083613247565b9250826142605761425f61420b565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142c760258361312e565b91506142d28261426b565b604082019050919050565b600060208201905081810360008301526142f6816142ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061435960238361312e565b9150614364826142fd565b604082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143eb60268361312e565b91506143f68261438f565b604082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b6000815190506144308161321b565b92915050565b60006020828403121561444c5761444b6131df565b5b600061445a84828501614421565b91505092915050565b6000819050919050565b600061448861448361447e84614463565b613772565b613247565b9050919050565b6144988161446d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d381613209565b82525050565b60006144e583836144ca565b60208301905092915050565b6000602082019050919050565b60006145098261449e565b61451381856144a9565b935061451e836144ba565b8060005b8381101561454f57815161453688826144d9565b9750614541836144f1565b925050600181019050614522565b5085935050505092915050565b600060a08201905061457160008301886134f0565b61457e602083018761448f565b818103604083015261459081866144fe565b905061459f60608301856136c8565b6145ac60808301846134f0565b9695505050505050565b600060c0820190506145cb60008301896136c8565b6145d860208301886134f0565b6145e5604083018761448f565b6145f2606083018661448f565b6145ff60808301856136c8565b61460c60a08301846134f0565b979650505050505050565b60008151905061462681613251565b92915050565b600080600060608486031215614645576146446131df565b5b600061465386828701614617565b935050602061466486828701614617565b925050604061467586828701614617565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006146b5601d8361312e565b91506146c08261467f565b602082019050919050565b600060208201905081810360008301526146e4816146a8565b9050919050565b600081905092915050565b50565b60006147066000836146eb565b9150614711826146f6565b600082019050919050565b6000614727826146f9565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b600061478d603a8361312e565b915061479882614731565b604082019050919050565b600060208201905081810360008301526147bc81614780565b905091905056fea26469706673582212207daf7b012b08b5ce2cd72f9d5c1da782a8f3b4aef182412a0609468c6441763264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638514022d11610123578063a8aa1b31116100ab578063e5da4ce91161006f578063e5da4ce914610810578063edaa116814610839578063f2fde38b14610862578063f66895a31461088b578063f887ea40146108b857610230565b8063a8aa1b3114610705578063a9059cbb14610730578063aacebbe31461076d578063c5d32bb214610796578063dd62ed3e146107d357610230565b80638da5cb5b116100f25780638da5cb5b1461062057806395d89b411461064b5780639d282cd6146106765780639e252f001461069f578063a457c2d7146106c857610230565b80638514022d1461058c57806385141a77146105b55780638a8c523c146105e05780638cd4426d146105f757610230565b8063355496ca116101b15780634e736f22116101755780634e736f22146104b757806366a88d96146104e057806370a082311461050b578063715018a614610548578063728f8eea1461055f57610230565b8063355496ca146103d457806339509351146103fd57806342b6fa111461043a5780634324deae146104635780634ada218b1461048c57610230565b806318160ddd116101f857806318160ddd146102ef5780631816467f1461031a578063215d92a61461034357806323b872dd1461036c578063313ce567146103a957610230565b806306fdde0314610235578063095ea7b3146102605780630e375a5c1461029d5780631340538f146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108e3565b60405161025791906131b3565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061327d565b610975565b60405161029491906132d8565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613467565b610993565b005b3480156102d257600080fd5b506102ed60048036038101906102e891906134c3565b610aa4565b005b3480156102fb57600080fd5b50610304610b3d565b60405161031191906134ff565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c919061351a565b610b47565b005b34801561034f57600080fd5b5061036a60048036038101906103659190613467565b610c07565b005b34801561037857600080fd5b50610393600480360381019061038e9190613547565b610d18565b6040516103a091906132d8565b60405180910390f35b3480156103b557600080fd5b506103be610e19565b6040516103cb91906135b6565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f691906135d1565b610e22565b005b34801561040957600080fd5b50610424600480360381019061041f919061327d565b610ef9565b60405161043191906132d8565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613611565b610fa5565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613611565b611049565b005b34801561049857600080fd5b506104a16110ed565b6040516104ae91906132d8565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d9919061363e565b611100565b005b3480156104ec57600080fd5b506104f56111bf565b60405161050291906134ff565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d919061351a565b6111c5565b60405161053f91906134ff565b60405180910390f35b34801561055457600080fd5b5061055d61120d565b005b34801561056b57600080fd5b50610574611295565b60405161058393929190613691565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae91906135d1565b6112ad565b005b3480156105c157600080fd5b506105ca611384565b6040516105d791906136d7565b60405180910390f35b3480156105ec57600080fd5b506105f561138a565b005b34801561060357600080fd5b5061061e6004803603810190610619919061327d565b611495565b005b34801561062c57600080fd5b5061063561153a565b60405161064291906136d7565b60405180910390f35b34801561065757600080fd5b50610660611564565b60405161066d91906131b3565b60405180910390f35b34801561068257600080fd5b5061069d6004803603810190610698919061363e565b6115f6565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613611565b6116b5565b005b3480156106d457600080fd5b506106ef60048036038101906106ea919061327d565b611721565b6040516106fc91906132d8565b60405180910390f35b34801561071157600080fd5b5061071a611815565b60405161072791906136d7565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061327d565b61183b565b60405161076491906132d8565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f919061351a565b611852565b005b3480156107a257600080fd5b506107bd60048036038101906107b8919061351a565b611912565b6040516107ca91906132d8565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906136f2565b611932565b60405161080791906134ff565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190613732565b6119b9565b005b34801561084557600080fd5b50610860600480360381019061085b9190613611565b611a8a565b005b34801561086e57600080fd5b506108896004803603810190610884919061351a565b611ba3565b005b34801561089757600080fd5b506108a0611c9a565b6040516108af93929190613691565b60405180910390f35b3480156108c457600080fd5b506108cd611cb2565b6040516108da91906137d1565b60405180910390f35b6060600380546108f29061381b565b80601f016020809104026020016040519081016040528092919081815260200182805461091e9061381b565b801561096b5780601f106109405761010080835404028352916020019161096b565b820191906000526020600020905b81548152906001019060200180831161094e57829003601f168201915b5050505050905090565b6000610989610982611cd8565b8484611ce0565b6001905092915050565b61099b611cd8565b73ffffffffffffffffffffffffffffffffffffffff166109b961153a565b73ffffffffffffffffffffffffffffffffffffffff1614610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0690613898565b60405180910390fd5b60005b8251811015610a9f578160156000858481518110610a3357610a326138b8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a9790613916565b915050610a12565b505050565b610aac611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610aca61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790613898565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b6000600254905090565b610b4f611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610b6d61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613898565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c0f611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610c2d61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613898565b60405180910390fd5b60005b8251811015610d13578160166000858481518110610ca757610ca66138b8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d0b90613916565b915050610c86565b505050565b6000610d25848484611ea9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d70611cd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906139d0565b60405180910390fd5b610e0d85610dfc611cd8565b8584610e0891906139f0565b611ce0565b60019150509392505050565b60006012905090565b610e2a611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610e4861153a565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613898565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610f9b610f06611cd8565b848460016000610f14611cd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f969190613a24565b611ce0565b6001905092915050565b610fad611cd8565b73ffffffffffffffffffffffffffffffffffffffff16610fcb61153a565b73ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890613898565b60405180910390fd5b611029610e19565b600a6110359190613b8b565b816110409190613bd6565b60088190555050565b611051611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661106f61153a565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613898565b60405180910390fd5b6110cd610e19565b600a6110d99190613b8b565b816110e49190613bd6565b60098190555050565b600760169054906101000a900460ff1681565b611108611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661112661153a565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390613898565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050505050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611215611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661123361153a565b73ffffffffffffffffffffffffffffffffffffffff1614611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613898565b60405180910390fd5b6112936000612769565b565b600f8060000154908060010154908060020154905083565b6112b5611cd8565b73ffffffffffffffffffffffffffffffffffffffff166112d361153a565b73ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090613898565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61dead81565b611392611cd8565b73ffffffffffffffffffffffffffffffffffffffff166113b061153a565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613898565b60405180910390fd5b600760169054906101000a900460ff1615611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90613c64565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600a81905550565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016114f2929190613c84565b6020604051808303816000875af1158015611511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115359190613cc2565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115739061381b565b80601f016020809104026020016040519081016040528092919081815260200182805461159f9061381b565b80156115ec5780601f106115c1576101008083540402835291602001916115ec565b820191906000526020600020905b8154815290600101906020018083116115cf57829003601f168201915b5050505050905090565b6115fe611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661161c61153a565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613898565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f600082015181600001556020820151816001015560408201518160020155905050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561171d573d6000803e3d6000fd5b5050565b60008060016000611730611cd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613d61565b60405180910390fd5b61180a6117f8611cd8565b85858461180591906139f0565b611ce0565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611848338484611ea9565b6001905092915050565b61185a611cd8565b73ffffffffffffffffffffffffffffffffffffffff1661187861153a565b73ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613898565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c1611cd8565b73ffffffffffffffffffffffffffffffffffffffff166119df61153a565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613898565b60405180910390fd5b60038110611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90613dcd565b60405180910390fd5b81600c8190555080600b819055505050565b611a92611cd8565b73ffffffffffffffffffffffffffffffffffffffff16611ab061153a565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90613898565b60405180910390fd5b600760169054906101000a900460ff1615611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90613e5f565b60405180910390fd5b60038110611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613dcd565b60405180910390fd5b80600b8190555050565b611bab611cd8565b73ffffffffffffffffffffffffffffffffffffffff16611bc961153a565b73ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690613898565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613ef1565b60405180910390fd5b611c9781612769565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613f83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614015565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e9c91906134ff565b60405180910390a3505050565b60008111611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906140a7565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f905750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690614113565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120735750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120c857600760169054906101000a900460ff166120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be9061417f565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561216f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121885750600760149054906101000a900460ff16155b156121e6576009548161219a846111c5565b6121a49190613a24565b11156121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906141eb565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561228e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122e45750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122fd5750600760149054906101000a900460ff16155b156123b157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123b05760095481612364846111c5565b61236e9190613a24565b11156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a6906141eb565b60405180910390fd5b5b5b60008060006123be613102565b6000601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124645750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561247e5750600b54600a5461247b9190613a24565b43105b9050600760149054906101000a900460ff16806124e45750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125385750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125465760009250612679565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156125a1575080155b15612603576012600201546012600001546012600101546125c29190613a24565b6125cc9190613a24565b9450849350601260405180606001604052908160008201548152602001600182015481526020016002820154815250509150612678565b8061266557600f60020154600f60000154600f600101546126249190613a24565b61262e9190613a24565b9450849350600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509150612677565b801561267657600c549450600c5493505b5b5b5b606484876126879190613bd6565b612691919061423a565b9250600760159054906101000a900460ff1680156126fd5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561270d5761270c858361282f565b5b6127238888858961271e91906139f0565b612a49565b600083111561275f57600085111561275e576000606486886127459190613bd6565b61274f919061423a565b905061275c893083612a49565b505b5b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff16612a45576001600760146101000a81548160ff0219169083151502179055506000820315612a29576000612872306111c5565b90506008548110612a27576001600854111561288e5760085490505b600060028461289d9190613bd6565b90506000818460200151846128b29190613bd6565b6128bc919061423a565b9050600081846128cc91906139f0565b905060004790506128dc82612cc6565b600081476128ea91906139f0565b905060008760200151866128fe91906139f0565b82612909919061423a565b9050600088602001518261291d9190613bd6565b90506000811115612933576129328682612f09565b5b600089600001516002846129479190613bd6565b6129519190613bd6565b905060008111156129a8576129a781600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661300990919063ffffffff16565b5b60008a604001516002856129bc9190613bd6565b6129c69190613bd6565b90506000811115612a1d57612a1c81600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661300990919063ffffffff16565b5b5050505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaf906142dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e9061436f565b60405180910390fd5b612b328383836130fd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf90614401565b60405180910390fd5b8181612bc491906139f0565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c549190613a24565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb891906134ff565b60405180910390a350505050565b6000600267ffffffffffffffff811115612ce357612ce26132f8565b5b604051908082528060200260200182016040528015612d115781602001602082028036833780820191505090505b5090503081600081518110612d2957612d286138b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df49190614436565b81600181518110612e0857612e076138b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e6f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ce0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ed395949392919061455c565b600060405180830381600087803b158015612eed57600080fd5b505af1158015612f01573d6000803e3d6000fd5b505050505050565b612f3630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ce0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612fbf969594939291906145b6565b60606040518083038185885af1158015612fdd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613002919061462c565b5050505050565b8047101561304c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613043906146cb565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516130729061471c565b60006040518083038185875af1925050503d80600081146130af576040519150601f19603f3d011682016040523d82523d6000602084013e6130b4565b606091505b50509050806130f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ef906147a3565b60405180910390fd5b505050565b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561315d578082015181840152602081019050613142565b60008484015250505050565b6000601f19601f8301169050919050565b600061318582613123565b61318f818561312e565b935061319f81856020860161313f565b6131a881613169565b840191505092915050565b600060208201905081810360008301526131cd818461317a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613214826131e9565b9050919050565b61322481613209565b811461322f57600080fd5b50565b6000813590506132418161321b565b92915050565b6000819050919050565b61325a81613247565b811461326557600080fd5b50565b60008135905061327781613251565b92915050565b60008060408385031215613294576132936131df565b5b60006132a285828601613232565b92505060206132b385828601613268565b9150509250929050565b60008115159050919050565b6132d2816132bd565b82525050565b60006020820190506132ed60008301846132c9565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61333082613169565b810181811067ffffffffffffffff8211171561334f5761334e6132f8565b5b80604052505050565b60006133626131d5565b905061336e8282613327565b919050565b600067ffffffffffffffff82111561338e5761338d6132f8565b5b602082029050602081019050919050565b600080fd5b60006133b76133b284613373565b613358565b905080838252602082019050602084028301858111156133da576133d961339f565b5b835b8181101561340357806133ef8882613232565b8452602084019350506020810190506133dc565b5050509392505050565b600082601f830112613422576134216132f3565b5b81356134328482602086016133a4565b91505092915050565b613444816132bd565b811461344f57600080fd5b50565b6000813590506134618161343b565b92915050565b6000806040838503121561347e5761347d6131df565b5b600083013567ffffffffffffffff81111561349c5761349b6131e4565b5b6134a88582860161340d565b92505060206134b985828601613452565b9150509250929050565b6000602082840312156134d9576134d86131df565b5b60006134e784828501613452565b91505092915050565b6134f981613247565b82525050565b600060208201905061351460008301846134f0565b92915050565b6000602082840312156135305761352f6131df565b5b600061353e84828501613232565b91505092915050565b6000806000606084860312156135605761355f6131df565b5b600061356e86828701613232565b935050602061357f86828701613232565b925050604061359086828701613268565b9150509250925092565b600060ff82169050919050565b6135b08161359a565b82525050565b60006020820190506135cb60008301846135a7565b92915050565b600080604083850312156135e8576135e76131df565b5b60006135f685828601613232565b925050602061360785828601613452565b9150509250929050565b600060208284031215613627576136266131df565b5b600061363584828501613268565b91505092915050565b600080600060608486031215613657576136566131df565b5b600061366586828701613268565b935050602061367686828701613268565b925050604061368786828701613268565b9150509250925092565b60006060820190506136a660008301866134f0565b6136b360208301856134f0565b6136c060408301846134f0565b949350505050565b6136d181613209565b82525050565b60006020820190506136ec60008301846136c8565b92915050565b60008060408385031215613709576137086131df565b5b600061371785828601613232565b925050602061372885828601613232565b9150509250929050565b60008060408385031215613749576137486131df565b5b600061375785828601613268565b925050602061376885828601613268565b9150509250929050565b6000819050919050565b600061379761379261378d846131e9565b613772565b6131e9565b9050919050565b60006137a98261377c565b9050919050565b60006137bb8261379e565b9050919050565b6137cb816137b0565b82525050565b60006020820190506137e660008301846137c2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061383357607f821691505b602082108103613846576138456137ec565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061388260208361312e565b915061388d8261384c565b602082019050919050565b600060208201905081810360008301526138b181613875565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392182613247565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613953576139526138e7565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006139ba60288361312e565b91506139c58261395e565b604082019050919050565b600060208201905081810360008301526139e9816139ad565b9050919050565b60006139fb82613247565b9150613a0683613247565b9250828203905081811115613a1e57613a1d6138e7565b5b92915050565b6000613a2f82613247565b9150613a3a83613247565b9250828201905080821115613a5257613a516138e7565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115613aaf57808604811115613a8b57613a8a6138e7565b5b6001851615613a9a5780820291505b8081029050613aa885613a58565b9450613a6f565b94509492505050565b600082613ac85760019050613b84565b81613ad65760009050613b84565b8160018114613aec5760028114613af657613b25565b6001915050613b84565b60ff841115613b0857613b076138e7565b5b8360020a915084821115613b1f57613b1e6138e7565b5b50613b84565b5060208310610133831016604e8410600b8410161715613b5a5782820a905083811115613b5557613b546138e7565b5b613b84565b613b678484846001613a65565b92509050818404811115613b7e57613b7d6138e7565b5b81810290505b9392505050565b6000613b9682613247565b9150613ba18361359a565b9250613bce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613ab8565b905092915050565b6000613be182613247565b9150613bec83613247565b9250828202613bfa81613247565b91508282048414831517613c1157613c106138e7565b5b5092915050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613c4e601a8361312e565b9150613c5982613c18565b602082019050919050565b60006020820190508181036000830152613c7d81613c41565b9050919050565b6000604082019050613c9960008301856136c8565b613ca660208301846134f0565b9392505050565b600081519050613cbc8161343b565b92915050565b600060208284031215613cd857613cd76131df565b5b6000613ce684828501613cad565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d4b60258361312e565b9150613d5682613cef565b604082019050919050565b60006020820190508181036000830152613d7a81613d3e565b9050919050565b7f426c6f636b2073686f756c64206265206c657373207468616e20330000000000600082015250565b6000613db7601b8361312e565b9150613dc282613d81565b602082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e672068617320737460008201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b6000613e4960258361312e565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613edb60268361312e565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f6d60248361312e565b9150613f7882613f11565b604082019050919050565b60006020820190508181036000830152613f9c81613f60565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fff60228361312e565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061409160298361312e565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e7300000000000000600082015250565b60006140fd60198361312e565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b600061416960138361312e565b915061417482614133565b602082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b60006141d560208361312e565b91506141e08261419f565b602082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061424582613247565b915061425083613247565b9250826142605761425f61420b565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142c760258361312e565b91506142d28261426b565b604082019050919050565b600060208201905081810360008301526142f6816142ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061435960238361312e565b9150614364826142fd565b604082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143eb60268361312e565b91506143f68261438f565b604082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b6000815190506144308161321b565b92915050565b60006020828403121561444c5761444b6131df565b5b600061445a84828501614421565b91505092915050565b6000819050919050565b600061448861448361447e84614463565b613772565b613247565b9050919050565b6144988161446d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d381613209565b82525050565b60006144e583836144ca565b60208301905092915050565b6000602082019050919050565b60006145098261449e565b61451381856144a9565b935061451e836144ba565b8060005b8381101561454f57815161453688826144d9565b9750614541836144f1565b925050600181019050614522565b5085935050505092915050565b600060a08201905061457160008301886134f0565b61457e602083018761448f565b818103604083015261459081866144fe565b905061459f60608301856136c8565b6145ac60808301846134f0565b9695505050505050565b600060c0820190506145cb60008301896136c8565b6145d860208301886134f0565b6145e5604083018761448f565b6145f2606083018661448f565b6145ff60808301856136c8565b61460c60a08301846134f0565b979650505050505050565b60008151905061462681613251565b92915050565b600080600060608486031215614645576146446131df565b5b600061465386828701614617565b935050602061466486828701614617565b925050604061467586828701614617565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006146b5601d8361312e565b91506146c08261467f565b602082019050919050565b600060208201905081810360008301526146e4816146a8565b9050919050565b600081905092915050565b50565b60006147066000836146eb565b9150614711826146f6565b600082019050919050565b6000614727826146f9565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b600061478d603a8361312e565b915061479882614731565b604082019050919050565b600060208201905081810360008301526147bc81614780565b905091905056fea26469706673582212207daf7b012b08b5ce2cd72f9d5c1da782a8f3b4aef182412a0609468c6441763264736f6c63430008130033

Deployed Bytecode Sourcemap

12991:11548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2682:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14917:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23893:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21697:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3802:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23307:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23549:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15086:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3644:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23765:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15542:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21857:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24103:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13222:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22243:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13336:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3973:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11654:94;;;;;;;;;;;;;:::i;:::-;;13868:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;23417:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13670:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22703:224;;;;;;;;;;;;;:::i;:::-;;24354:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11431:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2901:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22042:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24242:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15798:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13104:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16216:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23184:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13958:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4592:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22446:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22935:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11756:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13910:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13076:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2682:100;2736:13;2769:5;2762:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2682:100;:::o;14917:161::-;14992:4;15009:39;15018:12;:10;:12::i;:::-;15032:7;15041:6;15009:8;:39::i;:::-;15066:4;15059:11;;14917:161;;;;:::o;23893:202::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23990:9:::1;23985:103;24009:8;:15;24005:1;:19;23985:103;;;24071:5;24046:9;:22;24056:8;24065:1;24056:11;;;;;;;;:::i;:::-;;;;;;;;24046:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;24026:3;;;;;:::i;:::-;;;;23985:103;;;;23893:202:::0;;:::o;21697:152::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21836:5:::1;21815:18;;:26;;;;;;;;;;;;;;;;;;21697:152:::0;:::o;3802:108::-;3863:7;3890:12;;3883:19;;3802:108;:::o;23307:102::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23392:9:::1;23380;;:21;;;;;;;;;;;;;;;;;;23307:102:::0;:::o;23549:208::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23649:9:::1;23644:106;23668:8;:15;23664:1;:19;23644:106;;;23733:5;23705:12;:25;23718:8;23727:1;23718:11;;;;;;;;:::i;:::-;;;;;;;;23705:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;23685:3;;;;;:::i;:::-;;;;23644:106;;;;23549:208:::0;;:::o;15086:448::-;15218:4;15235:36;15245:6;15253:9;15264:6;15235:9;:36::i;:::-;15284:24;15311:11;:19;15323:6;15311:19;;;;;;;;;;;;;;;:33;15331:12;:10;:12::i;:::-;15311:33;;;;;;;;;;;;;;;;15284:60;;15383:6;15363:16;:26;;15355:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;15445:57;15454:6;15462:12;:10;:12::i;:::-;15495:6;15476:16;:25;;;;:::i;:::-;15445:8;:57::i;:::-;15522:4;15515:11;;;15086:448;;;;;:::o;3644:93::-;3702:5;3727:2;3720:9;;3644:93;:::o;23765:120::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23872:5:::1;23850:9;:19;23860:8;23850:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23765:120:::0;;:::o;15542:248::-;15658:4;15680:80;15689:12;:10;:12::i;:::-;15703:7;15749:10;15712:11;:25;15724:12;:10;:12::i;:::-;15712:25;;;;;;;;;;;;;;;:34;15738:7;15712:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15680:8;:80::i;:::-;15778:4;15771:11;;15542:248;;;;:::o;21857:177::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22016:10:::1;:8;:10::i;:::-;22012:2;:14;;;;:::i;:::-;21999:10;:27;;;;:::i;:::-;21973:23;:53;;;;21857:177:::0;:::o;24103:131::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24215:10:::1;:8;:10::i;:::-;24211:2;:14;;;;:::i;:::-;24199:9;:26;;;;:::i;:::-;24182:14;:43;;;;24103:131:::0;:::o;13222:34::-;;;;;;;;;;;;;:::o;22243:195::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22395:35:::1;;;;;;;;22401:10;22395:35;;;;22413:10;22395:35;;;;22425:4;22395:35;;::::0;22383:9:::1;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;22243:195:::0;;;:::o;13336:54::-;;;;:::o;3973:127::-;4047:7;4074:9;:18;4084:7;4074:18;;;;;;;;;;;;;;;;4067:25;;3973:127;;;:::o;11654:94::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11719:21:::1;11737:1;11719:9;:21::i;:::-;11654:94::o:0;13868:35::-;;;;;;;;;;;;;;;;;;;:::o;23417:124::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23528:5:::1;23504:12;:21;23517:7;23504:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23417:124:::0;;:::o;13670:79::-;13707:42;13670:79;:::o;22703:224::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22767:14:::1;;;;;;;;;;;22766:15;22758:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22840:4;22823:14;;:21;;;;;;;;;;;;;;;;;;22876:4;22855:18;;:25;;;;;;;;;;;;;;;;;;22907:12;22891:13;:28;;;;22703:224::o:0;24354:127::-;24436:8;24429:25;;;24455:9;;;;;;;;;;;24466:6;24429:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24354:127;;:::o;11431:87::-;11477:7;11504:6;;;;;;;;;;;11497:13;;11431:87;:::o;2901:104::-;2957:13;2990:7;2983:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2901:104;:::o;22042:193::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22192:35:::1;;;;;;;;22198:10;22192:35;;;;22210:10;22192:35;;;;22222:4;22192:35;;::::0;22184:5:::1;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;22042:193:::0;;;:::o;24242:104::-;24308:9;;;;;;;;;;;24300:27;;:38;24328:9;24300:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24242:104;:::o;15798:410::-;15919:4;15941:24;15968:11;:25;15980:12;:10;:12::i;:::-;15968:25;;;;;;;;;;;;;;;:34;15994:7;15968:34;;;;;;;;;;;;;;;;15941:61;;16041:15;16021:16;:35;;16013:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16109:67;16118:12;:10;:12::i;:::-;16132:7;16160:15;16141:16;:34;;;;:::i;:::-;16109:8;:67::i;:::-;16196:4;16189:11;;;15798:410;;;;:::o;13104:19::-;;;;;;;;;;;;;:::o;16216:165::-;16294:4;16311:40;16321:10;16333:9;16344:6;16311:9;:40::i;:::-;16369:4;16362:11;;16216:165;;;;:::o;23184:115::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23282:9:::1;23264:15;;:27;;;;;;;;;;;;;;;;;;23184:115:::0;:::o;13958:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4592:201::-;4726:7;4758:11;:18;4770:5;4758:18;;;;;;;;;;;;;;;:27;4777:7;4758:27;;;;;;;;;;;;;;;;4751:34;;4592:201;;;;:::o;22446:250::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22591:1:::1;22579:9;:13;22571:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;22647:10;22635:9;:22;;;;22679:9;22668:8;:20;;;;22446:250:::0;;:::o;22935:241::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23017:14:::1;;;;;;;;;;;23016:15;23008:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23104:1;23092:9;:13;23084:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;23159:9;23148:8;:20;;;;22935:241:::0;:::o;11756:192::-;11577:12;:10;:12::i;:::-;11566:23;;:7;:5;:7::i;:::-;:23;;;11558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11865:1:::1;11845:22;;:8;:22;;::::0;11837:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11921:19;11931:8;11921:9;:19::i;:::-;11756:192:::0;:::o;13910:39::-;;;;;;;;;;;;;;;;;;;:::o;13076:21::-;;;;;;;;;;;;;:::o;404:98::-;457:7;484:10;477:17;;404:98;:::o;9730:380::-;9883:1;9866:19;;:5;:19;;;9858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9964:1;9945:21;;:7;:21;;;9937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10048:6;10018:11;:18;10030:5;10018:18;;;;;;;;;;;;;;;:27;10037:7;10018:27;;;;;;;;;;;;;;;:36;;;;10086:7;10070:32;;10079:5;10070:32;;;10095:6;10070:32;;;;;;:::i;:::-;;;;;;;;9730:380;;;:::o;16389:2658::-;16539:1;16530:6;:10;16522:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16606:12;:20;16619:6;16606:20;;;;;;;;;;;;;;;;;;;;;;;;;16605:21;:49;;;;;16631:12;:23;16644:9;16631:23;;;;;;;;;;;;;;;;;;;;;;;;;16630:24;16605:49;16597:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;16725:9;:17;16735:6;16725:17;;;;;;;;;;;;;;;;;;;;;;;;;16724:18;:43;;;;;16747:9;:20;16757:9;16747:20;;;;;;;;;;;;;;;;;;;;;;;;;16746:21;16724:43;16720:122;;;16792:14;;;;;;;;;;;16784:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16720:122;16868:4;;;;;;;;;;;16858:14;;:6;:14;;;:39;;;;;16877:9;:20;16887:9;16877:20;;;;;;;;;;;;;;;;;;;;;;;;;16876:21;16858:39;:59;;;;;16902:15;;;;;;;;;;;16901:16;16858:59;16854:215;;;16975:14;;16965:6;16942:20;16952:9;16942;:20::i;:::-;:29;;;;:::i;:::-;:47;;16934:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;16854:215;17095:4;;;;;;;;;;;17085:14;;:6;:14;;;;:39;;;;;17104:9;:20;17114:9;17104:20;;;;;;;;;;;;;;;;;;;;;;;;;17103:21;17085:39;:61;;;;;17129:9;:17;17139:6;17129:17;;;;;;;;;;;;;;;;;;;;;;;;;17128:18;17085:61;:81;;;;;17151:15;;;;;;;;;;;17150:16;17085:81;17081:315;;;17213:4;;;;;;;;;;;17200:17;;:9;:17;;;17196:189;;17279:14;;17269:6;17246:20;17256:9;17246;:20::i;:::-;:29;;;;:::i;:::-;:47;;17238:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;17196:189;17081:315;17408:15;17434:14;17459:11;17481:25;;:::i;:::-;17519:17;17540:9;:17;17550:6;17540:17;;;;;;;;;;;;;;;;;;;;;;;;;17539:18;:56;;;;;17575:9;:20;17585:9;17575:20;;;;;;;;;;;;;;;;;;;;;;;;;17574:21;17539:56;:112;;;;;17643:8;;17627:13;;:24;;;;:::i;:::-;17612:12;:39;17539:112;17519:132;;17739:15;;;;;;;;;;;:36;;;;17758:9;:17;17768:6;17758:17;;;;;;;;;;;;;;;;;;;;;;;;;17739:36;:60;;;;17779:9;:20;17789:9;17779:20;;;;;;;;;;;;;;;;;;;;;;;;;17739:60;17735:728;;;17820:1;17814:7;;17735:728;;;17885:4;;;;;;;;;;;17872:17;;:9;:17;;;:34;;;;;17894:12;17893:13;17872:34;17868:595;;;18039:9;:13;;;17989:9;:19;;;17950:9;:19;;;:58;;;;:::i;:::-;:102;;;;:::i;:::-;17923:129;;18077:7;18068:16;;18114:9;18099:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17868:595;;;18146:12;18141:322;;18272:5;:9;;;18237:5;:15;;;18202:5;:15;;;:50;;;;:::i;:::-;:79;;;;:::i;:::-;18175:106;;18306:7;18297:16;;18343:5;18328:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18141:322;;;18370:12;18366:97;;;18409:9;;18399:19;;18442:9;;18433:18;;18366:97;18141:322;17868:595;17735:728;18501:3;18491:6;18482;:15;;;;:::i;:::-;18481:23;;;;:::i;:::-;18475:29;;18618:18;;;;;;;;;;;:36;;;;;18650:4;;;;;;;;;;;18640:14;;:6;:14;;;;18618:36;18614:76;;;18656:34;18668:7;18677:12;18656:11;:34::i;:::-;18614:76;18732:48;18748:6;18756:9;18776:3;18767:6;:12;;;;:::i;:::-;18732:15;:48::i;:::-;18801:1;18795:3;:7;18791:249;;;18877:1;18867:7;:11;18863:164;;;18899:17;18940:3;18929:7;18920:6;:16;;;;:::i;:::-;18919:24;;;;:::i;:::-;18899:44;;18962:49;18978:6;18994:4;19001:9;18962:15;:49::i;:::-;18880:147;18863:164;18791:249;16511:2536;;;;;16389:2658;;;:::o;11956:173::-;12012:16;12031:6;;;;;;;;;;;12012:25;;12057:8;12048:6;;:17;;;;;;;;;;;;;;;;;;12112:8;12081:40;;12102:8;12081:40;;;;;;;;;;;;12001:128;11956:173;:::o;19055:1593::-;14099:15;;;;;;;;;;;14094:125;;14149:4;14131:15;;:22;;;;;;;;;;;;;;;;;;19158:1:::1;19147:7;:12:::0;19144:49;19175:7:::1;19144:49;19208:23;19234:24;19252:4;19234:9;:24::i;:::-;19208:50;;19292:23;;19273:15;:42;19269:1372;;19362:1;19336:23;;:27;19332:109;;;19402:23;;19384:41;;19332:109;19512:19;19544:1;19534:7;:11;;;;:::i;:::-;19512:33;;19560:32;19654:11;19614:9;:19;;;19596:15;:37;;;;:::i;:::-;19595:70;;;;:::i;:::-;19560:105;;19680:14;19715:24;19697:15;:42;;;;:::i;:::-;19680:59;;19756:22;19781:21;19756:46;;19819:24;19836:6;19819:16;:24::i;:::-;19860:20;19907:14;19883:21;:38;;;;:::i;:::-;19860:61;;19936:19;19988:9;:19;;;19974:11;:33;;;;:::i;:::-;19958:12;:50;;;;:::i;:::-;19936:72;;20023:29;20069:9;:19;;;20055:11;:33;;;;:::i;:::-;20023:65;;20133:1;20109:21;:25;20105:161;;;20189:61;20202:24;20228:21;20189:12;:61::i;:::-;20105:161;20282:20;20323:9;:19;;;20319:1;20305:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;20282:60;;20376:1;20361:12;:16;20357:105;;;20398:48;20433:12;20406:15;;;;;;;;;;;20398:34;;;;:48;;;;:::i;:::-;20357:105;20478:14;20513:9;:13;;;20509:1;20495:11;:15;;;;:::i;:::-;:31;;;;:::i;:::-;20478:48;;20554:1;20545:6;:10;20541:87;;;20576:36;20605:6;20584:9;;;;;;;;;;;20576:28;;;;:36;;;;:::i;:::-;20541:87;19317:1324;;;;;;;;;19269:1372;19135:1513;14168:1;14202:5:::0;14184:15;;:23;;;;;;;;;;;;;;;;;;14094:125;19055:1593;;:::o;8105:638::-;8263:1;8245:20;;:6;:20;;;8237:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8347:1;8326:23;;:9;:23;;;8318:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8402:47;8423:6;8431:9;8442:6;8402:20;:47::i;:::-;8462:21;8486:9;:17;8496:6;8486:17;;;;;;;;;;;;;;;;8462:41;;8539:6;8522:13;:23;;8514:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8635:6;8619:13;:22;;;;:::i;:::-;8599:9;:17;8609:6;8599:17;;;;;;;;;;;;;;;:42;;;;8676:6;8652:9;:20;8662:9;8652:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8717:9;8700:35;;8709:6;8700:35;;;8728:6;8700:35;;;;;;:::i;:::-;;;;;;;;8226:517;8105:638;;;:::o;20656:526::-;20774:21;20812:1;20798:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20774:40;;20843:4;20825;20830:1;20825:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20869:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20859:4;20864:1;20859:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20895:53;20912:4;20927:6;;;;;;;;;;;20936:11;20895:8;:53::i;:::-;20987:6;;;;;;;;;;;:57;;;21059:11;21085:1;21101:4;21128;21148:15;20987:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20711:471;20656:526;:::o;21190:499::-;21338:53;21355:4;21370:6;;;;;;;;;;;21379:11;21338:8;:53::i;:::-;21434:6;;;;;;;;;;;:22;;;21465:9;21499:4;21519:11;21545:1;21588;21631:9;;;;;;;;;;;21655:15;21434:247;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21190:499;;:::o;10874:319::-;10989:6;10964:21;:31;;10956:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11043:12;11061:9;:14;;11084:6;11061:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11042:54;;;11115:7;11107:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10945:248;10874:319;;:::o;10719:125::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:180;3617:77;3614:1;3607:88;3714:4;3711:1;3704:15;3738:4;3735:1;3728:15;3755:281;3838:27;3860:4;3838:27;:::i;:::-;3830:6;3826:40;3968:6;3956:10;3953:22;3932:18;3920:10;3917:34;3914:62;3911:88;;;3979:18;;:::i;:::-;3911:88;4019:10;4015:2;4008:22;3798:238;3755:281;;:::o;4042:129::-;4076:6;4103:20;;:::i;:::-;4093:30;;4132:33;4160:4;4152:6;4132:33;:::i;:::-;4042:129;;;:::o;4177:311::-;4254:4;4344:18;4336:6;4333:30;4330:56;;;4366:18;;:::i;:::-;4330:56;4416:4;4408:6;4404:17;4396:25;;4476:4;4470;4466:15;4458:23;;4177:311;;;:::o;4494:117::-;4603:1;4600;4593:12;4634:710;4730:5;4755:81;4771:64;4828:6;4771:64;:::i;:::-;4755:81;:::i;:::-;4746:90;;4856:5;4885:6;4878:5;4871:21;4919:4;4912:5;4908:16;4901:23;;4972:4;4964:6;4960:17;4952:6;4948:30;5001:3;4993:6;4990:15;4987:122;;;5020:79;;:::i;:::-;4987:122;5135:6;5118:220;5152:6;5147:3;5144:15;5118:220;;;5227:3;5256:37;5289:3;5277:10;5256:37;:::i;:::-;5251:3;5244:50;5323:4;5318:3;5314:14;5307:21;;5194:144;5178:4;5173:3;5169:14;5162:21;;5118:220;;;5122:21;4736:608;;4634:710;;;;;:::o;5367:370::-;5438:5;5487:3;5480:4;5472:6;5468:17;5464:27;5454:122;;5495:79;;:::i;:::-;5454:122;5612:6;5599:20;5637:94;5727:3;5719:6;5712:4;5704:6;5700:17;5637:94;:::i;:::-;5628:103;;5444:293;5367:370;;;;:::o;5743:116::-;5813:21;5828:5;5813:21;:::i;:::-;5806:5;5803:32;5793:60;;5849:1;5846;5839:12;5793:60;5743:116;:::o;5865:133::-;5908:5;5946:6;5933:20;5924:29;;5962:30;5986:5;5962:30;:::i;:::-;5865:133;;;;:::o;6004:678::-;6094:6;6102;6151:2;6139:9;6130:7;6126:23;6122:32;6119:119;;;6157:79;;:::i;:::-;6119:119;6305:1;6294:9;6290:17;6277:31;6335:18;6327:6;6324:30;6321:117;;;6357:79;;:::i;:::-;6321:117;6462:78;6532:7;6523:6;6512:9;6508:22;6462:78;:::i;:::-;6452:88;;6248:302;6589:2;6615:50;6657:7;6648:6;6637:9;6633:22;6615:50;:::i;:::-;6605:60;;6560:115;6004:678;;;;;:::o;6688:323::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:50;6986:7;6977:6;6966:9;6962:22;6944:50;:::i;:::-;6934:60;;6890:114;6688:323;;;;:::o;7017:118::-;7104:24;7122:5;7104:24;:::i;:::-;7099:3;7092:37;7017:118;;:::o;7141:222::-;7234:4;7272:2;7261:9;7257:18;7249:26;;7285:71;7353:1;7342:9;7338:17;7329:6;7285:71;:::i;:::-;7141:222;;;;:::o;7369:329::-;7428:6;7477:2;7465:9;7456:7;7452:23;7448:32;7445:119;;;7483:79;;:::i;:::-;7445:119;7603:1;7628:53;7673:7;7664:6;7653:9;7649:22;7628:53;:::i;:::-;7618:63;;7574:117;7369:329;;;;:::o;7704:619::-;7781:6;7789;7797;7846:2;7834:9;7825:7;7821:23;7817:32;7814:119;;;7852:79;;:::i;:::-;7814:119;7972:1;7997:53;8042:7;8033:6;8022:9;8018:22;7997:53;:::i;:::-;7987:63;;7943:117;8099:2;8125:53;8170:7;8161:6;8150:9;8146:22;8125:53;:::i;:::-;8115:63;;8070:118;8227:2;8253:53;8298:7;8289:6;8278:9;8274:22;8253:53;:::i;:::-;8243:63;;8198:118;7704:619;;;;;:::o;8329:86::-;8364:7;8404:4;8397:5;8393:16;8382:27;;8329:86;;;:::o;8421:112::-;8504:22;8520:5;8504:22;:::i;:::-;8499:3;8492:35;8421:112;;:::o;8539:214::-;8628:4;8666:2;8655:9;8651:18;8643:26;;8679:67;8743:1;8732:9;8728:17;8719:6;8679:67;:::i;:::-;8539:214;;;;:::o;8759:468::-;8824:6;8832;8881:2;8869:9;8860:7;8856:23;8852:32;8849:119;;;8887:79;;:::i;:::-;8849:119;9007:1;9032:53;9077:7;9068:6;9057:9;9053:22;9032:53;:::i;:::-;9022:63;;8978:117;9134:2;9160:50;9202:7;9193:6;9182:9;9178:22;9160:50;:::i;:::-;9150:60;;9105:115;8759:468;;;;;:::o;9233:329::-;9292:6;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9233:329;;;;:::o;9568:619::-;9645:6;9653;9661;9710:2;9698:9;9689:7;9685:23;9681:32;9678:119;;;9716:79;;:::i;:::-;9678:119;9836:1;9861:53;9906:7;9897:6;9886:9;9882:22;9861:53;:::i;:::-;9851:63;;9807:117;9963:2;9989:53;10034:7;10025:6;10014:9;10010:22;9989:53;:::i;:::-;9979:63;;9934:118;10091:2;10117:53;10162:7;10153:6;10142:9;10138:22;10117:53;:::i;:::-;10107:63;;10062:118;9568:619;;;;;:::o;10193:442::-;10342:4;10380:2;10369:9;10365:18;10357:26;;10393:71;10461:1;10450:9;10446:17;10437:6;10393:71;:::i;:::-;10474:72;10542:2;10531:9;10527:18;10518:6;10474:72;:::i;:::-;10556;10624:2;10613:9;10609:18;10600:6;10556:72;:::i;:::-;10193:442;;;;;;:::o;10641:118::-;10728:24;10746:5;10728:24;:::i;:::-;10723:3;10716:37;10641:118;;:::o;10765:222::-;10858:4;10896:2;10885:9;10881:18;10873:26;;10909:71;10977:1;10966:9;10962:17;10953:6;10909:71;:::i;:::-;10765:222;;;;:::o;10993:474::-;11061:6;11069;11118:2;11106:9;11097:7;11093:23;11089:32;11086:119;;;11124:79;;:::i;:::-;11086:119;11244:1;11269:53;11314:7;11305:6;11294:9;11290:22;11269:53;:::i;:::-;11259:63;;11215:117;11371:2;11397:53;11442:7;11433:6;11422:9;11418:22;11397:53;:::i;:::-;11387:63;;11342:118;10993:474;;;;;:::o;11473:::-;11541:6;11549;11598:2;11586:9;11577:7;11573:23;11569:32;11566:119;;;11604:79;;:::i;:::-;11566:119;11724:1;11749:53;11794:7;11785:6;11774:9;11770:22;11749:53;:::i;:::-;11739:63;;11695:117;11851:2;11877:53;11922:7;11913:6;11902:9;11898:22;11877:53;:::i;:::-;11867:63;;11822:118;11473:474;;;;;:::o;11953:60::-;11981:3;12002:5;11995:12;;11953:60;;;:::o;12019:142::-;12069:9;12102:53;12120:34;12129:24;12147:5;12129:24;:::i;:::-;12120:34;:::i;:::-;12102:53;:::i;:::-;12089:66;;12019:142;;;:::o;12167:126::-;12217:9;12250:37;12281:5;12250:37;:::i;:::-;12237:50;;12167:126;;;:::o;12299:141::-;12364:9;12397:37;12428:5;12397:37;:::i;:::-;12384:50;;12299:141;;;:::o;12446:161::-;12548:52;12594:5;12548:52;:::i;:::-;12543:3;12536:65;12446:161;;:::o;12613:252::-;12721:4;12759:2;12748:9;12744:18;12736:26;;12772:86;12855:1;12844:9;12840:17;12831:6;12772:86;:::i;:::-;12613:252;;;;:::o;12871:180::-;12919:77;12916:1;12909:88;13016:4;13013:1;13006:15;13040:4;13037:1;13030:15;13057:320;13101:6;13138:1;13132:4;13128:12;13118:22;;13185:1;13179:4;13175:12;13206:18;13196:81;;13262:4;13254:6;13250:17;13240:27;;13196:81;13324:2;13316:6;13313:14;13293:18;13290:38;13287:84;;13343:18;;:::i;:::-;13287:84;13108:269;13057:320;;;:::o;13383:182::-;13523:34;13519:1;13511:6;13507:14;13500:58;13383:182;:::o;13571:366::-;13713:3;13734:67;13798:2;13793:3;13734:67;:::i;:::-;13727:74;;13810:93;13899:3;13810:93;:::i;:::-;13928:2;13923:3;13919:12;13912:19;;13571:366;;;:::o;13943:419::-;14109:4;14147:2;14136:9;14132:18;14124:26;;14196:9;14190:4;14186:20;14182:1;14171:9;14167:17;14160:47;14224:131;14350:4;14224:131;:::i;:::-;14216:139;;13943:419;;;:::o;14368:180::-;14416:77;14413:1;14406:88;14513:4;14510:1;14503:15;14537:4;14534:1;14527:15;14554:180;14602:77;14599:1;14592:88;14699:4;14696:1;14689:15;14723:4;14720:1;14713:15;14740:233;14779:3;14802:24;14820:5;14802:24;:::i;:::-;14793:33;;14848:66;14841:5;14838:77;14835:103;;14918:18;;:::i;:::-;14835:103;14965:1;14958:5;14954:13;14947:20;;14740:233;;;:::o;14979:227::-;15119:34;15115:1;15107:6;15103:14;15096:58;15188:10;15183:2;15175:6;15171:15;15164:35;14979:227;:::o;15212:366::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:419::-;15750:4;15788:2;15777:9;15773:18;15765:26;;15837:9;15831:4;15827:20;15823:1;15812:9;15808:17;15801:47;15865:131;15991:4;15865:131;:::i;:::-;15857:139;;15584:419;;;:::o;16009:194::-;16049:4;16069:20;16087:1;16069:20;:::i;:::-;16064:25;;16103:20;16121:1;16103:20;:::i;:::-;16098:25;;16147:1;16144;16140:9;16132:17;;16171:1;16165:4;16162:11;16159:37;;;16176:18;;:::i;:::-;16159:37;16009:194;;;;:::o;16209:191::-;16249:3;16268:20;16286:1;16268:20;:::i;:::-;16263:25;;16302:20;16320:1;16302:20;:::i;:::-;16297:25;;16345:1;16342;16338:9;16331:16;;16366:3;16363:1;16360:10;16357:36;;;16373:18;;:::i;:::-;16357:36;16209:191;;;;:::o;16406:102::-;16448:8;16495:5;16492:1;16488:13;16467:34;;16406:102;;;:::o;16514:848::-;16575:5;16582:4;16606:6;16597:15;;16630:5;16621:14;;16644:712;16665:1;16655:8;16652:15;16644:712;;;16760:4;16755:3;16751:14;16745:4;16742:24;16739:50;;;16769:18;;:::i;:::-;16739:50;16819:1;16809:8;16805:16;16802:451;;;17234:4;17227:5;17223:16;17214:25;;16802:451;17284:4;17278;17274:15;17266:23;;17314:32;17337:8;17314:32;:::i;:::-;17302:44;;16644:712;;;16514:848;;;;;;;:::o;17368:1073::-;17422:5;17613:8;17603:40;;17634:1;17625:10;;17636:5;;17603:40;17662:4;17652:36;;17679:1;17670:10;;17681:5;;17652:36;17748:4;17796:1;17791:27;;;;17832:1;17827:191;;;;17741:277;;17791:27;17809:1;17800:10;;17811:5;;;17827:191;17872:3;17862:8;17859:17;17856:43;;;17879:18;;:::i;:::-;17856:43;17928:8;17925:1;17921:16;17912:25;;17963:3;17956:5;17953:14;17950:40;;;17970:18;;:::i;:::-;17950:40;18003:5;;;17741:277;;18127:2;18117:8;18114:16;18108:3;18102:4;18099:13;18095:36;18077:2;18067:8;18064:16;18059:2;18053:4;18050:12;18046:35;18030:111;18027:246;;;18183:8;18177:4;18173:19;18164:28;;18218:3;18211:5;18208:14;18205:40;;;18225:18;;:::i;:::-;18205:40;18258:5;;18027:246;18298:42;18336:3;18326:8;18320:4;18317:1;18298:42;:::i;:::-;18283:57;;;;18372:4;18367:3;18363:14;18356:5;18353:25;18350:51;;;18381:18;;:::i;:::-;18350:51;18430:4;18423:5;18419:16;18410:25;;17368:1073;;;;;;:::o;18447:281::-;18505:5;18529:23;18547:4;18529:23;:::i;:::-;18521:31;;18573:25;18589:8;18573:25;:::i;:::-;18561:37;;18617:104;18654:66;18644:8;18638:4;18617:104;:::i;:::-;18608:113;;18447:281;;;;:::o;18734:410::-;18774:7;18797:20;18815:1;18797:20;:::i;:::-;18792:25;;18831:20;18849:1;18831:20;:::i;:::-;18826:25;;18886:1;18883;18879:9;18908:30;18926:11;18908:30;:::i;:::-;18897:41;;19087:1;19078:7;19074:15;19071:1;19068:22;19048:1;19041:9;19021:83;18998:139;;19117:18;;:::i;:::-;18998:139;18782:362;18734:410;;;;:::o;19150:176::-;19290:28;19286:1;19278:6;19274:14;19267:52;19150:176;:::o;19332:366::-;19474:3;19495:67;19559:2;19554:3;19495:67;:::i;:::-;19488:74;;19571:93;19660:3;19571:93;:::i;:::-;19689:2;19684:3;19680:12;19673:19;;19332:366;;;:::o;19704:419::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19985:131;20111:4;19985:131;:::i;:::-;19977:139;;19704:419;;;:::o;20129:332::-;20250:4;20288:2;20277:9;20273:18;20265:26;;20301:71;20369:1;20358:9;20354:17;20345:6;20301:71;:::i;:::-;20382:72;20450:2;20439:9;20435:18;20426:6;20382:72;:::i;:::-;20129:332;;;;;:::o;20467:137::-;20521:5;20552:6;20546:13;20537:22;;20568:30;20592:5;20568:30;:::i;:::-;20467:137;;;;:::o;20610:345::-;20677:6;20726:2;20714:9;20705:7;20701:23;20697:32;20694:119;;;20732:79;;:::i;:::-;20694:119;20852:1;20877:61;20930:7;20921:6;20910:9;20906:22;20877:61;:::i;:::-;20867:71;;20823:125;20610:345;;;;:::o;20961:224::-;21101:34;21097:1;21089:6;21085:14;21078:58;21170:7;21165:2;21157:6;21153:15;21146:32;20961:224;:::o;21191:366::-;21333:3;21354:67;21418:2;21413:3;21354:67;:::i;:::-;21347:74;;21430:93;21519:3;21430:93;:::i;:::-;21548:2;21543:3;21539:12;21532:19;;21191:366;;;:::o;21563:419::-;21729:4;21767:2;21756:9;21752:18;21744:26;;21816:9;21810:4;21806:20;21802:1;21791:9;21787:17;21780:47;21844:131;21970:4;21844:131;:::i;:::-;21836:139;;21563:419;;;:::o;21988:177::-;22128:29;22124:1;22116:6;22112:14;22105:53;21988:177;:::o;22171:366::-;22313:3;22334:67;22398:2;22393:3;22334:67;:::i;:::-;22327:74;;22410:93;22499:3;22410:93;:::i;:::-;22528:2;22523:3;22519:12;22512:19;;22171:366;;;:::o;22543:419::-;22709:4;22747:2;22736:9;22732:18;22724:26;;22796:9;22790:4;22786:20;22782:1;22771:9;22767:17;22760:47;22824:131;22950:4;22824:131;:::i;:::-;22816:139;;22543:419;;;:::o;22968:224::-;23108:34;23104:1;23096:6;23092:14;23085:58;23177:7;23172:2;23164:6;23160:15;23153:32;22968:224;:::o;23198:366::-;23340:3;23361:67;23425:2;23420:3;23361:67;:::i;:::-;23354:74;;23437:93;23526:3;23437:93;:::i;:::-;23555:2;23550:3;23546:12;23539:19;;23198:366;;;:::o;23570:419::-;23736:4;23774:2;23763:9;23759:18;23751:26;;23823:9;23817:4;23813:20;23809:1;23798:9;23794:17;23787:47;23851:131;23977:4;23851:131;:::i;:::-;23843:139;;23570:419;;;:::o;23995:225::-;24135:34;24131:1;24123:6;24119:14;24112:58;24204:8;24199:2;24191:6;24187:15;24180:33;23995:225;:::o;24226:366::-;24368:3;24389:67;24453:2;24448:3;24389:67;:::i;:::-;24382:74;;24465:93;24554:3;24465:93;:::i;:::-;24583:2;24578:3;24574:12;24567:19;;24226:366;;;:::o;24598:419::-;24764:4;24802:2;24791:9;24787:18;24779:26;;24851:9;24845:4;24841:20;24837:1;24826:9;24822:17;24815:47;24879:131;25005:4;24879:131;:::i;:::-;24871:139;;24598:419;;;:::o;25023:223::-;25163:34;25159:1;25151:6;25147:14;25140:58;25232:6;25227:2;25219:6;25215:15;25208:31;25023:223;:::o;25252:366::-;25394:3;25415:67;25479:2;25474:3;25415:67;:::i;:::-;25408:74;;25491:93;25580:3;25491:93;:::i;:::-;25609:2;25604:3;25600:12;25593:19;;25252:366;;;:::o;25624:419::-;25790:4;25828:2;25817:9;25813:18;25805:26;;25877:9;25871:4;25867:20;25863:1;25852:9;25848:17;25841:47;25905:131;26031:4;25905:131;:::i;:::-;25897:139;;25624:419;;;:::o;26049:221::-;26189:34;26185:1;26177:6;26173:14;26166:58;26258:4;26253:2;26245:6;26241:15;26234:29;26049:221;:::o;26276:366::-;26418:3;26439:67;26503:2;26498:3;26439:67;:::i;:::-;26432:74;;26515:93;26604:3;26515:93;:::i;:::-;26633:2;26628:3;26624:12;26617:19;;26276:366;;;:::o;26648:419::-;26814:4;26852:2;26841:9;26837:18;26829:26;;26901:9;26895:4;26891:20;26887:1;26876:9;26872:17;26865:47;26929:131;27055:4;26929:131;:::i;:::-;26921:139;;26648:419;;;:::o;27073:228::-;27213:34;27209:1;27201:6;27197:14;27190:58;27282:11;27277:2;27269:6;27265:15;27258:36;27073:228;:::o;27307:366::-;27449:3;27470:67;27534:2;27529:3;27470:67;:::i;:::-;27463:74;;27546:93;27635:3;27546:93;:::i;:::-;27664:2;27659:3;27655:12;27648:19;;27307:366;;;:::o;27679:419::-;27845:4;27883:2;27872:9;27868:18;27860:26;;27932:9;27926:4;27922:20;27918:1;27907:9;27903:17;27896:47;27960:131;28086:4;27960:131;:::i;:::-;27952:139;;27679:419;;;:::o;28104:175::-;28244:27;28240:1;28232:6;28228:14;28221:51;28104:175;:::o;28285:366::-;28427:3;28448:67;28512:2;28507:3;28448:67;:::i;:::-;28441:74;;28524:93;28613:3;28524:93;:::i;:::-;28642:2;28637:3;28633:12;28626:19;;28285:366;;;:::o;28657:419::-;28823:4;28861:2;28850:9;28846:18;28838:26;;28910:9;28904:4;28900:20;28896:1;28885:9;28881:17;28874:47;28938:131;29064:4;28938:131;:::i;:::-;28930:139;;28657:419;;;:::o;29082:169::-;29222:21;29218:1;29210:6;29206:14;29199:45;29082:169;:::o;29257:366::-;29399:3;29420:67;29484:2;29479:3;29420:67;:::i;:::-;29413:74;;29496:93;29585:3;29496:93;:::i;:::-;29614:2;29609:3;29605:12;29598:19;;29257:366;;;:::o;29629:419::-;29795:4;29833:2;29822:9;29818:18;29810:26;;29882:9;29876:4;29872:20;29868:1;29857:9;29853:17;29846:47;29910:131;30036:4;29910:131;:::i;:::-;29902:139;;29629:419;;;:::o;30054:182::-;30194:34;30190:1;30182:6;30178:14;30171:58;30054:182;:::o;30242:366::-;30384:3;30405:67;30469:2;30464:3;30405:67;:::i;:::-;30398:74;;30481:93;30570:3;30481:93;:::i;:::-;30599:2;30594:3;30590:12;30583:19;;30242:366;;;:::o;30614:419::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:180::-;31087:77;31084:1;31077:88;31184:4;31181:1;31174:15;31208:4;31205:1;31198:15;31225:185;31265:1;31282:20;31300:1;31282:20;:::i;:::-;31277:25;;31316:20;31334:1;31316:20;:::i;:::-;31311:25;;31355:1;31345:35;;31360:18;;:::i;:::-;31345:35;31402:1;31399;31395:9;31390:14;;31225:185;;;;:::o;31416:224::-;31556:34;31552:1;31544:6;31540:14;31533:58;31625:7;31620:2;31612:6;31608:15;31601:32;31416:224;:::o;31646:366::-;31788:3;31809:67;31873:2;31868:3;31809:67;:::i;:::-;31802:74;;31885:93;31974:3;31885:93;:::i;:::-;32003:2;31998:3;31994:12;31987:19;;31646:366;;;:::o;32018:419::-;32184:4;32222:2;32211:9;32207:18;32199:26;;32271:9;32265:4;32261:20;32257:1;32246:9;32242:17;32235:47;32299:131;32425:4;32299:131;:::i;:::-;32291:139;;32018:419;;;:::o;32443:222::-;32583:34;32579:1;32571:6;32567:14;32560:58;32652:5;32647:2;32639:6;32635:15;32628:30;32443:222;:::o;32671:366::-;32813:3;32834:67;32898:2;32893:3;32834:67;:::i;:::-;32827:74;;32910:93;32999:3;32910:93;:::i;:::-;33028:2;33023:3;33019:12;33012:19;;32671:366;;;:::o;33043:419::-;33209:4;33247:2;33236:9;33232:18;33224:26;;33296:9;33290:4;33286:20;33282:1;33271:9;33267:17;33260:47;33324:131;33450:4;33324:131;:::i;:::-;33316:139;;33043:419;;;:::o;33468:225::-;33608:34;33604:1;33596:6;33592:14;33585:58;33677:8;33672:2;33664:6;33660:15;33653:33;33468:225;:::o;33699:366::-;33841:3;33862:67;33926:2;33921:3;33862:67;:::i;:::-;33855:74;;33938:93;34027:3;33938:93;:::i;:::-;34056:2;34051:3;34047:12;34040:19;;33699:366;;;:::o;34071:419::-;34237:4;34275:2;34264:9;34260:18;34252:26;;34324:9;34318:4;34314:20;34310:1;34299:9;34295:17;34288:47;34352:131;34478:4;34352:131;:::i;:::-;34344:139;;34071:419;;;:::o;34496:143::-;34553:5;34584:6;34578:13;34569:22;;34600:33;34627:5;34600:33;:::i;:::-;34496:143;;;;:::o;34645:351::-;34715:6;34764:2;34752:9;34743:7;34739:23;34735:32;34732:119;;;34770:79;;:::i;:::-;34732:119;34890:1;34915:64;34971:7;34962:6;34951:9;34947:22;34915:64;:::i;:::-;34905:74;;34861:128;34645:351;;;;:::o;35002:85::-;35047:7;35076:5;35065:16;;35002:85;;;:::o;35093:158::-;35151:9;35184:61;35202:42;35211:32;35237:5;35211:32;:::i;:::-;35202:42;:::i;:::-;35184:61;:::i;:::-;35171:74;;35093:158;;;:::o;35257:147::-;35352:45;35391:5;35352:45;:::i;:::-;35347:3;35340:58;35257:147;;:::o;35410:114::-;35477:6;35511:5;35505:12;35495:22;;35410:114;;;:::o;35530:184::-;35629:11;35663:6;35658:3;35651:19;35703:4;35698:3;35694:14;35679:29;;35530:184;;;;:::o;35720:132::-;35787:4;35810:3;35802:11;;35840:4;35835:3;35831:14;35823:22;;35720:132;;;:::o;35858:108::-;35935:24;35953:5;35935:24;:::i;:::-;35930:3;35923:37;35858:108;;:::o;35972:179::-;36041:10;36062:46;36104:3;36096:6;36062:46;:::i;:::-;36140:4;36135:3;36131:14;36117:28;;35972:179;;;;:::o;36157:113::-;36227:4;36259;36254:3;36250:14;36242:22;;36157:113;;;:::o;36306:732::-;36425:3;36454:54;36502:5;36454:54;:::i;:::-;36524:86;36603:6;36598:3;36524:86;:::i;:::-;36517:93;;36634:56;36684:5;36634:56;:::i;:::-;36713:7;36744:1;36729:284;36754:6;36751:1;36748:13;36729:284;;;36830:6;36824:13;36857:63;36916:3;36901:13;36857:63;:::i;:::-;36850:70;;36943:60;36996:6;36943:60;:::i;:::-;36933:70;;36789:224;36776:1;36773;36769:9;36764:14;;36729:284;;;36733:14;37029:3;37022:10;;36430:608;;;36306:732;;;;:::o;37044:831::-;37307:4;37345:3;37334:9;37330:19;37322:27;;37359:71;37427:1;37416:9;37412:17;37403:6;37359:71;:::i;:::-;37440:80;37516:2;37505:9;37501:18;37492:6;37440:80;:::i;:::-;37567:9;37561:4;37557:20;37552:2;37541:9;37537:18;37530:48;37595:108;37698:4;37689:6;37595:108;:::i;:::-;37587:116;;37713:72;37781:2;37770:9;37766:18;37757:6;37713:72;:::i;:::-;37795:73;37863:3;37852:9;37848:19;37839:6;37795:73;:::i;:::-;37044:831;;;;;;;;:::o;37881:807::-;38130:4;38168:3;38157:9;38153:19;38145:27;;38182:71;38250:1;38239:9;38235:17;38226:6;38182:71;:::i;:::-;38263:72;38331:2;38320:9;38316:18;38307:6;38263:72;:::i;:::-;38345:80;38421:2;38410:9;38406:18;38397:6;38345:80;:::i;:::-;38435;38511:2;38500:9;38496:18;38487:6;38435:80;:::i;:::-;38525:73;38593:3;38582:9;38578:19;38569:6;38525:73;:::i;:::-;38608;38676:3;38665:9;38661:19;38652:6;38608:73;:::i;:::-;37881:807;;;;;;;;;:::o;38694:143::-;38751:5;38782:6;38776:13;38767:22;;38798:33;38825:5;38798:33;:::i;:::-;38694:143;;;;:::o;38843:663::-;38931:6;38939;38947;38996:2;38984:9;38975:7;38971:23;38967:32;38964:119;;;39002:79;;:::i;:::-;38964:119;39122:1;39147:64;39203:7;39194:6;39183:9;39179:22;39147:64;:::i;:::-;39137:74;;39093:128;39260:2;39286:64;39342:7;39333:6;39322:9;39318:22;39286:64;:::i;:::-;39276:74;;39231:129;39399:2;39425:64;39481:7;39472:6;39461:9;39457:22;39425:64;:::i;:::-;39415:74;;39370:129;38843:663;;;;;:::o;39512:179::-;39652:31;39648:1;39640:6;39636:14;39629:55;39512:179;:::o;39697:366::-;39839:3;39860:67;39924:2;39919:3;39860:67;:::i;:::-;39853:74;;39936:93;40025:3;39936:93;:::i;:::-;40054:2;40049:3;40045:12;40038:19;;39697:366;;;:::o;40069:419::-;40235:4;40273:2;40262:9;40258:18;40250:26;;40322:9;40316:4;40312:20;40308:1;40297:9;40293:17;40286:47;40350:131;40476:4;40350:131;:::i;:::-;40342:139;;40069:419;;;:::o;40494:147::-;40595:11;40632:3;40617:18;;40494:147;;;;:::o;40647:114::-;;:::o;40767:398::-;40926:3;40947:83;41028:1;41023:3;40947:83;:::i;:::-;40940:90;;41039:93;41128:3;41039:93;:::i;:::-;41157:1;41152:3;41148:11;41141:18;;40767:398;;;:::o;41171:379::-;41355:3;41377:147;41520:3;41377:147;:::i;:::-;41370:154;;41541:3;41534:10;;41171:379;;;:::o;41556:245::-;41696:34;41692:1;41684:6;41680:14;41673:58;41765:28;41760:2;41752:6;41748:15;41741:53;41556:245;:::o;41807:366::-;41949:3;41970:67;42034:2;42029:3;41970:67;:::i;:::-;41963:74;;42046:93;42135:3;42046:93;:::i;:::-;42164:2;42159:3;42155:12;42148:19;;41807:366;;;:::o;42179:419::-;42345:4;42383:2;42372:9;42368:18;42360:26;;42432:9;42426:4;42422:20;42418:1;42407:9;42403:17;42396:47;42460:131;42586:4;42460:131;:::i;:::-;42452:139;;42179:419;;;:::o

Swarm Source

ipfs://7daf7b012b08b5ce2cd72f9d5c1da782a8f3b4aef182412a0609468c64417632

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.