ETH Price: $3,332.17 (-2.24%)
 

Overview

Max Total Supply

420,690,000,000 SAI

Holders

244

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: SAI 205
Balance
260,057,181,860.222740082310114524 SAI

Value
$0.00
0xf347d227ebc70432478b0695096fc60e3870e670
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:
SatoshiReborn

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-21
*/

/*
 * SPDX-License-Identifier: MIT
 
 * https://t.me/ReturnOfSatoshi
 * https://x.com/returnofsatoshi
 * https://satoshireborn.com
 
*/
pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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 IDexFactory {
    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 IDexRouter {
    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 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 SatoshiReborn is ERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; 

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetDexPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event ProjectWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() ERC20("Satoshi Reborn", "SAI") {
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        transactionLimitsExempt(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        transactionLimitsExempt(address(dexPair), true);
        _setDexPair(address(dexPair), true);

        uint256 _buyMarketingTax = 30;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 70;
        uint256 _sellProjectTax = 0;

        uint256 _totalSupply = 420_690_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 15) / 1000;
        maxWallet = (_totalSupply * 15) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(msg.sender);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        transactionTaxesExempt(msg.sender, true);
        transactionTaxesExempt(address(this), true);
        transactionTaxesExempt(address(0xdead), true);
        transactionTaxesExempt(marketingWallet, true);

        transactionLimitsExempt(msg.sender, true);
        transactionLimitsExempt(address(this), true);
        transactionLimitsExempt(address(0xdead), true);
        transactionLimitsExempt(marketingWallet, true);

        transferOwnership(msg.sender);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, _totalSupply);
    }

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function transactionLimitsRemove() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enable If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function swapBackMinMaxEnabledSet(
        bool _enable,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enable;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enable, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newMaxTxLimit Base 1000, so 1% = 10
     */
    function maxTransactionLimitChange(
        uint256 newMaxTxLimit
    ) external onlyOwner {
        require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newMaxTxLimit * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newMaxWalletLimit Base 1000, so 1% = 10
     */
    function maxWalletLimitChange(
        uint256 newMaxWalletLimit
    ) external onlyOwner {
        require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newMaxWalletLimit * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function transactionLimitsExempt(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function feesOnBuysSet(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function feesOnSellsChange(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function transactionTaxesExempt(
        address account,
        bool excluded
    ) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetDexPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setDexPair(address pair, bool value) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setDexPair(pair, value);
    }

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

        emit SetDexPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newMktWal The new marketing wallet
     */
    function marketingWalletChange(address newMktWal) external onlyOwner {
        emit MarketingWalletUpdated(newMktWal, marketingWallet);
        marketingWallet = newMktWal;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newDevWal The new dev wallet
     */
    function developerWalletChange(address newDevWal) external onlyOwner {
        emit ProjectWalletUpdated(newDevWal, projectWallet);
        projectWallet = newDevWal;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function valuesForSwapback()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function valuesForLimits()
        external
        view
        returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx)
    {
        _limitsEnabled = limitsEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function valuesForReceivers()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function valuesForTaxes()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function addressPermissions(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] && !transferLimitExempt[to]
                ) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !transferLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!transferLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

        if (
            canSwap &&
            swapbackEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !transferTaxExempt[from] &&
            !transferTaxExempt[to]
        ) {
            swapping = true;

            swapBack(amount);

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (transferTaxExempt[from] || transferTaxExempt[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

    bool anti = true;

    function setAnti(bool _anti) external onlyOwner {
        anti = _anti;
    }

    function swapBack(uint256 amount) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = contractBalance;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        if (anti && contractBalance > amount * 5) {
            contractBalance = amount * 5;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

        (success, ) = address(projectWallet).call{value: ethForDev}("");

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"addressPermissions","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWal","type":"address"}],"name":"developerWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnBuysSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnSellsChange","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":"newMktWal","type":"address"}],"name":"marketingWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTransactionLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapBackMinMaxEnabledSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"transactionLimitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionLimitsRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"transactionTaxesExempt","outputs":[],"stateMutability":"nonpayable","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":"valuesForLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForSwapback","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506001601960006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600e81526020017f5361746f736869205265626f726e0000000000000000000000000000000000008152506040518060400160405280600381526020017f53414900000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f27565b5080600490816200010d919062000f27565b50505062000130620001246200060060201b60201c565b6200060860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006ce60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062001078565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062001078565b6040518363ffffffff1660e01b8152600401620002af929190620010bb565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001078565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006ce60201b60201c565b6200035260a05160016200080860201b60201c565b6000601e90506000806046905060008062000372620008a960201b60201c565b600a62000380919062001278565b6461f313f880620003929190620012c9565b90506103e8600f82620003a69190620012c9565b620003b2919062001343565b600a819055506103e8600f82620003ca9190620012c9565b620003d6919062001343565b6009819055506103e8600182620003ee9190620012c9565b620003fa919062001343565b6006819055506064600282620004119190620012c9565b6200041d919062001343565b60078190555084600f8190555083601081905550601054600f546200044391906200137b565b600e8190555082601281905550816013819055506013546012546200046991906200137b565b60118190555033600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000504336001620008b260201b60201c565b62000517306001620008b260201b60201c565b6200052c61dead6001620008b260201b60201c565b62000561600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008b260201b60201c565b62000574336001620006ce60201b60201c565b62000587306001620006ce60201b60201c565b6200059c61dead6001620006ce60201b60201c565b620005d1600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ce60201b60201c565b620005e233620009ec60201b60201c565b620005f4338262000b0160201b60201c565b505050505050620015ab565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006de6200060060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200070462000c7960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200075d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007549062001417565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620007fc919062001456565b60405180910390a25050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b60006012905090565b620008c26200060060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008e862000c7960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009389062001417565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e0919062001456565b60405180910390a25050565b620009fc6200060060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a2262000c7960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a729062001417565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae490620014e9565b60405180910390fd5b62000afe816200060860201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6a906200155b565b60405180910390fd5b62000b876000838362000ca360201b60201c565b806002600082825462000b9b91906200137b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bf291906200137b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c5991906200158e565b60405180910390a362000c756000838362000ca860201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d2f57607f821691505b60208210810362000d455762000d4462000ce7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000daf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d70565b62000dbb868362000d70565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e0862000e0262000dfc8462000dd3565b62000ddd565b62000dd3565b9050919050565b6000819050919050565b62000e248362000de7565b62000e3c62000e338262000e0f565b84845462000d7d565b825550505050565b600090565b62000e5362000e44565b62000e6081848462000e19565b505050565b5b8181101562000e885762000e7c60008262000e49565b60018101905062000e66565b5050565b601f82111562000ed75762000ea18162000d4b565b62000eac8462000d60565b8101602085101562000ebc578190505b62000ed462000ecb8562000d60565b83018262000e65565b50505b505050565b600082821c905092915050565b600062000efc6000198460080262000edc565b1980831691505092915050565b600062000f17838362000ee9565b9150826002028217905092915050565b62000f328262000cad565b67ffffffffffffffff81111562000f4e5762000f4d62000cb8565b5b62000f5a825462000d16565b62000f6782828562000e8c565b600060209050601f83116001811462000f9f576000841562000f8a578287015190505b62000f96858262000f09565b86555062001006565b601f19841662000faf8662000d4b565b60005b8281101562000fd95784890151825560018201915060208501945060208101905062000fb2565b8683101562000ff9578489015162000ff5601f89168262000ee9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010408262001013565b9050919050565b620010528162001033565b81146200105e57600080fd5b50565b600081519050620010728162001047565b92915050565b6000602082840312156200109157620010906200100e565b5b6000620010a18482850162001061565b91505092915050565b620010b58162001033565b82525050565b6000604082019050620010d26000830185620010aa565b620010e16020830184620010aa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001176578086048111156200114e576200114d620010e8565b5b60018516156200115e5780820291505b80810290506200116e8562001117565b94506200112e565b94509492505050565b60008262001191576001905062001264565b81620011a1576000905062001264565b8160018114620011ba5760028114620011c557620011fb565b600191505062001264565b60ff841115620011da57620011d9620010e8565b5b8360020a915084821115620011f457620011f3620010e8565b5b5062001264565b5060208310610133831016604e8410600b8410161715620012355782820a9050838111156200122f576200122e620010e8565b5b62001264565b62001244848484600162001124565b925090508184048111156200125e576200125d620010e8565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012858262000dd3565b915062001292836200126b565b9250620012c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200117f565b905092915050565b6000620012d68262000dd3565b9150620012e38362000dd3565b9250828202620012f38162000dd3565b915082820484148315176200130d576200130c620010e8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013508262000dd3565b91506200135d8362000dd3565b92508262001370576200136f62001314565b5b828204905092915050565b6000620013888262000dd3565b9150620013958362000dd3565b9250828201905080821115620013b057620013af620010e8565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013ff602083620013b6565b91506200140c82620013c7565b602082019050919050565b600060208201905081810360008301526200143281620013f0565b9050919050565b60008115159050919050565b620014508162001439565b82525050565b60006020820190506200146d600083018462001445565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014d1602683620013b6565b9150620014de8262001473565b604082019050919050565b600060208201905081810360008301526200150481620014c2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001543601f83620013b6565b915062001550826200150b565b602082019050919050565b60006020820190508181036000830152620015768162001534565b9050919050565b620015888162000dd3565b82525050565b6000602082019050620015a560008301846200157d565b92915050565b60805160a05161481b620015e660003960008181611b3d0152611bd90152600081816131cb015281816132ac01526132d3015261481b6000f3fe6080604052600436106101fd5760003560e01c80637ff6f7b91161010d578063c9b6c1ce116100a0578063e55648f41161006f578063e55648f41461074a578063f242ab4114610773578063f2fde38b1461079e578063f3cfad94146107c7578063fb42948a146107f057610204565b8063c9b6c1ce1461068b578063ca3608c3146106b4578063d7ff53e5146106dd578063dd62ed3e1461070d57610204565b8063a9059cbb116100dc578063a9059cbb146105cf578063bb931db21461060c578063c40b793b14610635578063c9567bf91461067457610204565b80637ff6f7b9146105135780638da5cb5b1461053c57806395d89b4114610567578063a457c2d71461059257610204565b8063336ddc29116101905780634ada218b1161015f5780634ada218b1461043e57806351b8dc7b14610469578063622fa7721461049257806370a08231146104bf578063715018a6146104fc57610204565b8063336ddc2914610386578063391822af146103af57806339509351146103d85780634482eea81461041557610204565b806321108a52116101cc57806321108a52146102c857806323b872dd146102f1578063313ce5671461032e5780633308740b1461035957610204565b806306fdde0314610209578063088c9eb414610234578063095ea7b31461026057806318160ddd1461029d57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b919061340f565b60405180910390f35b34801561024057600080fd5b50610249610899565b604051610257929190613472565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613502565b6108ea565b604051610294919061355d565b60405180910390f35b3480156102a957600080fd5b506102b2610908565b6040516102bf9190613587565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906135a2565b610912565b005b3480156102fd57600080fd5b50610318600480360381019061031391906135e2565b610a3d565b604051610325919061355d565b60405180910390f35b34801561033a57600080fd5b50610343610b35565b6040516103509190613651565b60405180910390f35b34801561036557600080fd5b5061036e610b3e565b60405161037d9392919061366c565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906136a3565b610b64565b005b3480156103bb57600080fd5b506103d660048036038101906103d191906135a2565b610ca0565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190613502565b610dcb565b60405161040c919061355d565b60405180910390f35b34801561042157600080fd5b5061043c600480360381019061043791906136fc565b610e77565b005b34801561044a57600080fd5b50610453610f9c565b604051610460919061355d565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906136a3565b610faf565b005b34801561049e57600080fd5b506104a76110eb565b6040516104b69392919061366c565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e191906136a3565b611111565b6040516104f39190613587565b60405180910390f35b34801561050857600080fd5b50610511611159565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061373c565b6111e1565b005b34801561054857600080fd5b5061055161127a565b60405161055e9190613769565b60405180910390f35b34801561057357600080fd5b5061057c6112a4565b604051610589919061340f565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613502565b611336565b6040516105c6919061355d565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190613502565b611421565b604051610603919061355d565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613784565b61143f565b005b34801561064157600080fd5b5061065c600480360381019061065791906136a3565b611561565b60405161066b939291906137b1565b60405180910390f35b34801561068057600080fd5b5061068961165a565b005b34801561069757600080fd5b506106b260048036038101906106ad91906136fc565b61173b565b005b3480156106c057600080fd5b506106db60048036038101906106d691906137e8565b611860565b005b3480156106e957600080fd5b506106f2611a09565b6040516107049695949392919061383b565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061389c565b611a38565b6040516107419190613587565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c91906136fc565b611abf565b005b34801561077f57600080fd5b50610788611bd7565b6040516107959190613769565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c091906136a3565b611bfb565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190613784565b611cf2565b005b3480156107fc57600080fd5b50610805611e14565b005b6060600380546108169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546108429061390b565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b60006108fe6108f7611eda565b8484611ee2565b6001905092915050565b6000600254905090565b61091a611eda565b73ffffffffffffffffffffffffffffffffffffffff1661093861127a565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590613988565b60405180910390fd5b81600f8190555080601081905550601054600f546109ac91906139d7565b600e819055506064600e5411156109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90613a7d565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610a3193929190613a9d565b60405180910390a15050565b6000610a4a8484846120ab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a95611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90613b46565b60405180910390fd5b610b2985610b21611eda565b858403611ee2565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b610b6c611eda565b73ffffffffffffffffffffffffffffffffffffffff16610b8a61127a565b73ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790613988565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ca8611eda565b73ffffffffffffffffffffffffffffffffffffffff16610cc661127a565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613988565b60405180910390fd5b8160128190555080601381905550601354601254610d3a91906139d7565b60118190555060646011541115610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613bd8565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610dbf93929190613a9d565b60405180910390a15050565b6000610e6d610dd8611eda565b848460016000610de6611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e6891906139d7565b611ee2565b6001905092915050565b610e7f611eda565b73ffffffffffffffffffffffffffffffffffffffff16610e9d61127a565b73ffffffffffffffffffffffffffffffffffffffff1614610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613988565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610f90919061355d565b60405180910390a25050565b600c60009054906101000a900460ff1681565b610fb7611eda565b73ffffffffffffffffffffffffffffffffffffffff16610fd561127a565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613988565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611161611eda565b73ffffffffffffffffffffffffffffffffffffffff1661117f61127a565b73ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90613988565b60405180910390fd5b6111df6000612b15565b565b6111e9611eda565b73ffffffffffffffffffffffffffffffffffffffff1661120761127a565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490613988565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112b39061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546112df9061390b565b801561132c5780601f106113015761010080835404028352916020019161132c565b820191906000526020600020905b81548152906001019060200180831161130f57829003601f168201915b5050505050905090565b60008060016000611345611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f990613c6a565b60405180910390fd5b61141661140d611eda565b85858403611ee2565b600191505092915050565b600061143561142e611eda565b84846120ab565b6001905092915050565b611447611eda565b73ffffffffffffffffffffffffffffffffffffffff1661146561127a565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613988565b60405180910390fd5b60058110156114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690613cfc565b60405180910390fd5b6103e861150a610908565b826115159190613d1c565b61151f9190613d8d565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516115569190613587565b60405180910390a150565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611662611eda565b73ffffffffffffffffffffffffffffffffffffffff1661168061127a565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613988565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611743611eda565b73ffffffffffffffffffffffffffffffffffffffff1661176161127a565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90613988565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611854919061355d565b60405180910390a25050565b611868611eda565b73ffffffffffffffffffffffffffffffffffffffff1661188661127a565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613988565b60405180910390fd5b6001821015611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613e30565b60405180910390fd5b81811015611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90613ec2565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611989610908565b6119939190613d1c565b61199d9190613d8d565b600681905550612710816119af610908565b6119b99190613d1c565b6119c39190613d8d565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516119fc9392919061366c565b60405180910390a1505050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac7611eda565b73ffffffffffffffffffffffffffffffffffffffff16611ae561127a565b73ffffffffffffffffffffffffffffffffffffffff1614611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613988565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613f54565b60405180910390fd5b611bd38282612bdb565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c03611eda565b73ffffffffffffffffffffffffffffffffffffffff16611c2161127a565b73ffffffffffffffffffffffffffffffffffffffff1614611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90613988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90613fe6565b60405180910390fd5b611cef81612b15565b50565b611cfa611eda565b73ffffffffffffffffffffffffffffffffffffffff16611d1861127a565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613988565b60405180910390fd5b6002811015611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614052565b60405180910390fd5b6103e8611dbd610908565b82611dc89190613d1c565b611dd29190613d8d565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051611e099190613587565b60405180910390a150565b611e1c611eda565b73ffffffffffffffffffffffffffffffffffffffff16611e3a61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790613988565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f48906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614176565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209e9190613587565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061429a565b60405180910390fd5b600081036121a25761219d83836000612c7c565b612b10565b600860009054906101000a900460ff161561269d576121bf61127a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222d57506121fd61127a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b95750600560149054906101000a900460ff16155b1561269c57600c60009054906101000a900460ff166123b357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123735750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061432c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fd57600a548111156124a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612497906143be565b60405180910390fd5b6009546124ac83611111565b826124b791906139d7565b11156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061442a565b60405180910390fd5b61269b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a05750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ef57600a548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906144bc565b60405180910390fd5b61269a565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126995760095461264c83611111565b8261265791906139d7565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f9061442a565b60405180910390fd5b5b5b5b5b5b60006126a830611111565b9050600060065482101590508080156126cd5750600560159054906101000a900460ff165b80156126e65750600560149054906101000a900460ff16155b801561273c5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127925750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e85750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600560146101000a81548160ff02191690831515021790555061281183612efb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008115612b0057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295057506000601154115b156129ea5761297d606461296f601154886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050601154601354826129909190613d1c565b61299a9190613d8d565b601560008282546129ab91906139d7565b92505081905550601154601254826129c39190613d1c565b6129cd9190613d8d565b601460008282546129de91906139d7565b92505081905550612adc565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a4557506000600e54115b15612adb57612a726064612a64600e54886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050600e5460105482612a859190613d1c565b612a8f9190613d8d565b60156000828254612aa091906139d7565b92505081905550600e54600f5482612ab89190613d1c565b612ac29190613d8d565b60146000828254612ad391906139d7565b925050819055505b5b6000811115612af157612af0873083612c7c565b5b8085612afd91906144dc565b94505b612b0b878787612c7c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d519061429a565b60405180910390fd5b612d65838383613122565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290614582565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7e91906139d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee29190613587565b60405180910390a3612ef5848484613127565b50505050565b6000612f0630611111565b905060008190506000808303612f1e575050506130f3565b600754831115612f2e5760075492505b601960009054906101000a900460ff168015612f555750600584612f529190613d1c565b83115b15612f6a57600584612f679190613d1c565b92505b60008390506000479050612f7d8261312c565b6000612f92824761336990919063ffffffff16565b90506000612fbd86612faf601554856130f690919063ffffffff16565b61310c90919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613015906145d3565b60006040518083038185875af1925050503d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130a3906145d3565b60006040518083038185875af1925050503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b505080955050505050505050505b50565b600081836131049190613d1c565b905092915050565b6000818361311a9190613d8d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613149576131486145e8565b5b6040519080825280602002602001820160405280156131775781602001602082028036833780820191505090505b509050308160008151811061318f5761318e614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613258919061465b565b8160018151811061326c5761326b614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d1307f000000000000000000000000000000000000000000000000000000000000000084611ee2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333395949392919061478b565b600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b505050505050565b6000818361337791906144dc565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b957808201518184015260208101905061339e565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e18261337f565b6133eb818561338a565b93506133fb81856020860161339b565b613404816133c5565b840191505092915050565b6000602082019050818103600083015261342981846133d6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061345c82613431565b9050919050565b61346c81613451565b82525050565b60006040820190506134876000830185613463565b6134946020830184613463565b9392505050565b600080fd5b6134a981613451565b81146134b457600080fd5b50565b6000813590506134c6816134a0565b92915050565b6000819050919050565b6134df816134cc565b81146134ea57600080fd5b50565b6000813590506134fc816134d6565b92915050565b600080604083850312156135195761351861349b565b5b6000613527858286016134b7565b9250506020613538858286016134ed565b9150509250929050565b60008115159050919050565b61355781613542565b82525050565b6000602082019050613572600083018461354e565b92915050565b613581816134cc565b82525050565b600060208201905061359c6000830184613578565b92915050565b600080604083850312156135b9576135b861349b565b5b60006135c7858286016134ed565b92505060206135d8858286016134ed565b9150509250929050565b6000806000606084860312156135fb576135fa61349b565b5b6000613609868287016134b7565b935050602061361a868287016134b7565b925050604061362b868287016134ed565b9150509250925092565b600060ff82169050919050565b61364b81613635565b82525050565b60006020820190506136666000830184613642565b92915050565b6000606082019050613681600083018661354e565b61368e6020830185613578565b61369b6040830184613578565b949350505050565b6000602082840312156136b9576136b861349b565b5b60006136c7848285016134b7565b91505092915050565b6136d981613542565b81146136e457600080fd5b50565b6000813590506136f6816136d0565b92915050565b600080604083850312156137135761371261349b565b5b6000613721858286016134b7565b9250506020613732858286016136e7565b9150509250929050565b6000602082840312156137525761375161349b565b5b6000613760848285016136e7565b91505092915050565b600060208201905061377e6000830184613463565b92915050565b60006020828403121561379a5761379961349b565b5b60006137a8848285016134ed565b91505092915050565b60006060820190506137c6600083018661354e565b6137d3602083018561354e565b6137e0604083018461354e565b949350505050565b6000806000606084860312156138015761380061349b565b5b600061380f868287016136e7565b9350506020613820868287016134ed565b9250506040613831868287016134ed565b9150509250925092565b600060c0820190506138506000830189613578565b61385d6020830188613578565b61386a6040830187613578565b6138776060830186613578565b6138846080830185613578565b61389160a0830184613578565b979650505050505050565b600080604083850312156138b3576138b261349b565b5b60006138c1858286016134b7565b92505060206138d2858286016134b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b602082108103613936576139356138dc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397260208361338a565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139e2826134cc565b91506139ed836134cc565b9250828201905080821115613a0557613a046139a8565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613a6760288361338a565b9150613a7282613a0b565b604082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b6000606082019050613ab26000830186613578565b613abf6020830185613578565b613acc6040830184613578565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b3060288361338a565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613bc260298361338a565b9150613bcd82613b66565b604082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c5460258361338a565b9150613c5f82613bf8565b604082019050919050565b60006020820190508181036000830152613c8381613c47565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ce660248361338a565b9150613cf182613c8a565b604082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b6000613d27826134cc565b9150613d32836134cc565b9250828202613d40816134cc565b91508282048414831517613d5757613d566139a8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d98826134cc565b9150613da3836134cc565b925082613db357613db2613d5e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613e1a60348361338a565b9150613e2582613dbe565b604082019050919050565b60006020820190508181036000830152613e4981613e0d565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613eac602a8361338a565b9150613eb782613e50565b604082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f3e60398361338a565b9150613f4982613ee2565b604082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fd060268361338a565b9150613fdb82613f74565b604082019050919050565b60006020820190508181036000830152613fff81613fc3565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061403c60208361338a565b915061404782614006565b602082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ce60248361338a565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416060228361338a565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f260258361338a565b91506141fd82614196565b604082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061428460238361338a565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061431660228361338a565b9150614321826142ba565b604082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143a860268361338a565b91506143b38261434c565b604082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061441460138361338a565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144a660278361338a565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b60006144e7826134cc565b91506144f2836134cc565b925082820390508181111561450a576145096139a8565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061456c60268361338a565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b50565b60006145bd6000836145a2565b91506145c8826145ad565b600082019050919050565b60006145de826145b0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614655816134a0565b92915050565b6000602082840312156146715761467061349b565b5b600061467f84828501614646565b91505092915050565b6000819050919050565b6000819050919050565b60006146b76146b26146ad84614688565b614692565b6134cc565b9050919050565b6146c78161469c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61470281613451565b82525050565b600061471483836146f9565b60208301905092915050565b6000602082019050919050565b6000614738826146cd565b61474281856146d8565b935061474d836146e9565b8060005b8381101561477e5781516147658882614708565b975061477083614720565b925050600181019050614751565b5085935050505092915050565b600060a0820190506147a06000830188613578565b6147ad60208301876146be565b81810360408301526147bf818661472d565b90506147ce6060830185613463565b6147db6080830184613578565b969550505050505056fea2646970667358221220ccf322763c5820bf27eb384165cfb9be51503d6d29bd57a5a6ea3af968a66e7564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80637ff6f7b91161010d578063c9b6c1ce116100a0578063e55648f41161006f578063e55648f41461074a578063f242ab4114610773578063f2fde38b1461079e578063f3cfad94146107c7578063fb42948a146107f057610204565b8063c9b6c1ce1461068b578063ca3608c3146106b4578063d7ff53e5146106dd578063dd62ed3e1461070d57610204565b8063a9059cbb116100dc578063a9059cbb146105cf578063bb931db21461060c578063c40b793b14610635578063c9567bf91461067457610204565b80637ff6f7b9146105135780638da5cb5b1461053c57806395d89b4114610567578063a457c2d71461059257610204565b8063336ddc29116101905780634ada218b1161015f5780634ada218b1461043e57806351b8dc7b14610469578063622fa7721461049257806370a08231146104bf578063715018a6146104fc57610204565b8063336ddc2914610386578063391822af146103af57806339509351146103d85780634482eea81461041557610204565b806321108a52116101cc57806321108a52146102c857806323b872dd146102f1578063313ce5671461032e5780633308740b1461035957610204565b806306fdde0314610209578063088c9eb414610234578063095ea7b31461026057806318160ddd1461029d57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b919061340f565b60405180910390f35b34801561024057600080fd5b50610249610899565b604051610257929190613472565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613502565b6108ea565b604051610294919061355d565b60405180910390f35b3480156102a957600080fd5b506102b2610908565b6040516102bf9190613587565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906135a2565b610912565b005b3480156102fd57600080fd5b50610318600480360381019061031391906135e2565b610a3d565b604051610325919061355d565b60405180910390f35b34801561033a57600080fd5b50610343610b35565b6040516103509190613651565b60405180910390f35b34801561036557600080fd5b5061036e610b3e565b60405161037d9392919061366c565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906136a3565b610b64565b005b3480156103bb57600080fd5b506103d660048036038101906103d191906135a2565b610ca0565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190613502565b610dcb565b60405161040c919061355d565b60405180910390f35b34801561042157600080fd5b5061043c600480360381019061043791906136fc565b610e77565b005b34801561044a57600080fd5b50610453610f9c565b604051610460919061355d565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906136a3565b610faf565b005b34801561049e57600080fd5b506104a76110eb565b6040516104b69392919061366c565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e191906136a3565b611111565b6040516104f39190613587565b60405180910390f35b34801561050857600080fd5b50610511611159565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061373c565b6111e1565b005b34801561054857600080fd5b5061055161127a565b60405161055e9190613769565b60405180910390f35b34801561057357600080fd5b5061057c6112a4565b604051610589919061340f565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613502565b611336565b6040516105c6919061355d565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190613502565b611421565b604051610603919061355d565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613784565b61143f565b005b34801561064157600080fd5b5061065c600480360381019061065791906136a3565b611561565b60405161066b939291906137b1565b60405180910390f35b34801561068057600080fd5b5061068961165a565b005b34801561069757600080fd5b506106b260048036038101906106ad91906136fc565b61173b565b005b3480156106c057600080fd5b506106db60048036038101906106d691906137e8565b611860565b005b3480156106e957600080fd5b506106f2611a09565b6040516107049695949392919061383b565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061389c565b611a38565b6040516107419190613587565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c91906136fc565b611abf565b005b34801561077f57600080fd5b50610788611bd7565b6040516107959190613769565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c091906136a3565b611bfb565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190613784565b611cf2565b005b3480156107fc57600080fd5b50610805611e14565b005b6060600380546108169061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546108429061390b565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b60006108fe6108f7611eda565b8484611ee2565b6001905092915050565b6000600254905090565b61091a611eda565b73ffffffffffffffffffffffffffffffffffffffff1661093861127a565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590613988565b60405180910390fd5b81600f8190555080601081905550601054600f546109ac91906139d7565b600e819055506064600e5411156109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90613a7d565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610a3193929190613a9d565b60405180910390a15050565b6000610a4a8484846120ab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a95611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90613b46565b60405180910390fd5b610b2985610b21611eda565b858403611ee2565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b610b6c611eda565b73ffffffffffffffffffffffffffffffffffffffff16610b8a61127a565b73ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790613988565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ca8611eda565b73ffffffffffffffffffffffffffffffffffffffff16610cc661127a565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613988565b60405180910390fd5b8160128190555080601381905550601354601254610d3a91906139d7565b60118190555060646011541115610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613bd8565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610dbf93929190613a9d565b60405180910390a15050565b6000610e6d610dd8611eda565b848460016000610de6611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e6891906139d7565b611ee2565b6001905092915050565b610e7f611eda565b73ffffffffffffffffffffffffffffffffffffffff16610e9d61127a565b73ffffffffffffffffffffffffffffffffffffffff1614610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613988565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610f90919061355d565b60405180910390a25050565b600c60009054906101000a900460ff1681565b610fb7611eda565b73ffffffffffffffffffffffffffffffffffffffff16610fd561127a565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613988565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611161611eda565b73ffffffffffffffffffffffffffffffffffffffff1661117f61127a565b73ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90613988565b60405180910390fd5b6111df6000612b15565b565b6111e9611eda565b73ffffffffffffffffffffffffffffffffffffffff1661120761127a565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490613988565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112b39061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546112df9061390b565b801561132c5780601f106113015761010080835404028352916020019161132c565b820191906000526020600020905b81548152906001019060200180831161130f57829003601f168201915b5050505050905090565b60008060016000611345611eda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f990613c6a565b60405180910390fd5b61141661140d611eda565b85858403611ee2565b600191505092915050565b600061143561142e611eda565b84846120ab565b6001905092915050565b611447611eda565b73ffffffffffffffffffffffffffffffffffffffff1661146561127a565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613988565b60405180910390fd5b60058110156114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690613cfc565b60405180910390fd5b6103e861150a610908565b826115159190613d1c565b61151f9190613d8d565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516115569190613587565b60405180910390a150565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611662611eda565b73ffffffffffffffffffffffffffffffffffffffff1661168061127a565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613988565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611743611eda565b73ffffffffffffffffffffffffffffffffffffffff1661176161127a565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90613988565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611854919061355d565b60405180910390a25050565b611868611eda565b73ffffffffffffffffffffffffffffffffffffffff1661188661127a565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613988565b60405180910390fd5b6001821015611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613e30565b60405180910390fd5b81811015611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90613ec2565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611989610908565b6119939190613d1c565b61199d9190613d8d565b600681905550612710816119af610908565b6119b99190613d1c565b6119c39190613d8d565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516119fc9392919061366c565b60405180910390a1505050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac7611eda565b73ffffffffffffffffffffffffffffffffffffffff16611ae561127a565b73ffffffffffffffffffffffffffffffffffffffff1614611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613988565b60405180910390fd5b7f000000000000000000000000f347d227ebc70432478b0695096fc60e3870e67073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613f54565b60405180910390fd5b611bd38282612bdb565b5050565b7f000000000000000000000000f347d227ebc70432478b0695096fc60e3870e67081565b611c03611eda565b73ffffffffffffffffffffffffffffffffffffffff16611c2161127a565b73ffffffffffffffffffffffffffffffffffffffff1614611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90613988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90613fe6565b60405180910390fd5b611cef81612b15565b50565b611cfa611eda565b73ffffffffffffffffffffffffffffffffffffffff16611d1861127a565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613988565b60405180910390fd5b6002811015611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614052565b60405180910390fd5b6103e8611dbd610908565b82611dc89190613d1c565b611dd29190613d8d565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051611e099190613587565b60405180910390a150565b611e1c611eda565b73ffffffffffffffffffffffffffffffffffffffff16611e3a61127a565b73ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790613988565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f48906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614176565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161209e9190613587565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061429a565b60405180910390fd5b600081036121a25761219d83836000612c7c565b612b10565b600860009054906101000a900460ff161561269d576121bf61127a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222d57506121fd61127a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b95750600560149054906101000a900460ff16155b1561269c57600c60009054906101000a900460ff166123b357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123735750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061432c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124fd57600a548111156124a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612497906143be565b60405180910390fd5b6009546124ac83611111565b826124b791906139d7565b11156124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061442a565b60405180910390fd5b61269b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a05750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ef57600a548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e1906144bc565b60405180910390fd5b61269a565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126995760095461264c83611111565b8261265791906139d7565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f9061442a565b60405180910390fd5b5b5b5b5b5b60006126a830611111565b9050600060065482101590508080156126cd5750600560159054906101000a900460ff165b80156126e65750600560149054906101000a900460ff16155b801561273c5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127925750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e85750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600560146101000a81548160ff02191690831515021790555061281183612efb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008115612b0057601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561295057506000601154115b156129ea5761297d606461296f601154886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050601154601354826129909190613d1c565b61299a9190613d8d565b601560008282546129ab91906139d7565b92505081905550601154601254826129c39190613d1c565b6129cd9190613d8d565b601460008282546129de91906139d7565b92505081905550612adc565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a4557506000600e54115b15612adb57612a726064612a64600e54886130f690919063ffffffff16565b61310c90919063ffffffff16565b9050600e5460105482612a859190613d1c565b612a8f9190613d8d565b60156000828254612aa091906139d7565b92505081905550600e54600f5482612ab89190613d1c565b612ac29190613d8d565b60146000828254612ad391906139d7565b925050819055505b5b6000811115612af157612af0873083612c7c565b5b8085612afd91906144dc565b94505b612b0b878787612c7c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d519061429a565b60405180910390fd5b612d65838383613122565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290614582565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7e91906139d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee29190613587565b60405180910390a3612ef5848484613127565b50505050565b6000612f0630611111565b905060008190506000808303612f1e575050506130f3565b600754831115612f2e5760075492505b601960009054906101000a900460ff168015612f555750600584612f529190613d1c565b83115b15612f6a57600584612f679190613d1c565b92505b60008390506000479050612f7d8261312c565b6000612f92824761336990919063ffffffff16565b90506000612fbd86612faf601554856130f690919063ffffffff16565b61310c90919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613015906145d3565b60006040518083038185875af1925050503d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130a3906145d3565b60006040518083038185875af1925050503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b505080955050505050505050505b50565b600081836131049190613d1c565b905092915050565b6000818361311a9190613d8d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613149576131486145e8565b5b6040519080825280602002602001820160405280156131775781602001602082028036833780820191505090505b509050308160008151811061318f5761318e614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613258919061465b565b8160018151811061326c5761326b614617565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132d1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ee2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333395949392919061478b565b600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b505050505050565b6000818361337791906144dc565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b957808201518184015260208101905061339e565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e18261337f565b6133eb818561338a565b93506133fb81856020860161339b565b613404816133c5565b840191505092915050565b6000602082019050818103600083015261342981846133d6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061345c82613431565b9050919050565b61346c81613451565b82525050565b60006040820190506134876000830185613463565b6134946020830184613463565b9392505050565b600080fd5b6134a981613451565b81146134b457600080fd5b50565b6000813590506134c6816134a0565b92915050565b6000819050919050565b6134df816134cc565b81146134ea57600080fd5b50565b6000813590506134fc816134d6565b92915050565b600080604083850312156135195761351861349b565b5b6000613527858286016134b7565b9250506020613538858286016134ed565b9150509250929050565b60008115159050919050565b61355781613542565b82525050565b6000602082019050613572600083018461354e565b92915050565b613581816134cc565b82525050565b600060208201905061359c6000830184613578565b92915050565b600080604083850312156135b9576135b861349b565b5b60006135c7858286016134ed565b92505060206135d8858286016134ed565b9150509250929050565b6000806000606084860312156135fb576135fa61349b565b5b6000613609868287016134b7565b935050602061361a868287016134b7565b925050604061362b868287016134ed565b9150509250925092565b600060ff82169050919050565b61364b81613635565b82525050565b60006020820190506136666000830184613642565b92915050565b6000606082019050613681600083018661354e565b61368e6020830185613578565b61369b6040830184613578565b949350505050565b6000602082840312156136b9576136b861349b565b5b60006136c7848285016134b7565b91505092915050565b6136d981613542565b81146136e457600080fd5b50565b6000813590506136f6816136d0565b92915050565b600080604083850312156137135761371261349b565b5b6000613721858286016134b7565b9250506020613732858286016136e7565b9150509250929050565b6000602082840312156137525761375161349b565b5b6000613760848285016136e7565b91505092915050565b600060208201905061377e6000830184613463565b92915050565b60006020828403121561379a5761379961349b565b5b60006137a8848285016134ed565b91505092915050565b60006060820190506137c6600083018661354e565b6137d3602083018561354e565b6137e0604083018461354e565b949350505050565b6000806000606084860312156138015761380061349b565b5b600061380f868287016136e7565b9350506020613820868287016134ed565b9250506040613831868287016134ed565b9150509250925092565b600060c0820190506138506000830189613578565b61385d6020830188613578565b61386a6040830187613578565b6138776060830186613578565b6138846080830185613578565b61389160a0830184613578565b979650505050505050565b600080604083850312156138b3576138b261349b565b5b60006138c1858286016134b7565b92505060206138d2858286016134b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b602082108103613936576139356138dc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397260208361338a565b915061397d8261393c565b602082019050919050565b600060208201905081810360008301526139a181613965565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139e2826134cc565b91506139ed836134cc565b9250828201905080821115613a0557613a046139a8565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613a6760288361338a565b9150613a7282613a0b565b604082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b6000606082019050613ab26000830186613578565b613abf6020830185613578565b613acc6040830184613578565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b3060288361338a565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613bc260298361338a565b9150613bcd82613b66565b604082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c5460258361338a565b9150613c5f82613bf8565b604082019050919050565b60006020820190508181036000830152613c8381613c47565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ce660248361338a565b9150613cf182613c8a565b604082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b6000613d27826134cc565b9150613d32836134cc565b9250828202613d40816134cc565b91508282048414831517613d5757613d566139a8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d98826134cc565b9150613da3836134cc565b925082613db357613db2613d5e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613e1a60348361338a565b9150613e2582613dbe565b604082019050919050565b60006020820190508181036000830152613e4981613e0d565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613eac602a8361338a565b9150613eb782613e50565b604082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f3e60398361338a565b9150613f4982613ee2565b604082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fd060268361338a565b9150613fdb82613f74565b604082019050919050565b60006020820190508181036000830152613fff81613fc3565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061403c60208361338a565b915061404782614006565b602082019050919050565b6000602082019050818103600083015261406b8161402f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ce60248361338a565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416060228361338a565b915061416b82614104565b604082019050919050565b6000602082019050818103600083015261418f81614153565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141f260258361338a565b91506141fd82614196565b604082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061428460238361338a565b915061428f82614228565b604082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061431660228361338a565b9150614321826142ba565b604082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143a860268361338a565b91506143b38261434c565b604082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061441460138361338a565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144a660278361338a565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b60006144e7826134cc565b91506144f2836134cc565b925082820390508181111561450a576145096139a8565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061456c60268361338a565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b50565b60006145bd6000836145a2565b91506145c8826145ad565b600082019050919050565b60006145de826145b0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614655816134a0565b92915050565b6000602082840312156146715761467061349b565b5b600061467f84828501614646565b91505092915050565b6000819050919050565b6000819050919050565b60006146b76146b26146ad84614688565b614692565b6134cc565b9050919050565b6146c78161469c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61470281613451565b82525050565b600061471483836146f9565b60208301905092915050565b6000602082019050919050565b6000614738826146cd565b61474281856146d8565b935061474d836146e9565b8060005b8381101561477e5781516147658882614708565b975061477083614720565b925050600181019050614751565b5085935050505092915050565b600060a0820190506147a06000830188613578565b6147ad60208301876146be565b81810360408301526147bf818661472d565b90506147ce6060830185613463565b6147db6080830184613578565b969550505050505056fea2646970667358221220ccf322763c5820bf27eb384165cfb9be51503d6d29bd57a5a6ea3af968a66e7564736f6c63430008130033

Deployed Bytecode Sourcemap

25422:20242:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11020:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38052:193;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13253:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12140:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33479:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13925:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11982:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37574:246;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36335:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34171:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14859:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32990:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25953:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35974:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36869:358;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12311:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22359:103;;;;;;;;;;;;;:::i;:::-;;44479:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21708:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11239:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15648:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12667:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32432:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39766:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30228:162;;;;;;;;;;;;;:::i;:::-;;34875:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31149:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38729:577;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12930:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35381:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25550:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22617:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31947:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30545:140;;;;;;;;;;;;;:::i;:::-;;11020:100;11074:13;11107:5;11100:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11020:100;:::o;38052:193::-;38132:24;38158:22;38206:15;;;;;;;;;;;38223:13;;;;;;;;;;;38198:39;;;;38052:193;;:::o;13253:194::-;13361:4;13378:39;13387:12;:10;:12::i;:::-;13401:7;13410:6;13378:8;:39::i;:::-;13435:4;13428:11;;13253:194;;;;:::o;12140:108::-;12201:7;12228:12;;12221:19;;12140:108;:::o;33479:403::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33615:13:::1;33597:15;:31;;;;33655:7;33639:13;:23;;;;33705:13;;33687:15;;:31;;;;:::i;:::-;33673:11;:45;;;;33752:3;33737:11;;:18;;33729:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33816:58;33830:11;;33843:15;;33860:13;;33816:58;;;;;;;;:::i;:::-;;;;;;;;33479:403:::0;;:::o;13925:529::-;14065:4;14082:36;14092:6;14100:9;14111:6;14082:9;:36::i;:::-;14131:24;14158:11;:19;14170:6;14158:19;;;;;;;;;;;;;;;:33;14178:12;:10;:12::i;:::-;14158:33;;;;;;;;;;;;;;;;14131:60;;14244:6;14224:16;:26;;14202:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14354:57;14363:6;14371:12;:10;:12::i;:::-;14404:6;14385:16;:25;14354:8;:57::i;:::-;14442:4;14435:11;;;13925:529;;;;;:::o;11982:93::-;12040:5;12065:2;12058:9;;11982:93;:::o;37574:246::-;37651:19;37672:18;37692:14;37741:13;;;;;;;;;;;37724:30;;37778:9;;37765:22;;37807:5;;37798:14;;37574:246;;;:::o;36335:175::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36452:13:::1;;;;;;;;;;;36420:46;;36441:9;36420:46;;;;;;;;;;;;36493:9;36477:13;;:25;;;;;;;;;;;;;;;;;;36335:175:::0;:::o;34171:455::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34312:13:::1;34293:16;:32;;;;34353:7;34336:14;:24;;;;34405:14;;34386:16;;:33;;;;:::i;:::-;34371:12;:48;;;;34468:3;34452:12;;:19;;34430:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34556:62;34571:12;;34585:16;;34603:14;;34556:62;;;;;;;;:::i;:::-;;;;;;;;34171:455:::0;;:::o;14859:290::-;14972:4;14989:130;15012:12;:10;:12::i;:::-;15039:7;15098:10;15061:11;:25;15073:12;:10;:12::i;:::-;15061:25;;;;;;;;;;;;;;;:34;15087:7;15061:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14989:8;:130::i;:::-;15137:4;15130:11;;14859:290;;;;:::o;32990:202::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33133:4:::1;33103:19;:27;33123:6;33103:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33171:6;33153:31;;;33179:4;33153:31;;;;;;:::i;:::-;;;;;;;;32990:202:::0;;:::o;25953:34::-;;;;;;;;;;;;;:::o;35974:181::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36093:15:::1;;;;;;;;;;;36059:50;;36082:9;36059:50;;;;;;;;;;;;36138:9;36120:15;;:27;;;;;;;;;;;;;;;;;;35974:181:::0;:::o;36869:358::-;36962:21;36998:25;37038;37110:15;;;;;;;;;;;37091:34;;37156:16;;37136:36;;37203:16;;37183:36;;36869:358;;;:::o;12311:143::-;12401:7;12428:9;:18;12438:7;12428:18;;;;;;;;;;;;;;;;12421:25;;12311:143;;;:::o;22359:103::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22424:30:::1;22451:1;22424:18;:30::i;:::-;22359:103::o:0;44479:79::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44545:5:::1;44538:4;;:12;;;;;;;;;;;;;;;;;;44479:79:::0;:::o;21708:87::-;21754:7;21781:6;;;;;;;;;;;21774:13;;21708:87;:::o;11239:104::-;11295:13;11328:7;11321:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11239:104;:::o;15648:475::-;15766:4;15783:24;15810:11;:25;15822:12;:10;:12::i;:::-;15810:25;;;;;;;;;;;;;;;:34;15836:7;15810:34;;;;;;;;;;;;;;;;15783:61;;15897:15;15877:16;:35;;15855:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16013:67;16022:12;:10;:12::i;:::-;16036:7;16064:15;16045:16;:34;16013:8;:67::i;:::-;16111:4;16104:11;;;15648:475;;;;:::o;12667:200::-;12778:4;12795:42;12805:12;:10;:12::i;:::-;12819:9;12830:6;12795:9;:42::i;:::-;12855:4;12848:11;;12667:200;;;;:::o;32432:290::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32564:1:::1;32543:17;:22;;32535:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32667:4;32650:13;:11;:13::i;:::-;32630:17;:33;;;;:::i;:::-;32629:42;;;;:::i;:::-;32617:9;:54;;;;32687:27;32704:9;;32687:27;;;;;;:::i;:::-;;;;;;;;32432:290:::0;:::o;39766:453::-;39891:23;39929:25;39969:31;40049:17;:26;40067:7;40049:26;;;;;;;;;;;;;;;;;;;;;;;;;40028:47;;40109:19;:28;40129:7;40109:28;;;;;;;;;;;;;;;;;;;;;;;;;40086:51;;40177:25;:34;40203:7;40177:34;;;;;;;;;;;;;;;;;;;;;;;;;40148:63;;39766:453;;;;;:::o;30228:162::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30298:4:::1;30281:14;;:21;;;;;;;;;;;;;;;;;;30331:4;30313:15;;:22;;;;;;;;;;;;;;;;;;30366:15;30351:31;;;;;;;;;;30228:162::o:0;34875:212::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35021:8:::1;34992:17;:26;35010:7;34992:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35061:7;35045:34;;;35070:8;35045:34;;;;;;:::i;:::-;;;;;;;;34875:212:::0;;:::o;31149:555::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31319:1:::1;31311:4;:9;;31289:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31427:4;31419;:12;;31411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31509:7;31491:15;;:25;;;;;;;;;;;;;;;;;;31571:5;31563:4;31547:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31546:30;;;;:::i;:::-;31527:16;:49;;;;31631:5;31623:4;31607:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31606:30;;;;:::i;:::-;31587:16;:49;;;;31652:44;31676:7;31685:4;31691;31652:44;;;;;;;;:::i;:::-;;;;;;;;31149:555:::0;;;:::o;38729:577::-;38819:20;38854:24;38893:22;38930:21;38966:25;39006:23;39072:11;;39057:26;;39113:15;;39094:34;;39156:13;;39139:30;;39196:12;;39180:28;;39239:16;;39219:36;;39284:14;;39266:32;;38729:577;;;;;;:::o;12930:176::-;13044:7;13071:11;:18;13083:5;13071:18;;;;;;;;;;;;;;;:27;13090:7;13071:27;;;;;;;;;;;;;;;;13064:34;;12930:176;;;;:::o;35381:241::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35485:7:::1;35477:15;;:4;:15;;::::0;35455:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35590:24;35602:4;35608:5;35590:11;:24::i;:::-;35381:241:::0;;:::o;25550:32::-;;;:::o;22617:238::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22740:1:::1;22720:22;;:8;:22;;::::0;22698:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22819:28;22838:8;22819:18;:28::i;:::-;22617:238:::0;:::o;31947:267::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32076:1:::1;32059:13;:18;;32051:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32167:4;32150:13;:11;:13::i;:::-;32134;:29;;;;:::i;:::-;32133:38;;;;:::i;:::-;32125:5;:46;;;;32187:19;32200:5;;32187:19;;;;;;:::i;:::-;;;;;;;;31947:267:::0;:::o;30545:140::-;21939:12;:10;:12::i;:::-;21928:23;;:7;:5;:7::i;:::-;:23;;;21920:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30626:5:::1;30610:13;;:21;;;;;;;;;;;;;;;;;;30661:15;30647:30;;;;;;;;;;30545:140::o:0;10026:98::-;10079:7;10106:10;10099:17;;10026:98;:::o;19431:380::-;19584:1;19567:19;;:5;:19;;;19559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19665:1;19646:21;;:7;:21;;;19638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19749:6;19719:11;:18;19731:5;19719:18;;;;;;;;;;;;;;;:27;19738:7;19719:27;;;;;;;;;;;;;;;:36;;;;19787:7;19771:32;;19780:5;19771:32;;;19796:6;19771:32;;;;;;:::i;:::-;;;;;;;;19431:380;;;:::o;40227:3640::-;40375:1;40359:18;;:4;:18;;;40351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40452:1;40438:16;;:2;:16;;;40430:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40521:1;40511:6;:11;40507:93;;40539:28;40555:4;40561:2;40565:1;40539:15;:28::i;:::-;40582:7;;40507:93;40616:13;;;;;;;;;;;40612:1564;;;40676:7;:5;:7::i;:::-;40668:15;;:4;:15;;;;:49;;;;;40710:7;:5;:7::i;:::-;40704:13;;:2;:13;;;;40668:49;:86;;;;;40752:1;40738:16;;:2;:16;;;;40668:86;:128;;;;;40789:6;40775:21;;:2;:21;;;;40668:128;:158;;;;;40818:8;;;;;;;;;;;40817:9;40668:158;40646:1519;;;40866:14;;;;;;;;;;;40861:232;;40939:17;:23;40957:4;40939:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;40966:17;:21;40984:2;40966:21;;;;;;;;;;;;;;;;;;;;;;;;;40939:48;40905:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;40861:232;41167:25;:31;41193:4;41167:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41203:19;:23;41223:2;41203:23;;;;;;;;;;;;;;;;;;;;;;;;;41202:24;41167:59;41141:1009;;;41313:5;;41303:6;:15;;41269:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;41491:9;;41474:13;41484:2;41474:9;:13::i;:::-;41465:6;:22;;;;:::i;:::-;:35;;41431:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41141:1009;;;41669:25;:29;41695:2;41669:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41703:19;:25;41723:4;41703:25;;;;;;;;;;;;;;;;;;;;;;;;;41702:26;41669:59;41643:507;;;41815:5;;41805:6;:15;;41771:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41643:507;;;41942:19;:23;41962:2;41942:23;;;;;;;;;;;;;;;;;;;;;;;;;41937:213;;42050:9;;42033:13;42043:2;42033:9;:13::i;:::-;42024:6;:22;;;;:::i;:::-;:35;;41990:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41937:213;41643:507;41141:1009;40646:1519;40612:1564;42188:28;42219:24;42237:4;42219:9;:24::i;:::-;42188:55;;42256:12;42295:16;;42271:20;:40;;42256:55;;42342:7;:39;;;;;42366:15;;;;;;;;;;;42342:39;:65;;;;;42399:8;;;;;;;;;;;42398:9;42342:65;:114;;;;;42425:25;:31;42451:4;42425:31;;;;;;;;;;;;;;;;;;;;;;;;;42424:32;42342:114;:155;;;;;42474:17;:23;42492:4;42474:23;;;;;;;;;;;;;;;;;;;;;;;;;42473:24;42342:155;:194;;;;;42515:17;:21;42533:2;42515:21;;;;;;;;;;;;;;;;;;;;;;;;;42514:22;42342:194;42324:332;;;42574:4;42563:8;;:15;;;;;;;;;;;;;;;;;;42595:16;42604:6;42595:8;:16::i;:::-;42639:5;42628:8;;:16;;;;;;;;;;;;;;;;;;42324:332;42668:12;42684:8;;;;;;;;;;;42683:9;42668:24;;42794:17;:23;42812:4;42794:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42821:17;:21;42839:2;42821:21;;;;;;;;;;;;;;;;;;;;;;;;;42794:48;42790:96;;;42869:5;42859:15;;42790:96;42898:12;43003:7;42999:815;;;43055:25;:29;43081:2;43055:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;43103:1;43088:12;;:16;43055:49;43051:614;;;43132:33;43161:3;43132:24;43143:12;;43132:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43125:40;;43230:12;;43212:14;;43205:4;:21;;;;:::i;:::-;43204:38;;;;:::i;:::-;43184:16;;:58;;;;;;;:::i;:::-;;;;;;;;43311:12;;43291:16;;43284:4;:23;;;;:::i;:::-;43283:40;;;;:::i;:::-;43261:18;;:62;;;;;;;:::i;:::-;;;;;;;;43051:614;;;43385:25;:31;43411:4;43385:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43434:1;43420:11;;:15;43385:50;43381:284;;;43463:32;43491:3;43463:23;43474:11;;43463:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;43456:39;;43559:11;;43542:13;;43535:4;:20;;;;:::i;:::-;43534:36;;;;:::i;:::-;43514:16;;:56;;;;;;;:::i;:::-;;;;;;;;43638:11;;43619:15;;43612:4;:22;;;;:::i;:::-;43611:38;;;;:::i;:::-;43589:18;;:60;;;;;;;:::i;:::-;;;;;;;;43381:284;43051:614;43692:1;43685:4;:8;43681:91;;;43714:42;43730:4;43744;43751;43714:15;:42::i;:::-;43681:91;43798:4;43788:14;;;;;:::i;:::-;;;42999:815;43826:33;43842:4;43848:2;43852:6;43826:15;:33::i;:::-;40340:3527;;;;40227:3640;;;;:::o;23015:191::-;23089:16;23108:6;;;;;;;;;;;23089:25;;23134:8;23125:6;;:17;;;;;;;;;;;;;;;;;;23189:8;23158:40;;23179:8;23158:40;;;;;;;;;;;;23078:128;23015:191;:::o;35630:154::-;35730:5;35696:25;:31;35722:4;35696:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35770:5;35753:23;;35764:4;35753:23;;;;;;;;;;;;35630:154;;:::o;16613:770::-;16771:1;16753:20;;:6;:20;;;16745:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16855:1;16834:23;;:9;:23;;;16826:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16910:47;16931:6;16939:9;16950:6;16910:20;:47::i;:::-;16970:21;16994:9;:17;17004:6;16994:17;;;;;;;;;;;;;;;;16970:41;;17061:6;17044:13;:23;;17022:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17205:6;17189:13;:22;17169:9;:17;17179:6;17169:17;;;;;;;;;;;;;;;:42;;;;17257:6;17233:9;:20;17243:9;17233:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17298:9;17281:35;;17290:6;17281:35;;;17309:6;17281:35;;;;;;:::i;:::-;;;;;;;;17329:46;17349:6;17357:9;17368:6;17329:19;:46::i;:::-;16734:649;16613:770;;;:::o;44566:1095::-;44619:23;44645:24;44663:4;44645:9;:24::i;:::-;44619:50;;44680:25;44708:15;44680:43;;44734:12;44782:1;44763:15;:20;44759:59;;44800:7;;;;;44759:59;44852:16;;44834:15;:34;44830:101;;;44903:16;;44885:34;;44830:101;44947:4;;;;;;;;;;;:36;;;;;44982:1;44973:6;:10;;;;:::i;:::-;44955:15;:28;44947:36;44943:97;;;45027:1;45018:6;:10;;;;:::i;:::-;45000:28;;44943:97;45052:26;45081:15;45052:44;;45109:25;45137:21;45109:49;;45171:36;45188:18;45171:16;:36::i;:::-;45220:18;45241:44;45267:17;45241:21;:25;;:44;;;;:::i;:::-;45220:65;;45298:17;45318:79;45369:17;45318:32;45333:16;;45318:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;45298:99;;45431:1;45410:18;:22;;;;45462:1;45443:16;:20;;;;45498:13;;;;;;;;;;;45490:27;;45525:9;45490:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45476:63;;;;;45574:15;;;;;;;;;;;45566:29;;45617:21;45566:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45552:101;;;;;44608:1053;;;;;;;44566:1095;;:::o;3385:98::-;3443:7;3474:1;3470;:5;;;;:::i;:::-;3463:12;;3385:98;;;;:::o;3784:::-;3842:7;3873:1;3869;:5;;;;:::i;:::-;3862:12;;3784:98;;;;:::o;20411:125::-;;;;:::o;21140:124::-;;;;:::o;43875:571::-;44001:21;44039:1;44025:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44001:40;;44070:4;44052;44057:1;44052:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44096:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44086:4;44091:1;44086:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;44125:56;44142:4;44157:9;44169:11;44125:8;:56::i;:::-;44220:9;:60;;;44295:11;44321:1;44365:4;44392;44412:15;44220:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43930:516;43875:571;:::o;3028:98::-;3086:7;3117:1;3113;:5;;;;:::i;:::-;3106:12;;3028:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:96::-;1518:7;1547:24;1565:5;1547:24;:::i;:::-;1536:35;;1481:96;;;:::o;1583:118::-;1670:24;1688:5;1670:24;:::i;:::-;1665:3;1658:37;1583:118;;:::o;1707:332::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1960:72;2028:2;2017:9;2013:18;2004:6;1960:72;:::i;:::-;1707:332;;;;;:::o;2126:117::-;2235:1;2232;2225:12;2372:122;2445:24;2463:5;2445:24;:::i;:::-;2438:5;2435:35;2425:63;;2484:1;2481;2474:12;2425:63;2372:122;:::o;2500:139::-;2546:5;2584:6;2571:20;2562:29;;2600:33;2627:5;2600:33;:::i;:::-;2500:139;;;;:::o;2645:77::-;2682:7;2711:5;2700:16;;2645:77;;;:::o;2728:122::-;2801:24;2819:5;2801:24;:::i;:::-;2794:5;2791:35;2781:63;;2840:1;2837;2830:12;2781:63;2728:122;:::o;2856:139::-;2902:5;2940:6;2927:20;2918:29;;2956:33;2983:5;2956:33;:::i;:::-;2856:139;;;;:::o;3001:474::-;3069:6;3077;3126:2;3114:9;3105:7;3101:23;3097:32;3094:119;;;3132:79;;:::i;:::-;3094:119;3252:1;3277:53;3322:7;3313:6;3302:9;3298:22;3277:53;:::i;:::-;3267:63;;3223:117;3379:2;3405:53;3450:7;3441:6;3430:9;3426:22;3405:53;:::i;:::-;3395:63;;3350:118;3001:474;;;;;:::o;3481:90::-;3515:7;3558:5;3551:13;3544:21;3533:32;;3481:90;;;:::o;3577:109::-;3658:21;3673:5;3658:21;:::i;:::-;3653:3;3646:34;3577:109;;:::o;3692:210::-;3779:4;3817:2;3806:9;3802:18;3794:26;;3830:65;3892:1;3881:9;3877:17;3868:6;3830:65;:::i;:::-;3692:210;;;;:::o;3908:118::-;3995:24;4013:5;3995:24;:::i;:::-;3990:3;3983:37;3908:118;;:::o;4032:222::-;4125:4;4163:2;4152:9;4148:18;4140:26;;4176:71;4244:1;4233:9;4229:17;4220:6;4176:71;:::i;:::-;4032:222;;;;:::o;4260:474::-;4328:6;4336;4385:2;4373:9;4364:7;4360:23;4356:32;4353:119;;;4391:79;;:::i;:::-;4353:119;4511:1;4536:53;4581:7;4572:6;4561:9;4557:22;4536:53;:::i;:::-;4526:63;;4482:117;4638:2;4664:53;4709:7;4700:6;4689:9;4685:22;4664:53;:::i;:::-;4654:63;;4609:118;4260:474;;;;;:::o;4740:619::-;4817:6;4825;4833;4882:2;4870:9;4861:7;4857:23;4853:32;4850:119;;;4888:79;;:::i;:::-;4850:119;5008:1;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4979:117;5135:2;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5106:118;5263:2;5289:53;5334:7;5325:6;5314:9;5310:22;5289:53;:::i;:::-;5279:63;;5234:118;4740:619;;;;;:::o;5365:86::-;5400:7;5440:4;5433:5;5429:16;5418:27;;5365:86;;;:::o;5457:112::-;5540:22;5556:5;5540:22;:::i;:::-;5535:3;5528:35;5457:112;;:::o;5575:214::-;5664:4;5702:2;5691:9;5687:18;5679:26;;5715:67;5779:1;5768:9;5764:17;5755:6;5715:67;:::i;:::-;5575:214;;;;:::o;5795:430::-;5938:4;5976:2;5965:9;5961:18;5953:26;;5989:65;6051:1;6040:9;6036:17;6027:6;5989:65;:::i;:::-;6064:72;6132:2;6121:9;6117:18;6108:6;6064:72;:::i;:::-;6146;6214:2;6203:9;6199:18;6190:6;6146:72;:::i;:::-;5795:430;;;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:323::-;7357:6;7406:2;7394:9;7385:7;7381:23;7377:32;7374:119;;;7412:79;;:::i;:::-;7374:119;7532:1;7557:50;7599:7;7590:6;7579:9;7575:22;7557:50;:::i;:::-;7547:60;;7503:114;7301:323;;;;:::o;7630:222::-;7723:4;7761:2;7750:9;7746:18;7738:26;;7774:71;7842:1;7831:9;7827:17;7818:6;7774:71;:::i;:::-;7630:222;;;;:::o;7858:329::-;7917:6;7966:2;7954:9;7945:7;7941:23;7937:32;7934:119;;;7972:79;;:::i;:::-;7934:119;8092:1;8117:53;8162:7;8153:6;8142:9;8138:22;8117:53;:::i;:::-;8107:63;;8063:117;7858:329;;;;:::o;8193:406::-;8324:4;8362:2;8351:9;8347:18;8339:26;;8375:65;8437:1;8426:9;8422:17;8413:6;8375:65;:::i;:::-;8450:66;8512:2;8501:9;8497:18;8488:6;8450:66;:::i;:::-;8526;8588:2;8577:9;8573:18;8564:6;8526:66;:::i;:::-;8193:406;;;;;;:::o;8605:613::-;8679:6;8687;8695;8744:2;8732:9;8723:7;8719:23;8715:32;8712:119;;;8750:79;;:::i;:::-;8712:119;8870:1;8895:50;8937:7;8928:6;8917:9;8913:22;8895:50;:::i;:::-;8885:60;;8841:114;8994:2;9020:53;9065:7;9056:6;9045:9;9041:22;9020:53;:::i;:::-;9010:63;;8965:118;9122:2;9148:53;9193:7;9184:6;9173:9;9169:22;9148:53;:::i;:::-;9138:63;;9093:118;8605:613;;;;;:::o;9224:775::-;9457:4;9495:3;9484:9;9480:19;9472:27;;9509:71;9577:1;9566:9;9562:17;9553:6;9509:71;:::i;:::-;9590:72;9658:2;9647:9;9643:18;9634:6;9590:72;:::i;:::-;9672;9740:2;9729:9;9725:18;9716:6;9672:72;:::i;:::-;9754;9822:2;9811:9;9807:18;9798:6;9754:72;:::i;:::-;9836:73;9904:3;9893:9;9889:19;9880:6;9836:73;:::i;:::-;9919;9987:3;9976:9;9972:19;9963:6;9919:73;:::i;:::-;9224:775;;;;;;;;;:::o;10005:474::-;10073:6;10081;10130:2;10118:9;10109:7;10105:23;10101:32;10098:119;;;10136:79;;:::i;:::-;10098:119;10256:1;10281:53;10326:7;10317:6;10306:9;10302:22;10281:53;:::i;:::-;10271:63;;10227:117;10383:2;10409:53;10454:7;10445:6;10434:9;10430:22;10409:53;:::i;:::-;10399:63;;10354:118;10005:474;;;;;:::o;10485:180::-;10533:77;10530:1;10523:88;10630:4;10627:1;10620:15;10654:4;10651:1;10644:15;10671:320;10715:6;10752:1;10746:4;10742:12;10732:22;;10799:1;10793:4;10789:12;10820:18;10810:81;;10876:4;10868:6;10864:17;10854:27;;10810:81;10938:2;10930:6;10927:14;10907:18;10904:38;10901:84;;10957:18;;:::i;:::-;10901:84;10722:269;10671:320;;;:::o;10997:182::-;11137:34;11133:1;11125:6;11121:14;11114:58;10997:182;:::o;11185:366::-;11327:3;11348:67;11412:2;11407:3;11348:67;:::i;:::-;11341:74;;11424:93;11513:3;11424:93;:::i;:::-;11542:2;11537:3;11533:12;11526:19;;11185:366;;;:::o;11557:419::-;11723:4;11761:2;11750:9;11746:18;11738:26;;11810:9;11804:4;11800:20;11796:1;11785:9;11781:17;11774:47;11838:131;11964:4;11838:131;:::i;:::-;11830:139;;11557:419;;;:::o;11982:180::-;12030:77;12027:1;12020:88;12127:4;12124:1;12117:15;12151:4;12148:1;12141:15;12168:191;12208:3;12227:20;12245:1;12227:20;:::i;:::-;12222:25;;12261:20;12279:1;12261:20;:::i;:::-;12256:25;;12304:1;12301;12297:9;12290:16;;12325:3;12322:1;12319:10;12316:36;;;12332:18;;:::i;:::-;12316:36;12168:191;;;;:::o;12365:227::-;12505:34;12501:1;12493:6;12489:14;12482:58;12574:10;12569:2;12561:6;12557:15;12550:35;12365:227;:::o;12598:366::-;12740:3;12761:67;12825:2;12820:3;12761:67;:::i;:::-;12754:74;;12837:93;12926:3;12837:93;:::i;:::-;12955:2;12950:3;12946:12;12939:19;;12598:366;;;:::o;12970:419::-;13136:4;13174:2;13163:9;13159:18;13151:26;;13223:9;13217:4;13213:20;13209:1;13198:9;13194:17;13187:47;13251:131;13377:4;13251:131;:::i;:::-;13243:139;;12970:419;;;:::o;13395:442::-;13544:4;13582:2;13571:9;13567:18;13559:26;;13595:71;13663:1;13652:9;13648:17;13639:6;13595:71;:::i;:::-;13676:72;13744:2;13733:9;13729:18;13720:6;13676:72;:::i;:::-;13758;13826:2;13815:9;13811:18;13802:6;13758:72;:::i;:::-;13395:442;;;;;;:::o;13843:227::-;13983:34;13979:1;13971:6;13967:14;13960:58;14052:10;14047:2;14039:6;14035:15;14028:35;13843:227;:::o;14076:366::-;14218:3;14239:67;14303:2;14298:3;14239:67;:::i;:::-;14232:74;;14315:93;14404:3;14315:93;:::i;:::-;14433:2;14428:3;14424:12;14417:19;;14076:366;;;:::o;14448:419::-;14614:4;14652:2;14641:9;14637:18;14629:26;;14701:9;14695:4;14691:20;14687:1;14676:9;14672:17;14665:47;14729:131;14855:4;14729:131;:::i;:::-;14721:139;;14448:419;;;:::o;14873:228::-;15013:34;15009:1;15001:6;14997:14;14990:58;15082:11;15077:2;15069:6;15065:15;15058:36;14873:228;:::o;15107:366::-;15249:3;15270:67;15334:2;15329:3;15270:67;:::i;:::-;15263:74;;15346:93;15435:3;15346:93;:::i;:::-;15464:2;15459:3;15455:12;15448:19;;15107:366;;;:::o;15479:419::-;15645:4;15683:2;15672:9;15668:18;15660:26;;15732:9;15726:4;15722:20;15718:1;15707:9;15703:17;15696:47;15760:131;15886:4;15760:131;:::i;:::-;15752:139;;15479:419;;;:::o;15904:224::-;16044:34;16040:1;16032:6;16028:14;16021:58;16113:7;16108:2;16100:6;16096:15;16089:32;15904:224;:::o;16134:366::-;16276:3;16297:67;16361:2;16356:3;16297:67;:::i;:::-;16290:74;;16373:93;16462:3;16373:93;:::i;:::-;16491:2;16486:3;16482:12;16475:19;;16134:366;;;:::o;16506:419::-;16672:4;16710:2;16699:9;16695:18;16687:26;;16759:9;16753:4;16749:20;16745:1;16734:9;16730:17;16723:47;16787:131;16913:4;16787:131;:::i;:::-;16779:139;;16506:419;;;:::o;16931:223::-;17071:34;17067:1;17059:6;17055:14;17048:58;17140:6;17135:2;17127:6;17123:15;17116:31;16931:223;:::o;17160:366::-;17302:3;17323:67;17387:2;17382:3;17323:67;:::i;:::-;17316:74;;17399:93;17488:3;17399:93;:::i;:::-;17517:2;17512:3;17508:12;17501:19;;17160:366;;;:::o;17532:419::-;17698:4;17736:2;17725:9;17721:18;17713:26;;17785:9;17779:4;17775:20;17771:1;17760:9;17756:17;17749:47;17813:131;17939:4;17813:131;:::i;:::-;17805:139;;17532:419;;;:::o;17957:410::-;17997:7;18020:20;18038:1;18020:20;:::i;:::-;18015:25;;18054:20;18072:1;18054:20;:::i;:::-;18049:25;;18109:1;18106;18102:9;18131:30;18149:11;18131:30;:::i;:::-;18120:41;;18310:1;18301:7;18297:15;18294:1;18291:22;18271:1;18264:9;18244:83;18221:139;;18340:18;;:::i;:::-;18221:139;18005:362;17957:410;;;;:::o;18373:180::-;18421:77;18418:1;18411:88;18518:4;18515:1;18508:15;18542:4;18539:1;18532:15;18559:185;18599:1;18616:20;18634:1;18616:20;:::i;:::-;18611:25;;18650:20;18668:1;18650:20;:::i;:::-;18645:25;;18689:1;18679:35;;18694:18;;:::i;:::-;18679:35;18736:1;18733;18729:9;18724:14;;18559:185;;;;:::o;18750:239::-;18890:34;18886:1;18878:6;18874:14;18867:58;18959:22;18954:2;18946:6;18942:15;18935:47;18750:239;:::o;18995:366::-;19137:3;19158:67;19222:2;19217:3;19158:67;:::i;:::-;19151:74;;19234:93;19323:3;19234:93;:::i;:::-;19352:2;19347:3;19343:12;19336:19;;18995:366;;;:::o;19367:419::-;19533:4;19571:2;19560:9;19556:18;19548:26;;19620:9;19614:4;19610:20;19606:1;19595:9;19591:17;19584:47;19648:131;19774:4;19648:131;:::i;:::-;19640:139;;19367:419;;;:::o;19792:229::-;19932:34;19928:1;19920:6;19916:14;19909:58;20001:12;19996:2;19988:6;19984:15;19977:37;19792:229;:::o;20027:366::-;20169:3;20190:67;20254:2;20249:3;20190:67;:::i;:::-;20183:74;;20266:93;20355:3;20266:93;:::i;:::-;20384:2;20379:3;20375:12;20368:19;;20027:366;;;:::o;20399:419::-;20565:4;20603:2;20592:9;20588:18;20580:26;;20652:9;20646:4;20642:20;20638:1;20627:9;20623:17;20616:47;20680:131;20806:4;20680:131;:::i;:::-;20672:139;;20399:419;;;:::o;20824:244::-;20964:34;20960:1;20952:6;20948:14;20941:58;21033:27;21028:2;21020:6;21016:15;21009:52;20824:244;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:225::-;22011:34;22007:1;21999:6;21995:14;21988:58;22080:8;22075:2;22067:6;22063:15;22056:33;21871:225;:::o;22102:366::-;22244:3;22265:67;22329:2;22324:3;22265:67;:::i;:::-;22258:74;;22341:93;22430:3;22341:93;:::i;:::-;22459:2;22454:3;22450:12;22443:19;;22102:366;;;:::o;22474:419::-;22640:4;22678:2;22667:9;22663:18;22655:26;;22727:9;22721:4;22717:20;22713:1;22702:9;22698:17;22691:47;22755:131;22881:4;22755:131;:::i;:::-;22747:139;;22474:419;;;:::o;22899:182::-;23039:34;23035:1;23027:6;23023:14;23016:58;22899:182;:::o;23087:366::-;23229:3;23250:67;23314:2;23309:3;23250:67;:::i;:::-;23243:74;;23326:93;23415:3;23326:93;:::i;:::-;23444:2;23439:3;23435:12;23428:19;;23087:366;;;:::o;23459:419::-;23625:4;23663:2;23652:9;23648:18;23640:26;;23712:9;23706:4;23702:20;23698:1;23687:9;23683:17;23676:47;23740:131;23866:4;23740:131;:::i;:::-;23732:139;;23459:419;;;:::o;23884:223::-;24024:34;24020:1;24012:6;24008:14;24001:58;24093:6;24088:2;24080:6;24076:15;24069:31;23884:223;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:221::-;25050:34;25046:1;25038:6;25034:14;25027:58;25119:4;25114:2;25106:6;25102:15;25095:29;24910:221;:::o;25137:366::-;25279:3;25300:67;25364:2;25359:3;25300:67;:::i;:::-;25293:74;;25376:93;25465:3;25376:93;:::i;:::-;25494:2;25489:3;25485:12;25478:19;;25137:366;;;:::o;25509:419::-;25675:4;25713:2;25702:9;25698:18;25690:26;;25762:9;25756:4;25752:20;25748:1;25737:9;25733:17;25726:47;25790:131;25916:4;25790:131;:::i;:::-;25782:139;;25509:419;;;:::o;25934:224::-;26074:34;26070:1;26062:6;26058:14;26051:58;26143:7;26138:2;26130:6;26126:15;26119:32;25934:224;:::o;26164:366::-;26306:3;26327:67;26391:2;26386:3;26327:67;:::i;:::-;26320:74;;26403:93;26492:3;26403:93;:::i;:::-;26521:2;26516:3;26512:12;26505:19;;26164:366;;;:::o;26536:419::-;26702:4;26740:2;26729:9;26725:18;26717:26;;26789:9;26783:4;26779:20;26775:1;26764:9;26760:17;26753:47;26817:131;26943:4;26817:131;:::i;:::-;26809:139;;26536:419;;;:::o;26961:222::-;27101:34;27097:1;27089:6;27085:14;27078:58;27170:5;27165:2;27157:6;27153:15;27146:30;26961:222;:::o;27189:366::-;27331:3;27352:67;27416:2;27411:3;27352:67;:::i;:::-;27345:74;;27428:93;27517:3;27428:93;:::i;:::-;27546:2;27541:3;27537:12;27530:19;;27189:366;;;:::o;27561:419::-;27727:4;27765:2;27754:9;27750:18;27742:26;;27814:9;27808:4;27804:20;27800:1;27789:9;27785:17;27778:47;27842:131;27968:4;27842:131;:::i;:::-;27834:139;;27561:419;;;:::o;27986:221::-;28126:34;28122:1;28114:6;28110:14;28103:58;28195:4;28190:2;28182:6;28178:15;28171:29;27986:221;:::o;28213:366::-;28355:3;28376:67;28440:2;28435:3;28376:67;:::i;:::-;28369:74;;28452:93;28541:3;28452:93;:::i;:::-;28570:2;28565:3;28561:12;28554:19;;28213:366;;;:::o;28585:419::-;28751:4;28789:2;28778:9;28774:18;28766:26;;28838:9;28832:4;28828:20;28824:1;28813:9;28809:17;28802:47;28866:131;28992:4;28866:131;:::i;:::-;28858:139;;28585:419;;;:::o;29010:225::-;29150:34;29146:1;29138:6;29134:14;29127:58;29219:8;29214:2;29206:6;29202:15;29195:33;29010:225;:::o;29241:366::-;29383:3;29404:67;29468:2;29463:3;29404:67;:::i;:::-;29397:74;;29480:93;29569:3;29480:93;:::i;:::-;29598:2;29593:3;29589:12;29582:19;;29241:366;;;:::o;29613:419::-;29779:4;29817:2;29806:9;29802:18;29794:26;;29866:9;29860:4;29856:20;29852:1;29841:9;29837:17;29830:47;29894:131;30020:4;29894:131;:::i;:::-;29886:139;;29613:419;;;:::o;30038:169::-;30178:21;30174:1;30166:6;30162:14;30155:45;30038:169;:::o;30213:366::-;30355:3;30376:67;30440:2;30435:3;30376:67;:::i;:::-;30369:74;;30452:93;30541:3;30452:93;:::i;:::-;30570:2;30565:3;30561:12;30554:19;;30213:366;;;:::o;30585:419::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:226::-;31150:34;31146:1;31138:6;31134:14;31127:58;31219:9;31214:2;31206:6;31202:15;31195:34;31010:226;:::o;31242:366::-;31384:3;31405:67;31469:2;31464:3;31405:67;:::i;:::-;31398:74;;31481:93;31570:3;31481:93;:::i;:::-;31599:2;31594:3;31590:12;31583:19;;31242:366;;;:::o;31614:419::-;31780:4;31818:2;31807:9;31803:18;31795:26;;31867:9;31861:4;31857:20;31853:1;31842:9;31838:17;31831:47;31895:131;32021:4;31895:131;:::i;:::-;31887:139;;31614:419;;;:::o;32039:194::-;32079:4;32099:20;32117:1;32099:20;:::i;:::-;32094:25;;32133:20;32151:1;32133:20;:::i;:::-;32128:25;;32177:1;32174;32170:9;32162:17;;32201:1;32195:4;32192:11;32189:37;;;32206:18;;:::i;:::-;32189:37;32039:194;;;;:::o;32239:225::-;32379:34;32375:1;32367:6;32363:14;32356:58;32448:8;32443:2;32435:6;32431:15;32424:33;32239:225;:::o;32470:366::-;32612:3;32633:67;32697:2;32692:3;32633:67;:::i;:::-;32626:74;;32709:93;32798:3;32709:93;:::i;:::-;32827:2;32822:3;32818:12;32811:19;;32470:366;;;:::o;32842:419::-;33008:4;33046:2;33035:9;33031:18;33023:26;;33095:9;33089:4;33085:20;33081:1;33070:9;33066:17;33059:47;33123:131;33249:4;33123:131;:::i;:::-;33115:139;;32842:419;;;:::o;33267:147::-;33368:11;33405:3;33390:18;;33267:147;;;;:::o;33420:114::-;;:::o;33540:398::-;33699:3;33720:83;33801:1;33796:3;33720:83;:::i;:::-;33713:90;;33812:93;33901:3;33812:93;:::i;:::-;33930:1;33925:3;33921:11;33914:18;;33540:398;;;:::o;33944:379::-;34128:3;34150:147;34293:3;34150:147;:::i;:::-;34143:154;;34314:3;34307:10;;33944:379;;;:::o;34329:180::-;34377:77;34374:1;34367:88;34474:4;34471:1;34464:15;34498:4;34495:1;34488:15;34515:180;34563:77;34560:1;34553:88;34660:4;34657:1;34650:15;34684:4;34681:1;34674:15;34701:143;34758:5;34789:6;34783:13;34774:22;;34805:33;34832:5;34805:33;:::i;:::-;34701:143;;;;:::o;34850:351::-;34920:6;34969:2;34957:9;34948:7;34944:23;34940:32;34937:119;;;34975:79;;:::i;:::-;34937:119;35095:1;35120:64;35176:7;35167:6;35156:9;35152:22;35120:64;:::i;:::-;35110:74;;35066:128;34850:351;;;;:::o;35207:85::-;35252:7;35281:5;35270:16;;35207:85;;;:::o;35298:60::-;35326:3;35347:5;35340:12;;35298:60;;;:::o;35364:158::-;35422:9;35455:61;35473:42;35482:32;35508:5;35482:32;:::i;:::-;35473:42;:::i;:::-;35455:61;:::i;:::-;35442:74;;35364:158;;;:::o;35528:147::-;35623:45;35662:5;35623:45;:::i;:::-;35618:3;35611:58;35528:147;;:::o;35681:114::-;35748:6;35782:5;35776:12;35766:22;;35681:114;;;:::o;35801:184::-;35900:11;35934:6;35929:3;35922:19;35974:4;35969:3;35965:14;35950:29;;35801:184;;;;:::o;35991:132::-;36058:4;36081:3;36073:11;;36111:4;36106:3;36102:14;36094:22;;35991:132;;;:::o;36129:108::-;36206:24;36224:5;36206:24;:::i;:::-;36201:3;36194:37;36129:108;;:::o;36243:179::-;36312:10;36333:46;36375:3;36367:6;36333:46;:::i;:::-;36411:4;36406:3;36402:14;36388:28;;36243:179;;;;:::o;36428:113::-;36498:4;36530;36525:3;36521:14;36513:22;;36428:113;;;:::o;36577:732::-;36696:3;36725:54;36773:5;36725:54;:::i;:::-;36795:86;36874:6;36869:3;36795:86;:::i;:::-;36788:93;;36905:56;36955:5;36905:56;:::i;:::-;36984:7;37015:1;37000:284;37025:6;37022:1;37019:13;37000:284;;;37101:6;37095:13;37128:63;37187:3;37172:13;37128:63;:::i;:::-;37121:70;;37214:60;37267:6;37214:60;:::i;:::-;37204:70;;37060:224;37047:1;37044;37040:9;37035:14;;37000:284;;;37004:14;37300:3;37293:10;;36701:608;;;36577:732;;;;:::o;37315:831::-;37578:4;37616:3;37605:9;37601:19;37593:27;;37630:71;37698:1;37687:9;37683:17;37674:6;37630:71;:::i;:::-;37711:80;37787:2;37776:9;37772:18;37763:6;37711:80;:::i;:::-;37838:9;37832:4;37828:20;37823:2;37812:9;37808:18;37801:48;37866:108;37969:4;37960:6;37866:108;:::i;:::-;37858:116;;37984:72;38052:2;38041:9;38037:18;38028:6;37984:72;:::i;:::-;38066:73;38134:3;38123:9;38119:19;38110:6;38066:73;:::i;:::-;37315:831;;;;;;;;:::o

Swarm Source

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