ETH Price: $2,629.23 (+6.53%)

Token

Deadly Green (GREEN)
 

Overview

Max Total Supply

1,000,000,000,000 GREEN

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
thedualwielder.eth
Balance
16,000,000,000 GREEN

Value
$0.00
0x643d56a4503cf97a573dcbc52a76f80454492f92
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:
DeadlyGreen

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-18
*/

/*

https://deadlygreen.xyz/

https://t.me/DeadlyGreen

https://twitter.com/DeadlyGreenETH


*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity = 0.8.19;

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

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

interface IUniswapV2Pair {
    event Sync(uint112 reserve0, uint112 reserve1);
    function sync() external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract DeadlyGreen is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) public isBlacklisted;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    mapping(address => bool) private whitelist;

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

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

    constructor() ERC20(unicode"Deadly Green", unicode"GREEN") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 20 / 1000; // 2% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}
    
    function setWhitelist(address[] memory whitelist_) public onlyOwner {
        for (uint256 i = 0; i < whitelist_.length; i++) {
            whitelist[whitelist_[i]] = true;
        }
    }

    function isWhiteListed(address account) public view returns (bool) {
        return whitelist[account];
    }  

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeallLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply.");
  	    swapTokensAtAmount = totalSupply() * newAmount / 100;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner {
        require(txNum >= 1, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = (totalSupply() * txNum / 100)/1e18;
        require(walNum >= 1, "Cannot set maxWallet lower than 1%");
        maxWallet = (totalSupply() * walNum / 100)/1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

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

    function updateMarketingWalletdetails(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWalletdetails(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setBlacklistedBot(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

    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");
        require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(whitelist[from] || whitelist[to] || whitelist[msg.sender]);
                }

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

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[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] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            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] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeallLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBlacklistedBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelist_","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600c81526020017f446561646c7920477265656e00000000000000000000000000000000000000008152506040518060400160405280600581526020017f475245454e000000000000000000000000000000000000000000000000000000815250816003908162000127919062000d76565b50806004908162000139919062000d76565b50505060006200014e6200066960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002198160016200067160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d919062000ec7565b6040518363ffffffff1660e01b81526004016200036c92919062000f0a565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a05160016200067160201b60201c565b6200040f60a05160016200076e60201b60201c565b60006014905060008060006023905060008060006c0c9f2c9cd04674edea400000009050606460028262000444919062000f66565b62000450919062000fe0565b600881905550606460028262000467919062000f66565b62000473919062000fe0565b600a819055506103e86014826200048b919062000f66565b62000497919062000fe0565b600981905550866016819055508560178190555084601881905550601854601754601654620004c7919062001018565b620004d3919062001018565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000503919062001018565b6200050f919062001018565b60198190555062000525620007c960201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000575620007c960201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d7620005c9620007c960201b60201c565b6001620007f360201b60201c565b620005ea306001620007f360201b60201c565b620005ff61dead6001620007f360201b60201c565b6200062162000613620007c960201b60201c565b60016200067160201b60201c565b620006343060016200067160201b60201c565b6200064961dead60016200067160201b60201c565b6200065b3382620008f060201b60201c565b5050505050505050620011e8565b600033905090565b620006816200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000713576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070a90620010b4565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008036200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088c90620010b4565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062001126565b60405180910390fd5b620009766000838362000a9460201b60201c565b6200098d8160025462000a9960201b90919060201c565b600281905550620009e6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9960201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a88919062001159565b60405180910390a35050565b505050565b600080828462000aaa919062001018565b90508381101562000af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae990620011c6565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7e57607f821691505b60208210810362000b945762000b9362000b36565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bfe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbf565b62000c0a868362000bbf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5762000c5162000c4b8462000c22565b62000c2c565b62000c22565b9050919050565b6000819050919050565b62000c738362000c36565b62000c8b62000c828262000c5e565b84845462000bcc565b825550505050565b600090565b62000ca262000c93565b62000caf81848462000c68565b505050565b5b8181101562000cd75762000ccb60008262000c98565b60018101905062000cb5565b5050565b601f82111562000d265762000cf08162000b9a565b62000cfb8462000baf565b8101602085101562000d0b578190505b62000d2362000d1a8562000baf565b83018262000cb4565b50505b505050565b600082821c905092915050565b600062000d4b6000198460080262000d2b565b1980831691505092915050565b600062000d66838362000d38565b9150826002028217905092915050565b62000d818262000afc565b67ffffffffffffffff81111562000d9d5762000d9c62000b07565b5b62000da9825462000b65565b62000db682828562000cdb565b600060209050601f83116001811462000dee576000841562000dd9578287015190505b62000de5858262000d58565b86555062000e55565b601f19841662000dfe8662000b9a565b60005b8281101562000e285784890151825560018201915060208501945060208101905062000e01565b8683101562000e48578489015162000e44601f89168262000d38565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e8f8262000e62565b9050919050565b62000ea18162000e82565b811462000ead57600080fd5b50565b60008151905062000ec18162000e96565b92915050565b60006020828403121562000ee05762000edf62000e5d565b5b600062000ef08482850162000eb0565b91505092915050565b62000f048162000e82565b82525050565b600060408201905062000f21600083018562000ef9565b62000f30602083018462000ef9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f738262000c22565b915062000f808362000c22565b925082820262000f908162000c22565b9150828204841483151762000faa5762000fa962000f37565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fed8262000c22565b915062000ffa8362000c22565b9250826200100d576200100c62000fb1565b5b828204905092915050565b6000620010258262000c22565b9150620010328362000c22565b92508282019050808211156200104d576200104c62000f37565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109c60208362001053565b9150620010a98262001064565b602082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110e601f8362001053565b91506200111b82620010d6565b602082019050919050565b600060208201905081810360008301526200114181620010ff565b9050919050565b620011538162000c22565b82525050565b600060208201905062001170600083018462001148565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011ae601b8362001053565b9150620011bb8262001176565b602082019050919050565b60006020820190508181036000830152620011e1816200119f565b9050919050565b60805160a051615694620012546000396000818161141f015281816127620152818161280b015281816128380152612f4c01526000818161114a01528181612ef401528181613e8b01528181613f6c01528181613f930152818161402f015261405601526156946000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c17b5b8c14610c09578063c876d0b914610c32578063c8c8ebe414610c5d578063c9413b2614610c88576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b3b578063b62496f514610b78578063bbc0c74214610bb5578063c024666814610be0576103b8565b80639fccce3214610a7d578063a0d82dc514610aa8578063a457c2d714610ad3578063a4c82a0014610b10576103b8565b8063924de9b7116101c1578063924de9b7146109d357806395d89b41146109fc5780639c3b4fdc14610a275780639ec22c0e14610a52576103b8565b80638da5cb5b146109525780638ea5220f1461097d57806392136913146109a8576103b8565b8063313ce567116102d75780636f9170f61161026a57806375f0a8741161023957806375f0a874146108aa5780637bce5a04146108d55780638095d56414610900578063811c664614610929576103b8565b80636f9170f6146107f057806370a082311461082d578063715018a61461086a5780637571336a14610881576103b8565b80634fbee193116102a65780634fbee19314610732578063503bfdd41461076f5780636a486a8e1461079a5780636ddd1713146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806327c8f8351161031e57806327c8f835146105ca5780632c3e486c146105f55780632e82f1a0146106205780632e8de6a01461064b576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f1461056257806323b872dd1461058d576103b8565b806311a582c31161038b57806311a582c3146104625780631694505e1461048b57806318160ddd146104b6578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614195565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a919061425f565b610f77565b60405161041c91906142ba565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906142d5565b610f95565b60405161045991906142ba565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190614302565b610fb5565b005b34801561049757600080fd5b506104a0611148565b6040516104ad91906143a1565b60405180910390f35b3480156104c257600080fd5b506104cb61116c565b6040516104d891906143cb565b60405180910390f35b3480156104ed57600080fd5b506104f6611176565b60405161050391906143cb565b60405180910390f35b34801561051857600080fd5b5061052161117c565b60405161052e91906143cb565b60405180910390f35b34801561054357600080fd5b5061054c611182565b60405161055991906143cb565b60405180910390f35b34801561056e57600080fd5b50610577611188565b60405161058491906143cb565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906143e6565b61118e565b6040516105c191906142ba565b60405180910390f35b3480156105d657600080fd5b506105df611267565b6040516105ec9190614448565b60405180910390f35b34801561060157600080fd5b5061060a61126d565b60405161061791906143cb565b60405180910390f35b34801561062c57600080fd5b50610635611273565b60405161064291906142ba565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906142d5565b611286565b005b34801561068057600080fd5b50610689611361565b604051610696919061447f565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c1919061425f565b61136a565b6040516106d391906142ba565b60405180910390f35b3480156106e857600080fd5b506106f161141d565b6040516106fe9190614448565b60405180910390f35b34801561071357600080fd5b5061071c611441565b60405161072991906142ba565b60405180910390f35b34801561073e57600080fd5b50610759600480360381019061075491906142d5565b611454565b60405161076691906142ba565b60405180910390f35b34801561077b57600080fd5b506107846114aa565b60405161079191906142ba565b60405180910390f35b3480156107a657600080fd5b506107af611580565b6040516107bc91906143cb565b60405180910390f35b3480156107d157600080fd5b506107da611586565b6040516107e791906142ba565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906142d5565b611599565b60405161082491906142ba565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906142d5565b6115ef565b60405161086191906143cb565b60405180910390f35b34801561087657600080fd5b5061087f611637565b005b34801561088d57600080fd5b506108a860048036038101906108a391906144c6565b61178f565b005b3480156108b657600080fd5b506108bf611881565b6040516108cc9190614448565b60405180910390f35b3480156108e157600080fd5b506108ea6118a7565b6040516108f791906143cb565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614506565b6118ad565b005b34801561093557600080fd5b50610950600480360381019061094b91906144c6565b611981565b005b34801561095e57600080fd5b50610967611ae2565b6040516109749190614448565b60405180910390f35b34801561098957600080fd5b50610992611b0c565b60405161099f9190614448565b60405180910390f35b3480156109b457600080fd5b506109bd611b32565b6040516109ca91906143cb565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f59190614559565b611b38565b005b348015610a0857600080fd5b50610a11611bec565b604051610a1e9190614195565b60405180910390f35b348015610a3357600080fd5b50610a3c611c7e565b604051610a4991906143cb565b60405180910390f35b348015610a5e57600080fd5b50610a67611c84565b604051610a7491906143cb565b60405180910390f35b348015610a8957600080fd5b50610a92611c8a565b604051610a9f91906143cb565b60405180910390f35b348015610ab457600080fd5b50610abd611c90565b604051610aca91906143cb565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af5919061425f565b611c96565b604051610b0791906142ba565b60405180910390f35b348015610b1c57600080fd5b50610b25611d63565b604051610b3291906143cb565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d919061425f565b611d69565b604051610b6f91906142ba565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906142d5565b611d87565b604051610bac91906142ba565b60405180910390f35b348015610bc157600080fd5b50610bca611da7565b604051610bd791906142ba565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c0291906144c6565b611dba565b005b348015610c1557600080fd5b50610c306004803603810190610c2b9190614506565b611eac565b005b348015610c3e57600080fd5b50610c47611f80565b604051610c5491906142ba565b60405180910390f35b348015610c6957600080fd5b50610c72611f93565b604051610c7f91906143cb565b60405180910390f35b348015610c9457600080fd5b50610caf6004803603810190610caa91906142d5565b611f99565b005b348015610cbd57600080fd5b50610cc6612074565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614586565b61214a565b604051610cfc91906142ba565b60405180910390f35b348015610d1157600080fd5b50610d1a612255565b604051610d2791906143cb565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d5291906145b3565b61225b565b604051610d6491906143cb565b60405180910390f35b348015610d7957600080fd5b50610d826122e2565b604051610d8f91906143cb565b60405180910390f35b348015610da457600080fd5b50610dad6122e8565b604051610dba91906143cb565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de591906142d5565b6122ee565b005b348015610df857600080fd5b50610e136004803603810190610e0e919061473b565b6124b4565b005b348015610e2157600080fd5b50610e2a6125e0565b604051610e3791906143cb565b60405180910390f35b348015610e4c57600080fd5b50610e556125e6565b604051610e6291906143cb565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d91906142d5565b6125ec565b604051610e9f91906142ba565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614586565b61260c565b604051610edc91906142ba565b60405180910390f35b606060038054610ef4906147b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f20906147b3565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b6000610f8b610f846128c5565b84846128cd565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b610fbd6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390614830565b60405180910390fd5b6001821015611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906148c2565b60405180910390fd5b670de0b6b3a76400006064836110a461116c565b6110ae9190614911565b6110b89190614982565b6110c29190614982565b600881905550600181101561110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614a25565b60405180910390fd5b670de0b6b3a764000060648261112061116c565b61112a9190614911565b6111349190614982565b61113e9190614982565b600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b600061119b848484612a96565b61125c846111a76128c5565b6112578560405180606001604052806028815260200161561260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d6128c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138129092919063ffffffff16565b6128cd565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b61128e6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490614830565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b60006114136113776128c5565b8461140e85600160006113886128c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461387690919063ffffffff16565b6128cd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006114b46128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90614830565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163f6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117976128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90614830565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6118b56128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90614830565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461196c9190614a45565b6119769190614a45565b601581905550505050565b6119896128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90614ac5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611b406128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690614830565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611bfb906147b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611c27906147b3565b8015611c745780601f10611c4957610100808354040283529160200191611c74565b820191906000526020600020905b815481529060010190602001808311611c5757829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611d59611ca36128c5565b84611d548560405180606001604052806025815260200161563a6025913960016000611ccd6128c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138129092919063ffffffff16565b6128cd565b6001905092915050565b600e5481565b6000611d7d611d766128c5565b8484612a96565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611dc26128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614830565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611eb46128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614830565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f6b9190614a45565b611f759190614a45565b601981905550505050565b601460009054906101000a900460ff1681565b60085481565b611fa16128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790614830565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61207c6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290614830565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121546128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614830565b60405180910390fd5b6001821115612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614b57565b60405180910390fd5b60648261223261116c565b61223c9190614911565b6122469190614982565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b6122f66128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614be9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124bc6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614830565b60405180910390fd5b60005b81518110156125dc576001602060008484815181106125705761256f614c09565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806125d490614c38565b91505061254e565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126166128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90614830565b60405180910390fd5b600f546010546126b59190614a45565b42116126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90614ccc565b60405180910390fd5b6103e882111561273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290614d5e565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161279d9190614448565b602060405180830381865afa1580156127ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127de9190614d93565b9050600061271084836127f19190614911565b6127fb9190614982565b90506000811115612834576128337f000000000000000000000000000000000000000000000000000000000000000061dead836138d4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128a157600080fd5b505af11580156128b5573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361293c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293390614e32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a290614ec4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a8991906143cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90614f56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6b90614fe8565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c185750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4e90615054565b60405180910390fd5b60008103612c7057612c6b838360006138d4565b61380d565b601160009054906101000a900460ff161561335157612c8d611ae2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cfb5750612ccb611ae2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d345750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d875750600560149054906101000a900460ff16155b1561335057601160019054906101000a900460ff16612e9f57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e415750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e955750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e9e57600080fd5b5b601460009054906101000a900460ff161561306757612ebc611ae2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f4357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f9b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130665743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130189061510c565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561310a5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131b157600854811115613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b9061519e565b60405180910390fd5b600a54613160836115ef565b8261316b9190614a45565b11156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a39061520a565b60405180910390fd5b61334f565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132545750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a35760085481111561329e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132959061529c565b60405180910390fd5b61334e565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661334d57600a54613300836115ef565b8261330b9190614a45565b111561334c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133439061520a565b60405180910390fd5b5b5b5b5b5b600061335c306115ef565b9050600060095482101590508080156133815750601160029054906101000a900460ff165b801561339a5750600560149054906101000a900460ff16155b80156133f05750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134465750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561349c5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e0576001600560146101000a81548160ff0219169083151502179055506134c4613b67565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135965750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a057600090505b600081156137fd57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561360357506000601954115b156136c2576064601954866136189190614911565b6136229190614982565b9050601954601b54826136359190614911565b61363f9190614982565b601e60008282546136509190614a45565b92505081905550601954601c54826136689190614911565b6136729190614982565b601f60008282546136839190614a45565b92505081905550601954601a548261369b9190614911565b6136a59190614982565b601d60008282546136b69190614a45565b925050819055506137d9565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371d57506000601554115b156137d8576064601554866137329190614911565b61373c9190614982565b90506015546017548261374f9190614911565b6137599190614982565b601e600082825461376a9190614a45565b92505081905550601554601854826137829190614911565b61378c9190614982565b601f600082825461379d9190614a45565b92505081905550601554601654826137b59190614911565b6137bf9190614982565b601d60008282546137d09190614a45565b925050819055505b5b60008111156137ee576137ed8730836138d4565b5b80856137fa91906152bc565b94505b6138088787876138d4565b505050505b505050565b600083831115829061385a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138519190614195565b60405180910390fd5b506000838561386991906152bc565b9050809150509392505050565b60008082846138859190614a45565b9050838110156138ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c19061533c565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393a90614f56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a990614fe8565b60405180910390fd5b6139bd838383613de7565b613a28816040518060600160405280602681526020016155ec602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138129092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613abb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461387690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b5a91906143cb565b60405180910390a3505050565b6000613b72306115ef565b90506000601f54601d54601e54613b899190614a45565b613b939190614a45565b9050600080831480613ba55750600082145b15613bb257505050613de5565b6014600954613bc19190614911565b831115613bda576014600954613bd79190614911565b92505b6000600283601e5486613bed9190614911565b613bf79190614982565b613c019190614982565b905060008185613c1191906152bc565b90506000479050613c2182613dec565b60008147613c2f91906152bc565b9050600086601d5483613c429190614911565b613c4c9190614982565b9050600087601f5484613c5f9190614911565b613c699190614982565b90506000818385613c7a91906152bc565b613c8491906152bc565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ce49061538d565b60006040518083038185875af1925050503d8060008114613d21576040519150601f19603f3d011682016040523d82523d6000602084013e613d26565b606091505b505080985050600087118015613d3c5750600081115b15613d4c57613d4b8782614029565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d929061538d565b60006040518083038185875af1925050503d8060008114613dcf576040519150601f19603f3d011682016040523d82523d6000602084013e613dd4565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e0957613e086145f8565b5b604051908082528060200260200182016040528015613e375781602001602082028036833780820191505090505b5090503081600081518110613e4f57613e4e614c09565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1891906153b7565b81600181518110613f2c57613f2b614c09565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f91307f0000000000000000000000000000000000000000000000000000000000000000846128cd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ff39594939291906154dd565b600060405180830381600087803b15801561400d57600080fd5b505af1158015614021573d6000803e3d6000fd5b505050505050565b614054307f0000000000000000000000000000000000000000000000000000000000000000846128cd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016140bb96959493929190615537565b60606040518083038185885af11580156140d9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140fe9190615598565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561413f578082015181840152602081019050614124565b60008484015250505050565b6000601f19601f8301169050919050565b600061416782614105565b6141718185614110565b9350614181818560208601614121565b61418a8161414b565b840191505092915050565b600060208201905081810360008301526141af818461415c565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141f6826141cb565b9050919050565b614206816141eb565b811461421157600080fd5b50565b600081359050614223816141fd565b92915050565b6000819050919050565b61423c81614229565b811461424757600080fd5b50565b60008135905061425981614233565b92915050565b60008060408385031215614276576142756141c1565b5b600061428485828601614214565b92505060206142958582860161424a565b9150509250929050565b60008115159050919050565b6142b48161429f565b82525050565b60006020820190506142cf60008301846142ab565b92915050565b6000602082840312156142eb576142ea6141c1565b5b60006142f984828501614214565b91505092915050565b60008060408385031215614319576143186141c1565b5b60006143278582860161424a565b92505060206143388582860161424a565b9150509250929050565b6000819050919050565b600061436761436261435d846141cb565b614342565b6141cb565b9050919050565b60006143798261434c565b9050919050565b600061438b8261436e565b9050919050565b61439b81614380565b82525050565b60006020820190506143b66000830184614392565b92915050565b6143c581614229565b82525050565b60006020820190506143e060008301846143bc565b92915050565b6000806000606084860312156143ff576143fe6141c1565b5b600061440d86828701614214565b935050602061441e86828701614214565b925050604061442f8682870161424a565b9150509250925092565b614442816141eb565b82525050565b600060208201905061445d6000830184614439565b92915050565b600060ff82169050919050565b61447981614463565b82525050565b60006020820190506144946000830184614470565b92915050565b6144a38161429f565b81146144ae57600080fd5b50565b6000813590506144c08161449a565b92915050565b600080604083850312156144dd576144dc6141c1565b5b60006144eb85828601614214565b92505060206144fc858286016144b1565b9150509250929050565b60008060006060848603121561451f5761451e6141c1565b5b600061452d8682870161424a565b935050602061453e8682870161424a565b925050604061454f8682870161424a565b9150509250925092565b60006020828403121561456f5761456e6141c1565b5b600061457d848285016144b1565b91505092915050565b60006020828403121561459c5761459b6141c1565b5b60006145aa8482850161424a565b91505092915050565b600080604083850312156145ca576145c96141c1565b5b60006145d885828601614214565b92505060206145e985828601614214565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146308261414b565b810181811067ffffffffffffffff8211171561464f5761464e6145f8565b5b80604052505050565b60006146626141b7565b905061466e8282614627565b919050565b600067ffffffffffffffff82111561468e5761468d6145f8565b5b602082029050602081019050919050565b600080fd5b60006146b76146b284614673565b614658565b905080838252602082019050602084028301858111156146da576146d961469f565b5b835b8181101561470357806146ef8882614214565b8452602084019350506020810190506146dc565b5050509392505050565b600082601f830112614722576147216145f3565b5b81356147328482602086016146a4565b91505092915050565b600060208284031215614751576147506141c1565b5b600082013567ffffffffffffffff81111561476f5761476e6141c6565b5b61477b8482850161470d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147cb57607f821691505b6020821081036147de576147dd614784565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061481a602083614110565b9150614825826147e4565b602082019050919050565b600060208201905081810360008301526148498161480d565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006148ac602d83614110565b91506148b782614850565b604082019050919050565b600060208201905081810360008301526148db8161489f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061491c82614229565b915061492783614229565b925082820261493581614229565b9150828204841483151761494c5761494b6148e2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061498d82614229565b915061499883614229565b9250826149a8576149a7614953565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602283614110565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b6000614a5082614229565b9150614a5b83614229565b9250828201905080821115614a7357614a726148e2565b5b92915050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b6000614aaf601783614110565b9150614aba82614a79565b602082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614b41603283614110565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bd3602683614110565b9150614bde82614b77565b604082019050919050565b60006020820190508181036000830152614c0281614bc6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614c4382614229565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7557614c746148e2565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614cb6602083614110565b9150614cc182614c80565b602082019050919050565b60006020820190508181036000830152614ce581614ca9565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614d48602a83614110565b9150614d5382614cec565b604082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b600081519050614d8d81614233565b92915050565b600060208284031215614da957614da86141c1565b5b6000614db784828501614d7e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e1c602483614110565b9150614e2782614dc0565b604082019050919050565b60006020820190508181036000830152614e4b81614e0f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614eae602283614110565b9150614eb982614e52565b604082019050919050565b60006020820190508181036000830152614edd81614ea1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f40602583614110565b9150614f4b82614ee4565b604082019050919050565b60006020820190508181036000830152614f6f81614f33565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fd2602383614110565b9150614fdd82614f76565b604082019050919050565b6000602082019050818103600083015261500181614fc5565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b600061503e600b83614110565b915061504982615008565b602082019050919050565b6000602082019050818103600083015261506d81615031565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150f6604983614110565b915061510182615074565b606082019050919050565b60006020820190508181036000830152615125816150e9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615188603583614110565b91506151938261512c565b604082019050919050565b600060208201905081810360008301526151b78161517b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151f4601383614110565b91506151ff826151be565b602082019050919050565b60006020820190508181036000830152615223816151e7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615286603683614110565b91506152918261522a565b604082019050919050565b600060208201905081810360008301526152b581615279565b9050919050565b60006152c782614229565b91506152d283614229565b92508282039050818111156152ea576152e96148e2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615326601b83614110565b9150615331826152f0565b602082019050919050565b6000602082019050818103600083015261535581615319565b9050919050565b600081905092915050565b50565b600061537760008361535c565b915061538282615367565b600082019050919050565b60006153988261536a565b9150819050919050565b6000815190506153b1816141fd565b92915050565b6000602082840312156153cd576153cc6141c1565b5b60006153db848285016153a2565b91505092915050565b6000819050919050565b60006154096154046153ff846153e4565b614342565b614229565b9050919050565b615419816153ee565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615454816141eb565b82525050565b6000615466838361544b565b60208301905092915050565b6000602082019050919050565b600061548a8261541f565b615494818561542a565b935061549f8361543b565b8060005b838110156154d05781516154b7888261545a565b97506154c283615472565b9250506001810190506154a3565b5085935050505092915050565b600060a0820190506154f260008301886143bc565b6154ff6020830187615410565b8181036040830152615511818661547f565b90506155206060830185614439565b61552d60808301846143bc565b9695505050505050565b600060c08201905061554c6000830189614439565b61555960208301886143bc565b6155666040830187615410565b6155736060830186615410565b6155806080830185614439565b61558d60a08301846143bc565b979650505050505050565b6000806000606084860312156155b1576155b06141c1565b5b60006155bf86828701614d7e565b93505060206155d086828701614d7e565b92505060406155e186828701614d7e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220473246c68d2addc2315f11acaaf8d418221703a26058b3f817af6ab84299aee864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c17b5b8c14610c09578063c876d0b914610c32578063c8c8ebe414610c5d578063c9413b2614610c88576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b3b578063b62496f514610b78578063bbc0c74214610bb5578063c024666814610be0576103b8565b80639fccce3214610a7d578063a0d82dc514610aa8578063a457c2d714610ad3578063a4c82a0014610b10576103b8565b8063924de9b7116101c1578063924de9b7146109d357806395d89b41146109fc5780639c3b4fdc14610a275780639ec22c0e14610a52576103b8565b80638da5cb5b146109525780638ea5220f1461097d57806392136913146109a8576103b8565b8063313ce567116102d75780636f9170f61161026a57806375f0a8741161023957806375f0a874146108aa5780637bce5a04146108d55780638095d56414610900578063811c664614610929576103b8565b80636f9170f6146107f057806370a082311461082d578063715018a61461086a5780637571336a14610881576103b8565b80634fbee193116102a65780634fbee19314610732578063503bfdd41461076f5780636a486a8e1461079a5780636ddd1713146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806327c8f8351161031e57806327c8f835146105ca5780632c3e486c146105f55780632e82f1a0146106205780632e8de6a01461064b576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f1461056257806323b872dd1461058d576103b8565b806311a582c31161038b57806311a582c3146104625780631694505e1461048b57806318160ddd146104b6578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614195565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a919061425f565b610f77565b60405161041c91906142ba565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906142d5565b610f95565b60405161045991906142ba565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190614302565b610fb5565b005b34801561049757600080fd5b506104a0611148565b6040516104ad91906143a1565b60405180910390f35b3480156104c257600080fd5b506104cb61116c565b6040516104d891906143cb565b60405180910390f35b3480156104ed57600080fd5b506104f6611176565b60405161050391906143cb565b60405180910390f35b34801561051857600080fd5b5061052161117c565b60405161052e91906143cb565b60405180910390f35b34801561054357600080fd5b5061054c611182565b60405161055991906143cb565b60405180910390f35b34801561056e57600080fd5b50610577611188565b60405161058491906143cb565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906143e6565b61118e565b6040516105c191906142ba565b60405180910390f35b3480156105d657600080fd5b506105df611267565b6040516105ec9190614448565b60405180910390f35b34801561060157600080fd5b5061060a61126d565b60405161061791906143cb565b60405180910390f35b34801561062c57600080fd5b50610635611273565b60405161064291906142ba565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906142d5565b611286565b005b34801561068057600080fd5b50610689611361565b604051610696919061447f565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c1919061425f565b61136a565b6040516106d391906142ba565b60405180910390f35b3480156106e857600080fd5b506106f161141d565b6040516106fe9190614448565b60405180910390f35b34801561071357600080fd5b5061071c611441565b60405161072991906142ba565b60405180910390f35b34801561073e57600080fd5b50610759600480360381019061075491906142d5565b611454565b60405161076691906142ba565b60405180910390f35b34801561077b57600080fd5b506107846114aa565b60405161079191906142ba565b60405180910390f35b3480156107a657600080fd5b506107af611580565b6040516107bc91906143cb565b60405180910390f35b3480156107d157600080fd5b506107da611586565b6040516107e791906142ba565b60405180910390f35b3480156107fc57600080fd5b50610817600480360381019061081291906142d5565b611599565b60405161082491906142ba565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906142d5565b6115ef565b60405161086191906143cb565b60405180910390f35b34801561087657600080fd5b5061087f611637565b005b34801561088d57600080fd5b506108a860048036038101906108a391906144c6565b61178f565b005b3480156108b657600080fd5b506108bf611881565b6040516108cc9190614448565b60405180910390f35b3480156108e157600080fd5b506108ea6118a7565b6040516108f791906143cb565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614506565b6118ad565b005b34801561093557600080fd5b50610950600480360381019061094b91906144c6565b611981565b005b34801561095e57600080fd5b50610967611ae2565b6040516109749190614448565b60405180910390f35b34801561098957600080fd5b50610992611b0c565b60405161099f9190614448565b60405180910390f35b3480156109b457600080fd5b506109bd611b32565b6040516109ca91906143cb565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f59190614559565b611b38565b005b348015610a0857600080fd5b50610a11611bec565b604051610a1e9190614195565b60405180910390f35b348015610a3357600080fd5b50610a3c611c7e565b604051610a4991906143cb565b60405180910390f35b348015610a5e57600080fd5b50610a67611c84565b604051610a7491906143cb565b60405180910390f35b348015610a8957600080fd5b50610a92611c8a565b604051610a9f91906143cb565b60405180910390f35b348015610ab457600080fd5b50610abd611c90565b604051610aca91906143cb565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af5919061425f565b611c96565b604051610b0791906142ba565b60405180910390f35b348015610b1c57600080fd5b50610b25611d63565b604051610b3291906143cb565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d919061425f565b611d69565b604051610b6f91906142ba565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906142d5565b611d87565b604051610bac91906142ba565b60405180910390f35b348015610bc157600080fd5b50610bca611da7565b604051610bd791906142ba565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c0291906144c6565b611dba565b005b348015610c1557600080fd5b50610c306004803603810190610c2b9190614506565b611eac565b005b348015610c3e57600080fd5b50610c47611f80565b604051610c5491906142ba565b60405180910390f35b348015610c6957600080fd5b50610c72611f93565b604051610c7f91906143cb565b60405180910390f35b348015610c9457600080fd5b50610caf6004803603810190610caa91906142d5565b611f99565b005b348015610cbd57600080fd5b50610cc6612074565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614586565b61214a565b604051610cfc91906142ba565b60405180910390f35b348015610d1157600080fd5b50610d1a612255565b604051610d2791906143cb565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d5291906145b3565b61225b565b604051610d6491906143cb565b60405180910390f35b348015610d7957600080fd5b50610d826122e2565b604051610d8f91906143cb565b60405180910390f35b348015610da457600080fd5b50610dad6122e8565b604051610dba91906143cb565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de591906142d5565b6122ee565b005b348015610df857600080fd5b50610e136004803603810190610e0e919061473b565b6124b4565b005b348015610e2157600080fd5b50610e2a6125e0565b604051610e3791906143cb565b60405180910390f35b348015610e4c57600080fd5b50610e556125e6565b604051610e6291906143cb565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d91906142d5565b6125ec565b604051610e9f91906142ba565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614586565b61260c565b604051610edc91906142ba565b60405180910390f35b606060038054610ef4906147b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f20906147b3565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b6000610f8b610f846128c5565b84846128cd565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b610fbd6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390614830565b60405180910390fd5b6001821015611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906148c2565b60405180910390fd5b670de0b6b3a76400006064836110a461116c565b6110ae9190614911565b6110b89190614982565b6110c29190614982565b600881905550600181101561110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614a25565b60405180910390fd5b670de0b6b3a764000060648261112061116c565b61112a9190614911565b6111349190614982565b61113e9190614982565b600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b600061119b848484612a96565b61125c846111a76128c5565b6112578560405180606001604052806028815260200161561260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d6128c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138129092919063ffffffff16565b6128cd565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b61128e6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490614830565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b60006114136113776128c5565b8461140e85600160006113886128c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461387690919063ffffffff16565b6128cd565b6001905092915050565b7f0000000000000000000000001c7c7e5e1e57042d4f13fff2a7daf41ff5c9cae381565b601160009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006114b46128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90614830565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163f6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117976128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90614830565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6118b56128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90614830565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461196c9190614a45565b6119769190614a45565b601581905550505050565b6119896128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90614ac5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611b406128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690614830565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611bfb906147b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611c27906147b3565b8015611c745780601f10611c4957610100808354040283529160200191611c74565b820191906000526020600020905b815481529060010190602001808311611c5757829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611d59611ca36128c5565b84611d548560405180606001604052806025815260200161563a6025913960016000611ccd6128c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138129092919063ffffffff16565b6128cd565b6001905092915050565b600e5481565b6000611d7d611d766128c5565b8484612a96565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611dc26128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614830565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611eb46128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614830565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f6b9190614a45565b611f759190614a45565b601981905550505050565b601460009054906101000a900460ff1681565b60085481565b611fa16128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790614830565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61207c6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290614830565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121546128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614830565b60405180910390fd5b6001821115612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614b57565b60405180910390fd5b60648261223261116c565b61223c9190614911565b6122469190614982565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b6122f66128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb90614be9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124bc6128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614830565b60405180910390fd5b60005b81518110156125dc576001602060008484815181106125705761256f614c09565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806125d490614c38565b91505061254e565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126166128c5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90614830565b60405180910390fd5b600f546010546126b59190614a45565b42116126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90614ccc565b60405180910390fd5b6103e882111561273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290614d5e565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000001c7c7e5e1e57042d4f13fff2a7daf41ff5c9cae36040518263ffffffff1660e01b815260040161279d9190614448565b602060405180830381865afa1580156127ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127de9190614d93565b9050600061271084836127f19190614911565b6127fb9190614982565b90506000811115612834576128337f0000000000000000000000001c7c7e5e1e57042d4f13fff2a7daf41ff5c9cae361dead836138d4565b5b60007f0000000000000000000000001c7c7e5e1e57042d4f13fff2a7daf41ff5c9cae390508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128a157600080fd5b505af11580156128b5573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361293c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293390614e32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a290614ec4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a8991906143cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90614f56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6b90614fe8565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c185750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4e90615054565b60405180910390fd5b60008103612c7057612c6b838360006138d4565b61380d565b601160009054906101000a900460ff161561335157612c8d611ae2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cfb5750612ccb611ae2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d345750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d875750600560149054906101000a900460ff16155b1561335057601160019054906101000a900460ff16612e9f57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e415750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e955750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e9e57600080fd5b5b601460009054906101000a900460ff161561306757612ebc611ae2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f4357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f9b57507f0000000000000000000000001c7c7e5e1e57042d4f13fff2a7daf41ff5c9cae373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130665743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130189061510c565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561310a5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131b157600854811115613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b9061519e565b60405180910390fd5b600a54613160836115ef565b8261316b9190614a45565b11156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a39061520a565b60405180910390fd5b61334f565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132545750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132a35760085481111561329e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132959061529c565b60405180910390fd5b61334e565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661334d57600a54613300836115ef565b8261330b9190614a45565b111561334c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133439061520a565b60405180910390fd5b5b5b5b5b5b600061335c306115ef565b9050600060095482101590508080156133815750601160029054906101000a900460ff165b801561339a5750600560149054906101000a900460ff16155b80156133f05750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134465750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561349c5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e0576001600560146101000a81548160ff0219169083151502179055506134c4613b67565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135965750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a057600090505b600081156137fd57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561360357506000601954115b156136c2576064601954866136189190614911565b6136229190614982565b9050601954601b54826136359190614911565b61363f9190614982565b601e60008282546136509190614a45565b92505081905550601954601c54826136689190614911565b6136729190614982565b601f60008282546136839190614a45565b92505081905550601954601a548261369b9190614911565b6136a59190614982565b601d60008282546136b69190614a45565b925050819055506137d9565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371d57506000601554115b156137d8576064601554866137329190614911565b61373c9190614982565b90506015546017548261374f9190614911565b6137599190614982565b601e600082825461376a9190614a45565b92505081905550601554601854826137829190614911565b61378c9190614982565b601f600082825461379d9190614a45565b92505081905550601554601654826137b59190614911565b6137bf9190614982565b601d60008282546137d09190614a45565b925050819055505b5b60008111156137ee576137ed8730836138d4565b5b80856137fa91906152bc565b94505b6138088787876138d4565b505050505b505050565b600083831115829061385a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138519190614195565b60405180910390fd5b506000838561386991906152bc565b9050809150509392505050565b60008082846138859190614a45565b9050838110156138ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c19061533c565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393a90614f56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a990614fe8565b60405180910390fd5b6139bd838383613de7565b613a28816040518060600160405280602681526020016155ec602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138129092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613abb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461387690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b5a91906143cb565b60405180910390a3505050565b6000613b72306115ef565b90506000601f54601d54601e54613b899190614a45565b613b939190614a45565b9050600080831480613ba55750600082145b15613bb257505050613de5565b6014600954613bc19190614911565b831115613bda576014600954613bd79190614911565b92505b6000600283601e5486613bed9190614911565b613bf79190614982565b613c019190614982565b905060008185613c1191906152bc565b90506000479050613c2182613dec565b60008147613c2f91906152bc565b9050600086601d5483613c429190614911565b613c4c9190614982565b9050600087601f5484613c5f9190614911565b613c699190614982565b90506000818385613c7a91906152bc565b613c8491906152bc565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ce49061538d565b60006040518083038185875af1925050503d8060008114613d21576040519150601f19603f3d011682016040523d82523d6000602084013e613d26565b606091505b505080985050600087118015613d3c5750600081115b15613d4c57613d4b8782614029565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d929061538d565b60006040518083038185875af1925050503d8060008114613dcf576040519150601f19603f3d011682016040523d82523d6000602084013e613dd4565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e0957613e086145f8565b5b604051908082528060200260200182016040528015613e375781602001602082028036833780820191505090505b5090503081600081518110613e4f57613e4e614c09565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1891906153b7565b81600181518110613f2c57613f2b614c09565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f91307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128cd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ff39594939291906154dd565b600060405180830381600087803b15801561400d57600080fd5b505af1158015614021573d6000803e3d6000fd5b505050505050565b614054307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128cd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016140bb96959493929190615537565b60606040518083038185885af11580156140d9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140fe9190615598565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561413f578082015181840152602081019050614124565b60008484015250505050565b6000601f19601f8301169050919050565b600061416782614105565b6141718185614110565b9350614181818560208601614121565b61418a8161414b565b840191505092915050565b600060208201905081810360008301526141af818461415c565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141f6826141cb565b9050919050565b614206816141eb565b811461421157600080fd5b50565b600081359050614223816141fd565b92915050565b6000819050919050565b61423c81614229565b811461424757600080fd5b50565b60008135905061425981614233565b92915050565b60008060408385031215614276576142756141c1565b5b600061428485828601614214565b92505060206142958582860161424a565b9150509250929050565b60008115159050919050565b6142b48161429f565b82525050565b60006020820190506142cf60008301846142ab565b92915050565b6000602082840312156142eb576142ea6141c1565b5b60006142f984828501614214565b91505092915050565b60008060408385031215614319576143186141c1565b5b60006143278582860161424a565b92505060206143388582860161424a565b9150509250929050565b6000819050919050565b600061436761436261435d846141cb565b614342565b6141cb565b9050919050565b60006143798261434c565b9050919050565b600061438b8261436e565b9050919050565b61439b81614380565b82525050565b60006020820190506143b66000830184614392565b92915050565b6143c581614229565b82525050565b60006020820190506143e060008301846143bc565b92915050565b6000806000606084860312156143ff576143fe6141c1565b5b600061440d86828701614214565b935050602061441e86828701614214565b925050604061442f8682870161424a565b9150509250925092565b614442816141eb565b82525050565b600060208201905061445d6000830184614439565b92915050565b600060ff82169050919050565b61447981614463565b82525050565b60006020820190506144946000830184614470565b92915050565b6144a38161429f565b81146144ae57600080fd5b50565b6000813590506144c08161449a565b92915050565b600080604083850312156144dd576144dc6141c1565b5b60006144eb85828601614214565b92505060206144fc858286016144b1565b9150509250929050565b60008060006060848603121561451f5761451e6141c1565b5b600061452d8682870161424a565b935050602061453e8682870161424a565b925050604061454f8682870161424a565b9150509250925092565b60006020828403121561456f5761456e6141c1565b5b600061457d848285016144b1565b91505092915050565b60006020828403121561459c5761459b6141c1565b5b60006145aa8482850161424a565b91505092915050565b600080604083850312156145ca576145c96141c1565b5b60006145d885828601614214565b92505060206145e985828601614214565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146308261414b565b810181811067ffffffffffffffff8211171561464f5761464e6145f8565b5b80604052505050565b60006146626141b7565b905061466e8282614627565b919050565b600067ffffffffffffffff82111561468e5761468d6145f8565b5b602082029050602081019050919050565b600080fd5b60006146b76146b284614673565b614658565b905080838252602082019050602084028301858111156146da576146d961469f565b5b835b8181101561470357806146ef8882614214565b8452602084019350506020810190506146dc565b5050509392505050565b600082601f830112614722576147216145f3565b5b81356147328482602086016146a4565b91505092915050565b600060208284031215614751576147506141c1565b5b600082013567ffffffffffffffff81111561476f5761476e6141c6565b5b61477b8482850161470d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147cb57607f821691505b6020821081036147de576147dd614784565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061481a602083614110565b9150614825826147e4565b602082019050919050565b600060208201905081810360008301526148498161480d565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006148ac602d83614110565b91506148b782614850565b604082019050919050565b600060208201905081810360008301526148db8161489f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061491c82614229565b915061492783614229565b925082820261493581614229565b9150828204841483151761494c5761494b6148e2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061498d82614229565b915061499883614229565b9250826149a8576149a7614953565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602283614110565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b6000614a5082614229565b9150614a5b83614229565b9250828201905080821115614a7357614a726148e2565b5b92915050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b6000614aaf601783614110565b9150614aba82614a79565b602082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614b41603283614110565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bd3602683614110565b9150614bde82614b77565b604082019050919050565b60006020820190508181036000830152614c0281614bc6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614c4382614229565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7557614c746148e2565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614cb6602083614110565b9150614cc182614c80565b602082019050919050565b60006020820190508181036000830152614ce581614ca9565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614d48602a83614110565b9150614d5382614cec565b604082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b600081519050614d8d81614233565b92915050565b600060208284031215614da957614da86141c1565b5b6000614db784828501614d7e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e1c602483614110565b9150614e2782614dc0565b604082019050919050565b60006020820190508181036000830152614e4b81614e0f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614eae602283614110565b9150614eb982614e52565b604082019050919050565b60006020820190508181036000830152614edd81614ea1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f40602583614110565b9150614f4b82614ee4565b604082019050919050565b60006020820190508181036000830152614f6f81614f33565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fd2602383614110565b9150614fdd82614f76565b604082019050919050565b6000602082019050818103600083015261500181614fc5565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b600061503e600b83614110565b915061504982615008565b602082019050919050565b6000602082019050818103600083015261506d81615031565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150f6604983614110565b915061510182615074565b606082019050919050565b60006020820190508181036000830152615125816150e9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615188603583614110565b91506151938261512c565b604082019050919050565b600060208201905081810360008301526151b78161517b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151f4601383614110565b91506151ff826151be565b602082019050919050565b60006020820190508181036000830152615223816151e7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615286603683614110565b91506152918261522a565b604082019050919050565b600060208201905081810360008301526152b581615279565b9050919050565b60006152c782614229565b91506152d283614229565b92508282039050818111156152ea576152e96148e2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615326601b83614110565b9150615331826152f0565b602082019050919050565b6000602082019050818103600083015261535581615319565b9050919050565b600081905092915050565b50565b600061537760008361535c565b915061538282615367565b600082019050919050565b60006153988261536a565b9150819050919050565b6000815190506153b1816141fd565b92915050565b6000602082840312156153cd576153cc6141c1565b5b60006153db848285016153a2565b91505092915050565b6000819050919050565b60006154096154046153ff846153e4565b614342565b614229565b9050919050565b615419816153ee565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615454816141eb565b82525050565b6000615466838361544b565b60208301905092915050565b6000602082019050919050565b600061548a8261541f565b615494818561542a565b935061549f8361543b565b8060005b838110156154d05781516154b7888261545a565b97506154c283615472565b9250506001810190506154a3565b5085935050505092915050565b600060a0820190506154f260008301886143bc565b6154ff6020830187615410565b8181036040830152615511818661547f565b90506155206060830185614439565b61552d60808301846143bc565b9695505050505050565b600060c08201905061554c6000830189614439565b61555960208301886143bc565b6155666040830187615410565b6155736060830186615410565b6155806080830185614439565b61558d60a08301846143bc565b979650505050505050565b6000806000606084860312156155b1576155b06141c1565b5b60006155bf86828701614d7e565b93505060206155d086828701614d7e565b92505060406155e186828701614d7e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220473246c68d2addc2315f11acaaf8d418221703a26058b3f817af6ab84299aee864736f6c63430008130033

Deployed Bytecode Sourcemap

22615:15281:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4935:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7102:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24321:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27853:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22663:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6055:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23241:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23051:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24077:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24037;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7753:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22766:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23147:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23107:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29480:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5897:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8517:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22721:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23339:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29750:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27342:162;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23888:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23419:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26966:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6226:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19400:148;;;;;;;;;;;;;:::i;:::-;;28221:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22858:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23777;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28578:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29883:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18758:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22895:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23923:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28465:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5154:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23851:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23295:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24117:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23999:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9238:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23199:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6566:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24543:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23379:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29202:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28888:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23695:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22932:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29632:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27133:153;;;;;;;;;;;;;:::i;:::-;;27578:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23743:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6804:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22974:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23814:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19703:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26766:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23961:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23014:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36913:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4935:100;4989:13;5022:5;5015:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4935:100;:::o;7102:169::-;7185:4;7202:39;7211:12;:10;:12::i;:::-;7225:7;7234:6;7202:8;:39::i;:::-;7259:4;7252:11;;7102:169;;;;:::o;24321:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27853:360::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27959:1:::1;27950:5;:10;;27942:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28074:4;28069:3;28061:5;28045:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:27;;;;:::i;:::-;28044:34;;;;:::i;:::-;28021:20;:57;;;;28107:1;28097:6;:11;;28089:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28201:4;28196:3;28187:6;28171:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;28170:35;;;;:::i;:::-;28158:9;:47;;;;27853:360:::0;;:::o;22663:51::-;;;:::o;6055:108::-;6116:7;6143:12;;6136:19;;6055:108;:::o;23241:47::-;;;;:::o;23051:36::-;;;;:::o;24077:33::-;;;;:::o;24037:::-;;;;:::o;7753:355::-;7893:4;7910:36;7920:6;7928:9;7939:6;7910:9;:36::i;:::-;7957:121;7966:6;7974:12;:10;:12::i;:::-;7988:89;8026:6;7988:89;;;;;;;;;;;;;;;;;:11;:19;8000:6;7988:19;;;;;;;;;;;;;;;:33;8008:12;:10;:12::i;:::-;7988:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7957:8;:121::i;:::-;8096:4;8089:11;;7753:355;;;;;:::o;22766:53::-;22812:6;22766:53;:::o;23147:45::-;;;;:::o;23107:33::-;;;;;;;;;;;;;:::o;29480:140::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:18:::1;29576:15;;:36;;;;;;;;;;;;;;;;;;29480:140:::0;:::o;5897:93::-;5955:5;5980:2;5973:9;;5897:93;:::o;8517:218::-;8605:4;8622:83;8631:12;:10;:12::i;:::-;8645:7;8654:50;8693:10;8654:11;:25;8666:12;:10;:12::i;:::-;8654:25;;;;;;;;;;;;;;;:34;8680:7;8654:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8622:8;:83::i;:::-;8723:4;8716:11;;8517:218;;;;:::o;22721:38::-;;;:::o;23339:33::-;;;;;;;;;;;;;:::o;29750:125::-;29815:4;29839:19;:28;29859:7;29839:28;;;;;;;;;;;;;;;;;;;;;;;;;29832:35;;29750:125;;;:::o;27342:162::-;27397:4;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27430:5:::1;27413:14;;:22;;;;;;;;;;;;;;;;;;27469:5;27446:20;;:28;;;;;;;;;;;;;;;;;;27492:4;27485:11;;27342:162:::0;:::o;23888:28::-;;;;:::o;23419:31::-;;;;;;;;;;;;;:::o;26966:111::-;27027:4;27051:9;:18;27061:7;27051:18;;;;;;;;;;;;;;;;;;;;;;;;;27044:25;;26966:111;;;:::o;6226:127::-;6300:7;6327:9;:18;6337:7;6327:18;;;;;;;;;;;;;;;;6320:25;;6226:127;;;:::o;19400:148::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19507:1:::1;19470:40;;19491:6;;;;;;;;;;;19470:40;;;;;;;;;;;;19538:1;19521:6;;:19;;;;;;;;;;;;;;;;;;19400:148::o:0;28221:144::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28353:4:::1;28311:31;:39;28343:6;28311:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28221:144:::0;;:::o;22858:30::-;;;;;;;;;;;;;:::o;23777:::-;;;;:::o;28578:298::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28712:13:::1;28694:15;:31;;;;28754:13;28736:15;:31;;;;28790:7;28778:9;:19;;;;28859:9;;28841:15;;28823;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;28808:12;:60;;;;28578:298:::0;;;:::o;29883:196::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29999:1:::1;29979:22;;:8;:22;;::::0;29971:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30065:6;30039:13;:23;30053:8;30039:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;29883:196:::0;;:::o;18758:79::-;18796:7;18823:6;;;;;;;;;;;18816:13;;18758:79;:::o;22895:24::-;;;;;;;;;;;;;:::o;23923:31::-;;;;:::o;28465:101::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28551:7:::1;28537:11;;:21;;;;;;;;;;;;;;;;;;28465:101:::0;:::o;5154:104::-;5210:13;5243:7;5236:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5154:104;:::o;23851:24::-;;;;:::o;23295:35::-;;;;:::o;24117:27::-;;;;:::o;23999:25::-;;;;:::o;9238:269::-;9331:4;9348:129;9357:12;:10;:12::i;:::-;9371:7;9380:96;9419:15;9380:96;;;;;;;;;;;;;;;;;:11;:25;9392:12;:10;:12::i;:::-;9380:25;;;;;;;;;;;;;;;:34;9406:7;9380:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9348:8;:129::i;:::-;9495:4;9488:11;;9238:269;;;;:::o;23199:29::-;;;;:::o;6566:175::-;6652:4;6669:42;6679:12;:10;:12::i;:::-;6693:9;6704:6;6669:9;:42::i;:::-;6729:4;6722:11;;6566:175;;;;:::o;24543:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;23379:33::-;;;;;;;;;;;;;:::o;29202:132::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29318:8:::1;29287:19;:28;29307:7;29287:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29202:132:::0;;:::o;28888:306::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29024:13:::1;29005:16;:32;;;;29067:13;29048:16;:32;;;;29104:7;29091:10;:20;;;;29176:10;;29157:16;;29138;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;29122:13;:64;;;;28888:306:::0;;;:::o;23695:39::-;;;;;;;;;;;;;:::o;22932:35::-;;;;:::o;29632:110::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29725:9:::1;29713;;:21;;;;;;;;;;;;;;;;;;29632:110:::0;:::o;27133:153::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27202:4:::1;27186:13;;:20;;;;;;;;;;;;;;;;;;27231:4;27217:11;;:18;;;;;;;;;;;;;;;;;;27263:15;27246:14;:32;;;;27133:153::o:0;27578:263::-;27659:4;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27695:1:::1;27682:9;:14;;27674:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;27810:3;27798:9;27782:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;27761:18;:52;;;;27830:4;27823:11;;27578:263:::0;;;:::o;23743:27::-;;;;:::o;6804:151::-;6893:7;6920:11;:18;6932:5;6920:18;;;;;;;;;;;;;;;:27;6939:7;6920:27;;;;;;;;;;;;;;;;6913:34;;6804:151;;;;:::o;22974:33::-;;;;:::o;23814:30::-;;;;:::o;19703:244::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19812:1:::1;19792:22;;:8;:22;;::::0;19784:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19902:8;19873:38;;19894:6;;;;;;;;;;;19873:38;;;;;;;;;;;;19931:8;19922:6;;:17;;;;;;;;;;;;;;;;;;19703:244:::0;:::o;26766:192::-;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26850:9:::1;26845:106;26869:10;:17;26865:1;:21;26845:106;;;26935:4;26908:9;:24;26918:10;26929:1;26918:13;;;;;;;;:::i;:::-;;;;;;;;26908:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26888:3;;;;;:::i;:::-;;;;26845:106;;;;26766:192:::0;:::o;23961:31::-;;;;:::o;23014:24::-;;;;:::o;23642:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;36913:980::-;36997:4;18980:12;:10;:12::i;:::-;18970:22;;:6;;;;;;;;;;;:22;;;18962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37062:19:::1;;37039:20;;:42;;;;:::i;:::-;37021:15;:60;37013:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;37149:4;37138:7;:15;;37130:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37234:15;37211:20;:38;;;;37312:28;37343:4;:14;;;37358:13;37343:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37312:60;;37430:20;37484:5;37476:7;37453:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;37430:59;;37617:1;37602:12;:16;37598:109;;;37634:61;37650:13;37673:6;37682:12;37634:15;:61::i;:::-;37598:109;37790:19;37827:13;37790:51;;37852:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37881:4;37874:11;;;;;36913:980:::0;;;:::o;336:98::-;389:7;416:10;409:17;;336:98;:::o;12424:380::-;12577:1;12560:19;;:5;:19;;;12552:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12658:1;12639:21;;:7;:21;;;12631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12742:6;12712:11;:18;12724:5;12712:18;;;;;;;;;;;;;;;:27;12731:7;12712:27;;;;;;;;;;;;;;;:36;;;;12780:7;12764:32;;12773:5;12764:32;;;12789:6;12764:32;;;;;;:::i;:::-;;;;;;;;12424:380;;;:::o;30087:4143::-;30235:1;30219:18;;:4;:18;;;30211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30312:1;30298:16;;:2;:16;;;30290:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30374:13;:19;30388:4;30374:19;;;;;;;;;;;;;;;;;;;;;;;;;30373:20;:42;;;;;30398:13;:17;30412:2;30398:17;;;;;;;;;;;;;;;;;;;;;;;;;30397:18;30373:42;30365:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30455:1;30445:6;:11;30442:92;;30473:28;30489:4;30495:2;30499:1;30473:15;:28::i;:::-;30516:7;;30442:92;30557:14;;;;;;;;;;;30554:1820;;;30617:7;:5;:7::i;:::-;30609:15;;:4;:15;;;;:49;;;;;30651:7;:5;:7::i;:::-;30645:13;;:2;:13;;;;30609:49;:86;;;;;30693:1;30679:16;;:2;:16;;;;30609:86;:128;;;;;30730:6;30716:21;;:2;:21;;;;30609:128;:158;;;;;30759:8;;;;;;;;;;;30758:9;30609:158;30587:1776;;;30805:13;;;;;;;;;;;30801:127;;30850:9;:15;30860:4;30850:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;30869:9;:13;30879:2;30869:13;;;;;;;;;;;;;;;;;;;;;;;;;30850:32;:57;;;;30886:9;:21;30896:10;30886:21;;;;;;;;;;;;;;;;;;;;;;;;;30850:57;30842:66;;;;;;30801:127;31086:20;;;;;;;;;;;31082:423;;;31140:7;:5;:7::i;:::-;31134:13;;:2;:13;;;;:47;;;;;31165:15;31151:30;;:2;:30;;;;31134:47;:79;;;;;31199:13;31185:28;;:2;:28;;;;31134:79;31130:356;;;31291:12;31249:28;:39;31278:9;31249:39;;;;;;;;;;;;;;;;:54;31241:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31450:12;31408:28;:39;31437:9;31408:39;;;;;;;;;;;;;;;:54;;;;31130:356;31082:423;31574:25;:31;31600:4;31574:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;31610:31;:35;31642:2;31610:35;;;;;;;;;;;;;;;;;;;;;;;;;31609:36;31574:71;31570:778;;;31692:20;;31682:6;:30;;31674:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;31831:9;;31814:13;31824:2;31814:9;:13::i;:::-;31805:6;:22;;;;:::i;:::-;:35;;31797:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31570:778;;;31958:25;:29;31984:2;31958:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;31992:31;:37;32024:4;31992:37;;;;;;;;;;;;;;;;;;;;;;;;;31991:38;31958:71;31954:394;;;32076:20;;32066:6;:30;;32058:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;31954:394;;;32202:31;:35;32234:2;32202:35;;;;;;;;;;;;;;;;;;;;;;;;;32198:150;;32295:9;;32278:13;32288:2;32278:9;:13::i;:::-;32269:6;:22;;;;:::i;:::-;:35;;32261:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32198:150;31954:394;31570:778;30587:1776;30554:1820;32388:28;32419:24;32437:4;32419:9;:24::i;:::-;32388:55;;32464:12;32503:18;;32479:20;:42;;32464:57;;32552:7;:35;;;;;32576:11;;;;;;;;;;;32552:35;:61;;;;;32605:8;;;;;;;;;;;32604:9;32552:61;:110;;;;;32631:25;:31;32657:4;32631:31;;;;;;;;;;;;;;;;;;;;;;;;;32630:32;32552:110;:153;;;;;32680:19;:25;32700:4;32680:25;;;;;;;;;;;;;;;;;;;;;;;;;32679:26;32552:153;:194;;;;;32723:19;:23;32743:2;32723:23;;;;;;;;;;;;;;;;;;;;;;;;;32722:24;32552:194;32534:338;;;32784:4;32773:8;;:15;;;;;;;;;;;;;;;;;;32817:10;:8;:10::i;:::-;32855:5;32844:8;;:16;;;;;;;;;;;;;;;;;;32534:338;32884:12;32900:8;;;;;;;;;;;32899:9;32884:24;;33009:19;:25;33029:4;33009:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33038:19;:23;33058:2;33038:23;;;;;;;;;;;;;;;;;;;;;;;;;33009:52;33006:99;;;33088:5;33078:15;;33006:99;33125:12;33229:7;33226:951;;;33280:25;:29;33306:2;33280:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;33329:1;33313:13;;:17;33280:50;33276:732;;;33380:3;33366:13;;33357:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;33350:33;;33450:13;;33431:16;;33424:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33402:18;;:61;;;;;;;:::i;:::-;;;;;;;;33518:13;;33505:10;;33498:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;33482:12;;:49;;;;;;;:::i;:::-;;;;;;;;33598:13;;33579:16;;33572:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33550:18;;:61;;;;;;;:::i;:::-;;;;;;;;33276:732;;;33672:25;:31;33698:4;33672:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;33722:1;33707:12;;:16;33672:51;33669:339;;;33770:3;33757:12;;33748:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;33741:32;;33836:12;;33818:15;;33811:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;33789:18;;:59;;;;;;;:::i;:::-;;;;;;;;33902:12;;33890:9;;33883:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;33867:12;;:47;;;;;;;:::i;:::-;;;;;;;;33980:12;;33962:15;;33955:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;33933:18;;:59;;;;;;;:::i;:::-;;;;;;;;33669:339;33276:732;34046:1;34039:4;:8;34036:93;;;34071:42;34087:4;34101;34108;34071:15;:42::i;:::-;34036:93;34161:4;34151:14;;;;;:::i;:::-;;;33226:951;34189:33;34205:4;34211:2;34215:6;34189:15;:33::i;:::-;30200:4030;;;;30087:4143;;;;:::o;14705:192::-;14791:7;14824:1;14819;:6;;14827:12;14811:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14851:9;14867:1;14863;:5;;;;:::i;:::-;14851:17;;14888:1;14881:8;;;14705:192;;;;;:::o;13802:181::-;13860:7;13880:9;13896:1;13892;:5;;;;:::i;:::-;13880:17;;13921:1;13916;:6;;13908:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13974:1;13967:8;;;13802:181;;;;:::o;9997:573::-;10155:1;10137:20;;:6;:20;;;10129:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10239:1;10218:23;;:9;:23;;;10210:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10294:47;10315:6;10323:9;10334:6;10294:20;:47::i;:::-;10374:71;10396:6;10374:71;;;;;;;;;;;;;;;;;:9;:17;10384:6;10374:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10354:9;:17;10364:6;10354:17;;;;;;;;;;;;;;;:91;;;;10479:32;10504:6;10479:9;:20;10489:9;10479:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10456:9;:20;10466:9;10456:20;;;;;;;;;;;;;;;:55;;;;10544:9;10527:35;;10536:6;10527:35;;;10555:6;10527:35;;;;;;:::i;:::-;;;;;;;;9997:573;;;:::o;35382:1523::-;35421:23;35447:24;35465:4;35447:9;:24::i;:::-;35421:50;;35482:25;35552:12;;35531:18;;35510;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;35482:82;;35575:12;35630:1;35611:15;:20;:46;;;;35656:1;35635:17;:22;35611:46;35608:60;;;35660:7;;;;;35608:60;35722:2;35701:18;;:23;;;;:::i;:::-;35683:15;:41;35680:111;;;35777:2;35756:18;;:23;;;;:::i;:::-;35738:41;;35680:111;35860:23;35945:1;35925:17;35904:18;;35886:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;35860:86;;35957:26;36004:15;35986;:33;;;;:::i;:::-;35957:62;;36040:25;36068:21;36040:49;;36102:36;36119:18;36102:16;:36::i;:::-;36160:18;36205:17;36181:21;:41;;;;:::i;:::-;36160:62;;36243:23;36301:17;36282:18;;36269:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;36243:75;;36329:17;36375;36362:12;;36349:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;36329:63;;36413:23;36470:9;36452:15;36439:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;36413:66;;36521:1;36500:18;:22;;;;36554:1;36533:18;:22;;;;36581:1;36566:12;:16;;;;36624:9;;;;;;;;;;;36616:23;;36647:9;36616:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36603:58;;;;;36703:1;36685:15;:19;:42;;;;;36726:1;36708:15;:19;36685:42;36682:119;;;36743:46;36756:15;36773;36743:12;:46::i;:::-;36682:119;36842:15;;;;;;;;;;;36834:29;;36871:21;36834:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36821:76;;;;;35410:1495;;;;;;;;;;35382:1523;:::o;13407:125::-;;;;:::o;34238:601::-;34366:21;34404:1;34390:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34366:40;;34435:4;34417;34422:1;34417:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34461:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34451:4;34456:1;34451:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34496:62;34513:4;34528:15;34546:11;34496:8;:62::i;:::-;34597:15;:66;;;34678:11;34704:1;34748:4;34775;34795:15;34597:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34293:546;34238:601;:::o;34857:517::-;35005:62;35022:4;35037:15;35055:11;35005:8;:62::i;:::-;35110:15;:31;;;35149:9;35182:4;35202:11;35228:1;35271;22812:6;35340:15;35110:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34857:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:619::-;7810:6;7818;7826;7875:2;7863:9;7854:7;7850:23;7846:32;7843:119;;;7881:79;;:::i;:::-;7843:119;8001:1;8026:53;8071:7;8062:6;8051:9;8047:22;8026:53;:::i;:::-;8016:63;;7972:117;8128:2;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8099:118;8256:2;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8227:118;7733:619;;;;;:::o;8358:323::-;8414:6;8463:2;8451:9;8442:7;8438:23;8434:32;8431:119;;;8469:79;;:::i;:::-;8431:119;8589:1;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8560:114;8358:323;;;;:::o;8687:329::-;8746:6;8795:2;8783:9;8774:7;8770:23;8766:32;8763:119;;;8801:79;;:::i;:::-;8763:119;8921:1;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8892:117;8687:329;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:117::-;9611:1;9608;9601:12;9625:180;9673:77;9670:1;9663:88;9770:4;9767:1;9760:15;9794:4;9791:1;9784:15;9811:281;9894:27;9916:4;9894:27;:::i;:::-;9886:6;9882:40;10024:6;10012:10;10009:22;9988:18;9976:10;9973:34;9970:62;9967:88;;;10035:18;;:::i;:::-;9967:88;10075:10;10071:2;10064:22;9854:238;9811:281;;:::o;10098:129::-;10132:6;10159:20;;:::i;:::-;10149:30;;10188:33;10216:4;10208:6;10188:33;:::i;:::-;10098:129;;;:::o;10233:311::-;10310:4;10400:18;10392:6;10389:30;10386:56;;;10422:18;;:::i;:::-;10386:56;10472:4;10464:6;10460:17;10452:25;;10532:4;10526;10522:15;10514:23;;10233:311;;;:::o;10550:117::-;10659:1;10656;10649:12;10690:710;10786:5;10811:81;10827:64;10884:6;10827:64;:::i;:::-;10811:81;:::i;:::-;10802:90;;10912:5;10941:6;10934:5;10927:21;10975:4;10968:5;10964:16;10957:23;;11028:4;11020:6;11016:17;11008:6;11004:30;11057:3;11049:6;11046:15;11043:122;;;11076:79;;:::i;:::-;11043:122;11191:6;11174:220;11208:6;11203:3;11200:15;11174:220;;;11283:3;11312:37;11345:3;11333:10;11312:37;:::i;:::-;11307:3;11300:50;11379:4;11374:3;11370:14;11363:21;;11250:144;11234:4;11229:3;11225:14;11218:21;;11174:220;;;11178:21;10792:608;;10690:710;;;;;:::o;11423:370::-;11494:5;11543:3;11536:4;11528:6;11524:17;11520:27;11510:122;;11551:79;;:::i;:::-;11510:122;11668:6;11655:20;11693:94;11783:3;11775:6;11768:4;11760:6;11756:17;11693:94;:::i;:::-;11684:103;;11500:293;11423:370;;;;:::o;11799:539::-;11883:6;11932:2;11920:9;11911:7;11907:23;11903:32;11900:119;;;11938:79;;:::i;:::-;11900:119;12086:1;12075:9;12071:17;12058:31;12116:18;12108:6;12105:30;12102:117;;;12138:79;;:::i;:::-;12102:117;12243:78;12313:7;12304:6;12293:9;12289:22;12243:78;:::i;:::-;12233:88;;12029:302;11799:539;;;;:::o;12344:180::-;12392:77;12389:1;12382:88;12489:4;12486:1;12479:15;12513:4;12510:1;12503:15;12530:320;12574:6;12611:1;12605:4;12601:12;12591:22;;12658:1;12652:4;12648:12;12679:18;12669:81;;12735:4;12727:6;12723:17;12713:27;;12669:81;12797:2;12789:6;12786:14;12766:18;12763:38;12760:84;;12816:18;;:::i;:::-;12760:84;12581:269;12530:320;;;:::o;12856:182::-;12996:34;12992:1;12984:6;12980:14;12973:58;12856:182;:::o;13044:366::-;13186:3;13207:67;13271:2;13266:3;13207:67;:::i;:::-;13200:74;;13283:93;13372:3;13283:93;:::i;:::-;13401:2;13396:3;13392:12;13385:19;;13044:366;;;:::o;13416:419::-;13582:4;13620:2;13609:9;13605:18;13597:26;;13669:9;13663:4;13659:20;13655:1;13644:9;13640:17;13633:47;13697:131;13823:4;13697:131;:::i;:::-;13689:139;;13416:419;;;:::o;13841:232::-;13981:34;13977:1;13969:6;13965:14;13958:58;14050:15;14045:2;14037:6;14033:15;14026:40;13841:232;:::o;14079:366::-;14221:3;14242:67;14306:2;14301:3;14242:67;:::i;:::-;14235:74;;14318:93;14407:3;14318:93;:::i;:::-;14436:2;14431:3;14427:12;14420:19;;14079:366;;;:::o;14451:419::-;14617:4;14655:2;14644:9;14640:18;14632:26;;14704:9;14698:4;14694:20;14690:1;14679:9;14675:17;14668:47;14732:131;14858:4;14732:131;:::i;:::-;14724:139;;14451:419;;;:::o;14876:180::-;14924:77;14921:1;14914:88;15021:4;15018:1;15011:15;15045:4;15042:1;15035:15;15062:410;15102:7;15125:20;15143:1;15125:20;:::i;:::-;15120:25;;15159:20;15177:1;15159:20;:::i;:::-;15154:25;;15214:1;15211;15207:9;15236:30;15254:11;15236:30;:::i;:::-;15225:41;;15415:1;15406:7;15402:15;15399:1;15396:22;15376:1;15369:9;15349:83;15326:139;;15445:18;;:::i;:::-;15326:139;15110:362;15062:410;;;;:::o;15478:180::-;15526:77;15523:1;15516:88;15623:4;15620:1;15613:15;15647:4;15644:1;15637:15;15664:185;15704:1;15721:20;15739:1;15721:20;:::i;:::-;15716:25;;15755:20;15773:1;15755:20;:::i;:::-;15750:25;;15794:1;15784:35;;15799:18;;:::i;:::-;15784:35;15841:1;15838;15834:9;15829:14;;15664:185;;;;:::o;15855:221::-;15995:34;15991:1;15983:6;15979:14;15972:58;16064:4;16059:2;16051:6;16047:15;16040:29;15855:221;:::o;16082:366::-;16224:3;16245:67;16309:2;16304:3;16245:67;:::i;:::-;16238:74;;16321:93;16410:3;16321:93;:::i;:::-;16439:2;16434:3;16430:12;16423:19;;16082:366;;;:::o;16454:419::-;16620:4;16658:2;16647:9;16643:18;16635:26;;16707:9;16701:4;16697:20;16693:1;16682:9;16678:17;16671:47;16735:131;16861:4;16735:131;:::i;:::-;16727:139;;16454:419;;;:::o;16879:191::-;16919:3;16938:20;16956:1;16938:20;:::i;:::-;16933:25;;16972:20;16990:1;16972:20;:::i;:::-;16967:25;;17015:1;17012;17008:9;17001:16;;17036:3;17033:1;17030:10;17027:36;;;17043:18;;:::i;:::-;17027:36;16879:191;;;;:::o;17076:173::-;17216:25;17212:1;17204:6;17200:14;17193:49;17076:173;:::o;17255:366::-;17397:3;17418:67;17482:2;17477:3;17418:67;:::i;:::-;17411:74;;17494:93;17583:3;17494:93;:::i;:::-;17612:2;17607:3;17603:12;17596:19;;17255:366;;;:::o;17627:419::-;17793:4;17831:2;17820:9;17816:18;17808:26;;17880:9;17874:4;17870:20;17866:1;17855:9;17851:17;17844:47;17908:131;18034:4;17908:131;:::i;:::-;17900:139;;17627:419;;;:::o;18052:237::-;18192:34;18188:1;18180:6;18176:14;18169:58;18261:20;18256:2;18248:6;18244:15;18237:45;18052:237;:::o;18295:366::-;18437:3;18458:67;18522:2;18517:3;18458:67;:::i;:::-;18451:74;;18534:93;18623:3;18534:93;:::i;:::-;18652:2;18647:3;18643:12;18636:19;;18295:366;;;:::o;18667:419::-;18833:4;18871:2;18860:9;18856:18;18848:26;;18920:9;18914:4;18910:20;18906:1;18895:9;18891:17;18884:47;18948:131;19074:4;18948:131;:::i;:::-;18940:139;;18667:419;;;:::o;19092:225::-;19232:34;19228:1;19220:6;19216:14;19209:58;19301:8;19296:2;19288:6;19284:15;19277:33;19092:225;:::o;19323:366::-;19465:3;19486:67;19550:2;19545:3;19486:67;:::i;:::-;19479:74;;19562:93;19651:3;19562:93;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19323:366;;;:::o;19695:419::-;19861:4;19899:2;19888:9;19884:18;19876:26;;19948:9;19942:4;19938:20;19934:1;19923:9;19919:17;19912:47;19976:131;20102:4;19976:131;:::i;:::-;19968:139;;19695:419;;;:::o;20120:180::-;20168:77;20165:1;20158:88;20265:4;20262:1;20255:15;20289:4;20286:1;20279:15;20306:233;20345:3;20368:24;20386:5;20368:24;:::i;:::-;20359:33;;20414:66;20407:5;20404:77;20401:103;;20484:18;;:::i;:::-;20401:103;20531:1;20524:5;20520:13;20513:20;;20306:233;;;:::o;20545:182::-;20685:34;20681:1;20673:6;20669:14;20662:58;20545:182;:::o;20733:366::-;20875:3;20896:67;20960:2;20955:3;20896:67;:::i;:::-;20889:74;;20972:93;21061:3;20972:93;:::i;:::-;21090:2;21085:3;21081:12;21074:19;;20733:366;;;:::o;21105:419::-;21271:4;21309:2;21298:9;21294:18;21286:26;;21358:9;21352:4;21348:20;21344:1;21333:9;21329:17;21322:47;21386:131;21512:4;21386:131;:::i;:::-;21378:139;;21105:419;;;:::o;21530:229::-;21670:34;21666:1;21658:6;21654:14;21647:58;21739:12;21734:2;21726:6;21722:15;21715:37;21530:229;:::o;21765:366::-;21907:3;21928:67;21992:2;21987:3;21928:67;:::i;:::-;21921:74;;22004:93;22093:3;22004:93;:::i;:::-;22122:2;22117:3;22113:12;22106:19;;21765:366;;;:::o;22137:419::-;22303:4;22341:2;22330:9;22326:18;22318:26;;22390:9;22384:4;22380:20;22376:1;22365:9;22361:17;22354:47;22418:131;22544:4;22418:131;:::i;:::-;22410:139;;22137:419;;;:::o;22562:143::-;22619:5;22650:6;22644:13;22635:22;;22666:33;22693:5;22666:33;:::i;:::-;22562:143;;;;:::o;22711:351::-;22781:6;22830:2;22818:9;22809:7;22805:23;22801:32;22798:119;;;22836:79;;:::i;:::-;22798:119;22956:1;22981:64;23037:7;23028:6;23017:9;23013:22;22981:64;:::i;:::-;22971:74;;22927:128;22711:351;;;;:::o;23068:223::-;23208:34;23204:1;23196:6;23192:14;23185:58;23277:6;23272:2;23264:6;23260:15;23253:31;23068:223;:::o;23297:366::-;23439:3;23460:67;23524:2;23519:3;23460:67;:::i;:::-;23453:74;;23536:93;23625:3;23536:93;:::i;:::-;23654:2;23649:3;23645:12;23638:19;;23297:366;;;:::o;23669:419::-;23835:4;23873:2;23862:9;23858:18;23850:26;;23922:9;23916:4;23912:20;23908:1;23897:9;23893:17;23886:47;23950:131;24076:4;23950:131;:::i;:::-;23942:139;;23669:419;;;:::o;24094:221::-;24234:34;24230:1;24222:6;24218:14;24211:58;24303:4;24298:2;24290:6;24286:15;24279:29;24094:221;:::o;24321:366::-;24463:3;24484:67;24548:2;24543:3;24484:67;:::i;:::-;24477:74;;24560:93;24649:3;24560:93;:::i;:::-;24678:2;24673:3;24669:12;24662:19;;24321:366;;;:::o;24693:419::-;24859:4;24897:2;24886:9;24882:18;24874:26;;24946:9;24940:4;24936:20;24932:1;24921:9;24917:17;24910:47;24974:131;25100:4;24974:131;:::i;:::-;24966:139;;24693:419;;;:::o;25118:224::-;25258:34;25254:1;25246:6;25242:14;25235:58;25327:7;25322:2;25314:6;25310:15;25303:32;25118:224;:::o;25348:366::-;25490:3;25511:67;25575:2;25570:3;25511:67;:::i;:::-;25504:74;;25587:93;25676:3;25587:93;:::i;:::-;25705:2;25700:3;25696:12;25689:19;;25348:366;;;:::o;25720:419::-;25886:4;25924:2;25913:9;25909:18;25901:26;;25973:9;25967:4;25963:20;25959:1;25948:9;25944:17;25937:47;26001:131;26127:4;26001:131;:::i;:::-;25993:139;;25720:419;;;:::o;26145:222::-;26285:34;26281:1;26273:6;26269:14;26262:58;26354:5;26349:2;26341:6;26337:15;26330:30;26145:222;:::o;26373:366::-;26515:3;26536:67;26600:2;26595:3;26536:67;:::i;:::-;26529:74;;26612:93;26701:3;26612:93;:::i;:::-;26730:2;26725:3;26721:12;26714:19;;26373:366;;;:::o;26745:419::-;26911:4;26949:2;26938:9;26934:18;26926:26;;26998:9;26992:4;26988:20;26984:1;26973:9;26969:17;26962:47;27026:131;27152:4;27026:131;:::i;:::-;27018:139;;26745:419;;;:::o;27170:161::-;27310:13;27306:1;27298:6;27294:14;27287:37;27170:161;:::o;27337:366::-;27479:3;27500:67;27564:2;27559:3;27500:67;:::i;:::-;27493:74;;27576:93;27665:3;27576:93;:::i;:::-;27694:2;27689:3;27685:12;27678:19;;27337:366;;;:::o;27709:419::-;27875:4;27913:2;27902:9;27898:18;27890:26;;27962:9;27956:4;27952:20;27948:1;27937:9;27933:17;27926:47;27990:131;28116:4;27990:131;:::i;:::-;27982:139;;27709:419;;;:::o;28134:297::-;28274:34;28270:1;28262:6;28258:14;28251:58;28343:34;28338:2;28330:6;28326:15;28319:59;28412:11;28407:2;28399:6;28395:15;28388:36;28134:297;:::o;28437:366::-;28579:3;28600:67;28664:2;28659:3;28600:67;:::i;:::-;28593:74;;28676:93;28765:3;28676:93;:::i;:::-;28794:2;28789:3;28785:12;28778:19;;28437:366;;;:::o;28809:419::-;28975:4;29013:2;29002:9;28998:18;28990:26;;29062:9;29056:4;29052:20;29048:1;29037:9;29033:17;29026:47;29090:131;29216:4;29090:131;:::i;:::-;29082:139;;28809:419;;;:::o;29234:240::-;29374:34;29370:1;29362:6;29358:14;29351:58;29443:23;29438:2;29430:6;29426:15;29419:48;29234:240;:::o;29480:366::-;29622:3;29643:67;29707:2;29702:3;29643:67;:::i;:::-;29636:74;;29719:93;29808:3;29719:93;:::i;:::-;29837:2;29832:3;29828:12;29821:19;;29480:366;;;:::o;29852:419::-;30018:4;30056:2;30045:9;30041:18;30033:26;;30105:9;30099:4;30095:20;30091:1;30080:9;30076:17;30069:47;30133:131;30259:4;30133:131;:::i;:::-;30125:139;;29852:419;;;:::o;30277:169::-;30417:21;30413:1;30405:6;30401:14;30394:45;30277:169;:::o;30452:366::-;30594:3;30615:67;30679:2;30674:3;30615:67;:::i;:::-;30608:74;;30691:93;30780:3;30691:93;:::i;:::-;30809:2;30804:3;30800:12;30793:19;;30452:366;;;:::o;30824:419::-;30990:4;31028:2;31017:9;31013:18;31005:26;;31077:9;31071:4;31067:20;31063:1;31052:9;31048:17;31041:47;31105:131;31231:4;31105:131;:::i;:::-;31097:139;;30824:419;;;:::o;31249:241::-;31389:34;31385:1;31377:6;31373:14;31366:58;31458:24;31453:2;31445:6;31441:15;31434:49;31249:241;:::o;31496:366::-;31638:3;31659:67;31723:2;31718:3;31659:67;:::i;:::-;31652:74;;31735:93;31824:3;31735:93;:::i;:::-;31853:2;31848:3;31844:12;31837:19;;31496:366;;;:::o;31868:419::-;32034:4;32072:2;32061:9;32057:18;32049:26;;32121:9;32115:4;32111:20;32107:1;32096:9;32092:17;32085:47;32149:131;32275:4;32149:131;:::i;:::-;32141:139;;31868:419;;;:::o;32293:194::-;32333:4;32353:20;32371:1;32353:20;:::i;:::-;32348:25;;32387:20;32405:1;32387:20;:::i;:::-;32382:25;;32431:1;32428;32424:9;32416:17;;32455:1;32449:4;32446:11;32443:37;;;32460:18;;:::i;:::-;32443:37;32293:194;;;;:::o;32493:177::-;32633:29;32629:1;32621:6;32617:14;32610:53;32493:177;:::o;32676:366::-;32818:3;32839:67;32903:2;32898:3;32839:67;:::i;:::-;32832:74;;32915:93;33004:3;32915:93;:::i;:::-;33033:2;33028:3;33024:12;33017:19;;32676:366;;;:::o;33048:419::-;33214:4;33252:2;33241:9;33237:18;33229:26;;33301:9;33295:4;33291:20;33287:1;33276:9;33272:17;33265:47;33329:131;33455:4;33329:131;:::i;:::-;33321:139;;33048:419;;;:::o;33473:147::-;33574:11;33611:3;33596:18;;33473:147;;;;:::o;33626:114::-;;:::o;33746:398::-;33905:3;33926:83;34007:1;34002:3;33926:83;:::i;:::-;33919:90;;34018:93;34107:3;34018:93;:::i;:::-;34136:1;34131:3;34127:11;34120:18;;33746:398;;;:::o;34150:379::-;34334:3;34356:147;34499:3;34356:147;:::i;:::-;34349:154;;34520:3;34513:10;;34150:379;;;:::o;34535:143::-;34592:5;34623:6;34617:13;34608:22;;34639:33;34666:5;34639:33;:::i;:::-;34535:143;;;;:::o;34684:351::-;34754:6;34803:2;34791:9;34782:7;34778:23;34774:32;34771:119;;;34809:79;;:::i;:::-;34771:119;34929:1;34954:64;35010:7;35001:6;34990:9;34986:22;34954:64;:::i;:::-;34944:74;;34900:128;34684:351;;;;:::o;35041:85::-;35086:7;35115:5;35104:16;;35041:85;;;:::o;35132:158::-;35190:9;35223:61;35241:42;35250:32;35276:5;35250:32;:::i;:::-;35241:42;:::i;:::-;35223:61;:::i;:::-;35210:74;;35132:158;;;:::o;35296:147::-;35391:45;35430:5;35391:45;:::i;:::-;35386:3;35379:58;35296:147;;:::o;35449:114::-;35516:6;35550:5;35544:12;35534:22;;35449:114;;;:::o;35569:184::-;35668:11;35702:6;35697:3;35690:19;35742:4;35737:3;35733:14;35718:29;;35569:184;;;;:::o;35759:132::-;35826:4;35849:3;35841:11;;35879:4;35874:3;35870:14;35862:22;;35759:132;;;:::o;35897:108::-;35974:24;35992:5;35974:24;:::i;:::-;35969:3;35962:37;35897:108;;:::o;36011:179::-;36080:10;36101:46;36143:3;36135:6;36101:46;:::i;:::-;36179:4;36174:3;36170:14;36156:28;;36011:179;;;;:::o;36196:113::-;36266:4;36298;36293:3;36289:14;36281:22;;36196:113;;;:::o;36345:732::-;36464:3;36493:54;36541:5;36493:54;:::i;:::-;36563:86;36642:6;36637:3;36563:86;:::i;:::-;36556:93;;36673:56;36723:5;36673:56;:::i;:::-;36752:7;36783:1;36768:284;36793:6;36790:1;36787:13;36768:284;;;36869:6;36863:13;36896:63;36955:3;36940:13;36896:63;:::i;:::-;36889:70;;36982:60;37035:6;36982:60;:::i;:::-;36972:70;;36828:224;36815:1;36812;36808:9;36803:14;;36768:284;;;36772:14;37068:3;37061:10;;36469:608;;;36345:732;;;;:::o;37083:831::-;37346:4;37384:3;37373:9;37369:19;37361:27;;37398:71;37466:1;37455:9;37451:17;37442:6;37398:71;:::i;:::-;37479:80;37555:2;37544:9;37540:18;37531:6;37479:80;:::i;:::-;37606:9;37600:4;37596:20;37591:2;37580:9;37576:18;37569:48;37634:108;37737:4;37728:6;37634:108;:::i;:::-;37626:116;;37752:72;37820:2;37809:9;37805:18;37796:6;37752:72;:::i;:::-;37834:73;37902:3;37891:9;37887:19;37878:6;37834:73;:::i;:::-;37083:831;;;;;;;;:::o;37920:807::-;38169:4;38207:3;38196:9;38192:19;38184:27;;38221:71;38289:1;38278:9;38274:17;38265:6;38221:71;:::i;:::-;38302:72;38370:2;38359:9;38355:18;38346:6;38302:72;:::i;:::-;38384:80;38460:2;38449:9;38445:18;38436:6;38384:80;:::i;:::-;38474;38550:2;38539:9;38535:18;38526:6;38474:80;:::i;:::-;38564:73;38632:3;38621:9;38617:19;38608:6;38564:73;:::i;:::-;38647;38715:3;38704:9;38700:19;38691:6;38647:73;:::i;:::-;37920:807;;;;;;;;;:::o;38733:663::-;38821:6;38829;38837;38886:2;38874:9;38865:7;38861:23;38857:32;38854:119;;;38892:79;;:::i;:::-;38854:119;39012:1;39037:64;39093:7;39084:6;39073:9;39069:22;39037:64;:::i;:::-;39027:74;;38983:128;39150:2;39176:64;39232:7;39223:6;39212:9;39208:22;39176:64;:::i;:::-;39166:74;;39121:129;39289:2;39315:64;39371:7;39362:6;39351:9;39347:22;39315:64;:::i;:::-;39305:74;;39260:129;38733:663;;;;;:::o

Swarm Source

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