ETH Price: $2,372.29 (-0.72%)

Token

BURGER TIME ($BURGER)
 

Overview

Max Total Supply

4,200,000,069 $BURGER

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,092,606.588859799564288209 $BURGER

Value
$0.00
0xe4c474eb2a65a3c9f384950c7aaa5640a4d0a0d5
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:
BURGER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-15
*/

/**
CFG Factory Contract
Enable Trade
Modify Taxes up to 25%
*/
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract BURGER is Context, IERC20, Ownable {
    using Address for address;

    //Definition of Wallets for Marketing or team.
    address payable public marketingWallet =
        payable(0x07734164310508D1fA9f4341268C5A4A07dE94Aa);
    //adding customer wallet to send supply and exclude from fees.
    address payable public cxWallet =
        payable(0x07734164310508D1fA9f4341268C5A4A07dE94Aa);

    //Dead Wallet for SAFU Contract
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;
    //Mapping section for better tracking.
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    //Loging and Event Information for better troubleshooting.
    event Log(string, uint256);
    event AuditLog(string, address);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapTokensForETH(uint256 amountIn, address[] path);
    //Supply Definition.
    uint256 private _tTotal = 4_200_000_069 ether;
    uint256 private _tFeeTotal;
    //Token Definition.
    string public constant name = "BURGER TIME";
    string public constant symbol = "$BURGER";
    uint8 public constant decimals = 18;
    //Taxes Definition.
    uint public buyFee = 0; //set to 0 by default, up to 25% on function.

    uint256 public sellFee = 0; //set to 0 by default, up to 25% on function.

    uint256 public marketingTokensCollected = 0;
    uint256 public totalMarketingTokensCollected = 0;

    uint256 public minimumTokensBeforeSwap = 100_000 ether;

    //Oracle Price Update, Manual Process.
    uint256 public swapOutput = 0;
        //Trading Controls added for SAFU Requirements
    bool public tradingEnabled;
    //Router and Pair Configuration.
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private immutable WETH;
    //Tracking of Automatic Swap vs Manual Swap.
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

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

    constructor() {
//What is my router and exclude pinksale locker.
        address currentRouter;
        //Adding Variables for all the routers for easier deployment for our customers.
        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
            _isExcludedFromFee[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true;
        } else if (block.chainid == 97) {
            currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
            _isExcludedFromFee[0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5] = true;
            cxWallet = payable(msg.sender);
        } else if (block.chainid == 43114) {
            currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet
            _isExcludedFromFee[0x9479C6484a392113bB829A15E7c9E033C9e70D30] = true;
        } else if (block.chainid == 42161) {
            currentRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; //Arbitrum Sushi
            _isExcludedFromFee[0xeBb415084Ce323338CFD3174162964CC23753dFD] = true;
        } else if (block.chainid == 1 || block.chainid == 5) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet
            _isExcludedFromFee[0x71B5759d73262FBb223956913ecF4ecC51057641] = true;
        } else {
            revert("You're not Blade");
        }

        //End of Router Variables.
        //Owner of balance
        _tOwned[cxWallet] = _tTotal;
        //Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Router = _uniswapV2Router;
        //Approve router to be used.
        _approve(msg.sender, address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        //Exclude from fees the owner, contract and SAFU.
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[cxWallet] = true;


        emit Transfer(address(0), cxWallet, _tTotal);
        _transferOwnership(cxWallet);
    }

    //Readable Functions.
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    //ERC 20 Standard Transfer Functions
    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    //ERC 20 Standard Allowance Function
    function allowance(
        address _owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    //ERC 20 Standard Approve Function
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    //ERC 20 Standard Transfer From
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

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

    //ERC 20 Standard decrease Allowance
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

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

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

    //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _tOwned[from] >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        //Enable Trade after sale is finilized
        require(tradingEnabled || _isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading not yet enabled!");

        //Adding logic for automatic swap.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;
        uint fee = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify();
        }
        if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            fee = (sellFee * amount) / 100;
        }
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            fee = (buyFee * amount) / 100;
        }
        amount -= fee;
        if (fee > 0) {
            _tokenTransfer(from, address(this), fee);
            marketingTokensCollected += fee;
            totalMarketingTokensCollected += fee;
        }
        _tokenTransfer(from, to, amount);
    }

    //Swap Tokens for BNB or to add liquidity either automatically or manual, by default this is set to manual.
    //Corrected newBalance bug, it sending bnb to wallet and any remaining is on contract and can be recoverred.
    function swapAndLiquify() public lockTheSwap {
        uint256 totalTokens = balanceOf(address(this));
        swapTokensForEth(totalTokens);
        uint ethBalance = address(this).balance;

        transferToAddressETH(marketingWallet, ethBalance);

        marketingTokensCollected = 0;
    }

    //swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

        emit SwapTokensForETH(tokenAmount, path);
    }

    //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        _tOwned[sender] -= amount;
        _tOwned[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    //exclude wallets from fees, this is needed for launch or other contracts.
    function excludeFromFee(address account) external onlyOwner {
        require(_isExcludedFromFee[account] != true, "The wallet is already excluded!");
        _isExcludedFromFee[account] = true;
        emit AuditLog(
            "We have excluded the following walled in fees:",
            account
        );
    }

    //include wallet back in fees.
    function includeInFee(address account) external onlyOwner {
        require(_isExcludedFromFee[account] != false, "The wallet is already included!");
        _isExcludedFromFee[account] = false;
        emit AuditLog(
            "We have including the following walled in fees:",
            account
        );
    }

    //Automatic Swap Configuration.
    function setTokensToSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        require(
            _minimumTokensBeforeSwap >= 100 ether,
            "You need to enter more than 100 tokens."
        );
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit Log(
            "We have updated minimunTokensBeforeSwap to:",
            minimumTokensBeforeSwap
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //set a new marketing wallet.
    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "setmarketingWallet: ZERO");
        marketingWallet = payable(_marketingWallet);
        emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
    }

    function setBuyFee(uint256 _buyFee) external onlyOwner {
        require(_buyFee <= 25, "Buy Fee cannot be more than 25%");
        buyFee = _buyFee;
        emit Log("We have updated the buy fee to:", buyFee);
    }

    function setSellFee(uint256 _sellFee) external onlyOwner {
        require(_sellFee <= 25, "Sell Fee cannot be more than 25%");
        sellFee = _sellFee;
        emit Log("We have updated the sell fee to:", sellFee);
    }

    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        (bool succ, ) = recipient.call{value: amount}("");
        require(succ, "Transfer failed.");
    }

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

    /////---fallback--////
    //This cannot be removed as is a fallback to the swapAndLiquify
    event SwapETHForTokens(uint256 amountIn, address[] path);

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            swapOutput, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp + 300
        );
        emit SwapETHForTokens(amount, path);
    }

    // Withdraw ETH that's potentially stuck in the Contract
    function recoverETHfromContract() external onlyOwner {
        uint ethBalance = address(this).balance;
        (bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
        require(succ, "Transfer failed");
        emit AuditLog(
            "We have recover the stuck eth from contract.",
            marketingWallet
        );
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 _amount
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
        bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
        require(succ, "Transfer failed");
        emit Log("We have recovered tokens from contract:", _amount);
    }
        //Trading Controls for SAFU Contract
        function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapAndLiquifyEnabled = true;
        emit AuditLog("We have Enable Trading and Automatic Swaps:", msg.sender);
    }
    //Updated code to enable swapAndLiquify at the time of enable trade.
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutput","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":"totalMarketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040527307734164310508d1fa9f4341268c5a4a07de94aa600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507307734164310508d1fa9f4341268c5a4a07de94aa600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b0d92289bf663590585f40000600655600060085560006009556000600a556000600b5569152d02c7e14af6800000600c556000600d556000600e60026101000a81548160ff0219169083151502179055503480156200010d57600080fd5b506200012e620001226200097460201b60201c565b6200097c60201b60201c565b600060384603620001c2577310ed43c718714eb63d5aa57b78b54704e256024e905060016005600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200049b565b60614603620002955773d99d1c33f9fc3444f8101754abc46c52416550d19050600160056000735e5b9be5fd939c578abe5800a90c566eeeba44a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049a565b61a86a460362000328577360ae616a2155ee3d9a68541ba4544862310933d49050600160056000739479c6484a392113bb829a15e7c9e033c9e70d3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000499565b61a4b14603620003bb57731b02da8cb0d097eb8d57a175b88c7d8b47997506905060016005600073ebb415084ce323338cfd3174162964cc23753dfd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000498565b6001461480620003cb5750600546145b156200045a57737a250d5630b4cf539739df2c5dacb4c659f2488d90506001600560007371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000497565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048e9062000c9b565b60405180910390fd5b5b5b5b5b60065460036000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008190508073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057a919062000d27565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200061f919062000d27565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b81526004016200065d92919062000d6a565b6020604051808303816000875af11580156200067d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006a3919062000d27565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200073f336080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a4060201b60201c565b62000774306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a4060201b60201c565b6001600560006200078a62000c1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000931919062000db2565b60405180910390a36200096c600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200097c60201b60201c565b505062000eff565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa99062000e45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1b9062000edd565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c04919062000db2565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082825260208201905092915050565b7f596f75277265206e6f7420426c61646500000000000000000000000000000000600082015250565b600062000c8360108362000c3a565b915062000c908262000c4b565b602082019050919050565b6000602082019050818103600083015262000cb68162000c74565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cef8262000cc2565b9050919050565b62000d018162000ce2565b811462000d0d57600080fd5b50565b60008151905062000d218162000cf6565b92915050565b60006020828403121562000d405762000d3f62000cbd565b5b600062000d508482850162000d10565b91505092915050565b62000d648162000ce2565b82525050565b600060408201905062000d81600083018562000d59565b62000d90602083018462000d59565b9392505050565b6000819050919050565b62000dac8162000d97565b82525050565b600060208201905062000dc9600083018462000da1565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000e2d60248362000c3a565b915062000e3a8262000dcf565b604082019050919050565b6000602082019050818103600083015262000e608162000e1e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000ec560228362000c3a565b915062000ed28262000e67565b604082019050919050565b6000602082019050818103600083015262000ef88162000eb6565b9050919050565b60805160a05160c051613d4e62000f526000396000612208015260008181610de101528181611e3101528181611eb10152611f78015260008181610a190152818161227b01526122a20152613d4e6000f3fe60806040526004361061023f5760003560e01c80636ca60bc61161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e1461084e578063e6be4a721461088b578063e780c045146108b4578063ea2f0b37146108df578063f2fde38b1461090857610246565b8063a9059cbb1461078f578063b29ad50a146107cc578063c49b9a80146107e3578063ce831ed51461080c578063d2d7ad831461082357610246565b80638a8c523c116100f25780638a8c523c146106bc5780638b4cee08146106d35780638da5cb5b146106fc57806395d89b4114610727578063a457c2d71461075257610246565b80636ca60bc6146105e757806370a0823114610612578063715018a61461064f57806375f0a8741461066657806385141a771461069157610246565b806340763503116101bc5780634a74bb02116101805780634a74bb02146105005780634ada218b1461052b5780635342acb4146105565780635d098b38146105935780635eaa8247146105bc57610246565b8063407635031461042d578063437823ec14610458578063461d94761461048157806347062402146104aa57806349bd5a5e146104d557610246565b8063220f669611610203578063220f66961461033257806323b872dd1461035d5780632b14ca561461039a578063313ce567146103c557806339509351146103f057610246565b806306fdde031461024b578063095ea7b3146102765780630cc835a3146102b35780631694505e146102dc57806318160ddd1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610931565b60405161026d91906125c8565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612683565b61096a565b6040516102aa91906126de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906126f9565b610988565b005b3480156102e857600080fd5b506102f1610a17565b6040516102fe9190612785565b60405180910390f35b34801561031357600080fd5b5061031c610a3b565b60405161032991906127af565b60405180910390f35b34801561033e57600080fd5b50610347610a45565b60405161035491906126de565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f91906127ca565b610a58565b60405161039191906126de565b60405180910390f35b3480156103a657600080fd5b506103af610b58565b6040516103bc91906127af565b60405180910390f35b3480156103d157600080fd5b506103da610b5e565b6040516103e79190612839565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190612683565b610b63565b60405161042491906126de565b60405180910390f35b34801561043957600080fd5b50610442610c0f565b60405161044f91906127af565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612854565b610c15565b005b34801561048d57600080fd5b506104a860048036038101906104a391906126f9565b610d42565b005b3480156104b657600080fd5b506104bf610dd9565b6040516104cc91906127af565b60405180910390f35b3480156104e157600080fd5b506104ea610ddf565b6040516104f79190612890565b60405180910390f35b34801561050c57600080fd5b50610515610e03565b60405161052291906126de565b60405180910390f35b34801561053757600080fd5b50610540610e16565b60405161054d91906126de565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612854565b610e29565b60405161058a91906126de565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190612854565b610e7f565b005b3480156105c857600080fd5b506105d1610f93565b6040516105de91906127af565b60405180910390f35b3480156105f357600080fd5b506105fc610f99565b60405161060991906127af565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190612854565b610f9f565b60405161064691906127af565b60405180910390f35b34801561065b57600080fd5b50610664610fe8565b005b34801561067257600080fd5b5061067b610ffc565b60405161068891906128cc565b60405180910390f35b34801561069d57600080fd5b506106a6611022565b6040516106b39190612890565b60405180910390f35b3480156106c857600080fd5b506106d1611028565b005b3480156106df57600080fd5b506106fa60048036038101906106f591906126f9565b6110ef565b005b34801561070857600080fd5b5061071161117e565b60405161071e9190612890565b60405180910390f35b34801561073357600080fd5b5061073c6111a7565b60405161074991906125c8565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190612683565b6111e0565b60405161078691906126de565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612683565b61128c565b6040516107c391906126de565b60405180910390f35b3480156107d857600080fd5b506107e16112aa565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190612913565b611333565b005b34801561081857600080fd5b506108216113e4565b005b34801561082f57600080fd5b5061083861151c565b60405161084591906127af565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190612940565b611522565b60405161088291906127af565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190612683565b6115a9565b005b3480156108c057600080fd5b506108c961173f565b6040516108d691906128cc565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190612854565b611765565b005b34801561091457600080fd5b5061092f600480360381019061092a9190612854565b611892565b005b6040518060400160405280600b81526020017f4255524745522054494d4500000000000000000000000000000000000000000081525081565b600061097e610977611915565b848461191d565b6001905092915050565b610990611ae6565b60198111156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906129cc565b60405180910390fd5b806008819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600854604051610a0c9190612a38565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600654905090565b600e60019054906101000a900460ff1681565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aa4611915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90612ad8565b60405180910390fd5b610b2f858585611b64565b610b4c85610b3b611915565b8584610b479190612b27565b61191d565b60019150509392505050565b60095481565b601281565b6000610c05610b70611915565b848460046000610b7e611915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c009190612b5b565b61191d565b6001905092915050565b600b5481565b610c1d611ae6565b60011515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca790612bdb565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610d379190612c6d565b60405180910390a150565b610d4a611ae6565b68056bc75e2d63100000811015610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90612d0d565b60405180910390fd5b80600c819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600c54604051610dce9190612d9f565b60405180910390a150565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e87611ae6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612e19565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610f889190612ecc565b60405180910390a150565b600d5481565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff0611ae6565b610ffa60006120a5565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b611030611ae6565b600e60009054906101000a900460ff1615611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790612f46565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00336040516110e59190612fd8565b60405180910390a1565b6110f7611ae6565b601981111561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290613052565b60405180910390fd5b806009819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b560095460405161117391906130be565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600781526020017f244255524745520000000000000000000000000000000000000000000000000081525081565b60006112826111ed611915565b8484600460006111fb611915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127d9190612b27565b61191d565b6001905092915050565b60006112a0611299611915565b8484611b64565b6001905092915050565b6001600e60016101000a81548160ff02191690831515021790555060006112d030610f9f565b90506112db81612169565b600047905061130c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612371565b6000600a8190555050506000600e60016101000a81548160ff021916908315150217905550565b61133b611ae6565b801515600e60029054906101000a900460ff16151503611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790613138565b60405180910390fd5b80600e60026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113d991906126de565b60405180910390a150565b6113ec611ae6565b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161143990613189565b60006040518083038185875af1925050503d8060008114611476576040519150601f19603f3d011682016040523d82523d6000602084013e61147b565b606091505b50509050806114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b6906131ea565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611510919061327c565b60405180910390a15050565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115b1611ae6565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061331c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161167e92919061333c565b6020604051808303816000875af115801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c1919061337a565b905080611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa906131ea565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516117329190613419565b60405180910390a1505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61176d611ae6565b60001515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790613493565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00816040516118879190613525565b60405180910390a150565b61189a611ae6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611909576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611900906135c5565b60405180910390fd5b611912816120a5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390613657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f2906136e9565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ad991906127af565b60405180910390a3505050565b611aee611915565b73ffffffffffffffffffffffffffffffffffffffff16611b0c61117e565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613755565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906137e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613879565b60405180910390fd5b60008111611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c9061390b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe9061399d565b60405180910390fd5b600e60009054906101000a900460ff1680611d6b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611dbf5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613a09565b60405180910390fd5b6000611e0930610f9f565b90506000600c5482101590506000600e60019054906101000a900460ff16158015611e8057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611e895750815b8015611ea15750600e60029054906101000a900460ff165b15611eaf57611eae6112aa565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f545750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f7657606484600954611f699190613a29565b611f739190613a9a565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561201b5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203d576064846008546120309190613a29565b61203a9190613a9a565b90505b80846120499190612b27565b935060008111156120925761205f863083612422565b80600a60008282546120719190612b5b565b9250508190555080600b600082825461208a9190612b5b565b925050819055505b61209d868686612422565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561218657612185613acb565b5b6040519080825280602002602001820160405280156121b45781602001602082028036833780820191505090505b50905030816000815181106121cc576121cb613afa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061223b5761223a613afa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122a0307f00000000000000000000000000000000000000000000000000000000000000008461191d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612302959493929190613c22565b600060405180830381600087803b15801561231c57600080fd5b505af1158015612330573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612365929190613c7c565b60405180910390a15050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161239790613189565b60006040518083038185875af1925050503d80600081146123d4576040519150601f19603f3d011682016040523d82523d6000602084013e6123d9565b606091505b505090508061241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490613cf8565b60405180910390fd5b505050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124719190612b27565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c79190612b5b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161252b91906127af565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612572578082015181840152602081019050612557565b60008484015250505050565b6000601f19601f8301169050919050565b600061259a82612538565b6125a48185612543565b93506125b4818560208601612554565b6125bd8161257e565b840191505092915050565b600060208201905081810360008301526125e2818461258f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061261a826125ef565b9050919050565b61262a8161260f565b811461263557600080fd5b50565b60008135905061264781612621565b92915050565b6000819050919050565b6126608161264d565b811461266b57600080fd5b50565b60008135905061267d81612657565b92915050565b6000806040838503121561269a576126996125ea565b5b60006126a885828601612638565b92505060206126b98582860161266e565b9150509250929050565b60008115159050919050565b6126d8816126c3565b82525050565b60006020820190506126f360008301846126cf565b92915050565b60006020828403121561270f5761270e6125ea565b5b600061271d8482850161266e565b91505092915050565b6000819050919050565b600061274b612746612741846125ef565b612726565b6125ef565b9050919050565b600061275d82612730565b9050919050565b600061276f82612752565b9050919050565b61277f81612764565b82525050565b600060208201905061279a6000830184612776565b92915050565b6127a98161264d565b82525050565b60006020820190506127c460008301846127a0565b92915050565b6000806000606084860312156127e3576127e26125ea565b5b60006127f186828701612638565b935050602061280286828701612638565b92505060406128138682870161266e565b9150509250925092565b600060ff82169050919050565b6128338161281d565b82525050565b600060208201905061284e600083018461282a565b92915050565b60006020828403121561286a576128696125ea565b5b600061287884828501612638565b91505092915050565b61288a8161260f565b82525050565b60006020820190506128a56000830184612881565b92915050565b60006128b6826125ef565b9050919050565b6128c6816128ab565b82525050565b60006020820190506128e160008301846128bd565b92915050565b6128f0816126c3565b81146128fb57600080fd5b50565b60008135905061290d816128e7565b92915050565b600060208284031215612929576129286125ea565b5b6000612937848285016128fe565b91505092915050565b60008060408385031215612957576129566125ea565b5b600061296585828601612638565b925050602061297685828601612638565b9150509250929050565b7f427579204665652063616e6e6f74206265206d6f7265207468616e2032352500600082015250565b60006129b6601f83612543565b91506129c182612980565b602082019050919050565b600060208201905081810360008301526129e5816129a9565b9050919050565b7f57652068617665207570646174656420746865206275792066656520746f3a00600082015250565b6000612a22601f83612543565b9150612a2d826129ec565b602082019050919050565b60006040820190508181036000830152612a5181612a15565b9050612a6060208301846127a0565b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ac2602883612543565b9150612acd82612a66565b604082019050919050565b60006020820190508181036000830152612af181612ab5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b328261264d565b9150612b3d8361264d565b9250828203905081811115612b5557612b54612af8565b5b92915050565b6000612b668261264d565b9150612b718361264d565b9250828201905080821115612b8957612b88612af8565b5b92915050565b7f5468652077616c6c657420697320616c7265616479206578636c756465642100600082015250565b6000612bc5601f83612543565b9150612bd082612b8f565b602082019050919050565b60006020820190508181036000830152612bf481612bb8565b9050919050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612c57602e83612543565b9150612c6282612bfb565b604082019050919050565b60006040820190508181036000830152612c8681612c4a565b9050612c956020830184612881565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b6000612cf7602783612543565b9150612d0282612c9b565b604082019050919050565b60006020820190508181036000830152612d2681612cea565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b6000612d89602b83612543565b9150612d9482612d2d565b604082019050919050565b60006040820190508181036000830152612db881612d7c565b9050612dc760208301846127a0565b92915050565b7f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612e03601883612543565b9150612e0e82612dcd565b602082019050919050565b60006020820190508181036000830152612e3281612df6565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612e95602483612543565b9150612ea082612e39565b604082019050919050565b6000612eb682612752565b9050919050565b612ec681612eab565b82525050565b60006040820190508181036000830152612ee581612e88565b9050612ef46020830184612ebd565b92915050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000612f30601883612543565b9150612f3b82612efa565b602082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f5765206861766520456e61626c652054726164696e6720616e64204175746f6d60008201527f617469632053776170733a000000000000000000000000000000000000000000602082015250565b6000612fc2602b83612543565b9150612fcd82612f66565b604082019050919050565b60006040820190508181036000830152612ff181612fb5565b90506130006020830184612881565b92915050565b7f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20323525600082015250565b600061303c602083612543565b915061304782613006565b602082019050919050565b6000602082019050818103600083015261306b8161302f565b9050919050565b7f576520686176652075706461746564207468652073656c6c2066656520746f3a600082015250565b60006130a8602083612543565b91506130b382613072565b602082019050919050565b600060408201905081810360008301526130d78161309b565b90506130e660208301846127a0565b92915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000613122601183612543565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b600081905092915050565b50565b6000613173600083613158565b915061317e82613163565b600082019050919050565b600061319482613166565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006131d4600f83612543565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b7f57652068617665207265636f7665722074686520737475636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b6000613266602c83612543565b91506132718261320a565b604082019050919050565b6000604082019050818103600083015261329581613259565b90506132a46020830184612ebd565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000613306603683612543565b9150613311826132aa565b604082019050919050565b60006020820190508181036000830152613335816132f9565b9050919050565b60006040820190506133516000830185612ebd565b61335e60208301846127a0565b9392505050565b600081519050613374816128e7565b92915050565b6000602082840312156133905761338f6125ea565b5b600061339e84828501613365565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b6000613403602783612543565b915061340e826133a7565b604082019050919050565b60006040820190508181036000830152613432816133f6565b905061344160208301846127a0565b92915050565b7f5468652077616c6c657420697320616c726561647920696e636c756465642100600082015250565b600061347d601f83612543565b915061348882613447565b602082019050919050565b600060208201905081810360008301526134ac81613470565b9050919050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b600061350f602f83612543565b915061351a826134b3565b604082019050919050565b6000604082019050818103600083015261353e81613502565b905061354d6020830184612881565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135af602683612543565b91506135ba82613553565b604082019050919050565b600060208201905081810360008301526135de816135a2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613641602483612543565b915061364c826135e5565b604082019050919050565b6000602082019050818103600083015261367081613634565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136d3602283612543565b91506136de82613677565b604082019050919050565b60006020820190508181036000830152613702816136c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373f602083612543565b915061374a82613709565b602082019050919050565b6000602082019050818103600083015261376e81613732565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137d1602583612543565b91506137dc82613775565b604082019050919050565b60006020820190508181036000830152613800816137c4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613863602383612543565b915061386e82613807565b604082019050919050565b6000602082019050818103600083015261389281613856565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006138f5602983612543565b915061390082613899565b604082019050919050565b60006020820190508181036000830152613924816138e8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613987602683612543565b91506139928261392b565b604082019050919050565b600060208201905081810360008301526139b68161397a565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006139f3601883612543565b91506139fe826139bd565b602082019050919050565b60006020820190508181036000830152613a22816139e6565b9050919050565b6000613a348261264d565b9150613a3f8361264d565b9250828202613a4d8161264d565b91508282048414831517613a6457613a63612af8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aa58261264d565b9150613ab08361264d565b925082613ac057613abf613a6b565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613b4e613b49613b4484613b29565b612726565b61264d565b9050919050565b613b5e81613b33565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b998161260f565b82525050565b6000613bab8383613b90565b60208301905092915050565b6000602082019050919050565b6000613bcf82613b64565b613bd98185613b6f565b9350613be483613b80565b8060005b83811015613c15578151613bfc8882613b9f565b9750613c0783613bb7565b925050600181019050613be8565b5085935050505092915050565b600060a082019050613c3760008301886127a0565b613c446020830187613b55565b8181036040830152613c568186613bc4565b9050613c656060830185612881565b613c7260808301846127a0565b9695505050505050565b6000604082019050613c9160008301856127a0565b8181036020830152613ca38184613bc4565b90509392505050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613ce2601083612543565b9150613ced82613cac565b602082019050919050565b60006020820190508181036000830152613d1181613cd5565b905091905056fea2646970667358221220640adf461f85650f4de68de1eb020da4a928a99f759e178973d4224eef65654464736f6c63430008130033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80636ca60bc61161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e1461084e578063e6be4a721461088b578063e780c045146108b4578063ea2f0b37146108df578063f2fde38b1461090857610246565b8063a9059cbb1461078f578063b29ad50a146107cc578063c49b9a80146107e3578063ce831ed51461080c578063d2d7ad831461082357610246565b80638a8c523c116100f25780638a8c523c146106bc5780638b4cee08146106d35780638da5cb5b146106fc57806395d89b4114610727578063a457c2d71461075257610246565b80636ca60bc6146105e757806370a0823114610612578063715018a61461064f57806375f0a8741461066657806385141a771461069157610246565b806340763503116101bc5780634a74bb02116101805780634a74bb02146105005780634ada218b1461052b5780635342acb4146105565780635d098b38146105935780635eaa8247146105bc57610246565b8063407635031461042d578063437823ec14610458578063461d94761461048157806347062402146104aa57806349bd5a5e146104d557610246565b8063220f669611610203578063220f66961461033257806323b872dd1461035d5780632b14ca561461039a578063313ce567146103c557806339509351146103f057610246565b806306fdde031461024b578063095ea7b3146102765780630cc835a3146102b35780631694505e146102dc57806318160ddd1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610931565b60405161026d91906125c8565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612683565b61096a565b6040516102aa91906126de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906126f9565b610988565b005b3480156102e857600080fd5b506102f1610a17565b6040516102fe9190612785565b60405180910390f35b34801561031357600080fd5b5061031c610a3b565b60405161032991906127af565b60405180910390f35b34801561033e57600080fd5b50610347610a45565b60405161035491906126de565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f91906127ca565b610a58565b60405161039191906126de565b60405180910390f35b3480156103a657600080fd5b506103af610b58565b6040516103bc91906127af565b60405180910390f35b3480156103d157600080fd5b506103da610b5e565b6040516103e79190612839565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190612683565b610b63565b60405161042491906126de565b60405180910390f35b34801561043957600080fd5b50610442610c0f565b60405161044f91906127af565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612854565b610c15565b005b34801561048d57600080fd5b506104a860048036038101906104a391906126f9565b610d42565b005b3480156104b657600080fd5b506104bf610dd9565b6040516104cc91906127af565b60405180910390f35b3480156104e157600080fd5b506104ea610ddf565b6040516104f79190612890565b60405180910390f35b34801561050c57600080fd5b50610515610e03565b60405161052291906126de565b60405180910390f35b34801561053757600080fd5b50610540610e16565b60405161054d91906126de565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612854565b610e29565b60405161058a91906126de565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190612854565b610e7f565b005b3480156105c857600080fd5b506105d1610f93565b6040516105de91906127af565b60405180910390f35b3480156105f357600080fd5b506105fc610f99565b60405161060991906127af565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190612854565b610f9f565b60405161064691906127af565b60405180910390f35b34801561065b57600080fd5b50610664610fe8565b005b34801561067257600080fd5b5061067b610ffc565b60405161068891906128cc565b60405180910390f35b34801561069d57600080fd5b506106a6611022565b6040516106b39190612890565b60405180910390f35b3480156106c857600080fd5b506106d1611028565b005b3480156106df57600080fd5b506106fa60048036038101906106f591906126f9565b6110ef565b005b34801561070857600080fd5b5061071161117e565b60405161071e9190612890565b60405180910390f35b34801561073357600080fd5b5061073c6111a7565b60405161074991906125c8565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190612683565b6111e0565b60405161078691906126de565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612683565b61128c565b6040516107c391906126de565b60405180910390f35b3480156107d857600080fd5b506107e16112aa565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190612913565b611333565b005b34801561081857600080fd5b506108216113e4565b005b34801561082f57600080fd5b5061083861151c565b60405161084591906127af565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190612940565b611522565b60405161088291906127af565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190612683565b6115a9565b005b3480156108c057600080fd5b506108c961173f565b6040516108d691906128cc565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190612854565b611765565b005b34801561091457600080fd5b5061092f600480360381019061092a9190612854565b611892565b005b6040518060400160405280600b81526020017f4255524745522054494d4500000000000000000000000000000000000000000081525081565b600061097e610977611915565b848461191d565b6001905092915050565b610990611ae6565b60198111156109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906129cc565b60405180910390fd5b806008819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600854604051610a0c9190612a38565b60405180910390a150565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600654905090565b600e60019054906101000a900460ff1681565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aa4611915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90612ad8565b60405180910390fd5b610b2f858585611b64565b610b4c85610b3b611915565b8584610b479190612b27565b61191d565b60019150509392505050565b60095481565b601281565b6000610c05610b70611915565b848460046000610b7e611915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c009190612b5b565b61191d565b6001905092915050565b600b5481565b610c1d611ae6565b60011515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca790612bdb565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610d379190612c6d565b60405180910390a150565b610d4a611ae6565b68056bc75e2d63100000811015610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90612d0d565b60405180910390fd5b80600c819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600c54604051610dce9190612d9f565b60405180910390a150565b60085481565b7f0000000000000000000000004c103ad51ea0be2217d78b4e2d23b453a14ed7cf81565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e87611ae6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612e19565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610f889190612ecc565b60405180910390a150565b600d5481565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff0611ae6565b610ffa60006120a5565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b611030611ae6565b600e60009054906101000a900460ff1615611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790612f46565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00336040516110e59190612fd8565b60405180910390a1565b6110f7611ae6565b601981111561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290613052565b60405180910390fd5b806009819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b560095460405161117391906130be565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600781526020017f244255524745520000000000000000000000000000000000000000000000000081525081565b60006112826111ed611915565b8484600460006111fb611915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127d9190612b27565b61191d565b6001905092915050565b60006112a0611299611915565b8484611b64565b6001905092915050565b6001600e60016101000a81548160ff02191690831515021790555060006112d030610f9f565b90506112db81612169565b600047905061130c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612371565b6000600a8190555050506000600e60016101000a81548160ff021916908315150217905550565b61133b611ae6565b801515600e60029054906101000a900460ff16151503611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790613138565b60405180910390fd5b80600e60026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113d991906126de565b60405180910390a150565b6113ec611ae6565b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161143990613189565b60006040518083038185875af1925050503d8060008114611476576040519150601f19603f3d011682016040523d82523d6000602084013e61147b565b606091505b50509050806114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b6906131ea565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611510919061327c565b60405180910390a15050565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115b1611ae6565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061331c565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161167e92919061333c565b6020604051808303816000875af115801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c1919061337a565b905080611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa906131ea565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516117329190613419565b60405180910390a1505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61176d611ae6565b60001515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790613493565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00816040516118879190613525565b60405180910390a150565b61189a611ae6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611909576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611900906135c5565b60405180910390fd5b611912816120a5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390613657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f2906136e9565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ad991906127af565b60405180910390a3505050565b611aee611915565b73ffffffffffffffffffffffffffffffffffffffff16611b0c61117e565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613755565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca906137e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613879565b60405180910390fd5b60008111611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c9061390b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe9061399d565b60405180910390fd5b600e60009054906101000a900460ff1680611d6b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611dbf5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613a09565b60405180910390fd5b6000611e0930610f9f565b90506000600c5482101590506000600e60019054906101000a900460ff16158015611e8057507f0000000000000000000000004c103ad51ea0be2217d78b4e2d23b453a14ed7cf73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611e895750815b8015611ea15750600e60029054906101000a900460ff165b15611eaf57611eae6112aa565b5b7f0000000000000000000000004c103ad51ea0be2217d78b4e2d23b453a14ed7cf73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f545750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f7657606484600954611f699190613a29565b611f739190613a9a565b90505b7f0000000000000000000000004c103ad51ea0be2217d78b4e2d23b453a14ed7cf73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561201b5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203d576064846008546120309190613a29565b61203a9190613a9a565b90505b80846120499190612b27565b935060008111156120925761205f863083612422565b80600a60008282546120719190612b5b565b9250508190555080600b600082825461208a9190612b5b565b925050819055505b61209d868686612422565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561218657612185613acb565b5b6040519080825280602002602001820160405280156121b45781602001602082028036833780820191505090505b50905030816000815181106121cc576121cb613afa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061223b5761223a613afa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122a0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461191d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612302959493929190613c22565b600060405180830381600087803b15801561231c57600080fd5b505af1158015612330573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612365929190613c7c565b60405180910390a15050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161239790613189565b60006040518083038185875af1925050503d80600081146123d4576040519150601f19603f3d011682016040523d82523d6000602084013e6123d9565b606091505b505090508061241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490613cf8565b60405180910390fd5b505050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124719190612b27565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c79190612b5b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161252b91906127af565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612572578082015181840152602081019050612557565b60008484015250505050565b6000601f19601f8301169050919050565b600061259a82612538565b6125a48185612543565b93506125b4818560208601612554565b6125bd8161257e565b840191505092915050565b600060208201905081810360008301526125e2818461258f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061261a826125ef565b9050919050565b61262a8161260f565b811461263557600080fd5b50565b60008135905061264781612621565b92915050565b6000819050919050565b6126608161264d565b811461266b57600080fd5b50565b60008135905061267d81612657565b92915050565b6000806040838503121561269a576126996125ea565b5b60006126a885828601612638565b92505060206126b98582860161266e565b9150509250929050565b60008115159050919050565b6126d8816126c3565b82525050565b60006020820190506126f360008301846126cf565b92915050565b60006020828403121561270f5761270e6125ea565b5b600061271d8482850161266e565b91505092915050565b6000819050919050565b600061274b612746612741846125ef565b612726565b6125ef565b9050919050565b600061275d82612730565b9050919050565b600061276f82612752565b9050919050565b61277f81612764565b82525050565b600060208201905061279a6000830184612776565b92915050565b6127a98161264d565b82525050565b60006020820190506127c460008301846127a0565b92915050565b6000806000606084860312156127e3576127e26125ea565b5b60006127f186828701612638565b935050602061280286828701612638565b92505060406128138682870161266e565b9150509250925092565b600060ff82169050919050565b6128338161281d565b82525050565b600060208201905061284e600083018461282a565b92915050565b60006020828403121561286a576128696125ea565b5b600061287884828501612638565b91505092915050565b61288a8161260f565b82525050565b60006020820190506128a56000830184612881565b92915050565b60006128b6826125ef565b9050919050565b6128c6816128ab565b82525050565b60006020820190506128e160008301846128bd565b92915050565b6128f0816126c3565b81146128fb57600080fd5b50565b60008135905061290d816128e7565b92915050565b600060208284031215612929576129286125ea565b5b6000612937848285016128fe565b91505092915050565b60008060408385031215612957576129566125ea565b5b600061296585828601612638565b925050602061297685828601612638565b9150509250929050565b7f427579204665652063616e6e6f74206265206d6f7265207468616e2032352500600082015250565b60006129b6601f83612543565b91506129c182612980565b602082019050919050565b600060208201905081810360008301526129e5816129a9565b9050919050565b7f57652068617665207570646174656420746865206275792066656520746f3a00600082015250565b6000612a22601f83612543565b9150612a2d826129ec565b602082019050919050565b60006040820190508181036000830152612a5181612a15565b9050612a6060208301846127a0565b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ac2602883612543565b9150612acd82612a66565b604082019050919050565b60006020820190508181036000830152612af181612ab5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b328261264d565b9150612b3d8361264d565b9250828203905081811115612b5557612b54612af8565b5b92915050565b6000612b668261264d565b9150612b718361264d565b9250828201905080821115612b8957612b88612af8565b5b92915050565b7f5468652077616c6c657420697320616c7265616479206578636c756465642100600082015250565b6000612bc5601f83612543565b9150612bd082612b8f565b602082019050919050565b60006020820190508181036000830152612bf481612bb8565b9050919050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612c57602e83612543565b9150612c6282612bfb565b604082019050919050565b60006040820190508181036000830152612c8681612c4a565b9050612c956020830184612881565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b6000612cf7602783612543565b9150612d0282612c9b565b604082019050919050565b60006020820190508181036000830152612d2681612cea565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b6000612d89602b83612543565b9150612d9482612d2d565b604082019050919050565b60006040820190508181036000830152612db881612d7c565b9050612dc760208301846127a0565b92915050565b7f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612e03601883612543565b9150612e0e82612dcd565b602082019050919050565b60006020820190508181036000830152612e3281612df6565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612e95602483612543565b9150612ea082612e39565b604082019050919050565b6000612eb682612752565b9050919050565b612ec681612eab565b82525050565b60006040820190508181036000830152612ee581612e88565b9050612ef46020830184612ebd565b92915050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000612f30601883612543565b9150612f3b82612efa565b602082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f5765206861766520456e61626c652054726164696e6720616e64204175746f6d60008201527f617469632053776170733a000000000000000000000000000000000000000000602082015250565b6000612fc2602b83612543565b9150612fcd82612f66565b604082019050919050565b60006040820190508181036000830152612ff181612fb5565b90506130006020830184612881565b92915050565b7f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20323525600082015250565b600061303c602083612543565b915061304782613006565b602082019050919050565b6000602082019050818103600083015261306b8161302f565b9050919050565b7f576520686176652075706461746564207468652073656c6c2066656520746f3a600082015250565b60006130a8602083612543565b91506130b382613072565b602082019050919050565b600060408201905081810360008301526130d78161309b565b90506130e660208301846127a0565b92915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000613122601183612543565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b600081905092915050565b50565b6000613173600083613158565b915061317e82613163565b600082019050919050565b600061319482613166565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b60006131d4600f83612543565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b7f57652068617665207265636f7665722074686520737475636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b6000613266602c83612543565b91506132718261320a565b604082019050919050565b6000604082019050818103600083015261329581613259565b90506132a46020830184612ebd565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000613306603683612543565b9150613311826132aa565b604082019050919050565b60006020820190508181036000830152613335816132f9565b9050919050565b60006040820190506133516000830185612ebd565b61335e60208301846127a0565b9392505050565b600081519050613374816128e7565b92915050565b6000602082840312156133905761338f6125ea565b5b600061339e84828501613365565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b6000613403602783612543565b915061340e826133a7565b604082019050919050565b60006040820190508181036000830152613432816133f6565b905061344160208301846127a0565b92915050565b7f5468652077616c6c657420697320616c726561647920696e636c756465642100600082015250565b600061347d601f83612543565b915061348882613447565b602082019050919050565b600060208201905081810360008301526134ac81613470565b9050919050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b600061350f602f83612543565b915061351a826134b3565b604082019050919050565b6000604082019050818103600083015261353e81613502565b905061354d6020830184612881565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135af602683612543565b91506135ba82613553565b604082019050919050565b600060208201905081810360008301526135de816135a2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613641602483612543565b915061364c826135e5565b604082019050919050565b6000602082019050818103600083015261367081613634565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136d3602283612543565b91506136de82613677565b604082019050919050565b60006020820190508181036000830152613702816136c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373f602083612543565b915061374a82613709565b602082019050919050565b6000602082019050818103600083015261376e81613732565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137d1602583612543565b91506137dc82613775565b604082019050919050565b60006020820190508181036000830152613800816137c4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613863602383612543565b915061386e82613807565b604082019050919050565b6000602082019050818103600083015261389281613856565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006138f5602983612543565b915061390082613899565b604082019050919050565b60006020820190508181036000830152613924816138e8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613987602683612543565b91506139928261392b565b604082019050919050565b600060208201905081810360008301526139b68161397a565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006139f3601883612543565b91506139fe826139bd565b602082019050919050565b60006020820190508181036000830152613a22816139e6565b9050919050565b6000613a348261264d565b9150613a3f8361264d565b9250828202613a4d8161264d565b91508282048414831517613a6457613a63612af8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aa58261264d565b9150613ab08361264d565b925082613ac057613abf613a6b565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613b4e613b49613b4484613b29565b612726565b61264d565b9050919050565b613b5e81613b33565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b998161260f565b82525050565b6000613bab8383613b90565b60208301905092915050565b6000602082019050919050565b6000613bcf82613b64565b613bd98185613b6f565b9350613be483613b80565b8060005b83811015613c15578151613bfc8882613b9f565b9750613c0783613bb7565b925050600181019050613be8565b5085935050505092915050565b600060a082019050613c3760008301886127a0565b613c446020830187613b55565b8181036040830152613c568186613bc4565b9050613c656060830185612881565b613c7260808301846127a0565b9695505050505050565b6000604082019050613c9160008301856127a0565b8181036020830152613ca38184613bc4565b90509392505050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613ce2601083612543565b9150613ced82613cac565b602082019050919050565b60006020820190508181036000830152613d1181613cd5565b905091905056fea2646970667358221220640adf461f85650f4de68de1eb020da4a928a99f759e178973d4224eef65654464736f6c63430008130033

Deployed Bytecode Sourcemap

22966:15723:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24322:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28585:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35793:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25022:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27855:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25212:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28816:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24564:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24420:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29344:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24695:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34029:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34765:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24487:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25080:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25247:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24951:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33815:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35491:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24859:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24645:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27958:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13086:103;;;;;;;;;;;;;:::i;:::-;;23103:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23419:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38344:268;;;;;;;;;;;;;:::i;:::-;;36021:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12438:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24372:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29684:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28125:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32349:303;;;;;;;;;;;;;:::i;:::-;;35201:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37387:359;;;;;;;;;;;;;:::i;:::-;;24752:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28367:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37823:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23279:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34396:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13344:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24322:43;;;;;;;;;;;;;;;;;;;:::o;28585:186::-;28685:4;28702:39;28711:12;:10;:12::i;:::-;28725:7;28734:6;28702:8;:39::i;:::-;28759:4;28752:11;;28585:186;;;;:::o;35793:220::-;12324:13;:11;:13::i;:::-;35878:2:::1;35867:7;:13;;35859:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35936:7;35927:6;:16;;;;35959:46;35998:6;;35959:46;;;;;;:::i;:::-;;;;;;;;35793:220:::0;:::o;25022:51::-;;;:::o;27855:95::-;27908:7;27935;;27928:14;;27855:95;:::o;25212:28::-;;;;;;;;;;;;;:::o;28816:478::-;28948:4;28965:21;28989:11;:19;29001:6;28989:19;;;;;;;;;;;;;;;:33;29009:12;:10;:12::i;:::-;28989:33;;;;;;;;;;;;;;;;28965:57;;29075:6;29055:16;:26;;29033:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;29160:36;29170:6;29178:9;29189:6;29160:9;:36::i;:::-;29207:57;29216:6;29224:12;:10;:12::i;:::-;29257:6;29238:16;:25;;;;:::i;:::-;29207:8;:57::i;:::-;29282:4;29275:11;;;28816:478;;;;;:::o;24564:26::-;;;;:::o;24420:35::-;24453:2;24420:35;:::o;29344:290::-;29457:4;29474:130;29497:12;:10;:12::i;:::-;29524:7;29583:10;29546:11;:25;29558:12;:10;:12::i;:::-;29546:25;;;;;;;;;;;;;;;:34;29572:7;29546:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;29474:8;:130::i;:::-;29622:4;29615:11;;29344:290;;;;:::o;24695:48::-;;;;:::o;34029:323::-;12324:13;:11;:13::i;:::-;34139:4:::1;34108:35;;:18;:27;34127:7;34108:27;;;;;;;;;;;;;;;;;;;;;;;;;:35;;::::0;34100:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34220:4;34190:18;:27;34209:7;34190:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34240:104;34326:7;34240:104;;;;;;:::i;:::-;;;;;;;;34029:323:::0;:::o;34765:428::-;12324:13;:11;:13::i;:::-;34920:9:::1;34892:24;:37;;34870:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;35033:24;35007:23;:50;;;;35073:112;35151:23;;35073:112;;;;;;:::i;:::-;;;;;;;;34765:428:::0;:::o;24487:22::-;;;;:::o;25080:38::-;;;:::o;25247:41::-;;;;;;;;;;;;;:::o;24951:26::-;;;;;;;;;;;;;:::o;33815:126::-;33882:4;33906:18;:27;33925:7;33906:27;;;;;;;;;;;;;;;;;;;;;;;;;33899:34;;33815:126;;;:::o;35491:294::-;12324:13;:11;:13::i;:::-;35611:1:::1;35583:30;;:16;:30;;::::0;35575:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35679:16;35653:15;;:43;;;;;;;;;;;;;;;;;;35712:65;35761:15;;;;;;;;;;;35712:65;;;;;;:::i;:::-;;;;;;;;35491:294:::0;:::o;24859:29::-;;;;:::o;24645:43::-;;;;:::o;27958:117::-;28024:7;28051;:16;28059:7;28051:16;;;;;;;;;;;;;;;;28044:23;;27958:117;;;:::o;13086:103::-;12324:13;:11;:13::i;:::-;13151:30:::1;13178:1;13151:18;:30::i;:::-;13086:103::o:0;23103:101::-;;;;;;;;;;;;;:::o;23419:88::-;23465:42;23419:88;:::o;38344:268::-;12324:13;:11;:13::i;:::-;38407:14:::1;;;;;;;;;;;38406:15;38398:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38478:4;38461:14;;:21;;;;;;;;;;;;;;;;;;38517:4;38493:21;;:28;;;;;;;;;;;;;;;;;;38537:67;38593:10;38537:67;;;;;;:::i;:::-;;;;;;;;38344:268::o:0;36021:228::-;12324:13;:11;:13::i;:::-;36109:2:::1;36097:8;:14;;36089:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:8;36159:7;:18;;;;36193:48;36233:7;;36193:48;;;;;;:::i;:::-;;;;;;;;36021:228:::0;:::o;12438:87::-;12484:7;12511:6;;;;;;;;;;;12504:13;;12438:87;:::o;24372:41::-;;;;;;;;;;;;;;;;;;;:::o;29684:300::-;29802:4;29819:135;29842:12;:10;:12::i;:::-;29869:7;29928:15;29891:11;:25;29903:12;:10;:12::i;:::-;29891:25;;;;;;;;;;;;;;;:34;29917:7;29891:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;29819:8;:135::i;:::-;29972:4;29965:11;;29684:300;;;;:::o;28125:192::-;28228:4;28245:42;28255:12;:10;:12::i;:::-;28269:9;28280:6;28245:9;:42::i;:::-;28305:4;28298:11;;28125:192;;;;:::o;32349:303::-;25350:4;25331:16;;:23;;;;;;;;;;;;;;;;;;32405:19:::1;32427:24;32445:4;32427:9;:24::i;:::-;32405:46;;32462:29;32479:11;32462:16;:29::i;:::-;32502:15;32520:21;32502:39;;32554:49;32575:15;;;;;;;;;;;32592:10;32554:20;:49::i;:::-;32643:1;32616:24;:28;;;;32394:258;;25396:5:::0;25377:16;;:24;;;;;;;;;;;;;;;;;;32349:303::o;35201:247::-;12324:13;:11;:13::i;:::-;35313:8:::1;35288:33;;:21;;;;;;;;;;;:33;;::::0;35280:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35378:8;35354:21;;:32;;;;;;;;;;;;;;;;;;35402:38;35431:8;35402:38;;;;;;:::i;:::-;;;;;;;;35201:247:::0;:::o;37387:359::-;12324:13;:11;:13::i;:::-;37451:15:::1;37469:21;37451:39;;37502:9;37525:15;;;;;;;;;;;37517:29;;37554:10;37517:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37501:68;;;37588:4;37580:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;37628:110;37712:15;;;;;;;;;;;37628:110;;;;;;:::i;:::-;;;;;;;;37440:306;;37387:359::o:0;24752:54::-;;;;:::o;28367:170::-;28474:7;28501:11;:19;28513:6;28501:19;;;;;;;;;;;;;;;:28;28521:7;28501:28;;;;;;;;;;;;;;;;28494:35;;28367:170;;;;:::o;37823:465::-;12324:13;:11;:13::i;:::-;38000:4:::1;37975:30;;:13;:30;;::::0;37953:134:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38098:9;38117:13;38110:30;;;38141:15;;;;;;;;;;;38158:7;38110:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38098:68;;38185:4;38177:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;38225:55;38272:7;38225:55;;;;;;:::i;:::-;;;;;;;;37942:346;37823:465:::0;;:::o;23279:94::-;;;;;;;;;;;;;:::o;34396:324::-;12324:13;:11;:13::i;:::-;34504:5:::1;34473:36;;:18;:27;34492:7;34473:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;::::0;34465:80:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34586:5;34556:18;:27;34575:7;34556:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34607:105;34694:7;34607:105;;;;;;:::i;:::-;;;;;;;;34396:324:::0;:::o;13344:238::-;12324:13;:11;:13::i;:::-;13467:1:::1;13447:22;;:8;:22;;::::0;13425:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13546:28;13565:8;13546:18;:28::i;:::-;13344:238:::0;:::o;169:98::-;222:7;249:10;242:17;;169:98;:::o;30016:341::-;30128:1;30110:20;;:6;:20;;;30102:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30209:1;30190:21;;:7;:21;;;30182:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30294:6;30263:11;:19;30275:6;30263:19;;;;;;;;;;;;;;;:28;30283:7;30263:28;;;;;;;;;;;;;;;:37;;;;30333:7;30316:33;;30325:6;30316:33;;;30342:6;30316:33;;;;;;:::i;:::-;;;;;;;;30016:341;;;:::o;12603:132::-;12678:12;:10;:12::i;:::-;12667:23;;:7;:5;:7::i;:::-;:23;;;12659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12603:132::o;30490:1624::-;30594:1;30578:18;;:4;:18;;;30570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30671:1;30657:16;;:2;:16;;;30649:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30741:1;30732:6;:10;30724:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30838:6;30821:7;:13;30829:4;30821:13;;;;;;;;;;;;;;;;:23;;30799:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30977:14;;;;;;;;;;;:42;;;;30995:18;:24;31014:4;30995:24;;;;;;;;;;;;;;;;;;;;;;;;;30977:42;:68;;;;31023:18;:22;31042:2;31023:22;;;;;;;;;;;;;;;;;;;;;;;;;30977:68;30969:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;31131:28;31162:24;31180:4;31162:9;:24::i;:::-;31131:55;;31197:28;31265:23;;31228:20;:60;;31197:91;;31299:8;31425:16;;;;;;;;;;;31424:17;:55;;;;;31466:13;31458:21;;:4;:21;;;;31424:55;:95;;;;;31496:23;31424:95;:133;;;;;31536:21;;;;;;;;;;;31424:133;31406:206;;;31584:16;:14;:16::i;:::-;31406:206;31632:13;31626:19;;:2;:19;;;:48;;;;;31650:18;:24;31669:4;31650:24;;;;;;;;;;;;;;;;;;;;;;;;;31649:25;31626:48;31622:111;;;31718:3;31708:6;31698:7;;:16;;;;:::i;:::-;31697:24;;;;:::i;:::-;31691:30;;31622:111;31755:13;31747:21;;:4;:21;;;:48;;;;;31773:18;:22;31792:2;31773:22;;;;;;;;;;;;;;;;;;;;;;;;;31772:23;31747:48;31743:110;;;31838:3;31828:6;31819;;:15;;;;:::i;:::-;31818:23;;;;:::i;:::-;31812:29;;31743:110;31873:3;31863:13;;;;;:::i;:::-;;;31897:1;31891:3;:7;31887:177;;;31915:40;31930:4;31944;31951:3;31915:14;:40::i;:::-;31998:3;31970:24;;:31;;;;;;;:::i;:::-;;;;;;;;32049:3;32016:29;;:36;;;;;;;:::i;:::-;;;;;;;;31887:177;32074:32;32089:4;32095:2;32099:6;32074:14;:32::i;:::-;30559:1555;;;30490:1624;;;:::o;13742:191::-;13816:16;13835:6;;;;;;;;;;;13816:25;;13861:8;13852:6;;:17;;;;;;;;;;;;;;;;;;13916:8;13885:40;;13906:8;13885:40;;;;;;;;;;;;13805:128;13742:191;:::o;32780:638::-;32906:21;32944:1;32930:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32906:40;;32975:4;32957;32962:1;32957:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33001:4;32991;32996:1;32991:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33016:62;33033:4;33048:15;33066:11;33016:8;:62::i;:::-;33117:15;:66;;;33198:11;33224:1;33268:4;33295;33331:15;33117:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33375:35;33392:11;33405:4;33375:35;;;;;;;:::i;:::-;;;;;;;;32835:583;32780:638;:::o;36257:218::-;36375:9;36390;:14;;36412:6;36390:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36374:49;;;36442:4;36434:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;36363:112;36257:218;;:::o;33554:253::-;33701:6;33682:7;:15;33690:6;33682:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;33740:6;33718:7;:18;33726:9;33718:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;33781:9;33764:35;;33773:6;33764:35;;;33792:6;33764:35;;;;;;:::i;:::-;;;;;;;;33554:253;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:329::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:104::-;6898:7;6927:24;6945:5;6927:24;:::i;:::-;6916:35;;6853:104;;;:::o;6963:142::-;7066:32;7092:5;7066:32;:::i;:::-;7061:3;7054:45;6963:142;;:::o;7111:254::-;7220:4;7258:2;7247:9;7243:18;7235:26;;7271:87;7355:1;7344:9;7340:17;7331:6;7271:87;:::i;:::-;7111:254;;;;:::o;7371:116::-;7441:21;7456:5;7441:21;:::i;:::-;7434:5;7431:32;7421:60;;7477:1;7474;7467:12;7421:60;7371:116;:::o;7493:133::-;7536:5;7574:6;7561:20;7552:29;;7590:30;7614:5;7590:30;:::i;:::-;7493:133;;;;:::o;7632:323::-;7688:6;7737:2;7725:9;7716:7;7712:23;7708:32;7705:119;;;7743:79;;:::i;:::-;7705:119;7863:1;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7834:114;7632:323;;;;:::o;7961:474::-;8029:6;8037;8086:2;8074:9;8065:7;8061:23;8057:32;8054:119;;;8092:79;;:::i;:::-;8054:119;8212:1;8237:53;8282:7;8273:6;8262:9;8258:22;8237:53;:::i;:::-;8227:63;;8183:117;8339:2;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;:::i;:::-;8355:63;;8310:118;7961:474;;;;;:::o;8441:181::-;8581:33;8577:1;8569:6;8565:14;8558:57;8441:181;:::o;8628:366::-;8770:3;8791:67;8855:2;8850:3;8791:67;:::i;:::-;8784:74;;8867:93;8956:3;8867:93;:::i;:::-;8985:2;8980:3;8976:12;8969:19;;8628:366;;;:::o;9000:419::-;9166:4;9204:2;9193:9;9189:18;9181:26;;9253:9;9247:4;9243:20;9239:1;9228:9;9224:17;9217:47;9281:131;9407:4;9281:131;:::i;:::-;9273:139;;9000:419;;;:::o;9425:181::-;9565:33;9561:1;9553:6;9549:14;9542:57;9425:181;:::o;9612:366::-;9754:3;9775:67;9839:2;9834:3;9775:67;:::i;:::-;9768:74;;9851:93;9940:3;9851:93;:::i;:::-;9969:2;9964:3;9960:12;9953:19;;9612:366;;;:::o;9984:529::-;10178:4;10216:2;10205:9;10201:18;10193:26;;10265:9;10259:4;10255:20;10251:1;10240:9;10236:17;10229:47;10293:131;10419:4;10293:131;:::i;:::-;10285:139;;10434:72;10502:2;10491:9;10487:18;10478:6;10434:72;:::i;:::-;9984:529;;;;:::o;10519:227::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:10;10723:2;10715:6;10711:15;10704:35;10519:227;:::o;10752:366::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:419::-;11290:4;11328:2;11317:9;11313:18;11305:26;;11377:9;11371:4;11367:20;11363:1;11352:9;11348:17;11341:47;11405:131;11531:4;11405:131;:::i;:::-;11397:139;;11124:419;;;:::o;11549:180::-;11597:77;11594:1;11587:88;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;11735:194;11775:4;11795:20;11813:1;11795:20;:::i;:::-;11790:25;;11829:20;11847:1;11829:20;:::i;:::-;11824:25;;11873:1;11870;11866:9;11858:17;;11897:1;11891:4;11888:11;11885:37;;;11902:18;;:::i;:::-;11885:37;11735:194;;;;:::o;11935:191::-;11975:3;11994:20;12012:1;11994:20;:::i;:::-;11989:25;;12028:20;12046:1;12028:20;:::i;:::-;12023:25;;12071:1;12068;12064:9;12057:16;;12092:3;12089:1;12086:10;12083:36;;;12099:18;;:::i;:::-;12083:36;11935:191;;;;:::o;12132:181::-;12272:33;12268:1;12260:6;12256:14;12249:57;12132:181;:::o;12319:366::-;12461:3;12482:67;12546:2;12541:3;12482:67;:::i;:::-;12475:74;;12558:93;12647:3;12558:93;:::i;:::-;12676:2;12671:3;12667:12;12660:19;;12319:366;;;:::o;12691:419::-;12857:4;12895:2;12884:9;12880:18;12872:26;;12944:9;12938:4;12934:20;12930:1;12919:9;12915:17;12908:47;12972:131;13098:4;12972:131;:::i;:::-;12964:139;;12691:419;;;:::o;13116:233::-;13256:34;13252:1;13244:6;13240:14;13233:58;13325:16;13320:2;13312:6;13308:15;13301:41;13116:233;:::o;13355:366::-;13497:3;13518:67;13582:2;13577:3;13518:67;:::i;:::-;13511:74;;13594:93;13683:3;13594:93;:::i;:::-;13712:2;13707:3;13703:12;13696:19;;13355:366;;;:::o;13727:529::-;13921:4;13959:2;13948:9;13944:18;13936:26;;14008:9;14002:4;13998:20;13994:1;13983:9;13979:17;13972:47;14036:131;14162:4;14036:131;:::i;:::-;14028:139;;14177:72;14245:2;14234:9;14230:18;14221:6;14177:72;:::i;:::-;13727:529;;;;:::o;14262:226::-;14402:34;14398:1;14390:6;14386:14;14379:58;14471:9;14466:2;14458:6;14454:15;14447:34;14262:226;:::o;14494:366::-;14636:3;14657:67;14721:2;14716:3;14657:67;:::i;:::-;14650:74;;14733:93;14822:3;14733:93;:::i;:::-;14851:2;14846:3;14842:12;14835:19;;14494:366;;;:::o;14866:419::-;15032:4;15070:2;15059:9;15055:18;15047:26;;15119:9;15113:4;15109:20;15105:1;15094:9;15090:17;15083:47;15147:131;15273:4;15147:131;:::i;:::-;15139:139;;14866:419;;;:::o;15291:230::-;15431:34;15427:1;15419:6;15415:14;15408:58;15500:13;15495:2;15487:6;15483:15;15476:38;15291:230;:::o;15527:366::-;15669:3;15690:67;15754:2;15749:3;15690:67;:::i;:::-;15683:74;;15766:93;15855:3;15766:93;:::i;:::-;15884:2;15879:3;15875:12;15868:19;;15527:366;;;:::o;15899:529::-;16093:4;16131:2;16120:9;16116:18;16108:26;;16180:9;16174:4;16170:20;16166:1;16155:9;16151:17;16144:47;16208:131;16334:4;16208:131;:::i;:::-;16200:139;;16349:72;16417:2;16406:9;16402:18;16393:6;16349:72;:::i;:::-;15899:529;;;;:::o;16434:174::-;16574:26;16570:1;16562:6;16558:14;16551:50;16434:174;:::o;16614:366::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:419::-;17152:4;17190:2;17179:9;17175:18;17167:26;;17239:9;17233:4;17229:20;17225:1;17214:9;17210:17;17203:47;17267:131;17393:4;17267:131;:::i;:::-;17259:139;;16986:419;;;:::o;17411:223::-;17551:34;17547:1;17539:6;17535:14;17528:58;17620:6;17615:2;17607:6;17603:15;17596:31;17411:223;:::o;17640:366::-;17782:3;17803:67;17867:2;17862:3;17803:67;:::i;:::-;17796:74;;17879:93;17968:3;17879:93;:::i;:::-;17997:2;17992:3;17988:12;17981:19;;17640:366;;;:::o;18012:134::-;18070:9;18103:37;18134:5;18103:37;:::i;:::-;18090:50;;18012:134;;;:::o;18152:147::-;18247:45;18286:5;18247:45;:::i;:::-;18242:3;18235:58;18152:147;;:::o;18305:545::-;18507:4;18545:2;18534:9;18530:18;18522:26;;18594:9;18588:4;18584:20;18580:1;18569:9;18565:17;18558:47;18622:131;18748:4;18622:131;:::i;:::-;18614:139;;18763:80;18839:2;18828:9;18824:18;18815:6;18763:80;:::i;:::-;18305:545;;;;:::o;18856:174::-;18996:26;18992:1;18984:6;18980:14;18973:50;18856:174;:::o;19036:366::-;19178:3;19199:67;19263:2;19258:3;19199:67;:::i;:::-;19192:74;;19275:93;19364:3;19275:93;:::i;:::-;19393:2;19388:3;19384:12;19377:19;;19036:366;;;:::o;19408:419::-;19574:4;19612:2;19601:9;19597:18;19589:26;;19661:9;19655:4;19651:20;19647:1;19636:9;19632:17;19625:47;19689:131;19815:4;19689:131;:::i;:::-;19681:139;;19408:419;;;:::o;19833:230::-;19973:34;19969:1;19961:6;19957:14;19950:58;20042:13;20037:2;20029:6;20025:15;20018:38;19833:230;:::o;20069:366::-;20211:3;20232:67;20296:2;20291:3;20232:67;:::i;:::-;20225:74;;20308:93;20397:3;20308:93;:::i;:::-;20426:2;20421:3;20417:12;20410:19;;20069:366;;;:::o;20441:529::-;20635:4;20673:2;20662:9;20658:18;20650:26;;20722:9;20716:4;20712:20;20708:1;20697:9;20693:17;20686:47;20750:131;20876:4;20750:131;:::i;:::-;20742:139;;20891:72;20959:2;20948:9;20944:18;20935:6;20891:72;:::i;:::-;20441:529;;;;:::o;20976:182::-;21116:34;21112:1;21104:6;21100:14;21093:58;20976:182;:::o;21164:366::-;21306:3;21327:67;21391:2;21386:3;21327:67;:::i;:::-;21320:74;;21403:93;21492:3;21403:93;:::i;:::-;21521:2;21516:3;21512:12;21505:19;;21164:366;;;:::o;21536:419::-;21702:4;21740:2;21729:9;21725:18;21717:26;;21789:9;21783:4;21779:20;21775:1;21764:9;21760:17;21753:47;21817:131;21943:4;21817:131;:::i;:::-;21809:139;;21536:419;;;:::o;21961:182::-;22101:34;22097:1;22089:6;22085:14;22078:58;21961:182;:::o;22149:366::-;22291:3;22312:67;22376:2;22371:3;22312:67;:::i;:::-;22305:74;;22388:93;22477:3;22388:93;:::i;:::-;22506:2;22501:3;22497:12;22490:19;;22149:366;;;:::o;22521:529::-;22715:4;22753:2;22742:9;22738:18;22730:26;;22802:9;22796:4;22792:20;22788:1;22777:9;22773:17;22766:47;22830:131;22956:4;22830:131;:::i;:::-;22822:139;;22971:72;23039:2;23028:9;23024:18;23015:6;22971:72;:::i;:::-;22521:529;;;;:::o;23056:167::-;23196:19;23192:1;23184:6;23180:14;23173:43;23056:167;:::o;23229:366::-;23371:3;23392:67;23456:2;23451:3;23392:67;:::i;:::-;23385:74;;23468:93;23557:3;23468:93;:::i;:::-;23586:2;23581:3;23577:12;23570:19;;23229:366;;;:::o;23601:419::-;23767:4;23805:2;23794:9;23790:18;23782:26;;23854:9;23848:4;23844:20;23840:1;23829:9;23825:17;23818:47;23882:131;24008:4;23882:131;:::i;:::-;23874:139;;23601:419;;;:::o;24026:147::-;24127:11;24164:3;24149:18;;24026:147;;;;:::o;24179:114::-;;:::o;24299:398::-;24458:3;24479:83;24560:1;24555:3;24479:83;:::i;:::-;24472:90;;24571:93;24660:3;24571:93;:::i;:::-;24689:1;24684:3;24680:11;24673:18;;24299:398;;;:::o;24703:379::-;24887:3;24909:147;25052:3;24909:147;:::i;:::-;24902:154;;25073:3;25066:10;;24703:379;;;:::o;25088:165::-;25228:17;25224:1;25216:6;25212:14;25205:41;25088:165;:::o;25259:366::-;25401:3;25422:67;25486:2;25481:3;25422:67;:::i;:::-;25415:74;;25498:93;25587:3;25498:93;:::i;:::-;25616:2;25611:3;25607:12;25600:19;;25259:366;;;:::o;25631:419::-;25797:4;25835:2;25824:9;25820:18;25812:26;;25884:9;25878:4;25874:20;25870:1;25859:9;25855:17;25848:47;25912:131;26038:4;25912:131;:::i;:::-;25904:139;;25631:419;;;:::o;26056:231::-;26196:34;26192:1;26184:6;26180:14;26173:58;26265:14;26260:2;26252:6;26248:15;26241:39;26056:231;:::o;26293:366::-;26435:3;26456:67;26520:2;26515:3;26456:67;:::i;:::-;26449:74;;26532:93;26621:3;26532:93;:::i;:::-;26650:2;26645:3;26641:12;26634:19;;26293:366;;;:::o;26665:545::-;26867:4;26905:2;26894:9;26890:18;26882:26;;26954:9;26948:4;26944:20;26940:1;26929:9;26925:17;26918:47;26982:131;27108:4;26982:131;:::i;:::-;26974:139;;27123:80;27199:2;27188:9;27184:18;27175:6;27123:80;:::i;:::-;26665:545;;;;:::o;27216:241::-;27356:34;27352:1;27344:6;27340:14;27333:58;27425:24;27420:2;27412:6;27408:15;27401:49;27216:241;:::o;27463:366::-;27605:3;27626:67;27690:2;27685:3;27626:67;:::i;:::-;27619:74;;27702:93;27791:3;27702:93;:::i;:::-;27820:2;27815:3;27811:12;27804:19;;27463:366;;;:::o;27835:419::-;28001:4;28039:2;28028:9;28024:18;28016:26;;28088:9;28082:4;28078:20;28074:1;28063:9;28059:17;28052:47;28116:131;28242:4;28116:131;:::i;:::-;28108:139;;27835:419;;;:::o;28260:348::-;28389:4;28427:2;28416:9;28412:18;28404:26;;28440:79;28516:1;28505:9;28501:17;28492:6;28440:79;:::i;:::-;28529:72;28597:2;28586:9;28582:18;28573:6;28529:72;:::i;:::-;28260:348;;;;;:::o;28614:137::-;28668:5;28699:6;28693:13;28684:22;;28715:30;28739:5;28715:30;:::i;:::-;28614:137;;;;:::o;28757:345::-;28824:6;28873:2;28861:9;28852:7;28848:23;28844:32;28841:119;;;28879:79;;:::i;:::-;28841:119;28999:1;29024:61;29077:7;29068:6;29057:9;29053:22;29024:61;:::i;:::-;29014:71;;28970:125;28757:345;;;;:::o;29108:226::-;29248:34;29244:1;29236:6;29232:14;29225:58;29317:9;29312:2;29304:6;29300:15;29293:34;29108:226;:::o;29340:366::-;29482:3;29503:67;29567:2;29562:3;29503:67;:::i;:::-;29496:74;;29579:93;29668:3;29579:93;:::i;:::-;29697:2;29692:3;29688:12;29681:19;;29340:366;;;:::o;29712:529::-;29906:4;29944:2;29933:9;29929:18;29921:26;;29993:9;29987:4;29983:20;29979:1;29968:9;29964:17;29957:47;30021:131;30147:4;30021:131;:::i;:::-;30013:139;;30162:72;30230:2;30219:9;30215:18;30206:6;30162:72;:::i;:::-;29712:529;;;;:::o;30247:181::-;30387:33;30383:1;30375:6;30371:14;30364:57;30247:181;:::o;30434:366::-;30576:3;30597:67;30661:2;30656:3;30597:67;:::i;:::-;30590:74;;30673:93;30762:3;30673:93;:::i;:::-;30791:2;30786:3;30782:12;30775:19;;30434:366;;;:::o;30806:419::-;30972:4;31010:2;30999:9;30995:18;30987:26;;31059:9;31053:4;31049:20;31045:1;31034:9;31030:17;31023:47;31087:131;31213:4;31087:131;:::i;:::-;31079:139;;30806:419;;;:::o;31231:234::-;31371:34;31367:1;31359:6;31355:14;31348:58;31440:17;31435:2;31427:6;31423:15;31416:42;31231:234;:::o;31471:366::-;31613:3;31634:67;31698:2;31693:3;31634:67;:::i;:::-;31627:74;;31710:93;31799:3;31710:93;:::i;:::-;31828:2;31823:3;31819:12;31812:19;;31471:366;;;:::o;31843:529::-;32037:4;32075:2;32064:9;32060:18;32052:26;;32124:9;32118:4;32114:20;32110:1;32099:9;32095:17;32088:47;32152:131;32278:4;32152:131;:::i;:::-;32144:139;;32293:72;32361:2;32350:9;32346:18;32337:6;32293:72;:::i;:::-;31843:529;;;;:::o;32378:225::-;32518:34;32514:1;32506:6;32502:14;32495:58;32587:8;32582:2;32574:6;32570:15;32563:33;32378:225;:::o;32609:366::-;32751:3;32772:67;32836:2;32831:3;32772:67;:::i;:::-;32765:74;;32848:93;32937:3;32848:93;:::i;:::-;32966:2;32961:3;32957:12;32950:19;;32609:366;;;:::o;32981:419::-;33147:4;33185:2;33174:9;33170:18;33162:26;;33234:9;33228:4;33224:20;33220:1;33209:9;33205:17;33198:47;33262:131;33388:4;33262:131;:::i;:::-;33254:139;;32981:419;;;:::o;33406:223::-;33546:34;33542:1;33534:6;33530:14;33523:58;33615:6;33610:2;33602:6;33598:15;33591:31;33406:223;:::o;33635:366::-;33777:3;33798:67;33862:2;33857:3;33798:67;:::i;:::-;33791:74;;33874:93;33963:3;33874:93;:::i;:::-;33992:2;33987:3;33983:12;33976:19;;33635:366;;;:::o;34007:419::-;34173:4;34211:2;34200:9;34196:18;34188:26;;34260:9;34254:4;34250:20;34246:1;34235:9;34231:17;34224:47;34288:131;34414:4;34288:131;:::i;:::-;34280:139;;34007:419;;;:::o;34432:221::-;34572:34;34568:1;34560:6;34556:14;34549:58;34641:4;34636:2;34628:6;34624:15;34617:29;34432:221;:::o;34659:366::-;34801:3;34822:67;34886:2;34881:3;34822:67;:::i;:::-;34815:74;;34898:93;34987:3;34898:93;:::i;:::-;35016:2;35011:3;35007:12;35000:19;;34659:366;;;:::o;35031:419::-;35197:4;35235:2;35224:9;35220:18;35212:26;;35284:9;35278:4;35274:20;35270:1;35259:9;35255:17;35248:47;35312:131;35438:4;35312:131;:::i;:::-;35304:139;;35031:419;;;:::o;35456:182::-;35596:34;35592:1;35584:6;35580:14;35573:58;35456:182;:::o;35644:366::-;35786:3;35807:67;35871:2;35866:3;35807:67;:::i;:::-;35800:74;;35883:93;35972:3;35883:93;:::i;:::-;36001:2;35996:3;35992:12;35985:19;;35644:366;;;:::o;36016:419::-;36182:4;36220:2;36209:9;36205:18;36197:26;;36269:9;36263:4;36259:20;36255:1;36244:9;36240:17;36233:47;36297:131;36423:4;36297:131;:::i;:::-;36289:139;;36016:419;;;:::o;36441:224::-;36581:34;36577:1;36569:6;36565:14;36558:58;36650:7;36645:2;36637:6;36633:15;36626:32;36441:224;:::o;36671:366::-;36813:3;36834:67;36898:2;36893:3;36834:67;:::i;:::-;36827:74;;36910:93;36999:3;36910:93;:::i;:::-;37028:2;37023:3;37019:12;37012:19;;36671:366;;;:::o;37043:419::-;37209:4;37247:2;37236:9;37232:18;37224:26;;37296:9;37290:4;37286:20;37282:1;37271:9;37267:17;37260:47;37324:131;37450:4;37324:131;:::i;:::-;37316:139;;37043:419;;;:::o;37468:222::-;37608:34;37604:1;37596:6;37592:14;37585:58;37677:5;37672:2;37664:6;37660:15;37653:30;37468:222;:::o;37696:366::-;37838:3;37859:67;37923:2;37918:3;37859:67;:::i;:::-;37852:74;;37935:93;38024:3;37935:93;:::i;:::-;38053:2;38048:3;38044:12;38037:19;;37696:366;;;:::o;38068:419::-;38234:4;38272:2;38261:9;38257:18;38249:26;;38321:9;38315:4;38311:20;38307:1;38296:9;38292:17;38285:47;38349:131;38475:4;38349:131;:::i;:::-;38341:139;;38068:419;;;:::o;38493:228::-;38633:34;38629:1;38621:6;38617:14;38610:58;38702:11;38697:2;38689:6;38685:15;38678:36;38493:228;:::o;38727:366::-;38869:3;38890:67;38954:2;38949:3;38890:67;:::i;:::-;38883:74;;38966:93;39055:3;38966:93;:::i;:::-;39084:2;39079:3;39075:12;39068:19;;38727:366;;;:::o;39099:419::-;39265:4;39303:2;39292:9;39288:18;39280:26;;39352:9;39346:4;39342:20;39338:1;39327:9;39323:17;39316:47;39380:131;39506:4;39380:131;:::i;:::-;39372:139;;39099:419;;;:::o;39524:225::-;39664:34;39660:1;39652:6;39648:14;39641:58;39733:8;39728:2;39720:6;39716:15;39709:33;39524:225;:::o;39755:366::-;39897:3;39918:67;39982:2;39977:3;39918:67;:::i;:::-;39911:74;;39994:93;40083:3;39994:93;:::i;:::-;40112:2;40107:3;40103:12;40096:19;;39755:366;;;:::o;40127:419::-;40293:4;40331:2;40320:9;40316:18;40308:26;;40380:9;40374:4;40370:20;40366:1;40355:9;40351:17;40344:47;40408:131;40534:4;40408:131;:::i;:::-;40400:139;;40127:419;;;:::o;40552:174::-;40692:26;40688:1;40680:6;40676:14;40669:50;40552:174;:::o;40732:366::-;40874:3;40895:67;40959:2;40954:3;40895:67;:::i;:::-;40888:74;;40971:93;41060:3;40971:93;:::i;:::-;41089:2;41084:3;41080:12;41073:19;;40732:366;;;:::o;41104:419::-;41270:4;41308:2;41297:9;41293:18;41285:26;;41357:9;41351:4;41347:20;41343:1;41332:9;41328:17;41321:47;41385:131;41511:4;41385:131;:::i;:::-;41377:139;;41104:419;;;:::o;41529:410::-;41569:7;41592:20;41610:1;41592:20;:::i;:::-;41587:25;;41626:20;41644:1;41626:20;:::i;:::-;41621:25;;41681:1;41678;41674:9;41703:30;41721:11;41703:30;:::i;:::-;41692:41;;41882:1;41873:7;41869:15;41866:1;41863:22;41843:1;41836:9;41816:83;41793:139;;41912:18;;:::i;:::-;41793:139;41577:362;41529:410;;;;:::o;41945:180::-;41993:77;41990:1;41983:88;42090:4;42087:1;42080:15;42114:4;42111:1;42104:15;42131:185;42171:1;42188:20;42206:1;42188:20;:::i;:::-;42183:25;;42222:20;42240:1;42222:20;:::i;:::-;42217:25;;42261:1;42251:35;;42266:18;;:::i;:::-;42251:35;42308:1;42305;42301:9;42296:14;;42131:185;;;;:::o;42322:180::-;42370:77;42367:1;42360:88;42467:4;42464:1;42457:15;42491:4;42488:1;42481:15;42508:180;42556:77;42553:1;42546:88;42653:4;42650:1;42643:15;42677:4;42674:1;42667:15;42694:85;42739:7;42768:5;42757:16;;42694:85;;;:::o;42785:158::-;42843:9;42876:61;42894:42;42903:32;42929:5;42903:32;:::i;:::-;42894:42;:::i;:::-;42876:61;:::i;:::-;42863:74;;42785:158;;;:::o;42949:147::-;43044:45;43083:5;43044:45;:::i;:::-;43039:3;43032:58;42949:147;;:::o;43102:114::-;43169:6;43203:5;43197:12;43187:22;;43102:114;;;:::o;43222:184::-;43321:11;43355:6;43350:3;43343:19;43395:4;43390:3;43386:14;43371:29;;43222:184;;;;:::o;43412:132::-;43479:4;43502:3;43494:11;;43532:4;43527:3;43523:14;43515:22;;43412:132;;;:::o;43550:108::-;43627:24;43645:5;43627:24;:::i;:::-;43622:3;43615:37;43550:108;;:::o;43664:179::-;43733:10;43754:46;43796:3;43788:6;43754:46;:::i;:::-;43832:4;43827:3;43823:14;43809:28;;43664:179;;;;:::o;43849:113::-;43919:4;43951;43946:3;43942:14;43934:22;;43849:113;;;:::o;43998:732::-;44117:3;44146:54;44194:5;44146:54;:::i;:::-;44216:86;44295:6;44290:3;44216:86;:::i;:::-;44209:93;;44326:56;44376:5;44326:56;:::i;:::-;44405:7;44436:1;44421:284;44446:6;44443:1;44440:13;44421:284;;;44522:6;44516:13;44549:63;44608:3;44593:13;44549:63;:::i;:::-;44542:70;;44635:60;44688:6;44635:60;:::i;:::-;44625:70;;44481:224;44468:1;44465;44461:9;44456:14;;44421:284;;;44425:14;44721:3;44714:10;;44122:608;;;43998:732;;;;:::o;44736:831::-;44999:4;45037:3;45026:9;45022:19;45014:27;;45051:71;45119:1;45108:9;45104:17;45095:6;45051:71;:::i;:::-;45132:80;45208:2;45197:9;45193:18;45184:6;45132:80;:::i;:::-;45259:9;45253:4;45249:20;45244:2;45233:9;45229:18;45222:48;45287:108;45390:4;45381:6;45287:108;:::i;:::-;45279:116;;45405:72;45473:2;45462:9;45458:18;45449:6;45405:72;:::i;:::-;45487:73;45555:3;45544:9;45540:19;45531:6;45487:73;:::i;:::-;44736:831;;;;;;;;:::o;45573:483::-;45744:4;45782:2;45771:9;45767:18;45759:26;;45795:71;45863:1;45852:9;45848:17;45839:6;45795:71;:::i;:::-;45913:9;45907:4;45903:20;45898:2;45887:9;45883:18;45876:48;45941:108;46044:4;46035:6;45941:108;:::i;:::-;45933:116;;45573:483;;;;;:::o;46062:166::-;46202:18;46198:1;46190:6;46186:14;46179:42;46062:166;:::o;46234:366::-;46376:3;46397:67;46461:2;46456:3;46397:67;:::i;:::-;46390:74;;46473:93;46562:3;46473:93;:::i;:::-;46591:2;46586:3;46582:12;46575:19;;46234:366;;;:::o;46606:419::-;46772:4;46810:2;46799:9;46795:18;46787:26;;46859:9;46853:4;46849:20;46845:1;46834:9;46830:17;46823:47;46887:131;47013:4;46887:131;:::i;:::-;46879:139;;46606:419;;;:::o

Swarm Source

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