ETH Price: $3,438.34 (-1.39%)

Token

Shelter Secure AI (SSAI)
 

Overview

Max Total Supply

10,000,000 SSAI

Holders

123

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SSAI

Value
$0.00
0x9ddaa66641bacf4750849f7d2817bb026f1b5825
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SSAI

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-14
*/

/*

    Shelter Secure AI, specializes in top-tier security audits for crypto tokens, ensuring you never go for a token with major
    vulnerabilities.

    Identify weak points, analyze KOL wallets, track whale activities, and monitor early buyers purchases - all through our DAPP or Telegram bot.

    https://x.com/ShelterSecureAI
    https://t.me/sheltersecureai
    https://sheltersecure.ai/
*/

pragma solidity 0.8.26;

// SPDX-License-Identifier: MIT

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 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
    function mint(address to) external returns (uint liquidity);
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

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

interface IWETH {
    function deposit() external payable; 
}

contract SSAI is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingAllowed;

    mapping (address => bool) public isAMMPair;

    address public operationsAddress;

    uint24 public taxPercent;

    mapping(address => uint256) private _holderLastTransferBlock;

    bool public limited = true;

    uint256 public swapTokensAtAmt;
    uint256 public lastSwapBackBlock;

    address public immutable lpPair;
    IDexRouter public immutable dexRouter;
    address public immutable WETH;

    uint64 public constant FEE_DIVISOR = 10000;

    uint256 public launchTimestamp;
    bool public dynamicTaxOn;

    bool public transferDelayEnabled = true;

    // structs

    uint128 public walletLimit;

    // events

    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedTax(uint newAmt);

    // constructor

    constructor() payable
        ERC20("Shelter Secure AI", "SSAI")
    {   
        address newOwner = msg.sender;
        _mint(newOwner, 10_000_000 * 1e18);
        super._transfer(newOwner, address(this), balanceOf(newOwner) * 65 / 100);

        address _v2Router;

        dynamicTaxOn = true;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else if(block.chainid == 8453){
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
         } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        walletLimit = uint128(totalSupply() * 1 / 100);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        operationsAddress = 0x76904A8dC1f8cC9bB5Bc04b77cD463bfC7a253D9;

        taxPercent = 3000;

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[newOwner] = true;
        exemptFromLimits[address(this)] = true;

        exemptFromFees[newOwner] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
        exemptFromFees[tx.origin] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(newOwner), address(dexRouter), totalSupply());

        transferOwnership(newOwner);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            amount -= handleTax(from, to, amount);
            checkLimits(from, to, amount);
        }

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

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount + balanceOfTo <= walletLimit, "Max Wallet");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= walletLimit, "Max Wallet");
            }

            if(transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number, "Transfer Delay");
                    _holderLastTransferBlock[to] = block.number;
                    _holderLastTransferBlock[tx.origin] = block.number;
                    if(from == address(lpPair)){
                        require(tx.origin == to, "no buying to external wallets yet");
                    }
                }
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && isAMMPair[to] && lastSwapBackBlock + 2 <= block.number) {
            convertTaxes();
        }

        if(dynamicTaxOn){
            setInternalTaxes();
        }
        
        uint128 tax = 0;

        if (isAMMPair[to] || isAMMPair[from]){
            tax = uint128(amount * taxPercent / FEE_DIVISOR);
            if(tax > 0){
                super._transfer(from, address(this), tax);
            }
        }

        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(operationsAddress),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        
        if(contractBalance == 0) {return;}

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

        if(contractBalance > 0){
            swapTokensForETH(contractBalance);
        }

        lastSwapBackBlock = block.number;
    }

    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low");
        walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(walletLimit);
    }

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

    function updateTax(uint24 _taxPercent) external onlyOwner {
        require(_taxPercent  <= 3000 , "Tax too high");
        if(!limited){
            require(_taxPercent <= 500 || _taxPercent < taxPercent, "Tax too high");
        }
        emit UpdatedTax(_taxPercent);
        taxPercent = _taxPercent;
    }

    function enableTrading() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchTimestamp = block.timestamp;
        lastSwapBackBlock = block.number;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        uint256 supply = totalSupply();
        walletLimit = uint128(supply);
        emit RemovedLimits();
    }

    function setTransferDelay(bool enabled) external onlyOwner {
        transferDelayEnabled = enabled;
    }

    function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner {
        require(wallets.length == amountsInWei.length, "arrays length mismatch");
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInWei[i]);
        }
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateOperationsAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        operationsAddress = _address;
    }

    function removeDynamicTax() external onlyOwner {
        require(dynamicTaxOn, "Already off");
        dynamicTaxOn = false;
    }

    function setInternalTaxes() internal {
        uint256 currentTime = block.timestamp;
        uint256 timeSinceLaunch = currentTime - launchTimestamp;

        if(timeSinceLaunch >= 35 minutes){
            dynamicTaxOn = false;
            taxPercent = 500;
            limited = false;
            uint256 supply = totalSupply();
            walletLimit = uint128(supply);
            emit RemovedLimits();
        } else if (timeSinceLaunch >= 25 minutes) {
            taxPercent = 1000;
        } else if (timeSinceLaunch >= 15 minutes) {
            taxPercent = 1500;
        } else if (timeSinceLaunch >= 5 minutes) {
            taxPercent = 2000;
            transferDelayEnabled = false;
        }
    }

    function addLp(address to) external payable onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        require(address(this).balance > 0 && balanceOf(address(this)) > 0);

        IWETH(WETH).deposit{value: address(this).balance}();
        address pair = lpPair;

        super._transfer(address(this), address(pair), balanceOf(address(this)));

        IERC20(address(WETH)).transfer(address(pair), IERC20(address(WETH)).balanceOf(address(this)));
        ILpPair(pair).mint(address(to));
        tradingAllowed = true;
        launchTimestamp = block.timestamp;
        lastSwapBackBlock = block.number;
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = payable(msg.sender).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"addLp","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTaxOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeDynamicTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxPercent","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_taxPercent","type":"uint24"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040526001600c5f6101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506040518060400160405280601181526020017f5368656c746572205365637572652041490000000000000000000000000000008152506040518060400160405280600481526020017f535341490000000000000000000000000000000000000000000000000000000081525081600390816100b4919061128d565b5080600490816100c4919061128d565b5050505f6100d66108e560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f339050610192816a084595161401484a0000006108ec60201b60201c565b6101c98130606460416101aa86610a2460201b60201c565b6101b49190611389565b6101be91906113f7565b610a6960201b60201c565b5f600160105f6101000a81548160ff0219169083151502179055506001460361020857737a250d5630b4cf539739df2c5dacb4c659f2488d90506102d9565b6005460361022c57737a250d5630b4cf539739df2c5dacb4c659f2488d90506102d8565b606146036102505773d99d1c33f9fc3444f8101754abc46c52416550d190506102d7565b61a4b1460361027557731b02da8cb0d097eb8d57a175b88c7d8b4799750690506102d6565b612105460361029a57734752ba5dbc23f44d87826276bf6fd6b1c372ad2490506102d5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102cc90611481565b60405180910390fd5b5b5b5b5b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506064600161031f610cbf60201b60201c565b6103299190611389565b61033391906113f7565b601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550620186a0601961037f610cbf60201b60201c565b6103899190611389565b61039391906113f7565b600d819055507376904a8dc1f8cc9bb5bc04b77cd463bfc7a253d9600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bb8600a60146101000a81548162ffffff021916908362ffffff16021790555060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047d91906114fd565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051f91906114fd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b815260040161055b929190611537565b6020604051808303815f875af1158015610577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059b91906114fd565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160095f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506108af3060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610cc860201b60201c565b6108cf8260a0516108c4610cbf60201b60201c565b610cc860201b60201c565b6108de82610e8b60201b60201c565b50506119dd565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361095a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610951906115a8565b60405180910390fd5b8060025f82825461096b91906115c6565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a189190611608565b60405180910390a35050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90611691565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c9061171f565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906117ad565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cb19190611608565b60405180910390a350505050565b5f600254905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d9061183b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906118c9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e7e9190611608565b60405180910390a3505050565b610e996108e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90611931565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c906119bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806110ce57607f821691505b6020821081036110e1576110e061108a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026111437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611108565b61114d8683611108565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61119161118c61118784611165565b61116e565b611165565b9050919050565b5f819050919050565b6111aa83611177565b6111be6111b682611198565b848454611114565b825550505050565b5f90565b6111d26111c6565b6111dd8184846111a1565b505050565b5b81811015611200576111f55f826111ca565b6001810190506111e3565b5050565b601f82111561124557611216816110e7565b61121f846110f9565b8101602085101561122e578190505b61124261123a856110f9565b8301826111e2565b50505b505050565b5f82821c905092915050565b5f6112655f198460080261124a565b1980831691505092915050565b5f61127d8383611256565b9150826002028217905092915050565b61129682611053565b67ffffffffffffffff8111156112af576112ae61105d565b5b6112b982546110b7565b6112c4828285611204565b5f60209050601f8311600181146112f5575f84156112e3578287015190505b6112ed8582611272565b865550611354565b601f198416611303866110e7565b5f5b8281101561132a57848901518255600182019150602085019450602081019050611305565b868310156113475784890151611343601f891682611256565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61139382611165565b915061139e83611165565b92508282026113ac81611165565b915082820484148315176113c3576113c261135c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61140182611165565b915061140c83611165565b92508261141c5761141b6113ca565b5b828204905092915050565b5f82825260208201905092915050565b7f436861696e206e6f7420636f6e666967757265640000000000000000000000005f82015250565b5f61146b601483611427565b915061147682611437565b602082019050919050565b5f6020820190508181035f8301526114988161145f565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6114cc826114a3565b9050919050565b6114dc816114c2565b81146114e6575f80fd5b50565b5f815190506114f7816114d3565b92915050565b5f602082840312156115125761151161149f565b5b5f61151f848285016114e9565b91505092915050565b611531816114c2565b82525050565b5f60408201905061154a5f830185611528565b6115576020830184611528565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611592601f83611427565b915061159d8261155e565b602082019050919050565b5f6020820190508181035f8301526115bf81611586565b9050919050565b5f6115d082611165565b91506115db83611165565b92508282019050808211156115f3576115f261135c565b5b92915050565b61160281611165565b82525050565b5f60208201905061161b5f8301846115f9565b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61167b602583611427565b915061168682611621565b604082019050919050565b5f6020820190508181035f8301526116a88161166f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611709602383611427565b9150611714826116af565b604082019050919050565b5f6020820190508181035f830152611736816116fd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611797602683611427565b91506117a28261173d565b604082019050919050565b5f6020820190508181035f8301526117c48161178b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611825602483611427565b9150611830826117cb565b604082019050919050565b5f6020820190508181035f83015261185281611819565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6118b3602283611427565b91506118be82611859565b604082019050919050565b5f6020820190508181035f8301526118e0816118a7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61191b602083611427565b9150611926826118e7565b602082019050919050565b5f6020820190508181035f8301526119488161190f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6119a9602683611427565b91506119b48261194f565b604082019050919050565b5f6020820190508181035f8301526119d68161199d565b9050919050565b60805160a05160c0516154f5611a4d5f395f8181610b0a01528181610bbe01528181610bfb01528181611e6e015261379a01525f8181610e27015281816131b8015261380901525f8181610b8801528181611389015281816121d40152818161320f015261336801526154f55ff3fe608060405260043610610271575f3560e01c8063751039fc1161014e578063a9059cbb116100c0578063ccad03e111610079578063ccad03e114610911578063dd62ed3e14610939578063ea4cfe1214610975578063ea6debd01461099f578063f2fde38b146109c7578063f5648a4f146109ef57610271565b8063a9059cbb146107f3578063ad5c46481461082f578063b0249cc614610859578063bedafd0114610895578063c78d0fa0146108bd578063c876d0b9146108e757610271565b80638d3e6e40116101125780638d3e6e40146106e75780638da5cb5b1461072357806395d89b411461074d5780639e7261af146107775780639e93ad8e1461078d578063a457c2d7146107b757610271565b8063751039fc1461063f5780637541f41c1461065557806377c325d61461067f578063860a32ec146106a75780638a8c523c146106d157610271565b806339509351116101e75780635431c94e116101ab5780635431c94e146105375780635a90a49e1461055f57806365cf7c9b1461059b57806366ebd39a146105c557806370a08231146105ed578063715018a61461062957610271565b806339509351146104535780633c8463a11461048f578063432e95a5146104b9578063452ed4f1146104e357806353371be01461050d57610271565b80632104591811610239578063210459181461034b5780632307b4411461037357806323b872dd1461039b578063313ce567146103d757806332393cf814610401578063362919a71461042957610271565b806306f200031461027557806306fdde03146102915780630758d924146102bb578063095ea7b3146102e557806318160ddd14610321575b5f80fd5b61028f600480360381019061028a9190613aca565b610a05565b005b34801561029c575f80fd5b506102a5610d95565b6040516102b29190613b65565b60405180910390f35b3480156102c6575f80fd5b506102cf610e25565b6040516102dc9190613be0565b60405180910390f35b3480156102f0575f80fd5b5061030b60048036038101906103069190613c2c565b610e49565b6040516103189190613c84565b60405180910390f35b34801561032c575f80fd5b50610335610e6b565b6040516103429190613cac565b60405180910390f35b348015610356575f80fd5b50610371600480360381019061036c9190613cc5565b610e74565b005b34801561037e575f80fd5b5061039960048036038101906103949190613da6565b610fdb565b005b3480156103a6575f80fd5b506103c160048036038101906103bc9190613e24565b611125565b6040516103ce9190613c84565b60405180910390f35b3480156103e2575f80fd5b506103eb611153565b6040516103f89190613e8f565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190613ee0565b61115b565b005b348015610434575f80fd5b5061043d611317565b60405161044a9190613c84565b60405180910390f35b34801561045e575f80fd5b5061047960048036038101906104749190613c2c565b611329565b6040516104869190613c84565b60405180910390f35b34801561049a575f80fd5b506104a361135f565b6040516104b09190613f35565b60405180910390f35b3480156104c4575f80fd5b506104cd611381565b6040516104da9190613cac565b60405180910390f35b3480156104ee575f80fd5b506104f7611387565b6040516105049190613f5d565b60405180910390f35b348015610518575f80fd5b506105216113ab565b60405161052e9190613c84565b60405180910390f35b348015610542575f80fd5b5061055d60048036038101906105589190613f76565b6113bd565b005b34801561056a575f80fd5b5061058560048036038101906105809190613aca565b61154c565b6040516105929190613c84565b60405180910390f35b3480156105a6575f80fd5b506105af611569565b6040516105bc9190613cac565b60405180910390f35b3480156105d0575f80fd5b506105eb60048036038101906105e69190613fde565b61156f565b005b3480156105f8575f80fd5b50610613600480360381019061060e9190613aca565b611758565b6040516106209190613cac565b60405180910390f35b348015610634575f80fd5b5061063d61179d565b005b34801561064a575f80fd5b506106536118f0565b005b348015610660575f80fd5b50610669611a12565b6040516106769190614018565b60405180910390f35b34801561068a575f80fd5b506106a560048036038101906106a0919061405b565b611a27565b005b3480156106b2575f80fd5b506106bb611ada565b6040516106c89190613c84565b60405180910390f35b3480156106dc575f80fd5b506106e5611aec565b005b3480156106f2575f80fd5b5061070d60048036038101906107089190613aca565b611bfb565b60405161071a9190613c84565b60405180910390f35b34801561072e575f80fd5b50610737611c18565b6040516107449190613f5d565b60405180910390f35b348015610758575f80fd5b50610761611c40565b60405161076e9190613b65565b60405180910390f35b348015610782575f80fd5b5061078b611cd0565b005b348015610798575f80fd5b506107a1611dcf565b6040516107ae91906140a8565b60405180910390f35b3480156107c2575f80fd5b506107dd60048036038101906107d89190613c2c565b611dd5565b6040516107ea9190613c84565b60405180910390f35b3480156107fe575f80fd5b5061081960048036038101906108149190613c2c565b611e4a565b6040516108269190613c84565b60405180910390f35b34801561083a575f80fd5b50610843611e6c565b6040516108509190613f5d565b60405180910390f35b348015610864575f80fd5b5061087f600480360381019061087a9190613aca565b611e90565b60405161088c9190613c84565b60405180910390f35b3480156108a0575f80fd5b506108bb60048036038101906108b691906140c1565b611ead565b005b3480156108c8575f80fd5b506108d16120b0565b6040516108de9190613cac565b60405180910390f35b3480156108f2575f80fd5b506108fb6120b6565b6040516109089190613c84565b60405180910390f35b34801561091c575f80fd5b50610937600480360381019061093291906140c1565b6120c9565b005b348015610944575f80fd5b5061095f600480360381019061095a9190613f76565b6122f2565b60405161096c9190613cac565b60405180910390f35b348015610980575f80fd5b50610989612374565b6040516109969190613f5d565b60405180910390f35b3480156109aa575f80fd5b506109c560048036038101906109c09190613aca565b612399565b005b3480156109d2575f80fd5b506109ed60048036038101906109e89190613aca565b6124e0565b005b3480156109fa575f80fd5b50610a036126a2565b005b610a0d6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290614149565b60405180910390fd5b60085f9054906101000a900460ff1615610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae1906141b1565b60405180910390fd5b5f47118015610b0057505f610afe30611758565b115b610b08575f80fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004015f604051808303818588803b158015610b6e575f80fd5b505af1158015610b80573d5f803e3d5ffd5b50505050505f7f00000000000000000000000000000000000000000000000000000000000000009050610bbc3082610bb730611758565b6127ac565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c529190613f5d565b602060405180830381865afa158015610c6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9191906141e3565b6040518363ffffffff1660e01b8152600401610cae92919061420e565b6020604051808303815f875af1158015610cca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cee9190614249565b508073ffffffffffffffffffffffffffffffffffffffff16636a627842836040518263ffffffff1660e01b8152600401610d289190613f5d565b6020604051808303815f875af1158015610d44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6891906141e3565b50600160085f6101000a81548160ff02191690831515021790555042600f8190555043600e819055505050565b606060038054610da4906142a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd0906142a1565b8015610e1b5780601f10610df257610100808354040283529160200191610e1b565b820191905f5260205f20905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610e536127a5565b9050610e60818585612a02565b600191505092915050565b5f600254905090565b610e7c6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190614149565b60405180910390fd5b620186a06001610f18610e6b565b610f2291906142fe565b610f2c919061436c565b811015610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f659061440c565b60405180910390fd5b6103e86005610f7b610e6b565b610f8591906142fe565b610f8f919061436c565b811115610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061449a565b60405180910390fd5b80600d8190555050565b610fe36127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614149565b60405180910390fd5b8181905084849050146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614502565b60405180910390fd5b5f5b8484905081101561111e57611111338686848181106110dd576110dc614520565b5b90506020020160208101906110f29190613aca565b85858581811061110557611104614520565b5b905060200201356127ac565b80806001019150506110bb565b5050505050565b5f8061112f6127a5565b905061113c858285612bc5565b611147858585612c50565b60019150509392505050565b5f6012905090565b6111636127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e890614149565b60405180910390fd5b610bb88162ffffff16111561123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614597565b60405180910390fd5b600c5f9054906101000a900460ff166112be576101f48162ffffff1611158061127e5750600a60149054906101000a900462ffffff1662ffffff168162ffffff16105b6112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614597565b60405180910390fd5b5b7f5582bb85c6567acbabcb3b1166d082a7a8215af3f33d510a94139c82b8d49043816040516112ed91906145e5565b60405180910390a180600a60146101000a81548162ffffff021916908362ffffff16021790555050565b60105f9054906101000a900460ff1681565b5f806113336127a5565b905061135481858561134585896122f2565b61134f91906145fe565b612a02565b600191505092915050565b601060029054906101000a90046fffffffffffffffffffffffffffffffff1681565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085f9054906101000a900460ff1681565b6113c56127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b89061467b565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114fb9190613f5d565b602060405180830381865afa158015611516573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153a91906141e3565b9050611547838383612d75565b505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6115776127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90614149565b60405180910390fd5b61160d611153565b600a61161991906147c8565b60646001611625610e6b565b61162f91906142fe565b611639919061436c565b611643919061436c565b816fffffffffffffffffffffffffffffffff161015611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e9061485c565b60405180910390fd5b61169f611153565b600a6116ab91906147c8565b816fffffffffffffffffffffffffffffffff166116c891906142fe565b601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788601060029054906101000a90046fffffffffffffffffffffffffffffffff1660405161174d91906148aa565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6117a56127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118f86127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614149565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055505f6119a8610e6b565b905080601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a150565b600a60149054906101000a900462ffffff1681565b611a2f6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490614149565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b600c5f9054906101000a900460ff1681565b611af46127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614149565b60405180910390fd5b60085f9054906101000a900460ff1615611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc8906141b1565b60405180910390fd5b600160085f6101000a81548160ff02191690831515021790555042600f8190555043600e81905550565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611c4f906142a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7b906142a1565b8015611cc65780601f10611c9d57610100808354040283529160200191611cc6565b820191905f5260205f20905b815481529060010190602001808311611ca957829003601f168201915b5050505050905090565b611cd86127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90614149565b60405180910390fd5b60105f9054906101000a900460ff16611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab9061490d565b60405180910390fd5b5f60105f6101000a81548160ff021916908315150217905550565b61271081565b5f80611ddf6127a5565b90505f611dec82866122f2565b905083811015611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e289061499b565b60405180910390fd5b611e3e8286868403612a02565b60019250505092915050565b5f80611e546127a5565b9050611e61818585612c50565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052805f5260405f205f915054906101000a900460ff1681565b611eb56127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614a03565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690614a6b565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d82826040516120a4929190614a89565b60405180910390a15050565b600d5481565b601060019054906101000a900460ff1681565b6120d16127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c490614a03565b60405180910390fd5b80612261577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225790614afa565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce82826040516122e6929190614a89565b60405180910390a15050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123a16127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614b62565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124e86127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90614bf0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126aa6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272f90614149565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff164760405161275d90614c3b565b5f6040518083038185875af1925050503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50508091505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281190614cbf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614d4d565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ddb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129f49190613cac565b60405180910390a350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6790614e69565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad590614ef7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb89190613cac565b60405180910390a3505050565b5f612bd084846122f2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c4a5781811015612c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3390614f5f565b60405180910390fd5b612c498484848403612a02565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612cee575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d655760085f9054906101000a900460ff16612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614fc7565b60405180910390fd5b612d4c838383612dfb565b81612d579190614fe5565b9050612d64838383612fd3565b5b612d708383836127ac565b505050565b612df68363a9059cbb60e01b8484604051602401612d9492919061420e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613432565b505050565b5f600d54612e0830611758565b10158015612e5c575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612e765750436002600e54612e7391906145fe565b11155b15612e8457612e836134f7565b5b60105f9054906101000a900460ff1615612ea157612ea0613555565b5b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f3d575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612fb65761271067ffffffffffffffff16600a60149054906101000a900462ffffff1662ffffff1684612f7191906142fe565b612f7b919061436c565b90505f816fffffffffffffffffffffffffffffffff161115612fb557612fb48530836fffffffffffffffffffffffffffffffff166127ac565b5b5b806fffffffffffffffffffffffffffffffff169150509392505050565b600c5f9054906101000a900460ff161561342d575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f61303e84611758565b905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613094575081155b1561311c57601060029054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681846130d691906145fe565b1115613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e90615062565b60405180910390fd5b6131a1565b816131a057601060029054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16818461315e91906145fe565b111561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690615062565b60405180910390fd5b5b5b601060019054906101000a900460ff161561342a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561325e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156134295743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106132e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d9906150ca565b60405180910390fd5b43600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613428578373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614613427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341e90615158565b60405180910390fd5b5b5b5b50505b505050565b5f613493826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166136e69092919063ffffffff16565b90505f815111156134f257808060200190518101906134b29190614249565b6134f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e8906151e6565b60405180910390fd5b5b505050565b5f61350130611758565b90505f81036135105750613553565b6014600d5461351f91906142fe565b811115613538576014600d5461353591906142fe565b90505b5f81111561354a57613549816136fd565b5b43600e81905550505b565b5f4290505f600f54826135689190614fe5565b9050610834811061363c575f60105f6101000a81548160ff0219169083151502179055506101f4600a60146101000a81548162ffffff021916908362ffffff1602179055505f600c5f6101000a81548160ff0219169083151502179055505f6135cf610e6b565b905080601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1506136e2565b6105dc811061366b576103e8600a60146101000a81548162ffffff021916908362ffffff1602179055506136e1565b610384811061369a576105dc600a60146101000a81548162ffffff021916908362ffffff1602179055506136e0565b61012c81106136df576107d0600a60146101000a81548162ffffff021916908362ffffff1602179055505f601060016101000a81548160ff0219169083151502179055505b5b5b5b5050565b60606136f484845f856138ba565b90509392505050565b5f600267ffffffffffffffff81111561371957613718615204565b5b6040519080825280602002602001820160405280156137475781602001602082028036833780820191505090505b50905030815f8151811061375e5761375d614520565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106137cd576137cc614520565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613889959493929190615321565b5f604051808303815f87803b1580156138a0575f80fd5b505af11580156138b2573d5f803e3d5ffd5b505050505050565b6060824710156138ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f6906153e9565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516139279190615441565b5f6040518083038185875af1925050503d805f8114613961576040519150601f19603f3d011682016040523d82523d5f602084013e613966565b606091505b509150915061397787838387613983565b92505050949350505050565b606083156139e4575f8351036139dc5761399c856139f7565b6139db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d2906154a1565b60405180910390fd5b5b8290506139ef565b6139ee8383613a19565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f82511115613a2b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5f9190613b65565b60405180910390fd5b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a9982613a70565b9050919050565b613aa981613a8f565b8114613ab3575f80fd5b50565b5f81359050613ac481613aa0565b92915050565b5f60208284031215613adf57613ade613a68565b5b5f613aec84828501613ab6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b3782613af5565b613b418185613aff565b9350613b51818560208601613b0f565b613b5a81613b1d565b840191505092915050565b5f6020820190508181035f830152613b7d8184613b2d565b905092915050565b5f819050919050565b5f613ba8613ba3613b9e84613a70565b613b85565b613a70565b9050919050565b5f613bb982613b8e565b9050919050565b5f613bca82613baf565b9050919050565b613bda81613bc0565b82525050565b5f602082019050613bf35f830184613bd1565b92915050565b5f819050919050565b613c0b81613bf9565b8114613c15575f80fd5b50565b5f81359050613c2681613c02565b92915050565b5f8060408385031215613c4257613c41613a68565b5b5f613c4f85828601613ab6565b9250506020613c6085828601613c18565b9150509250929050565b5f8115159050919050565b613c7e81613c6a565b82525050565b5f602082019050613c975f830184613c75565b92915050565b613ca681613bf9565b82525050565b5f602082019050613cbf5f830184613c9d565b92915050565b5f60208284031215613cda57613cd9613a68565b5b5f613ce784828501613c18565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613d1157613d10613cf0565b5b8235905067ffffffffffffffff811115613d2e57613d2d613cf4565b5b602083019150836020820283011115613d4a57613d49613cf8565b5b9250929050565b5f8083601f840112613d6657613d65613cf0565b5b8235905067ffffffffffffffff811115613d8357613d82613cf4565b5b602083019150836020820283011115613d9f57613d9e613cf8565b5b9250929050565b5f805f8060408587031215613dbe57613dbd613a68565b5b5f85013567ffffffffffffffff811115613ddb57613dda613a6c565b5b613de787828801613cfc565b9450945050602085013567ffffffffffffffff811115613e0a57613e09613a6c565b5b613e1687828801613d51565b925092505092959194509250565b5f805f60608486031215613e3b57613e3a613a68565b5b5f613e4886828701613ab6565b9350506020613e5986828701613ab6565b9250506040613e6a86828701613c18565b9150509250925092565b5f60ff82169050919050565b613e8981613e74565b82525050565b5f602082019050613ea25f830184613e80565b92915050565b5f62ffffff82169050919050565b613ebf81613ea8565b8114613ec9575f80fd5b50565b5f81359050613eda81613eb6565b92915050565b5f60208284031215613ef557613ef4613a68565b5b5f613f0284828501613ecc565b91505092915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b613f2f81613f0b565b82525050565b5f602082019050613f485f830184613f26565b92915050565b613f5781613a8f565b82525050565b5f602082019050613f705f830184613f4e565b92915050565b5f8060408385031215613f8c57613f8b613a68565b5b5f613f9985828601613ab6565b9250506020613faa85828601613ab6565b9150509250929050565b613fbd81613f0b565b8114613fc7575f80fd5b50565b5f81359050613fd881613fb4565b92915050565b5f60208284031215613ff357613ff2613a68565b5b5f61400084828501613fca565b91505092915050565b61401281613ea8565b82525050565b5f60208201905061402b5f830184614009565b92915050565b61403a81613c6a565b8114614044575f80fd5b50565b5f8135905061405581614031565b92915050565b5f602082840312156140705761406f613a68565b5b5f61407d84828501614047565b91505092915050565b5f67ffffffffffffffff82169050919050565b6140a281614086565b82525050565b5f6020820190506140bb5f830184614099565b92915050565b5f80604083850312156140d7576140d6613a68565b5b5f6140e485828601613ab6565b92505060206140f585828601614047565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614133602083613aff565b915061413e826140ff565b602082019050919050565b5f6020820190508181035f83015261416081614127565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f61419b601783613aff565b91506141a682614167565b602082019050919050565b5f6020820190508181035f8301526141c88161418f565b9050919050565b5f815190506141dd81613c02565b92915050565b5f602082840312156141f8576141f7613a68565b5b5f614205848285016141cf565b91505092915050565b5f6040820190506142215f830185613f4e565b61422e6020830184613c9d565b9392505050565b5f8151905061424381614031565b92915050565b5f6020828403121561425e5761425d613a68565b5b5f61426b84828501614235565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806142b857607f821691505b6020821081036142cb576142ca614274565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430882613bf9565b915061431383613bf9565b925082820261432181613bf9565b91508282048414831517614338576143376142d1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61437682613bf9565b915061438183613bf9565b9250826143915761439061433f565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143f6603583613aff565b91506144018261439c565b604082019050919050565b5f6020820190508181035f830152614423816143ea565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614484603483613aff565b915061448f8261442a565b604082019050919050565b5f6020820190508181035f8301526144b181614478565b9050919050565b7f617272617973206c656e677468206d69736d61746368000000000000000000005f82015250565b5f6144ec601683613aff565b91506144f7826144b8565b602082019050919050565b5f6020820190508181035f830152614519816144e0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54617820746f6f206869676800000000000000000000000000000000000000005f82015250565b5f614581600c83613aff565b915061458c8261454d565b602082019050919050565b5f6020820190508181035f8301526145ae81614575565b9050919050565b5f6145cf6145ca6145c584613ea8565b613b85565b613bf9565b9050919050565b6145df816145b5565b82525050565b5f6020820190506145f85f8301846145d6565b92915050565b5f61460882613bf9565b915061461383613bf9565b925082820190508082111561462b5761462a6142d1565b5b92915050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614665601a83613aff565b915061467082614631565b602082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156146ee578086048111156146ca576146c96142d1565b5b60018516156146d95780820291505b80810290506146e785614699565b94506146ae565b94509492505050565b5f8261470657600190506147c1565b81614713575f90506147c1565b8160018114614729576002811461473357614762565b60019150506147c1565b60ff841115614745576147446142d1565b5b8360020a91508482111561475c5761475b6142d1565b5b506147c1565b5060208310610133831016604e8410600b84101617156147975782820a905083811115614792576147916142d1565b5b6147c1565b6147a484848460016146a5565b925090508184048111156147bb576147ba6142d1565b5b81810290505b9392505050565b5f6147d282613bf9565b91506147dd83613e74565b925061480a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846146f7565b905092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f614846600783613aff565b915061485182614812565b602082019050919050565b5f6020820190508181035f8301526148738161483a565b9050919050565b5f61489461488f61488a84613f0b565b613b85565b613bf9565b9050919050565b6148a48161487a565b82525050565b5f6020820190506148bd5f83018461489b565b92915050565b7f416c7265616479206f66660000000000000000000000000000000000000000005f82015250565b5f6148f7600b83613aff565b9150614902826148c3565b602082019050919050565b5f6020820190508181035f830152614924816148eb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614985602583613aff565b91506149908261492b565b604082019050919050565b5f6020820190508181035f8301526149b281614979565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f6149ed600c83613aff565b91506149f8826149b9565b602082019050919050565b5f6020820190508181035f830152614a1a816149e1565b9050919050565b7f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000005f82015250565b5f614a55601883613aff565b9150614a6082614a21565b602082019050919050565b5f6020820190508181035f830152614a8281614a49565b9050919050565b5f604082019050614a9c5f830185613f4e565b614aa96020830184613c75565b9392505050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f614ae4601283613aff565b9150614aef82614ab0565b602082019050919050565b5f6020820190508181035f830152614b1181614ad8565b9050919050565b7f7a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f614b4c600c83613aff565b9150614b5782614b18565b602082019050919050565b5f6020820190508181035f830152614b7981614b40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614bda602683613aff565b9150614be582614b80565b604082019050919050565b5f6020820190508181035f830152614c0781614bce565b9050919050565b5f81905092915050565b50565b5f614c265f83614c0e565b9150614c3182614c18565b5f82019050919050565b5f614c4582614c1b565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ca9602583613aff565b9150614cb482614c4f565b604082019050919050565b5f6020820190508181035f830152614cd681614c9d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614d37602383613aff565b9150614d4282614cdd565b604082019050919050565b5f6020820190508181035f830152614d6481614d2b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614dc5602683613aff565b9150614dd082614d6b565b604082019050919050565b5f6020820190508181035f830152614df281614db9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e53602483613aff565b9150614e5e82614df9565b604082019050919050565b5f6020820190508181035f830152614e8081614e47565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ee1602283613aff565b9150614eec82614e87565b604082019050919050565b5f6020820190508181035f830152614f0e81614ed5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614f49601d83613aff565b9150614f5482614f15565b602082019050919050565b5f6020820190508181035f830152614f7681614f3d565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f614fb1601283613aff565b9150614fbc82614f7d565b602082019050919050565b5f6020820190508181035f830152614fde81614fa5565b9050919050565b5f614fef82613bf9565b9150614ffa83613bf9565b9250828203905081811115615012576150116142d1565b5b92915050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f61504c600a83613aff565b915061505782615018565b602082019050919050565b5f6020820190508181035f83015261507981615040565b9050919050565b7f5472616e736665722044656c61790000000000000000000000000000000000005f82015250565b5f6150b4600e83613aff565b91506150bf82615080565b602082019050919050565b5f6020820190508181035f8301526150e1816150a8565b9050919050565b7f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079655f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f615142602183613aff565b915061514d826150e8565b604082019050919050565b5f6020820190508181035f83015261516f81615136565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f6151d0602a83613aff565b91506151db82615176565b604082019050919050565b5f6020820190508181035f8301526151fd816151c4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f61525461524f61524a84615231565b613b85565b613bf9565b9050919050565b6152648161523a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61529c81613a8f565b82525050565b5f6152ad8383615293565b60208301905092915050565b5f602082019050919050565b5f6152cf8261526a565b6152d98185615274565b93506152e483615284565b805f5b838110156153145781516152fb88826152a2565b9750615306836152b9565b9250506001810190506152e7565b5085935050505092915050565b5f60a0820190506153345f830188613c9d565b615341602083018761525b565b818103604083015261535381866152c5565b90506153626060830185613f4e565b61536f6080830184613c9d565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f6153d3602683613aff565b91506153de82615379565b604082019050919050565b5f6020820190508181035f830152615400816153c7565b9050919050565b5f81519050919050565b5f61541b82615407565b6154258185614c0e565b9350615435818560208601613b0f565b80840191505092915050565b5f61544c8284615411565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f61548b601d83613aff565b915061549682615457565b602082019050919050565b5f6020820190508181035f8301526154b88161547f565b905091905056fea2646970667358221220aadd486bef967ac0d52902c2d43565007fcb39aa832f1fbfd9366cc9ca2247e264736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610271575f3560e01c8063751039fc1161014e578063a9059cbb116100c0578063ccad03e111610079578063ccad03e114610911578063dd62ed3e14610939578063ea4cfe1214610975578063ea6debd01461099f578063f2fde38b146109c7578063f5648a4f146109ef57610271565b8063a9059cbb146107f3578063ad5c46481461082f578063b0249cc614610859578063bedafd0114610895578063c78d0fa0146108bd578063c876d0b9146108e757610271565b80638d3e6e40116101125780638d3e6e40146106e75780638da5cb5b1461072357806395d89b411461074d5780639e7261af146107775780639e93ad8e1461078d578063a457c2d7146107b757610271565b8063751039fc1461063f5780637541f41c1461065557806377c325d61461067f578063860a32ec146106a75780638a8c523c146106d157610271565b806339509351116101e75780635431c94e116101ab5780635431c94e146105375780635a90a49e1461055f57806365cf7c9b1461059b57806366ebd39a146105c557806370a08231146105ed578063715018a61461062957610271565b806339509351146104535780633c8463a11461048f578063432e95a5146104b9578063452ed4f1146104e357806353371be01461050d57610271565b80632104591811610239578063210459181461034b5780632307b4411461037357806323b872dd1461039b578063313ce567146103d757806332393cf814610401578063362919a71461042957610271565b806306f200031461027557806306fdde03146102915780630758d924146102bb578063095ea7b3146102e557806318160ddd14610321575b5f80fd5b61028f600480360381019061028a9190613aca565b610a05565b005b34801561029c575f80fd5b506102a5610d95565b6040516102b29190613b65565b60405180910390f35b3480156102c6575f80fd5b506102cf610e25565b6040516102dc9190613be0565b60405180910390f35b3480156102f0575f80fd5b5061030b60048036038101906103069190613c2c565b610e49565b6040516103189190613c84565b60405180910390f35b34801561032c575f80fd5b50610335610e6b565b6040516103429190613cac565b60405180910390f35b348015610356575f80fd5b50610371600480360381019061036c9190613cc5565b610e74565b005b34801561037e575f80fd5b5061039960048036038101906103949190613da6565b610fdb565b005b3480156103a6575f80fd5b506103c160048036038101906103bc9190613e24565b611125565b6040516103ce9190613c84565b60405180910390f35b3480156103e2575f80fd5b506103eb611153565b6040516103f89190613e8f565b60405180910390f35b34801561040c575f80fd5b5061042760048036038101906104229190613ee0565b61115b565b005b348015610434575f80fd5b5061043d611317565b60405161044a9190613c84565b60405180910390f35b34801561045e575f80fd5b5061047960048036038101906104749190613c2c565b611329565b6040516104869190613c84565b60405180910390f35b34801561049a575f80fd5b506104a361135f565b6040516104b09190613f35565b60405180910390f35b3480156104c4575f80fd5b506104cd611381565b6040516104da9190613cac565b60405180910390f35b3480156104ee575f80fd5b506104f7611387565b6040516105049190613f5d565b60405180910390f35b348015610518575f80fd5b506105216113ab565b60405161052e9190613c84565b60405180910390f35b348015610542575f80fd5b5061055d60048036038101906105589190613f76565b6113bd565b005b34801561056a575f80fd5b5061058560048036038101906105809190613aca565b61154c565b6040516105929190613c84565b60405180910390f35b3480156105a6575f80fd5b506105af611569565b6040516105bc9190613cac565b60405180910390f35b3480156105d0575f80fd5b506105eb60048036038101906105e69190613fde565b61156f565b005b3480156105f8575f80fd5b50610613600480360381019061060e9190613aca565b611758565b6040516106209190613cac565b60405180910390f35b348015610634575f80fd5b5061063d61179d565b005b34801561064a575f80fd5b506106536118f0565b005b348015610660575f80fd5b50610669611a12565b6040516106769190614018565b60405180910390f35b34801561068a575f80fd5b506106a560048036038101906106a0919061405b565b611a27565b005b3480156106b2575f80fd5b506106bb611ada565b6040516106c89190613c84565b60405180910390f35b3480156106dc575f80fd5b506106e5611aec565b005b3480156106f2575f80fd5b5061070d60048036038101906107089190613aca565b611bfb565b60405161071a9190613c84565b60405180910390f35b34801561072e575f80fd5b50610737611c18565b6040516107449190613f5d565b60405180910390f35b348015610758575f80fd5b50610761611c40565b60405161076e9190613b65565b60405180910390f35b348015610782575f80fd5b5061078b611cd0565b005b348015610798575f80fd5b506107a1611dcf565b6040516107ae91906140a8565b60405180910390f35b3480156107c2575f80fd5b506107dd60048036038101906107d89190613c2c565b611dd5565b6040516107ea9190613c84565b60405180910390f35b3480156107fe575f80fd5b5061081960048036038101906108149190613c2c565b611e4a565b6040516108269190613c84565b60405180910390f35b34801561083a575f80fd5b50610843611e6c565b6040516108509190613f5d565b60405180910390f35b348015610864575f80fd5b5061087f600480360381019061087a9190613aca565b611e90565b60405161088c9190613c84565b60405180910390f35b3480156108a0575f80fd5b506108bb60048036038101906108b691906140c1565b611ead565b005b3480156108c8575f80fd5b506108d16120b0565b6040516108de9190613cac565b60405180910390f35b3480156108f2575f80fd5b506108fb6120b6565b6040516109089190613c84565b60405180910390f35b34801561091c575f80fd5b50610937600480360381019061093291906140c1565b6120c9565b005b348015610944575f80fd5b5061095f600480360381019061095a9190613f76565b6122f2565b60405161096c9190613cac565b60405180910390f35b348015610980575f80fd5b50610989612374565b6040516109969190613f5d565b60405180910390f35b3480156109aa575f80fd5b506109c560048036038101906109c09190613aca565b612399565b005b3480156109d2575f80fd5b506109ed60048036038101906109e89190613aca565b6124e0565b005b3480156109fa575f80fd5b50610a036126a2565b005b610a0d6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290614149565b60405180910390fd5b60085f9054906101000a900460ff1615610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae1906141b1565b60405180910390fd5b5f47118015610b0057505f610afe30611758565b115b610b08575f80fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004015f604051808303818588803b158015610b6e575f80fd5b505af1158015610b80573d5f803e3d5ffd5b50505050505f7f000000000000000000000000ebc7980ac48fe308e2fd39f926f2b362b5d69ad29050610bbc3082610bb730611758565b6127ac565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb827f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c529190613f5d565b602060405180830381865afa158015610c6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9191906141e3565b6040518363ffffffff1660e01b8152600401610cae92919061420e565b6020604051808303815f875af1158015610cca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cee9190614249565b508073ffffffffffffffffffffffffffffffffffffffff16636a627842836040518263ffffffff1660e01b8152600401610d289190613f5d565b6020604051808303815f875af1158015610d44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6891906141e3565b50600160085f6101000a81548160ff02191690831515021790555042600f8190555043600e819055505050565b606060038054610da4906142a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd0906142a1565b8015610e1b5780601f10610df257610100808354040283529160200191610e1b565b820191905f5260205f20905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f80610e536127a5565b9050610e60818585612a02565b600191505092915050565b5f600254905090565b610e7c6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190614149565b60405180910390fd5b620186a06001610f18610e6b565b610f2291906142fe565b610f2c919061436c565b811015610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f659061440c565b60405180910390fd5b6103e86005610f7b610e6b565b610f8591906142fe565b610f8f919061436c565b811115610fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc89061449a565b60405180910390fd5b80600d8190555050565b610fe36127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614149565b60405180910390fd5b8181905084849050146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614502565b60405180910390fd5b5f5b8484905081101561111e57611111338686848181106110dd576110dc614520565b5b90506020020160208101906110f29190613aca565b85858581811061110557611104614520565b5b905060200201356127ac565b80806001019150506110bb565b5050505050565b5f8061112f6127a5565b905061113c858285612bc5565b611147858585612c50565b60019150509392505050565b5f6012905090565b6111636127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e890614149565b60405180910390fd5b610bb88162ffffff16111561123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614597565b60405180910390fd5b600c5f9054906101000a900460ff166112be576101f48162ffffff1611158061127e5750600a60149054906101000a900462ffffff1662ffffff168162ffffff16105b6112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614597565b60405180910390fd5b5b7f5582bb85c6567acbabcb3b1166d082a7a8215af3f33d510a94139c82b8d49043816040516112ed91906145e5565b60405180910390a180600a60146101000a81548162ffffff021916908362ffffff16021790555050565b60105f9054906101000a900460ff1681565b5f806113336127a5565b905061135481858561134585896122f2565b61134f91906145fe565b612a02565b600191505092915050565b601060029054906101000a90046fffffffffffffffffffffffffffffffff1681565b600e5481565b7f000000000000000000000000ebc7980ac48fe308e2fd39f926f2b362b5d69ad281565b60085f9054906101000a900460ff1681565b6113c56127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b89061467b565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114fb9190613f5d565b602060405180830381865afa158015611516573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153a91906141e3565b9050611547838383612d75565b505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6115776127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90614149565b60405180910390fd5b61160d611153565b600a61161991906147c8565b60646001611625610e6b565b61162f91906142fe565b611639919061436c565b611643919061436c565b816fffffffffffffffffffffffffffffffff161015611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e9061485c565b60405180910390fd5b61169f611153565b600a6116ab91906147c8565b816fffffffffffffffffffffffffffffffff166116c891906142fe565b601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788601060029054906101000a90046fffffffffffffffffffffffffffffffff1660405161174d91906148aa565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6117a56127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118f86127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614149565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055505f6119a8610e6b565b905080601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a150565b600a60149054906101000a900462ffffff1681565b611a2f6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490614149565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b600c5f9054906101000a900460ff1681565b611af46127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614149565b60405180910390fd5b60085f9054906101000a900460ff1615611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc8906141b1565b60405180910390fd5b600160085f6101000a81548160ff02191690831515021790555042600f8190555043600e81905550565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611c4f906142a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7b906142a1565b8015611cc65780601f10611c9d57610100808354040283529160200191611cc6565b820191905f5260205f20905b815481529060010190602001808311611ca957829003601f168201915b5050505050905090565b611cd86127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90614149565b60405180910390fd5b60105f9054906101000a900460ff16611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab9061490d565b60405180910390fd5b5f60105f6101000a81548160ff021916908315150217905550565b61271081565b5f80611ddf6127a5565b90505f611dec82866122f2565b905083811015611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e289061499b565b60405180910390fd5b611e3e8286868403612a02565b60019250505092915050565b5f80611e546127a5565b9050611e61818585612c50565b600191505092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6009602052805f5260405f205f915054906101000a900460ff1681565b611eb56127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614a03565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690614a6b565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d82826040516120a4929190614a89565b60405180910390a15050565b600d5481565b601060019054906101000a900460ff1681565b6120d16127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c490614a03565b60405180910390fd5b80612261577f000000000000000000000000ebc7980ac48fe308e2fd39f926f2b362b5d69ad273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225790614afa565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce82826040516122e6929190614a89565b60405180910390a15050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123a16127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614b62565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124e86127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90614149565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90614bf0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126aa6127a5565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272f90614149565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff164760405161275d90614c3b565b5f6040518083038185875af1925050503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50508091505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281190614cbf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614d4d565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ddb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129f49190613cac565b60405180910390a350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6790614e69565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad590614ef7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb89190613cac565b60405180910390a3505050565b5f612bd084846122f2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c4a5781811015612c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3390614f5f565b60405180910390fd5b612c498484848403612a02565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612cee575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d655760085f9054906101000a900460ff16612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614fc7565b60405180910390fd5b612d4c838383612dfb565b81612d579190614fe5565b9050612d64838383612fd3565b5b612d708383836127ac565b505050565b612df68363a9059cbb60e01b8484604051602401612d9492919061420e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613432565b505050565b5f600d54612e0830611758565b10158015612e5c575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612e765750436002600e54612e7391906145fe565b11155b15612e8457612e836134f7565b5b60105f9054906101000a900460ff1615612ea157612ea0613555565b5b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f3d575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612fb65761271067ffffffffffffffff16600a60149054906101000a900462ffffff1662ffffff1684612f7191906142fe565b612f7b919061436c565b90505f816fffffffffffffffffffffffffffffffff161115612fb557612fb48530836fffffffffffffffffffffffffffffffff166127ac565b5b5b806fffffffffffffffffffffffffffffffff169150509392505050565b600c5f9054906101000a900460ff161561342d575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f61303e84611758565b905060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613094575081155b1561311c57601060029054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681846130d691906145fe565b1115613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e90615062565b60405180910390fd5b6131a1565b816131a057601060029054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16818461315e91906145fe565b111561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690615062565b60405180910390fd5b5b5b601060019054906101000a900460ff161561342a577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561325e57507f000000000000000000000000ebc7980ac48fe308e2fd39f926f2b362b5d69ad273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156134295743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106132e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d9906150ca565b60405180910390fd5b43600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f000000000000000000000000ebc7980ac48fe308e2fd39f926f2b362b5d69ad273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613428578373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614613427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341e90615158565b60405180910390fd5b5b5b5b50505b505050565b5f613493826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166136e69092919063ffffffff16565b90505f815111156134f257808060200190518101906134b29190614249565b6134f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e8906151e6565b60405180910390fd5b5b505050565b5f61350130611758565b90505f81036135105750613553565b6014600d5461351f91906142fe565b811115613538576014600d5461353591906142fe565b90505b5f81111561354a57613549816136fd565b5b43600e81905550505b565b5f4290505f600f54826135689190614fe5565b9050610834811061363c575f60105f6101000a81548160ff0219169083151502179055506101f4600a60146101000a81548162ffffff021916908362ffffff1602179055505f600c5f6101000a81548160ff0219169083151502179055505f6135cf610e6b565b905080601060026101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1506136e2565b6105dc811061366b576103e8600a60146101000a81548162ffffff021916908362ffffff1602179055506136e1565b610384811061369a576105dc600a60146101000a81548162ffffff021916908362ffffff1602179055506136e0565b61012c81106136df576107d0600a60146101000a81548162ffffff021916908362ffffff1602179055505f601060016101000a81548160ff0219169083151502179055505b5b5b5b5050565b60606136f484845f856138ba565b90509392505050565b5f600267ffffffffffffffff81111561371957613718615204565b5b6040519080825280602002602001820160405280156137475781602001602082028036833780820191505090505b50905030815f8151811061375e5761375d614520565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106137cd576137cc614520565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f84600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613889959493929190615321565b5f604051808303815f87803b1580156138a0575f80fd5b505af11580156138b2573d5f803e3d5ffd5b505050505050565b6060824710156138ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f6906153e9565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516139279190615441565b5f6040518083038185875af1925050503d805f8114613961576040519150601f19603f3d011682016040523d82523d5f602084013e613966565b606091505b509150915061397787838387613983565b92505050949350505050565b606083156139e4575f8351036139dc5761399c856139f7565b6139db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d2906154a1565b60405180910390fd5b5b8290506139ef565b6139ee8383613a19565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f82511115613a2b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5f9190613b65565b60405180910390fd5b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a9982613a70565b9050919050565b613aa981613a8f565b8114613ab3575f80fd5b50565b5f81359050613ac481613aa0565b92915050565b5f60208284031215613adf57613ade613a68565b5b5f613aec84828501613ab6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b3782613af5565b613b418185613aff565b9350613b51818560208601613b0f565b613b5a81613b1d565b840191505092915050565b5f6020820190508181035f830152613b7d8184613b2d565b905092915050565b5f819050919050565b5f613ba8613ba3613b9e84613a70565b613b85565b613a70565b9050919050565b5f613bb982613b8e565b9050919050565b5f613bca82613baf565b9050919050565b613bda81613bc0565b82525050565b5f602082019050613bf35f830184613bd1565b92915050565b5f819050919050565b613c0b81613bf9565b8114613c15575f80fd5b50565b5f81359050613c2681613c02565b92915050565b5f8060408385031215613c4257613c41613a68565b5b5f613c4f85828601613ab6565b9250506020613c6085828601613c18565b9150509250929050565b5f8115159050919050565b613c7e81613c6a565b82525050565b5f602082019050613c975f830184613c75565b92915050565b613ca681613bf9565b82525050565b5f602082019050613cbf5f830184613c9d565b92915050565b5f60208284031215613cda57613cd9613a68565b5b5f613ce784828501613c18565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613d1157613d10613cf0565b5b8235905067ffffffffffffffff811115613d2e57613d2d613cf4565b5b602083019150836020820283011115613d4a57613d49613cf8565b5b9250929050565b5f8083601f840112613d6657613d65613cf0565b5b8235905067ffffffffffffffff811115613d8357613d82613cf4565b5b602083019150836020820283011115613d9f57613d9e613cf8565b5b9250929050565b5f805f8060408587031215613dbe57613dbd613a68565b5b5f85013567ffffffffffffffff811115613ddb57613dda613a6c565b5b613de787828801613cfc565b9450945050602085013567ffffffffffffffff811115613e0a57613e09613a6c565b5b613e1687828801613d51565b925092505092959194509250565b5f805f60608486031215613e3b57613e3a613a68565b5b5f613e4886828701613ab6565b9350506020613e5986828701613ab6565b9250506040613e6a86828701613c18565b9150509250925092565b5f60ff82169050919050565b613e8981613e74565b82525050565b5f602082019050613ea25f830184613e80565b92915050565b5f62ffffff82169050919050565b613ebf81613ea8565b8114613ec9575f80fd5b50565b5f81359050613eda81613eb6565b92915050565b5f60208284031215613ef557613ef4613a68565b5b5f613f0284828501613ecc565b91505092915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b613f2f81613f0b565b82525050565b5f602082019050613f485f830184613f26565b92915050565b613f5781613a8f565b82525050565b5f602082019050613f705f830184613f4e565b92915050565b5f8060408385031215613f8c57613f8b613a68565b5b5f613f9985828601613ab6565b9250506020613faa85828601613ab6565b9150509250929050565b613fbd81613f0b565b8114613fc7575f80fd5b50565b5f81359050613fd881613fb4565b92915050565b5f60208284031215613ff357613ff2613a68565b5b5f61400084828501613fca565b91505092915050565b61401281613ea8565b82525050565b5f60208201905061402b5f830184614009565b92915050565b61403a81613c6a565b8114614044575f80fd5b50565b5f8135905061405581614031565b92915050565b5f602082840312156140705761406f613a68565b5b5f61407d84828501614047565b91505092915050565b5f67ffffffffffffffff82169050919050565b6140a281614086565b82525050565b5f6020820190506140bb5f830184614099565b92915050565b5f80604083850312156140d7576140d6613a68565b5b5f6140e485828601613ab6565b92505060206140f585828601614047565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614133602083613aff565b915061413e826140ff565b602082019050919050565b5f6020820190508181035f83015261416081614127565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f61419b601783613aff565b91506141a682614167565b602082019050919050565b5f6020820190508181035f8301526141c88161418f565b9050919050565b5f815190506141dd81613c02565b92915050565b5f602082840312156141f8576141f7613a68565b5b5f614205848285016141cf565b91505092915050565b5f6040820190506142215f830185613f4e565b61422e6020830184613c9d565b9392505050565b5f8151905061424381614031565b92915050565b5f6020828403121561425e5761425d613a68565b5b5f61426b84828501614235565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806142b857607f821691505b6020821081036142cb576142ca614274565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430882613bf9565b915061431383613bf9565b925082820261432181613bf9565b91508282048414831517614338576143376142d1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61437682613bf9565b915061438183613bf9565b9250826143915761439061433f565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143f6603583613aff565b91506144018261439c565b604082019050919050565b5f6020820190508181035f830152614423816143ea565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614484603483613aff565b915061448f8261442a565b604082019050919050565b5f6020820190508181035f8301526144b181614478565b9050919050565b7f617272617973206c656e677468206d69736d61746368000000000000000000005f82015250565b5f6144ec601683613aff565b91506144f7826144b8565b602082019050919050565b5f6020820190508181035f830152614519816144e0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54617820746f6f206869676800000000000000000000000000000000000000005f82015250565b5f614581600c83613aff565b915061458c8261454d565b602082019050919050565b5f6020820190508181035f8301526145ae81614575565b9050919050565b5f6145cf6145ca6145c584613ea8565b613b85565b613bf9565b9050919050565b6145df816145b5565b82525050565b5f6020820190506145f85f8301846145d6565b92915050565b5f61460882613bf9565b915061461383613bf9565b925082820190508082111561462b5761462a6142d1565b5b92915050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614665601a83613aff565b915061467082614631565b602082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156146ee578086048111156146ca576146c96142d1565b5b60018516156146d95780820291505b80810290506146e785614699565b94506146ae565b94509492505050565b5f8261470657600190506147c1565b81614713575f90506147c1565b8160018114614729576002811461473357614762565b60019150506147c1565b60ff841115614745576147446142d1565b5b8360020a91508482111561475c5761475b6142d1565b5b506147c1565b5060208310610133831016604e8410600b84101617156147975782820a905083811115614792576147916142d1565b5b6147c1565b6147a484848460016146a5565b925090508184048111156147bb576147ba6142d1565b5b81810290505b9392505050565b5f6147d282613bf9565b91506147dd83613e74565b925061480a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846146f7565b905092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f614846600783613aff565b915061485182614812565b602082019050919050565b5f6020820190508181035f8301526148738161483a565b9050919050565b5f61489461488f61488a84613f0b565b613b85565b613bf9565b9050919050565b6148a48161487a565b82525050565b5f6020820190506148bd5f83018461489b565b92915050565b7f416c7265616479206f66660000000000000000000000000000000000000000005f82015250565b5f6148f7600b83613aff565b9150614902826148c3565b602082019050919050565b5f6020820190508181035f830152614924816148eb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614985602583613aff565b91506149908261492b565b604082019050919050565b5f6020820190508181035f8301526149b281614979565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f6149ed600c83613aff565b91506149f8826149b9565b602082019050919050565b5f6020820190508181035f830152614a1a816149e1565b9050919050565b7f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000005f82015250565b5f614a55601883613aff565b9150614a6082614a21565b602082019050919050565b5f6020820190508181035f830152614a8281614a49565b9050919050565b5f604082019050614a9c5f830185613f4e565b614aa96020830184613c75565b9392505050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f614ae4601283613aff565b9150614aef82614ab0565b602082019050919050565b5f6020820190508181035f830152614b1181614ad8565b9050919050565b7f7a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f614b4c600c83613aff565b9150614b5782614b18565b602082019050919050565b5f6020820190508181035f830152614b7981614b40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614bda602683613aff565b9150614be582614b80565b604082019050919050565b5f6020820190508181035f830152614c0781614bce565b9050919050565b5f81905092915050565b50565b5f614c265f83614c0e565b9150614c3182614c18565b5f82019050919050565b5f614c4582614c1b565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ca9602583613aff565b9150614cb482614c4f565b604082019050919050565b5f6020820190508181035f830152614cd681614c9d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614d37602383613aff565b9150614d4282614cdd565b604082019050919050565b5f6020820190508181035f830152614d6481614d2b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614dc5602683613aff565b9150614dd082614d6b565b604082019050919050565b5f6020820190508181035f830152614df281614db9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e53602483613aff565b9150614e5e82614df9565b604082019050919050565b5f6020820190508181035f830152614e8081614e47565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ee1602283613aff565b9150614eec82614e87565b604082019050919050565b5f6020820190508181035f830152614f0e81614ed5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614f49601d83613aff565b9150614f5482614f15565b602082019050919050565b5f6020820190508181035f830152614f7681614f3d565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f614fb1601283613aff565b9150614fbc82614f7d565b602082019050919050565b5f6020820190508181035f830152614fde81614fa5565b9050919050565b5f614fef82613bf9565b9150614ffa83613bf9565b9250828203905081811115615012576150116142d1565b5b92915050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f61504c600a83613aff565b915061505782615018565b602082019050919050565b5f6020820190508181035f83015261507981615040565b9050919050565b7f5472616e736665722044656c61790000000000000000000000000000000000005f82015250565b5f6150b4600e83613aff565b91506150bf82615080565b602082019050919050565b5f6020820190508181035f8301526150e1816150a8565b9050919050565b7f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079655f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f615142602183613aff565b915061514d826150e8565b604082019050919050565b5f6020820190508181035f83015261516f81615136565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f6151d0602a83613aff565b91506151db82615176565b604082019050919050565b5f6020820190508181035f8301526151fd816151c4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f61525461524f61524a84615231565b613b85565b613bf9565b9050919050565b6152648161523a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61529c81613a8f565b82525050565b5f6152ad8383615293565b60208301905092915050565b5f602082019050919050565b5f6152cf8261526a565b6152d98185615274565b93506152e483615284565b805f5b838110156153145781516152fb88826152a2565b9750615306836152b9565b9250506001810190506152e7565b5085935050505092915050565b5f60a0820190506153345f830188613c9d565b615341602083018761525b565b818103604083015261535381866152c5565b90506153626060830185613f4e565b61536f6080830184613c9d565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f6153d3602683613aff565b91506153de82615379565b604082019050919050565b5f6020820190508181035f830152615400816153c7565b9050919050565b5f81519050919050565b5f61541b82615407565b6154258185614c0e565b9350615435818560208601613b0f565b80840191505092915050565b5f61544c8284615411565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f61548b601d83613aff565b915061549682615457565b602082019050919050565b5f6020820190508181035f8301526154b88161547f565b905091905056fea2646970667358221220aadd486bef967ac0d52902c2d43565007fcb39aa832f1fbfd9366cc9ca2247e264736f6c634300081a0033

Deployed Bytecode Sourcemap

22378:10721:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32280:648;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4602:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22911:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6962:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5731:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29337:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30570:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7743:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5573:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29691:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23081:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8413:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23180:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22832:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22873:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22531:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30911:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22419:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23044:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29046:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5902:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13516:150;;;;;;;;;;;;;:::i;:::-;;30257:189;;;;;;;;;;;;;:::i;:::-;;22658:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30454:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22760:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:233;;;;;;;;;;;;;:::i;:::-;;22473:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13302:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4821:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31398:133;;;;;;;;;;;;;:::i;:::-;;22993:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9154:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6235:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22955:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22566:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28359:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22795:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23114:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28686:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6491:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22617:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31215:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13674:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32936:160;;;;;;;;;;;;;:::i;:::-;;32280:648;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32354:14:::1;;;;;;;;;;;32353:15;32345:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;32439:1;32415:21;:25;:57;;;;;32471:1;32444:24;32462:4;32444:9;:24::i;:::-;:28;32415:57;32407:66;;;::::0;::::1;;32492:4;32486:19;;;32513:21;32486:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32548:12;32563:6;32548:21;;32582:71;32606:4;32621;32628:24;32646:4;32628:9;:24::i;:::-;32582:15;:71::i;:::-;32681:4;32666:30;;;32705:4;32727;32712:31;;;32752:4;32712:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32666:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32778:4;32770:18;;;32797:2;32770:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32829:4;32812:14;;:21;;;;;;;;;;;;;;;;;;32862:15;32844;:33;;;;32908:12;32888:17;:32;;;;32334:594;32280:648:::0;:::o;4602:100::-;4656:13;4689:5;4682:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4602:100;:::o;22911:37::-;;;:::o;6962:201::-;7045:4;7062:13;7078:12;:10;:12::i;:::-;7062:28;;7101:32;7110:5;7117:7;7126:6;7101:8;:32::i;:::-;7151:4;7144:11;;;6962:201;;;;:::o;5731:108::-;5792:7;5819:12;;5812:19;;5731:108;:::o;29337:346::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29458:6:::1;29453:1;29437:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29436:28;;;;:::i;:::-;29423:9;:41;;29415:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;29576:4;29571:1;29555:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29554:26;;;;:::i;:::-;29541:9;:39;;29533:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;29666:9;29648:15;:27;;;;29337:346:::0;:::o;30570:333::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30713:12:::1;;:19;;30695:7;;:14;;:37;30687:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30774:9;30770:126;30793:7;;:14;;30789:1;:18;30770:126;;;30828:56;30844:10;30856:7;;30864:1;30856:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30868:12;;30881:1;30868:15;;;;;;;:::i;:::-;;;;;;;;30828;:56::i;:::-;30809:3;;;;;;;30770:126;;;;30570:333:::0;;;;:::o;7743:261::-;7840:4;7857:15;7875:12;:10;:12::i;:::-;7857:30;;7898:38;7914:4;7920:7;7929:6;7898:15;:38::i;:::-;7947:27;7957:4;7963:2;7967:6;7947:9;:27::i;:::-;7992:4;7985:11;;;7743:261;;;;;:::o;5573:93::-;5631:5;5656:2;5649:9;;5573:93;:::o;29691:317::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29784:4:::1;29768:11;:20;;;;29760:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29821:7;;;;;;;;;;;29817:110;;29867:3;29852:11;:18;;;;:46;;;;29888:10;;;;;;;;;;;29874:24;;:11;:24;;;29852:46;29844:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29817:110;29942:23;29953:11;29942:23;;;;;;:::i;:::-;;;;;;;;29989:11;29976:10;;:24;;;;;;;;;;;;;;;;;;29691:317:::0;:::o;23081:24::-;;;;;;;;;;;;;:::o;8413:238::-;8501:4;8518:13;8534:12;:10;:12::i;:::-;8518:28;;8557:64;8566:5;8573:7;8610:10;8582:25;8592:5;8599:7;8582:9;:25::i;:::-;:38;;;;:::i;:::-;8557:8;:64::i;:::-;8639:4;8632:11;;;8413:238;;;;:::o;23180:26::-;;;;;;;;;;;;;:::o;22832:32::-;;;;:::o;22873:31::-;;;:::o;22531:26::-;;;;;;;;;;;;;:::o;30911:296::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31018:1:::1;31000:20;;:6;:20;;::::0;30992:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31062:24;31096:6;31089:24;;;31122:4;31089:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31062:66;;31139:60;31169:6;31177:3;31182:16;31139:22;:60::i;:::-;30981:226;30911:296:::0;;:::o;22419:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;23044:30::-;;;;:::o;29046:283::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:10:::1;:8;:10::i;:::-;29180:2;:14;;;;:::i;:::-;29174:3;29170:1;29154:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;29153:42;;;;:::i;:::-;29135:14;:60;;;;29127:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29262:10;:8;:10::i;:::-;29258:2;:14;;;;:::i;:::-;29240;:33;;;;;;:::i;:::-;29218:11;;:56;;;;;;;;;;;;;;;;;;29290:31;29309:11;;;;;;;;;;;29290:31;;;;;;:::i;:::-;;;;;;;;29046:283:::0;:::o;5902:127::-;5976:7;6003:9;:18;6013:7;6003:18;;;;;;;;;;;;;;;;5996:25;;5902:127;;;:::o;13516:150::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13625:1:::1;13588:40;;13609:6;;;;;;;;;;;13588:40;;;;;;;;;;;;13656:1;13639:6;;:19;;;;;;;;;;;;;;;;;;13516:150::o:0;30257:189::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30321:5:::1;30311:7;;:15;;;;;;;;;;;;;;;;;;30337:14;30354:13;:11;:13::i;:::-;30337:30;;30400:6;30378:11;;:29;;;;;;;;;;;;;;;;;;30423:15;;;;;;;;;;30300:146;30257:189::o:0;22658:24::-;;;;;;;;;;;;;:::o;30454:108::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30547:7:::1;30524:20;;:30;;;;;;;;;;;;;;;;;;30454:108:::0;:::o;22760:26::-;;;;;;;;;;;;;:::o;30016:233::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30080:14:::1;;;;;;;;;;;30079:15;30071:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;30150:4;30133:14;;:21;;;;;;;;;;;;;;;;;;30183:15;30165;:33;;;;30229:12;30209:17;:32;;;;30016:233::o:0;22473:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;13302:79::-;13340:7;13367:6;;;;;;;;;;;13360:13;;13302:79;:::o;4821:104::-;4877:13;4910:7;4903:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4821:104;:::o;31398:133::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31464:12:::1;;;;;;;;;;;31456:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;31518:5;31503:12;;:20;;;;;;;;;;;;;;;;;;31398:133::o:0;22993:42::-;23030:5;22993:42;:::o;9154:436::-;9247:4;9264:13;9280:12;:10;:12::i;:::-;9264:28;;9303:24;9330:25;9340:5;9347:7;9330:9;:25::i;:::-;9303:52;;9394:15;9374:16;:35;;9366:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9487:60;9496:5;9503:7;9531:15;9512:16;:34;9487:8;:60::i;:::-;9578:4;9571:11;;;;9154:436;;;;:::o;6235:193::-;6314:4;6331:13;6347:12;:10;:12::i;:::-;6331:28;;6370;6380:5;6387:2;6391:6;6370:9;:28::i;:::-;6416:4;6409:11;;;6235:193;;;;:::o;22955:29::-;;;:::o;22566:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;28359:319::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28477:1:::1;28457:22;;:8;:22;;::::0;28449:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28535:4;28515:25;;:8;:25;;::::0;28507:62:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28607:9;28580:14;:24;28595:8;28580:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28632:38;28650:8;28660:9;28632:38;;;;;;;:::i;:::-;;;;;;;;28359:319:::0;;:::o;22795:30::-;;;;:::o;23114:39::-;;;;;;;;;;;;;:::o;28686:352::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28806:1:::1;28786:22;;:8;:22;;::::0;28778:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28840:9;28836:90;;28885:6;28873:18;;:8;:18;;::::0;28865:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28836:90;28965:9;28936:16;:26;28953:8;28936:26;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;28990:40;29010:8;29020:9;28990:40;;;;;;;:::i;:::-;;;;;;;;28686:352:::0;;:::o;6491:151::-;6580:7;6607:11;:18;6619:5;6607:18;;;;;;;;;;;;;;;:27;6626:7;6607:27;;;;;;;;;;;;;;;;6600:34;;6491:151;;;;:::o;22617:32::-;;;;;;;;;;;;;:::o;31215:175::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31324:1:::1;31304:22;;:8;:22;;::::0;31296:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31374:8;31354:17;;:28;;;;;;;;;;;;;;;;;;31215:175:::0;:::o;13674:244::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13783:1:::1;13763:22;;:8;:22;;::::0;13755:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13873:8;13844:38;;13865:6;;;;;;;;;;;13844:38;;;;;;;;;;;;13902:8;13893:6;;:17;;;;;;;;;;;;;;;;;;13674:244:::0;:::o;32936:160::-;13439:12;:10;:12::i;:::-;13429:22;;:6;;;;;;;;;;;:22;;;13421:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32994:12:::1;33038:10;33030:24;;33062:21;33030:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33017:71;;;;;32983:113;32936:160::o:0;508:98::-;561:7;588:10;581:17;;508:98;:::o;10060:705::-;10173:1;10157:18;;:4;:18;;;10149:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10250:1;10236:16;;:2;:16;;;10228:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10305:19;10327:9;:15;10337:4;10327:15;;;;;;;;;;;;;;;;10305:37;;10376:6;10361:11;:21;;10353:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10493:6;10479:11;:20;10461:9;:15;10471:4;10461:15;;;;;;;;;;;;;;;:38;;;;10696:6;10679:9;:13;10689:2;10679:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10746:2;10731:26;;10740:4;10731:26;;;10750:6;10731:26;;;;;;:::i;:::-;;;;;;;;10138:627;10060:705;;;:::o;11915:346::-;12034:1;12017:19;;:5;:19;;;12009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12115:1;12096:21;;:7;:21;;;12088:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12199:6;12169:11;:18;12181:5;12169:18;;;;;;;;;;;;;;;:27;12188:7;12169:27;;;;;;;;;;;;;;;:36;;;;12237:7;12221:32;;12230:5;12221:32;;;12246:6;12221:32;;;;;;:::i;:::-;;;;;;;;11915:346;;;:::o;12552:419::-;12653:24;12680:25;12690:5;12697:7;12680:9;:25::i;:::-;12653:52;;12740:17;12720:16;:37;12716:248;;12802:6;12782:16;:26;;12774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12886:51;12895:5;12902:7;12930:6;12911:16;:25;12886:8;:51::i;:::-;12716:248;12642:329;12552:419;;;:::o;25407:409::-;25553:14;:20;25568:4;25553:20;;;;;;;;;;;;;;;;;;;;;;;;;25552:21;:44;;;;;25578:14;:18;25593:2;25578:18;;;;;;;;;;;;;;;;;;;;;;;;;25577:19;25552:44;25549:216;;;25620:14;;;;;;;;;;;25612:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25682:27;25692:4;25698:2;25702:6;25682:9;:27::i;:::-;25672:37;;;;;:::i;:::-;;;25724:29;25736:4;25742:2;25746:6;25724:11;:29::i;:::-;25549:216;25777:31;25793:4;25798:2;25801:6;25777:15;:31::i;:::-;25407:409;;;:::o;20088:177::-;20171:86;20191:5;20221:23;;;20246:2;20250:5;20198:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20171:19;:86::i;:::-;20088:177;;;:::o;26899:611::-;26978:7;27030:15;;27002:24;27020:4;27002:9;:24::i;:::-;:43;;:60;;;;;27049:9;:13;27059:2;27049:13;;;;;;;;;;;;;;;;;;;;;;;;;27002:60;:101;;;;;27091:12;27086:1;27066:17;;:21;;;;:::i;:::-;:37;;27002:101;26999:147;;;27120:14;:12;:14::i;:::-;26999:147;27161:12;;;;;;;;;;;27158:61;;;27189:18;:16;:18::i;:::-;27158:61;27239:11;27271:9;:13;27281:2;27271:13;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;27288:9;:15;27298:4;27288:15;;;;;;;;;;;;;;;;;;;;;;;;;27271:32;27267:213;;;23030:5;27333:33;;27342:10;;;;;;;;;;;27333:19;;:6;:19;;;;:::i;:::-;:33;;;;:::i;:::-;27319:48;;27391:1;27385:3;:7;;;27382:87;;;27412:41;27428:4;27442;27449:3;27412:41;;:15;:41::i;:::-;27382:87;27267:213;27499:3;27492:10;;;;;26899:611;;;;;:::o;25824:1067::-;25910:7;;;;;;;;;;;25907:977;;;25933:19;25955:16;:20;25972:2;25955:20;;;;;;;;;;;;;;;;;;;;;;;;;25933:42;;25990:19;26012:13;26022:2;26012:9;:13::i;:::-;25990:35;;26064:9;:15;26074:4;26064:15;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;26084:14;26083:15;26064:34;26060:265;;;26151:11;;;;;;;;;;;26127:35;;26136:11;26127:6;:20;;;;:::i;:::-;:35;;26119:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26060:265;;;26216:14;26212:113;;26283:11;;;;;;;;;;;26259:35;;26268:11;26259:6;:20;;;;:::i;:::-;:35;;26251:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26212:113;26060:265;26344:20;;;;;;;;;;;26341:532;;;26402:9;26388:24;;:2;:24;;;;:49;;;;;26430:6;26416:21;;:2;:21;;;;26388:49;26384:474;;;26507:12;26469:24;:35;26494:9;26469:35;;;;;;;;;;;;;;;;:50;26461:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26592:12;26561:24;:28;26586:2;26561:28;;;;;;;;;;;;;;;:43;;;;26665:12;26627:24;:35;26652:9;26627:35;;;;;;;;;;;;;;;:50;;;;26719:6;26703:23;;:4;:23;;;26700:139;;26775:2;26762:15;;:9;:15;;;26754:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26700:139;26384:474;26341:532;25918:966;;25907:977;25824:1067;;;:::o;20486:333::-;20567:23;20593:69;20621:4;20593:69;;;;;;;;;;;;;;;;;20601:5;20593:27;;;;:69;;;;;:::i;:::-;20567:95;;20697:1;20677:10;:17;:21;20673:139;;;20734:10;20723:30;;;;;;;;;;;;:::i;:::-;20715:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20673:139;20556:263;20486:333;;:::o;27911:416::-;27956:23;27982:24;28000:4;27982:9;:24::i;:::-;27956:50;;28049:1;28030:15;:20;28027:34;;28053:7;;;28027:34;28112:2;28094:15;;:20;;;;:::i;:::-;28076:15;:38;28073:107;;;28166:2;28148:15;;:20;;;;:::i;:::-;28130:38;;28073:107;28213:1;28195:15;:19;28192:83;;;28230:33;28247:15;28230:16;:33::i;:::-;28192:83;28307:12;28287:17;:32;;;;27943:384;27911:416;:::o;31539:733::-;31587:19;31609:15;31587:37;;31635:23;31675:15;;31661:11;:29;;;;:::i;:::-;31635:55;;31725:10;31706:15;:29;31703:562;;31766:5;31751:12;;:20;;;;;;;;;;;;;;;;;;31799:3;31786:10;;:16;;;;;;;;;;;;;;;;;;31827:5;31817:7;;:15;;;;;;;;;;;;;;;;;;31847:14;31864:13;:11;:13::i;:::-;31847:30;;31914:6;31892:11;;:29;;;;;;;;;;;;;;;;;;31941:15;;;;;;;;;;31736:232;31703:562;;;31997:10;31978:15;:29;31974:291;;32037:4;32024:10;;:17;;;;;;;;;;;;;;;;;;31974:291;;;32082:10;32063:15;:29;32059:206;;32122:4;32109:10;;:17;;;;;;;;;;;;;;;;;;32059:206;;;32167:9;32148:15;:28;32144:121;;32206:4;32193:10;;:17;;;;;;;;;;;;;;;;;;32248:5;32225:20;;:28;;;;;;;;;;;;;;;;;;32144:121;32059:206;31974:291;31703:562;31576:696;;31539:733::o;14591:229::-;14728:12;14760:52;14782:6;14790:4;14796:1;14799:12;14760:21;:52::i;:::-;14753:59;;14591:229;;;;;:::o;27518:385::-;27583:21;27621:1;27607:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27583:40;;27652:4;27634;27639:1;27634:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27678:4;27668;27673:1;27668:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;27695:9;:60;;;27770:8;27793:1;27809:4;27836:17;;;;;;;;;;;27869:15;27695:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27570:333;27518:385;:::o;15711:455::-;15881:12;15939:5;15914:21;:30;;15906:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;15999:12;16013:23;16040:6;:11;;16059:5;16066:4;16040:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15998:73;;;;16089:69;16116:6;16124:7;16133:10;16145:12;16089:26;:69::i;:::-;16082:76;;;;15711:455;;;;;;:::o;18284:644::-;18469:12;18498:7;18494:427;;;18547:1;18526:10;:17;:22;18522:290;;18744:18;18755:6;18744:10;:18::i;:::-;18736:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18522:290;18833:10;18826:17;;;;18494:427;18876:33;18884:10;18896:12;18876:7;:33::i;:::-;18284:644;;;;;;;:::o;13948:115::-;14008:4;14054:1;14032:7;:19;;;:23;14025:30;;13948:115;;;:::o;19470:552::-;19651:1;19631:10;:17;:21;19627:388;;;19863:10;19857:17;19920:15;19907:10;19903:2;19899:19;19892:44;19627:388;19990:12;19983:20;;;;;;;;;;;:::i;:::-;;;;;;;;88:117:1;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:139::-;1545:6;1540:3;1535;1529:23;1586:1;1577:6;1572:3;1568:16;1561:27;1456:139;;;:::o;1601:102::-;1642:6;1693:2;1689:7;1684:2;1677:5;1673:14;1669:28;1659:38;;1601:102;;;:::o;1709:377::-;1797:3;1825:39;1858:5;1825:39;:::i;:::-;1880:71;1944:6;1939:3;1880:71;:::i;:::-;1873:78;;1960:65;2018:6;2013:3;2006:4;1999:5;1995:16;1960:65;:::i;:::-;2050:29;2072:6;2050:29;:::i;:::-;2045:3;2041:39;2034:46;;1801:285;1709:377;;;;:::o;2092:313::-;2205:4;2243:2;2232:9;2228:18;2220:26;;2292:9;2286:4;2282:20;2278:1;2267:9;2263:17;2256:47;2320:78;2393:4;2384:6;2320:78;:::i;:::-;2312:86;;2092:313;;;;:::o;2411:60::-;2439:3;2460:5;2453:12;;2411:60;;;:::o;2477:142::-;2527:9;2560:53;2578:34;2587:24;2605:5;2587:24;:::i;:::-;2578:34;:::i;:::-;2560:53;:::i;:::-;2547:66;;2477:142;;;:::o;2625:126::-;2675:9;2708:37;2739:5;2708:37;:::i;:::-;2695:50;;2625:126;;;:::o;2757:145::-;2826:9;2859:37;2890:5;2859:37;:::i;:::-;2846:50;;2757:145;;;:::o;2908:169::-;3014:56;3064:5;3014:56;:::i;:::-;3009:3;3002:69;2908:169;;:::o;3083:260::-;3195:4;3233:2;3222:9;3218:18;3210:26;;3246:90;3333:1;3322:9;3318:17;3309:6;3246:90;:::i;:::-;3083:260;;;;:::o;3349:77::-;3386:7;3415:5;3404:16;;3349:77;;;:::o;3432:122::-;3505:24;3523:5;3505:24;:::i;:::-;3498:5;3495:35;3485:63;;3544:1;3541;3534:12;3485:63;3432:122;:::o;3560:139::-;3606:5;3644:6;3631:20;3622:29;;3660:33;3687:5;3660:33;:::i;:::-;3560:139;;;;:::o;3705:474::-;3773:6;3781;3830:2;3818:9;3809:7;3805:23;3801:32;3798:119;;;3836:79;;:::i;:::-;3798:119;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;3705:474;;;;;:::o;4185:90::-;4219:7;4262:5;4255:13;4248:21;4237:32;;4185:90;;;:::o;4281:109::-;4362:21;4377:5;4362:21;:::i;:::-;4357:3;4350:34;4281:109;;:::o;4396:210::-;4483:4;4521:2;4510:9;4506:18;4498:26;;4534:65;4596:1;4585:9;4581:17;4572:6;4534:65;:::i;:::-;4396:210;;;;:::o;4612:118::-;4699:24;4717:5;4699:24;:::i;:::-;4694:3;4687:37;4612:118;;:::o;4736:222::-;4829:4;4867:2;4856:9;4852:18;4844:26;;4880:71;4948:1;4937:9;4933:17;4924:6;4880:71;:::i;:::-;4736:222;;;;:::o;4964:329::-;5023:6;5072:2;5060:9;5051:7;5047:23;5043:32;5040:119;;;5078:79;;:::i;:::-;5040:119;5198:1;5223:53;5268:7;5259:6;5248:9;5244:22;5223:53;:::i;:::-;5213:63;;5169:117;4964:329;;;;:::o;5299:117::-;5408:1;5405;5398:12;5422:117;5531:1;5528;5521:12;5545:117;5654:1;5651;5644:12;5685:568;5758:8;5768:6;5818:3;5811:4;5803:6;5799:17;5795:27;5785:122;;5826:79;;:::i;:::-;5785:122;5939:6;5926:20;5916:30;;5969:18;5961:6;5958:30;5955:117;;;5991:79;;:::i;:::-;5955:117;6105:4;6097:6;6093:17;6081:29;;6159:3;6151:4;6143:6;6139:17;6129:8;6125:32;6122:41;6119:128;;;6166:79;;:::i;:::-;6119:128;5685:568;;;;;:::o;6276:::-;6349:8;6359:6;6409:3;6402:4;6394:6;6390:17;6386:27;6376:122;;6417:79;;:::i;:::-;6376:122;6530:6;6517:20;6507:30;;6560:18;6552:6;6549:30;6546:117;;;6582:79;;:::i;:::-;6546:117;6696:4;6688:6;6684:17;6672:29;;6750:3;6742:4;6734:6;6730:17;6720:8;6716:32;6713:41;6710:128;;;6757:79;;:::i;:::-;6710:128;6276:568;;;;;:::o;6850:934::-;6972:6;6980;6988;6996;7045:2;7033:9;7024:7;7020:23;7016:32;7013:119;;;7051:79;;:::i;:::-;7013:119;7199:1;7188:9;7184:17;7171:31;7229:18;7221:6;7218:30;7215:117;;;7251:79;;:::i;:::-;7215:117;7364:80;7436:7;7427:6;7416:9;7412:22;7364:80;:::i;:::-;7346:98;;;;7142:312;7521:2;7510:9;7506:18;7493:32;7552:18;7544:6;7541:30;7538:117;;;7574:79;;:::i;:::-;7538:117;7687:80;7759:7;7750:6;7739:9;7735:22;7687:80;:::i;:::-;7669:98;;;;7464:313;6850:934;;;;;;;:::o;7790:619::-;7867:6;7875;7883;7932:2;7920:9;7911:7;7907:23;7903:32;7900:119;;;7938:79;;:::i;:::-;7900:119;8058:1;8083:53;8128:7;8119:6;8108:9;8104:22;8083:53;:::i;:::-;8073:63;;8029:117;8185:2;8211:53;8256:7;8247:6;8236:9;8232:22;8211:53;:::i;:::-;8201:63;;8156:118;8313:2;8339:53;8384:7;8375:6;8364:9;8360:22;8339:53;:::i;:::-;8329:63;;8284:118;7790:619;;;;;:::o;8415:86::-;8450:7;8490:4;8483:5;8479:16;8468:27;;8415:86;;;:::o;8507:112::-;8590:22;8606:5;8590:22;:::i;:::-;8585:3;8578:35;8507:112;;:::o;8625:214::-;8714:4;8752:2;8741:9;8737:18;8729:26;;8765:67;8829:1;8818:9;8814:17;8805:6;8765:67;:::i;:::-;8625:214;;;;:::o;8845:91::-;8881:7;8921:8;8914:5;8910:20;8899:31;;8845:91;;;:::o;8942:120::-;9014:23;9031:5;9014:23;:::i;:::-;9007:5;9004:34;8994:62;;9052:1;9049;9042:12;8994:62;8942:120;:::o;9068:137::-;9113:5;9151:6;9138:20;9129:29;;9167:32;9193:5;9167:32;:::i;:::-;9068:137;;;;:::o;9211:327::-;9269:6;9318:2;9306:9;9297:7;9293:23;9289:32;9286:119;;;9324:79;;:::i;:::-;9286:119;9444:1;9469:52;9513:7;9504:6;9493:9;9489:22;9469:52;:::i;:::-;9459:62;;9415:116;9211:327;;;;:::o;9544:118::-;9581:7;9621:34;9614:5;9610:46;9599:57;;9544:118;;;:::o;9668:::-;9755:24;9773:5;9755:24;:::i;:::-;9750:3;9743:37;9668:118;;:::o;9792:222::-;9885:4;9923:2;9912:9;9908:18;9900:26;;9936:71;10004:1;9993:9;9989:17;9980:6;9936:71;:::i;:::-;9792:222;;;;:::o;10020:118::-;10107:24;10125:5;10107:24;:::i;:::-;10102:3;10095:37;10020:118;;:::o;10144:222::-;10237:4;10275:2;10264:9;10260:18;10252:26;;10288:71;10356:1;10345:9;10341:17;10332:6;10288:71;:::i;:::-;10144:222;;;;:::o;10372:474::-;10440:6;10448;10497:2;10485:9;10476:7;10472:23;10468:32;10465:119;;;10503:79;;:::i;:::-;10465:119;10623:1;10648:53;10693:7;10684:6;10673:9;10669:22;10648:53;:::i;:::-;10638:63;;10594:117;10750:2;10776:53;10821:7;10812:6;10801:9;10797:22;10776:53;:::i;:::-;10766:63;;10721:118;10372:474;;;;;:::o;10852:122::-;10925:24;10943:5;10925:24;:::i;:::-;10918:5;10915:35;10905:63;;10964:1;10961;10954:12;10905:63;10852:122;:::o;10980:139::-;11026:5;11064:6;11051:20;11042:29;;11080:33;11107:5;11080:33;:::i;:::-;10980:139;;;;:::o;11125:329::-;11184:6;11233:2;11221:9;11212:7;11208:23;11204:32;11201:119;;;11239:79;;:::i;:::-;11201:119;11359:1;11384:53;11429:7;11420:6;11409:9;11405:22;11384:53;:::i;:::-;11374:63;;11330:117;11125:329;;;;:::o;11460:115::-;11545:23;11562:5;11545:23;:::i;:::-;11540:3;11533:36;11460:115;;:::o;11581:218::-;11672:4;11710:2;11699:9;11695:18;11687:26;;11723:69;11789:1;11778:9;11774:17;11765:6;11723:69;:::i;:::-;11581:218;;;;:::o;11805:116::-;11875:21;11890:5;11875:21;:::i;:::-;11868:5;11865:32;11855:60;;11911:1;11908;11901:12;11855:60;11805:116;:::o;11927:133::-;11970:5;12008:6;11995:20;11986:29;;12024:30;12048:5;12024:30;:::i;:::-;11927:133;;;;:::o;12066:323::-;12122:6;12171:2;12159:9;12150:7;12146:23;12142:32;12139:119;;;12177:79;;:::i;:::-;12139:119;12297:1;12322:50;12364:7;12355:6;12344:9;12340:22;12322:50;:::i;:::-;12312:60;;12268:114;12066:323;;;;:::o;12395:101::-;12431:7;12471:18;12464:5;12460:30;12449:41;;12395:101;;;:::o;12502:115::-;12587:23;12604:5;12587:23;:::i;:::-;12582:3;12575:36;12502:115;;:::o;12623:218::-;12714:4;12752:2;12741:9;12737:18;12729:26;;12765:69;12831:1;12820:9;12816:17;12807:6;12765:69;:::i;:::-;12623:218;;;;:::o;12847:468::-;12912:6;12920;12969:2;12957:9;12948:7;12944:23;12940:32;12937:119;;;12975:79;;:::i;:::-;12937:119;13095:1;13120:53;13165:7;13156:6;13145:9;13141:22;13120:53;:::i;:::-;13110:63;;13066:117;13222:2;13248:50;13290:7;13281:6;13270:9;13266:22;13248:50;:::i;:::-;13238:60;;13193:115;12847:468;;;;;:::o;13321:182::-;13461:34;13457:1;13449:6;13445:14;13438:58;13321:182;:::o;13509:366::-;13651:3;13672:67;13736:2;13731:3;13672:67;:::i;:::-;13665:74;;13748:93;13837:3;13748:93;:::i;:::-;13866:2;13861:3;13857:12;13850:19;;13509:366;;;:::o;13881:419::-;14047:4;14085:2;14074:9;14070:18;14062:26;;14134:9;14128:4;14124:20;14120:1;14109:9;14105:17;14098:47;14162:131;14288:4;14162:131;:::i;:::-;14154:139;;13881:419;;;:::o;14306:173::-;14446:25;14442:1;14434:6;14430:14;14423:49;14306:173;:::o;14485:366::-;14627:3;14648:67;14712:2;14707:3;14648:67;:::i;:::-;14641:74;;14724:93;14813:3;14724:93;:::i;:::-;14842:2;14837:3;14833:12;14826:19;;14485:366;;;:::o;14857:419::-;15023:4;15061:2;15050:9;15046:18;15038:26;;15110:9;15104:4;15100:20;15096:1;15085:9;15081:17;15074:47;15138:131;15264:4;15138:131;:::i;:::-;15130:139;;14857:419;;;:::o;15282:143::-;15339:5;15370:6;15364:13;15355:22;;15386:33;15413:5;15386:33;:::i;:::-;15282:143;;;;:::o;15431:351::-;15501:6;15550:2;15538:9;15529:7;15525:23;15521:32;15518:119;;;15556:79;;:::i;:::-;15518:119;15676:1;15701:64;15757:7;15748:6;15737:9;15733:22;15701:64;:::i;:::-;15691:74;;15647:128;15431:351;;;;:::o;15788:332::-;15909:4;15947:2;15936:9;15932:18;15924:26;;15960:71;16028:1;16017:9;16013:17;16004:6;15960:71;:::i;:::-;16041:72;16109:2;16098:9;16094:18;16085:6;16041:72;:::i;:::-;15788:332;;;;;:::o;16126:137::-;16180:5;16211:6;16205:13;16196:22;;16227:30;16251:5;16227:30;:::i;:::-;16126:137;;;;:::o;16269:345::-;16336:6;16385:2;16373:9;16364:7;16360:23;16356:32;16353:119;;;16391:79;;:::i;:::-;16353:119;16511:1;16536:61;16589:7;16580:6;16569:9;16565:22;16536:61;:::i;:::-;16526:71;;16482:125;16269:345;;;;:::o;16620:180::-;16668:77;16665:1;16658:88;16765:4;16762:1;16755:15;16789:4;16786:1;16779:15;16806:320;16850:6;16887:1;16881:4;16877:12;16867:22;;16934:1;16928:4;16924:12;16955:18;16945:81;;17011:4;17003:6;16999:17;16989:27;;16945:81;17073:2;17065:6;17062:14;17042:18;17039:38;17036:84;;17092:18;;:::i;:::-;17036:84;16857:269;16806:320;;;:::o;17132:180::-;17180:77;17177:1;17170:88;17277:4;17274:1;17267:15;17301:4;17298:1;17291:15;17318:410;17358:7;17381:20;17399:1;17381:20;:::i;:::-;17376:25;;17415:20;17433:1;17415:20;:::i;:::-;17410:25;;17470:1;17467;17463:9;17492:30;17510:11;17492:30;:::i;:::-;17481:41;;17671:1;17662:7;17658:15;17655:1;17652:22;17632:1;17625:9;17605:83;17582:139;;17701:18;;:::i;:::-;17582:139;17366:362;17318:410;;;;:::o;17734:180::-;17782:77;17779:1;17772:88;17879:4;17876:1;17869:15;17903:4;17900:1;17893:15;17920:185;17960:1;17977:20;17995:1;17977:20;:::i;:::-;17972:25;;18011:20;18029:1;18011:20;:::i;:::-;18006:25;;18050:1;18040:35;;18055:18;;:::i;:::-;18040:35;18097:1;18094;18090:9;18085:14;;17920:185;;;;:::o;18111:240::-;18251:34;18247:1;18239:6;18235:14;18228:58;18320:23;18315:2;18307:6;18303:15;18296:48;18111:240;:::o;18357:366::-;18499:3;18520:67;18584:2;18579:3;18520:67;:::i;:::-;18513:74;;18596:93;18685:3;18596:93;:::i;:::-;18714:2;18709:3;18705:12;18698:19;;18357:366;;;:::o;18729:419::-;18895:4;18933:2;18922:9;18918:18;18910:26;;18982:9;18976:4;18972:20;18968:1;18957:9;18953:17;18946:47;19010:131;19136:4;19010:131;:::i;:::-;19002:139;;18729:419;;;:::o;19154:239::-;19294:34;19290:1;19282:6;19278:14;19271:58;19363:22;19358:2;19350:6;19346:15;19339:47;19154:239;:::o;19399:366::-;19541:3;19562:67;19626:2;19621:3;19562:67;:::i;:::-;19555:74;;19638:93;19727:3;19638:93;:::i;:::-;19756:2;19751:3;19747:12;19740:19;;19399:366;;;:::o;19771:419::-;19937:4;19975:2;19964:9;19960:18;19952:26;;20024:9;20018:4;20014:20;20010:1;19999:9;19995:17;19988:47;20052:131;20178:4;20052:131;:::i;:::-;20044:139;;19771:419;;;:::o;20196:172::-;20336:24;20332:1;20324:6;20320:14;20313:48;20196:172;:::o;20374:366::-;20516:3;20537:67;20601:2;20596:3;20537:67;:::i;:::-;20530:74;;20613:93;20702:3;20613:93;:::i;:::-;20731:2;20726:3;20722:12;20715:19;;20374:366;;;:::o;20746:419::-;20912:4;20950:2;20939:9;20935:18;20927:26;;20999:9;20993:4;20989:20;20985:1;20974:9;20970:17;20963:47;21027:131;21153:4;21027:131;:::i;:::-;21019:139;;20746:419;;;:::o;21171:180::-;21219:77;21216:1;21209:88;21316:4;21313:1;21306:15;21340:4;21337:1;21330:15;21357:162;21497:14;21493:1;21485:6;21481:14;21474:38;21357:162;:::o;21525:366::-;21667:3;21688:67;21752:2;21747:3;21688:67;:::i;:::-;21681:74;;21764:93;21853:3;21764:93;:::i;:::-;21882:2;21877:3;21873:12;21866:19;;21525:366;;;:::o;21897:419::-;22063:4;22101:2;22090:9;22086:18;22078:26;;22150:9;22144:4;22140:20;22136:1;22125:9;22121:17;22114:47;22178:131;22304:4;22178:131;:::i;:::-;22170:139;;21897:419;;;:::o;22322:140::-;22371:9;22404:52;22422:33;22431:23;22448:5;22431:23;:::i;:::-;22422:33;:::i;:::-;22404:52;:::i;:::-;22391:65;;22322:140;;;:::o;22468:129::-;22554:36;22584:5;22554:36;:::i;:::-;22549:3;22542:49;22468:129;;:::o;22603:220::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22746:70;22813:1;22802:9;22798:17;22789:6;22746:70;:::i;:::-;22603:220;;;;:::o;22829:191::-;22869:3;22888:20;22906:1;22888:20;:::i;:::-;22883:25;;22922:20;22940:1;22922:20;:::i;:::-;22917:25;;22965:1;22962;22958:9;22951:16;;22986:3;22983:1;22980:10;22977:36;;;22993:18;;:::i;:::-;22977:36;22829:191;;;;:::o;23026:176::-;23166:28;23162:1;23154:6;23150:14;23143:52;23026:176;:::o;23208:366::-;23350:3;23371:67;23435:2;23430:3;23371:67;:::i;:::-;23364:74;;23447:93;23536:3;23447:93;:::i;:::-;23565:2;23560:3;23556:12;23549:19;;23208:366;;;:::o;23580:419::-;23746:4;23784:2;23773:9;23769:18;23761:26;;23833:9;23827:4;23823:20;23819:1;23808:9;23804:17;23797:47;23861:131;23987:4;23861:131;:::i;:::-;23853:139;;23580:419;;;:::o;24005:102::-;24047:8;24094:5;24091:1;24087:13;24066:34;;24005:102;;;:::o;24113:848::-;24174:5;24181:4;24205:6;24196:15;;24229:5;24220:14;;24243:712;24264:1;24254:8;24251:15;24243:712;;;24359:4;24354:3;24350:14;24344:4;24341:24;24338:50;;;24368:18;;:::i;:::-;24338:50;24418:1;24408:8;24404:16;24401:451;;;24833:4;24826:5;24822:16;24813:25;;24401:451;24883:4;24877;24873:15;24865:23;;24913:32;24936:8;24913:32;:::i;:::-;24901:44;;24243:712;;;24113:848;;;;;;;:::o;24967:1073::-;25021:5;25212:8;25202:40;;25233:1;25224:10;;25235:5;;25202:40;25261:4;25251:36;;25278:1;25269:10;;25280:5;;25251:36;25347:4;25395:1;25390:27;;;;25431:1;25426:191;;;;25340:277;;25390:27;25408:1;25399:10;;25410:5;;;25426:191;25471:3;25461:8;25458:17;25455:43;;;25478:18;;:::i;:::-;25455:43;25527:8;25524:1;25520:16;25511:25;;25562:3;25555:5;25552:14;25549:40;;;25569:18;;:::i;:::-;25549:40;25602:5;;;25340:277;;25726:2;25716:8;25713:16;25707:3;25701:4;25698:13;25694:36;25676:2;25666:8;25663:16;25658:2;25652:4;25649:12;25645:35;25629:111;25626:246;;;25782:8;25776:4;25772:19;25763:28;;25817:3;25810:5;25807:14;25804:40;;;25824:18;;:::i;:::-;25804:40;25857:5;;25626:246;25897:42;25935:3;25925:8;25919:4;25916:1;25897:42;:::i;:::-;25882:57;;;;25971:4;25966:3;25962:14;25955:5;25952:25;25949:51;;;25980:18;;:::i;:::-;25949:51;26029:4;26022:5;26018:16;26009:25;;24967:1073;;;;;;:::o;26046:281::-;26104:5;26128:23;26146:4;26128:23;:::i;:::-;26120:31;;26172:25;26188:8;26172:25;:::i;:::-;26160:37;;26216:104;26253:66;26243:8;26237:4;26216:104;:::i;:::-;26207:113;;26046:281;;;;:::o;26333:157::-;26473:9;26469:1;26461:6;26457:14;26450:33;26333:157;:::o;26496:365::-;26638:3;26659:66;26723:1;26718:3;26659:66;:::i;:::-;26652:73;;26734:93;26823:3;26734:93;:::i;:::-;26852:2;26847:3;26843:12;26836:19;;26496:365;;;:::o;26867:419::-;27033:4;27071:2;27060:9;27056:18;27048:26;;27120:9;27114:4;27110:20;27106:1;27095:9;27091:17;27084:47;27148:131;27274:4;27148:131;:::i;:::-;27140:139;;26867:419;;;:::o;27292:142::-;27342:9;27375:53;27393:34;27402:24;27420:5;27402:24;:::i;:::-;27393:34;:::i;:::-;27375:53;:::i;:::-;27362:66;;27292:142;;;:::o;27440:131::-;27527:37;27558:5;27527:37;:::i;:::-;27522:3;27515:50;27440:131;;:::o;27577:222::-;27670:4;27708:2;27697:9;27693:18;27685:26;;27721:71;27789:1;27778:9;27774:17;27765:6;27721:71;:::i;:::-;27577:222;;;;:::o;27805:161::-;27945:13;27941:1;27933:6;27929:14;27922:37;27805:161;:::o;27972:366::-;28114:3;28135:67;28199:2;28194:3;28135:67;:::i;:::-;28128:74;;28211:93;28300:3;28211:93;:::i;:::-;28329:2;28324:3;28320:12;28313:19;;27972:366;;;:::o;28344:419::-;28510:4;28548:2;28537:9;28533:18;28525:26;;28597:9;28591:4;28587:20;28583:1;28572:9;28568:17;28561:47;28625:131;28751:4;28625:131;:::i;:::-;28617:139;;28344:419;;;:::o;28769:224::-;28909:34;28905:1;28897:6;28893:14;28886:58;28978:7;28973:2;28965:6;28961:15;28954:32;28769:224;:::o;28999:366::-;29141:3;29162:67;29226:2;29221:3;29162:67;:::i;:::-;29155:74;;29238:93;29327:3;29238:93;:::i;:::-;29356:2;29351:3;29347:12;29340:19;;28999:366;;;:::o;29371:419::-;29537:4;29575:2;29564:9;29560:18;29552:26;;29624:9;29618:4;29614:20;29610:1;29599:9;29595:17;29588:47;29652:131;29778:4;29652:131;:::i;:::-;29644:139;;29371:419;;;:::o;29796:162::-;29936:14;29932:1;29924:6;29920:14;29913:38;29796:162;:::o;29964:366::-;30106:3;30127:67;30191:2;30186:3;30127:67;:::i;:::-;30120:74;;30203:93;30292:3;30203:93;:::i;:::-;30321:2;30316:3;30312:12;30305:19;;29964:366;;;:::o;30336:419::-;30502:4;30540:2;30529:9;30525:18;30517:26;;30589:9;30583:4;30579:20;30575:1;30564:9;30560:17;30553:47;30617:131;30743:4;30617:131;:::i;:::-;30609:139;;30336:419;;;:::o;30761:174::-;30901:26;30897:1;30889:6;30885:14;30878:50;30761:174;:::o;30941:366::-;31083:3;31104:67;31168:2;31163:3;31104:67;:::i;:::-;31097:74;;31180:93;31269:3;31180:93;:::i;:::-;31298:2;31293:3;31289:12;31282:19;;30941:366;;;:::o;31313:419::-;31479:4;31517:2;31506:9;31502:18;31494:26;;31566:9;31560:4;31556:20;31552:1;31541:9;31537:17;31530:47;31594:131;31720:4;31594:131;:::i;:::-;31586:139;;31313:419;;;:::o;31738:320::-;31853:4;31891:2;31880:9;31876:18;31868:26;;31904:71;31972:1;31961:9;31957:17;31948:6;31904:71;:::i;:::-;31985:66;32047:2;32036:9;32032:18;32023:6;31985:66;:::i;:::-;31738:320;;;;;:::o;32064:168::-;32204:20;32200:1;32192:6;32188:14;32181:44;32064:168;:::o;32238:366::-;32380:3;32401:67;32465:2;32460:3;32401:67;:::i;:::-;32394:74;;32477:93;32566:3;32477:93;:::i;:::-;32595:2;32590:3;32586:12;32579:19;;32238:366;;;:::o;32610:419::-;32776:4;32814:2;32803:9;32799:18;32791:26;;32863:9;32857:4;32853:20;32849:1;32838:9;32834:17;32827:47;32891:131;33017:4;32891:131;:::i;:::-;32883:139;;32610:419;;;:::o;33035:162::-;33175:14;33171:1;33163:6;33159:14;33152:38;33035:162;:::o;33203:366::-;33345:3;33366:67;33430:2;33425:3;33366:67;:::i;:::-;33359:74;;33442:93;33531:3;33442:93;:::i;:::-;33560:2;33555:3;33551:12;33544:19;;33203:366;;;:::o;33575:419::-;33741:4;33779:2;33768:9;33764:18;33756:26;;33828:9;33822:4;33818:20;33814:1;33803:9;33799:17;33792:47;33856:131;33982:4;33856:131;:::i;:::-;33848:139;;33575:419;;;:::o;34000:225::-;34140:34;34136:1;34128:6;34124:14;34117:58;34209:8;34204:2;34196:6;34192:15;34185:33;34000:225;:::o;34231:366::-;34373:3;34394:67;34458:2;34453:3;34394:67;:::i;:::-;34387:74;;34470:93;34559:3;34470:93;:::i;:::-;34588:2;34583:3;34579:12;34572:19;;34231:366;;;:::o;34603:419::-;34769:4;34807:2;34796:9;34792:18;34784:26;;34856:9;34850:4;34846:20;34842:1;34831:9;34827:17;34820:47;34884:131;35010:4;34884:131;:::i;:::-;34876:139;;34603:419;;;:::o;35028:147::-;35129:11;35166:3;35151:18;;35028:147;;;;:::o;35181:114::-;;:::o;35301:398::-;35460:3;35481:83;35562:1;35557:3;35481:83;:::i;:::-;35474:90;;35573:93;35662:3;35573:93;:::i;:::-;35691:1;35686:3;35682:11;35675:18;;35301:398;;;:::o;35705:379::-;35889:3;35911:147;36054:3;35911:147;:::i;:::-;35904:154;;36075:3;36068:10;;35705:379;;;:::o;36090:224::-;36230:34;36226:1;36218:6;36214:14;36207:58;36299:7;36294:2;36286:6;36282:15;36275:32;36090:224;:::o;36320:366::-;36462:3;36483:67;36547:2;36542:3;36483:67;:::i;:::-;36476:74;;36559:93;36648:3;36559:93;:::i;:::-;36677:2;36672:3;36668:12;36661:19;;36320:366;;;:::o;36692:419::-;36858:4;36896:2;36885:9;36881:18;36873:26;;36945:9;36939:4;36935:20;36931:1;36920:9;36916:17;36909:47;36973:131;37099:4;36973:131;:::i;:::-;36965:139;;36692:419;;;:::o;37117:222::-;37257:34;37253:1;37245:6;37241:14;37234:58;37326:5;37321:2;37313:6;37309:15;37302:30;37117:222;:::o;37345:366::-;37487:3;37508:67;37572:2;37567:3;37508:67;:::i;:::-;37501:74;;37584:93;37673:3;37584:93;:::i;:::-;37702:2;37697:3;37693:12;37686:19;;37345:366;;;:::o;37717:419::-;37883:4;37921:2;37910:9;37906:18;37898:26;;37970:9;37964:4;37960:20;37956:1;37945:9;37941:17;37934:47;37998:131;38124:4;37998:131;:::i;:::-;37990:139;;37717:419;;;:::o;38142:225::-;38282:34;38278:1;38270:6;38266:14;38259:58;38351:8;38346:2;38338:6;38334:15;38327:33;38142:225;:::o;38373:366::-;38515:3;38536:67;38600:2;38595:3;38536:67;:::i;:::-;38529:74;;38612:93;38701:3;38612:93;:::i;:::-;38730:2;38725:3;38721:12;38714:19;;38373:366;;;:::o;38745:419::-;38911:4;38949:2;38938:9;38934:18;38926:26;;38998:9;38992:4;38988:20;38984:1;38973:9;38969:17;38962:47;39026:131;39152:4;39026:131;:::i;:::-;39018:139;;38745:419;;;:::o;39170:223::-;39310:34;39306:1;39298:6;39294:14;39287:58;39379:6;39374:2;39366:6;39362:15;39355:31;39170:223;:::o;39399:366::-;39541:3;39562:67;39626:2;39621:3;39562:67;:::i;:::-;39555:74;;39638:93;39727:3;39638:93;:::i;:::-;39756:2;39751:3;39747:12;39740:19;;39399:366;;;:::o;39771:419::-;39937:4;39975:2;39964:9;39960:18;39952:26;;40024:9;40018:4;40014:20;40010:1;39999:9;39995:17;39988:47;40052:131;40178:4;40052:131;:::i;:::-;40044:139;;39771:419;;;:::o;40196:221::-;40336:34;40332:1;40324:6;40320:14;40313:58;40405:4;40400:2;40392:6;40388:15;40381:29;40196:221;:::o;40423:366::-;40565:3;40586:67;40650:2;40645:3;40586:67;:::i;:::-;40579:74;;40662:93;40751:3;40662:93;:::i;:::-;40780:2;40775:3;40771:12;40764:19;;40423:366;;;:::o;40795:419::-;40961:4;40999:2;40988:9;40984:18;40976:26;;41048:9;41042:4;41038:20;41034:1;41023:9;41019:17;41012:47;41076:131;41202:4;41076:131;:::i;:::-;41068:139;;40795:419;;;:::o;41220:179::-;41360:31;41356:1;41348:6;41344:14;41337:55;41220:179;:::o;41405:366::-;41547:3;41568:67;41632:2;41627:3;41568:67;:::i;:::-;41561:74;;41644:93;41733:3;41644:93;:::i;:::-;41762:2;41757:3;41753:12;41746:19;;41405:366;;;:::o;41777:419::-;41943:4;41981:2;41970:9;41966:18;41958:26;;42030:9;42024:4;42020:20;42016:1;42005:9;42001:17;41994:47;42058:131;42184:4;42058:131;:::i;:::-;42050:139;;41777:419;;;:::o;42202:168::-;42342:20;42338:1;42330:6;42326:14;42319:44;42202:168;:::o;42376:366::-;42518:3;42539:67;42603:2;42598:3;42539:67;:::i;:::-;42532:74;;42615:93;42704:3;42615:93;:::i;:::-;42733:2;42728:3;42724:12;42717:19;;42376:366;;;:::o;42748:419::-;42914:4;42952:2;42941:9;42937:18;42929:26;;43001:9;42995:4;42991:20;42987:1;42976:9;42972:17;42965:47;43029:131;43155:4;43029:131;:::i;:::-;43021:139;;42748:419;;;:::o;43173:194::-;43213:4;43233:20;43251:1;43233:20;:::i;:::-;43228:25;;43267:20;43285:1;43267:20;:::i;:::-;43262:25;;43311:1;43308;43304:9;43296:17;;43335:1;43329:4;43326:11;43323:37;;;43340:18;;:::i;:::-;43323:37;43173:194;;;;:::o;43373:160::-;43513:12;43509:1;43501:6;43497:14;43490:36;43373:160;:::o;43539:366::-;43681:3;43702:67;43766:2;43761:3;43702:67;:::i;:::-;43695:74;;43778:93;43867:3;43778:93;:::i;:::-;43896:2;43891:3;43887:12;43880:19;;43539:366;;;:::o;43911:419::-;44077:4;44115:2;44104:9;44100:18;44092:26;;44164:9;44158:4;44154:20;44150:1;44139:9;44135:17;44128:47;44192:131;44318:4;44192:131;:::i;:::-;44184:139;;43911:419;;;:::o;44336:164::-;44476:16;44472:1;44464:6;44460:14;44453:40;44336:164;:::o;44506:366::-;44648:3;44669:67;44733:2;44728:3;44669:67;:::i;:::-;44662:74;;44745:93;44834:3;44745:93;:::i;:::-;44863:2;44858:3;44854:12;44847:19;;44506:366;;;:::o;44878:419::-;45044:4;45082:2;45071:9;45067:18;45059:26;;45131:9;45125:4;45121:20;45117:1;45106:9;45102:17;45095:47;45159:131;45285:4;45159:131;:::i;:::-;45151:139;;44878:419;;;:::o;45303:220::-;45443:34;45439:1;45431:6;45427:14;45420:58;45512:3;45507:2;45499:6;45495:15;45488:28;45303:220;:::o;45529:366::-;45671:3;45692:67;45756:2;45751:3;45692:67;:::i;:::-;45685:74;;45768:93;45857:3;45768:93;:::i;:::-;45886:2;45881:3;45877:12;45870:19;;45529:366;;;:::o;45901:419::-;46067:4;46105:2;46094:9;46090:18;46082:26;;46154:9;46148:4;46144:20;46140:1;46129:9;46125:17;46118:47;46182:131;46308:4;46182:131;:::i;:::-;46174:139;;45901:419;;;:::o;46326:229::-;46466:34;46462:1;46454:6;46450:14;46443:58;46535:12;46530:2;46522:6;46518:15;46511:37;46326:229;:::o;46561:366::-;46703:3;46724:67;46788:2;46783:3;46724:67;:::i;:::-;46717:74;;46800:93;46889:3;46800:93;:::i;:::-;46918:2;46913:3;46909:12;46902:19;;46561:366;;;:::o;46933:419::-;47099:4;47137:2;47126:9;47122:18;47114:26;;47186:9;47180:4;47176:20;47172:1;47161:9;47157:17;47150:47;47214:131;47340:4;47214:131;:::i;:::-;47206:139;;46933:419;;;:::o;47358:180::-;47406:77;47403:1;47396:88;47503:4;47500:1;47493:15;47527:4;47524:1;47517:15;47544:85;47589:7;47618:5;47607:16;;47544:85;;;:::o;47635:158::-;47693:9;47726:61;47744:42;47753:32;47779:5;47753:32;:::i;:::-;47744:42;:::i;:::-;47726:61;:::i;:::-;47713:74;;47635:158;;;:::o;47799:147::-;47894:45;47933:5;47894:45;:::i;:::-;47889:3;47882:58;47799:147;;:::o;47952:114::-;48019:6;48053:5;48047:12;48037:22;;47952:114;;;:::o;48072:184::-;48171:11;48205:6;48200:3;48193:19;48245:4;48240:3;48236:14;48221:29;;48072:184;;;;:::o;48262:132::-;48329:4;48352:3;48344:11;;48382:4;48377:3;48373:14;48365:22;;48262:132;;;:::o;48400:108::-;48477:24;48495:5;48477:24;:::i;:::-;48472:3;48465:37;48400:108;;:::o;48514:179::-;48583:10;48604:46;48646:3;48638:6;48604:46;:::i;:::-;48682:4;48677:3;48673:14;48659:28;;48514:179;;;;:::o;48699:113::-;48769:4;48801;48796:3;48792:14;48784:22;;48699:113;;;:::o;48848:732::-;48967:3;48996:54;49044:5;48996:54;:::i;:::-;49066:86;49145:6;49140:3;49066:86;:::i;:::-;49059:93;;49176:56;49226:5;49176:56;:::i;:::-;49255:7;49286:1;49271:284;49296:6;49293:1;49290:13;49271:284;;;49372:6;49366:13;49399:63;49458:3;49443:13;49399:63;:::i;:::-;49392:70;;49485:60;49538:6;49485:60;:::i;:::-;49475:70;;49331:224;49318:1;49315;49311:9;49306:14;;49271:284;;;49275:14;49571:3;49564:10;;48972:608;;;48848:732;;;;:::o;49586:831::-;49849:4;49887:3;49876:9;49872:19;49864:27;;49901:71;49969:1;49958:9;49954:17;49945:6;49901:71;:::i;:::-;49982:80;50058:2;50047:9;50043:18;50034:6;49982:80;:::i;:::-;50109:9;50103:4;50099:20;50094:2;50083:9;50079:18;50072:48;50137:108;50240:4;50231:6;50137:108;:::i;:::-;50129:116;;50255:72;50323:2;50312:9;50308:18;50299:6;50255:72;:::i;:::-;50337:73;50405:3;50394:9;50390:19;50381:6;50337:73;:::i;:::-;49586:831;;;;;;;;:::o;50423:225::-;50563:34;50559:1;50551:6;50547:14;50540:58;50632:8;50627:2;50619:6;50615:15;50608:33;50423:225;:::o;50654:366::-;50796:3;50817:67;50881:2;50876:3;50817:67;:::i;:::-;50810:74;;50893:93;50982:3;50893:93;:::i;:::-;51011:2;51006:3;51002:12;50995:19;;50654:366;;;:::o;51026:419::-;51192:4;51230:2;51219:9;51215:18;51207:26;;51279:9;51273:4;51269:20;51265:1;51254:9;51250:17;51243:47;51307:131;51433:4;51307:131;:::i;:::-;51299:139;;51026:419;;;:::o;51451:98::-;51502:6;51536:5;51530:12;51520:22;;51451:98;;;:::o;51555:386::-;51659:3;51687:38;51719:5;51687:38;:::i;:::-;51741:88;51822:6;51817:3;51741:88;:::i;:::-;51734:95;;51838:65;51896:6;51891:3;51884:4;51877:5;51873:16;51838:65;:::i;:::-;51928:6;51923:3;51919:16;51912:23;;51663:278;51555:386;;;;:::o;51947:271::-;52077:3;52099:93;52188:3;52179:6;52099:93;:::i;:::-;52092:100;;52209:3;52202:10;;51947:271;;;;:::o;52224:179::-;52364:31;52360:1;52352:6;52348:14;52341:55;52224:179;:::o;52409:366::-;52551:3;52572:67;52636:2;52631:3;52572:67;:::i;:::-;52565:74;;52648:93;52737:3;52648:93;:::i;:::-;52766:2;52761:3;52757:12;52750:19;;52409:366;;;:::o;52781:419::-;52947:4;52985:2;52974:9;52970:18;52962:26;;53034:9;53028:4;53024:20;53020:1;53009:9;53005:17;52998:47;53062:131;53188:4;53062:131;:::i;:::-;53054:139;;52781:419;;;:::o

Swarm Source

ipfs://aadd486bef967ac0d52902c2d43565007fcb39aa832f1fbfd9366cc9ca2247e2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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