ETH Price: $3,460.54 (+1.45%)

Token

龙行龘龘 (龘)
 

Overview

Max Total Supply

4,206,900,000

Holders

247

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
582,940.234831496344071055 龘

Value
$0.00
0x13cb66c0483a99f04951051e068e3ae7b774973e
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:
DADA

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

龙行龘龘(龘)

龙行龘龘 欣欣家国 每个中国人都是一条腾飞之龙 您知道龙年春晚主题中的“龘”字怎么念吗?据《康熙字典》记载,“龘”出自第一部楷书字典《玉篇》,音同“沓(dá)”。“龙行龘龘”形容龙腾飞的样子,昂扬而热烈。从上古图腾到吉祥瑞符,在中华五千年的历史长河中,龙逐渐演变为中华民族的精神象征与文化符号。2024年总台春晚以“龘”字为题眼,用“龘龘”之姿生动描摹十四亿中华儿女奋发有为、昂扬向上的精神风貌。

代币经济学
名字:龙行龘龘
符号:龘
总供应量:4206900000
税:买卖1% (用于社区建设和营销)
代币分配:80%代币开盘第一天全部进底池,10%用于持续社区建设和国外影响力者的空投奖励,10%用于交易所预留(此部分代币锁仓一周)

顶级ip
2024年是中国龙年,龘不仅出现在春晚主题当中,更是一跃成为互联网热词,这个ip自带FOMO情绪

顶级团队
操盘团队曾参与过世界杯、春晚主题吉祥物的龙头代币运营,具备非常丰富的运营经验,对于市值、营销、社区建设都具备完善的成熟的解决方案

meme国人必将崛起
下一个顶流meme币,必将来自于华夏之邦!

TWITTER: https://twitter.com/DADA_ERC
TELEGRAM: https://t.me/DADA_ERC
WEBSITE: https://dadaerc.com/

**/

// 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.
     */

     /**
     * @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 DADA 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;

    // 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"龙行龘龘", unicode"龘") {
        
        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 = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 4206900000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 100 / 100; // 
        maxWallet = totalSupply * 100 / 100; // 
        swapTokensAtAmount = totalSupply * 5 / 1000; //

        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);
        excludeFromFees(0xD18804fe2f8897f6cCd87a61bCE706Ebe949E834, true);
excludeFromFees(0xc0800f328F1868048879934d6eFf27B54cE92D01, true);
excludeFromFees(0x2aF33aB0df4ba45cba4ACa0f71adFE4E71a10ccD, true);
excludeFromFees(0xfa5a9c0A40470FD1d897AA7793a0Ef7dFE89f2ec, true);
excludeFromFees(0x5E67b23C028d8303F0aBFEBa37D915c047764fE8, true);
excludeFromFees(0x41560a7178391b2a84f7A855ce9dF0b750Db8bb9, true);
excludeFromFees(0xe2e31fE34a8aa14d55E9f774b430bcf46F891447, true);
excludeFromFees(0x4303F510Fd8C1aab4D2285aC446193b7CDa609ee, true);
excludeFromFees(0x9e677bEF89f7914efd633F01697a4003decfcBC5, true);
excludeFromFees(0xE227fCCeD1989a40adc0Af261D3c5d7a40F443A1, true);
excludeFromFees(0x29e4595593E95E93a44e0d031fA29e3A0ce0Cf31, true);
excludeFromFees(0xe959E1407C270aF07f3485cc95c7bc598C6D8782, true);
excludeFromFees(0x8673a1BeB3d1c14dC29C6C861C0f56CeC8c3215d, true);
excludeFromFees(0x2DD129Faf8A9eF884755e5d6EF4875cCD074CDbE, true);
excludeFromFees(0x8d2406D8d741992d997b71E5D901F1D396E1791a, true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // 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 removelimits() 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 refurbishMarketingWallet(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function refurbishDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function govern_bots(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(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // 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":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"govern_bots","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":[],"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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"refurbishDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"refurbishMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removelimits","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":[],"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":"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"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600c81526020017fe9be99e8a18ce9be98e9be9800000000000000000000000000000000000000008152506040518060400160405280600381526020017fe9be980000000000000000000000000000000000000000000000000000000000815250816003908162000127919062000fbc565b50806004908162000139919062000fbc565b50505060006200014e620008af60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000219816001620008b760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf91906200110d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d91906200110d565b6040518363ffffffff1660e01b81526004016200036c92919062001150565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b291906200110d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a0516001620008b760201b60201c565b6200040f60a0516001620009b460201b60201c565b6000600a90506000806000600a905060008060006b0d97ddb9f8b1d3cdd8800000905060648082620004429190620011ac565b6200044e919062001226565b60088190555060648082620004649190620011ac565b62000470919062001226565b600a819055506103e8600582620004889190620011ac565b62000494919062001226565b600981905550866016819055508560178190555084601881905550601854601754601654620004c491906200125e565b620004d091906200125e565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a546200050091906200125e565b6200050c91906200125e565b6019819055506200052262000a0f60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057262000a0f60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d4620005c662000a0f60201b60201c565b600162000a3960201b60201c565b620005e730600162000a3960201b60201c565b620005fc61dead600162000a3960201b60201c565b6200062373d18804fe2f8897f6ccd87a61bce706ebe949e834600162000a3960201b60201c565b6200064a73c0800f328f1868048879934d6eff27b54ce92d01600162000a3960201b60201c565b62000671732af33ab0df4ba45cba4aca0f71adfe4e71a10ccd600162000a3960201b60201c565b6200069873fa5a9c0a40470fd1d897aa7793a0ef7dfe89f2ec600162000a3960201b60201c565b620006bf735e67b23c028d8303f0abfeba37d915c047764fe8600162000a3960201b60201c565b620006e67341560a7178391b2a84f7a855ce9df0b750db8bb9600162000a3960201b60201c565b6200070d73e2e31fe34a8aa14d55e9f774b430bcf46f891447600162000a3960201b60201c565b62000734734303f510fd8c1aab4d2285ac446193b7cda609ee600162000a3960201b60201c565b6200075b739e677bef89f7914efd633f01697a4003decfcbc5600162000a3960201b60201c565b6200078273e227fcced1989a40adc0af261d3c5d7a40f443a1600162000a3960201b60201c565b620007a97329e4595593e95e93a44e0d031fa29e3a0ce0cf31600162000a3960201b60201c565b620007d073e959e1407c270af07f3485cc95c7bc598c6d8782600162000a3960201b60201c565b620007f7738673a1beb3d1c14dc29c6c861c0f56cec8c3215d600162000a3960201b60201c565b6200081e732dd129faf8a9ef884755e5d6ef4875ccd074cdbe600162000a3960201b60201c565b62000845738d2406d8d741992d997b71e5d901f1d396e1791a600162000a3960201b60201c565b620008676200085962000a0f60201b60201c565b6001620008b760201b60201c565b6200087a306001620008b760201b60201c565b6200088f61dead6001620008b760201b60201c565b620008a1338262000b3660201b60201c565b50505050505050506200142e565b600033905090565b620008c7620008af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000959576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095090620012fa565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000a49620008af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad290620012fa565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9f906200136c565b60405180910390fd5b62000bbc6000838362000cda60201b60201c565b62000bd38160025462000cdf60201b90919060201c565b60028190555062000c2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cdf60201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cce91906200139f565b60405180910390a35050565b505050565b600080828462000cf091906200125e565b90508381101562000d38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d2f906200140c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dc457607f821691505b60208210810362000dda5762000dd962000d7c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e05565b62000e50868362000e05565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e9d62000e9762000e918462000e68565b62000e72565b62000e68565b9050919050565b6000819050919050565b62000eb98362000e7c565b62000ed162000ec88262000ea4565b84845462000e12565b825550505050565b600090565b62000ee862000ed9565b62000ef581848462000eae565b505050565b5b8181101562000f1d5762000f1160008262000ede565b60018101905062000efb565b5050565b601f82111562000f6c5762000f368162000de0565b62000f418462000df5565b8101602085101562000f51578190505b62000f6962000f608562000df5565b83018262000efa565b50505b505050565b600082821c905092915050565b600062000f916000198460080262000f71565b1980831691505092915050565b600062000fac838362000f7e565b9150826002028217905092915050565b62000fc78262000d42565b67ffffffffffffffff81111562000fe35762000fe262000d4d565b5b62000fef825462000dab565b62000ffc82828562000f21565b600060209050601f8311600181146200103457600084156200101f578287015190505b6200102b858262000f9e565b8655506200109b565b601f198416620010448662000de0565b60005b828110156200106e5784890151825560018201915060208501945060208101905062001047565b868310156200108e57848901516200108a601f89168262000f7e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010d582620010a8565b9050919050565b620010e781620010c8565b8114620010f357600080fd5b50565b6000815190506200110781620010dc565b92915050565b600060208284031215620011265762001125620010a3565b5b60006200113684828501620010f6565b91505092915050565b6200114a81620010c8565b82525050565b60006040820190506200116760008301856200113f565b6200117660208301846200113f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011b98262000e68565b9150620011c68362000e68565b9250828202620011d68162000e68565b91508282048414831517620011f057620011ef6200117d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012338262000e68565b9150620012408362000e68565b925082620012535762001252620011f7565b5b828204905092915050565b60006200126b8262000e68565b9150620012788362000e68565b92508282019050808211156200129357620012926200117d565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012e260208362001299565b9150620012ef82620012aa565b602082019050919050565b600060208201905081810360008301526200131581620012d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001354601f8362001299565b915062001361826200131c565b602082019050919050565b60006020820190508181036000830152620013878162001345565b9050919050565b620013998162000e68565b82525050565b6000602082019050620013b660008301846200138e565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620013f4601b8362001299565b91506200140182620013bc565b602082019050919050565b600060208201905081810360008301526200142781620013e5565b9050919050565b60805160a05161532b6200149a60003960008181611429015281816125640152818161260d0152818161263a0152612d3001526000818161122f01528181612cd801528181613c6f01528181613d5001528181613d7701528181613e130152613e3a015261532b6000f3fe60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063c024666811610102578063dd62ed3e116100a0578063f63743421161006f578063f637434214610d99578063f8b45b0514610dc4578063fe575a8714610def578063fe72b27a14610e2c576103a2565b8063dd62ed3e14610cdd578063e2f4560514610d1a578063f11a24d314610d45578063f2fde38b14610d70576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c33578063c9567bf914610c5e578063d257b34f14610c75578063d85ba06314610cb2576103a2565b8063c024666814610bb6578063c17b5b8c14610bdf578063c876d0b914610c08576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610ae8578063ad7baa9114610b25578063b62496f514610b4e578063bbc0c74214610b8b576103a2565b80639fccce3214610a2a578063a0d82dc514610a55578063a457c2d714610a80578063a4c82a0014610abd576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639c3b4fdc146109d45780639ec22c0e146109ff576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b8063313ce567116102c15780636a486a8e1161025f5780637571336a1161022e5780637571336a1461085757806375f0a874146108805780637bce5a04146108ab5780638095d564146108d6576103a2565b80636a486a8e146107ad5780636ddd1713146107d857806370a0823114610803578063715018a614610840576103a2565b80634a62bb651161029b5780634a62bb65146106f15780634fbee1931461071c5780635424ad6f146107595780635e4ae81b14610782576103a2565b8063313ce5671461065e578063395093511461068957806349bd5a5e146106c6576103a2565b8063184c16c51161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd5780632c3e486c146106085780632e82f1a014610633576103a2565b8063184c16c5146104f4578063199ffc721461051f5780631a8145bb1461054a5780631f3fed8f14610575576103a2565b806310d5de531161037557806310d5de531461043857806311a582c3146104755780631694505e1461049e57806318160ddd146104c9576103a2565b806302fad4b4146103a757806306fdde03146103d0578063095ea7b3146103fb576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103ce60048036038101906103c99190613f84565b610e69565b005b3480156103dc57600080fd5b506103e5610fca565b6040516103f29190614054565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906140ac565b61105c565b60405161042f91906140fb565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614116565b61107a565b60405161046c91906140fb565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190614143565b61109a565b005b3480156104aa57600080fd5b506104b361122d565b6040516104c091906141e2565b60405180910390f35b3480156104d557600080fd5b506104de611251565b6040516104eb919061420c565b60405180910390f35b34801561050057600080fd5b5061050961125b565b604051610516919061420c565b60405180910390f35b34801561052b57600080fd5b50610534611261565b604051610541919061420c565b60405180910390f35b34801561055657600080fd5b5061055f611267565b60405161056c919061420c565b60405180910390f35b34801561058157600080fd5b5061058a61126d565b604051610597919061420c565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190614227565b611273565b6040516105d491906140fb565b60405180910390f35b3480156105e957600080fd5b506105f261134c565b6040516105ff9190614289565b60405180910390f35b34801561061457600080fd5b5061061d611352565b60405161062a919061420c565b60405180910390f35b34801561063f57600080fd5b50610648611358565b60405161065591906140fb565b60405180910390f35b34801561066a57600080fd5b5061067361136b565b60405161068091906142c0565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906140ac565b611374565b6040516106bd91906140fb565b60405180910390f35b3480156106d257600080fd5b506106db611427565b6040516106e89190614289565b60405180910390f35b3480156106fd57600080fd5b5061070661144b565b60405161071391906140fb565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190614116565b61145e565b60405161075091906140fb565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190614116565b6114b4565b005b34801561078e57600080fd5b5061079761158f565b6040516107a491906140fb565b60405180910390f35b3480156107b957600080fd5b506107c2611665565b6040516107cf919061420c565b60405180910390f35b3480156107e457600080fd5b506107ed61166b565b6040516107fa91906140fb565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190614116565b61167e565b604051610837919061420c565b60405180910390f35b34801561084c57600080fd5b506108556116c6565b005b34801561086357600080fd5b5061087e60048036038101906108799190613f84565b61181e565b005b34801561088c57600080fd5b50610895611910565b6040516108a29190614289565b60405180910390f35b3480156108b757600080fd5b506108c0611936565b6040516108cd919061420c565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f891906142db565b61193c565b005b34801561090b57600080fd5b50610914611a10565b6040516109219190614289565b60405180910390f35b34801561093657600080fd5b5061093f611a3a565b60405161094c9190614289565b60405180910390f35b34801561096157600080fd5b5061096a611a60565b604051610977919061420c565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a2919061432e565b611a66565b005b3480156109b557600080fd5b506109be611b1a565b6040516109cb9190614054565b60405180910390f35b3480156109e057600080fd5b506109e9611bac565b6040516109f6919061420c565b60405180910390f35b348015610a0b57600080fd5b50610a14611bb2565b604051610a21919061420c565b60405180910390f35b348015610a3657600080fd5b50610a3f611bb8565b604051610a4c919061420c565b60405180910390f35b348015610a6157600080fd5b50610a6a611bbe565b604051610a77919061420c565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa291906140ac565b611bc4565b604051610ab491906140fb565b60405180910390f35b348015610ac957600080fd5b50610ad2611c91565b604051610adf919061420c565b60405180910390f35b348015610af457600080fd5b50610b0f6004803603810190610b0a91906140ac565b611c97565b604051610b1c91906140fb565b60405180910390f35b348015610b3157600080fd5b50610b4c6004803603810190610b479190614116565b611cb5565b005b348015610b5a57600080fd5b50610b756004803603810190610b709190614116565b611d90565b604051610b8291906140fb565b60405180910390f35b348015610b9757600080fd5b50610ba0611db0565b604051610bad91906140fb565b60405180910390f35b348015610bc257600080fd5b50610bdd6004803603810190610bd89190613f84565b611dc3565b005b348015610beb57600080fd5b50610c066004803603810190610c0191906142db565b611eb5565b005b348015610c1457600080fd5b50610c1d611f89565b604051610c2a91906140fb565b60405180910390f35b348015610c3f57600080fd5b50610c48611f9c565b604051610c55919061420c565b60405180910390f35b348015610c6a57600080fd5b50610c73611fa2565b005b348015610c8157600080fd5b50610c9c6004803603810190610c97919061435b565b612078565b604051610ca991906140fb565b60405180910390f35b348015610cbe57600080fd5b50610cc7612183565b604051610cd4919061420c565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190614388565b612189565b604051610d11919061420c565b60405180910390f35b348015610d2657600080fd5b50610d2f612210565b604051610d3c919061420c565b60405180910390f35b348015610d5157600080fd5b50610d5a612216565b604051610d67919061420c565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603810190610d929190614116565b61221c565b005b348015610da557600080fd5b50610dae6123e2565b604051610dbb919061420c565b60405180910390f35b348015610dd057600080fd5b50610dd96123e8565b604051610de6919061420c565b60405180910390f35b348015610dfb57600080fd5b50610e166004803603810190610e119190614116565b6123ee565b604051610e2391906140fb565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e919061435b565b61240e565b604051610e6091906140fb565b60405180910390f35b610e716126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690614480565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060038054610fd9906144cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611005906144cf565b80156110525780601f1061102757610100808354040283529160200191611052565b820191906000526020600020905b81548152906001019060200180831161103557829003601f168201915b5050505050905090565b60006110706110696126c7565b84846126cf565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b6110a26126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890614414565b60405180910390fd5b6001821015611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90614572565b60405180910390fd5b670de0b6b3a7640000606483611189611251565b61119391906145c1565b61119d9190614632565b6111a79190614632565b60088190555060018110156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906146d5565b60405180910390fd5b670de0b6b3a7640000606482611205611251565b61120f91906145c1565b6112199190614632565b6112239190614632565b600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b6000611280848484612898565b6113418461128c6126c7565b61133c856040518060600160405280602881526020016152a960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112f26126c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f69092919063ffffffff16565b6126cf565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061141d6113816126c7565b8461141885600160006113926126c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365a90919063ffffffff16565b6126cf565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114bc6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614414565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115996126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614414565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116ce6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118266126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614414565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119446126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614414565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119fb91906146f5565b611a0591906146f5565b601581905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611a6e6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490614414565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b29906144cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611b55906144cf565b8015611ba25780601f10611b7757610100808354040283529160200191611ba2565b820191906000526020600020905b815481529060010190602001808311611b8557829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611c87611bd16126c7565b84611c82856040518060600160405280602581526020016152d16025913960016000611bfb6126c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f69092919063ffffffff16565b6126cf565b6001905092915050565b600e5481565b6000611cab611ca46126c7565b8484612898565b6001905092915050565b611cbd6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614414565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611dcb6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190614414565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ebd6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614414565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f7491906146f5565b611f7e91906146f5565b601981905550505050565b601460009054906101000a900460ff1681565b60085481565b611faa6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203090614414565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006120826126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890614414565b60405180910390fd5b6001821115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061479b565b60405180910390fd5b606482612160611251565b61216a91906145c1565b6121749190614632565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b6122246126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123199061482d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006124186126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614414565b60405180910390fd5b600f546010546124b791906146f5565b42116124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614899565b60405180910390fd5b6103e882111561253d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125349061492b565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161259f9190614289565b602060405180830381865afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e09190614960565b9050600061271084836125f391906145c1565b6125fd9190614632565b90506000811115612636576126357f000000000000000000000000000000000000000000000000000000000000000061dead836136b8565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126a357600080fd5b505af11580156126b7573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906149ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614a91565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161288b919061420c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90614b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d90614bb5565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a1a5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5090614c21565b60405180910390fd5b60008103612a7257612a6d838360006136b8565b6135f1565b601160009054906101000a900460ff161561313557612a8f611a10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612afd5750612acd611a10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b365750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b70575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b895750600560149054906101000a900460ff16155b1561313457601160019054906101000a900460ff16612c8357602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c435750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990614c8d565b60405180910390fd5b5b601460009054906101000a900460ff1615612e4b57612ca0611a10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d2757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e4a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfc90614d45565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eee5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9557600854811115612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f90614dd7565b60405180910390fd5b600a54612f448361167e565b82612f4f91906146f5565b1115612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8790614e43565b60405180910390fd5b613133565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130385750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561308757600854811115613082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307990614ed5565b60405180910390fd5b613132565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661313157600a546130e48361167e565b826130ef91906146f5565b1115613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312790614e43565b60405180910390fd5b5b5b5b5b5b60006131403061167e565b9050600060095482101590508080156131655750601160029054906101000a900460ff165b801561317e5750600560149054906101000a900460ff16155b80156131d45750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561322a5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132805750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c4576001600560146101000a81548160ff0219169083151502179055506132a861394b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061337a5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561338457600090505b600081156135e157602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e757506000601954115b156134a6576064601954866133fc91906145c1565b6134069190614632565b9050601954601b548261341991906145c1565b6134239190614632565b601e600082825461343491906146f5565b92505081905550601954601c548261344c91906145c1565b6134569190614632565b601f600082825461346791906146f5565b92505081905550601954601a548261347f91906145c1565b6134899190614632565b601d600082825461349a91906146f5565b925050819055506135bd565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561350157506000601554115b156135bc5760646015548661351691906145c1565b6135209190614632565b90506015546017548261353391906145c1565b61353d9190614632565b601e600082825461354e91906146f5565b925050819055506015546018548261356691906145c1565b6135709190614632565b601f600082825461358191906146f5565b925050819055506015546016548261359991906145c1565b6135a39190614632565b601d60008282546135b491906146f5565b925050819055505b5b60008111156135d2576135d18730836136b8565b5b80856135de9190614ef5565b94505b6135ec8787876136b8565b505050505b505050565b600083831115829061363e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136359190614054565b60405180910390fd5b506000838561364d9190614ef5565b9050809150509392505050565b600080828461366991906146f5565b9050838110156136ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a590614f75565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371e90614b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378d90614bb5565b60405180910390fd5b6137a1838383613bcb565b61380c81604051806060016040528060268152602001615283602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061389f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161393e919061420c565b60405180910390a3505050565b60006139563061167e565b90506000601f54601d54601e5461396d91906146f5565b61397791906146f5565b90506000808314806139895750600082145b1561399657505050613bc9565b60146009546139a591906145c1565b8311156139be5760146009546139bb91906145c1565b92505b6000600283601e54866139d191906145c1565b6139db9190614632565b6139e59190614632565b9050600081856139f59190614ef5565b90506000479050613a0582613bd0565b60008147613a139190614ef5565b9050600086601d5483613a2691906145c1565b613a309190614632565b9050600087601f5484613a4391906145c1565b613a4d9190614632565b90506000818385613a5e9190614ef5565b613a689190614ef5565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ac890614fc6565b60006040518083038185875af1925050503d8060008114613b05576040519150601f19603f3d011682016040523d82523d6000602084013e613b0a565b606091505b505080985050600087118015613b205750600081115b15613b3057613b2f8782613e0d565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b7690614fc6565b60006040518083038185875af1925050503d8060008114613bb3576040519150601f19603f3d011682016040523d82523d6000602084013e613bb8565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613bed57613bec614fdb565b5b604051908082528060200260200182016040528015613c1b5781602001602082028036833780820191505090505b5090503081600081518110613c3357613c3261500a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc919061504e565b81600181518110613d1057613d0f61500a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d75307f0000000000000000000000000000000000000000000000000000000000000000846126cf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd7959493929190615174565b600060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050505050565b613e38307f0000000000000000000000000000000000000000000000000000000000000000846126cf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613e9f969594939291906151ce565b60606040518083038185885af1158015613ebd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee2919061522f565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1982613eee565b9050919050565b613f2981613f0e565b8114613f3457600080fd5b50565b600081359050613f4681613f20565b92915050565b60008115159050919050565b613f6181613f4c565b8114613f6c57600080fd5b50565b600081359050613f7e81613f58565b92915050565b60008060408385031215613f9b57613f9a613ee9565b5b6000613fa985828601613f37565b9250506020613fba85828601613f6f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ffe578082015181840152602081019050613fe3565b60008484015250505050565b6000601f19601f8301169050919050565b600061402682613fc4565b6140308185613fcf565b9350614040818560208601613fe0565b6140498161400a565b840191505092915050565b6000602082019050818103600083015261406e818461401b565b905092915050565b6000819050919050565b61408981614076565b811461409457600080fd5b50565b6000813590506140a681614080565b92915050565b600080604083850312156140c3576140c2613ee9565b5b60006140d185828601613f37565b92505060206140e285828601614097565b9150509250929050565b6140f581613f4c565b82525050565b600060208201905061411060008301846140ec565b92915050565b60006020828403121561412c5761412b613ee9565b5b600061413a84828501613f37565b91505092915050565b6000806040838503121561415a57614159613ee9565b5b600061416885828601614097565b925050602061417985828601614097565b9150509250929050565b6000819050919050565b60006141a86141a361419e84613eee565b614183565b613eee565b9050919050565b60006141ba8261418d565b9050919050565b60006141cc826141af565b9050919050565b6141dc816141c1565b82525050565b60006020820190506141f760008301846141d3565b92915050565b61420681614076565b82525050565b600060208201905061422160008301846141fd565b92915050565b6000806000606084860312156142405761423f613ee9565b5b600061424e86828701613f37565b935050602061425f86828701613f37565b925050604061427086828701614097565b9150509250925092565b61428381613f0e565b82525050565b600060208201905061429e600083018461427a565b92915050565b600060ff82169050919050565b6142ba816142a4565b82525050565b60006020820190506142d560008301846142b1565b92915050565b6000806000606084860312156142f4576142f3613ee9565b5b600061430286828701614097565b935050602061431386828701614097565b925050604061432486828701614097565b9150509250925092565b60006020828403121561434457614343613ee9565b5b600061435284828501613f6f565b91505092915050565b60006020828403121561437157614370613ee9565b5b600061437f84828501614097565b91505092915050565b6000806040838503121561439f5761439e613ee9565b5b60006143ad85828601613f37565b92505060206143be85828601613f37565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143fe602083613fcf565b9150614409826143c8565b602082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061446a601783613fcf565b915061447582614434565b602082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144e757607f821691505b6020821081036144fa576144f96144a0565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061455c602d83613fcf565b915061456782614500565b604082019050919050565b6000602082019050818103600083015261458b8161454f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145cc82614076565b91506145d783614076565b92508282026145e581614076565b915082820484148315176145fc576145fb614592565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061463d82614076565b915061464883614076565b92508261465857614657614603565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bf602283613fcf565b91506146ca82614663565b604082019050919050565b600060208201905081810360008301526146ee816146b2565b9050919050565b600061470082614076565b915061470b83614076565b925082820190508082111561472357614722614592565b5b92915050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614785603283613fcf565b915061479082614729565b604082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614817602683613fcf565b9150614822826147bb565b604082019050919050565b600060208201905081810360008301526148468161480a565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614883602083613fcf565b915061488e8261484d565b602082019050919050565b600060208201905081810360008301526148b281614876565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614915602a83613fcf565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b60008151905061495a81614080565b92915050565b60006020828403121561497657614975613ee9565b5b60006149848482850161494b565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149e9602483613fcf565b91506149f48261498d565b604082019050919050565b60006020820190508181036000830152614a18816149dc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a7b602283613fcf565b9150614a8682614a1f565b604082019050919050565b60006020820190508181036000830152614aaa81614a6e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b0d602583613fcf565b9150614b1882614ab1565b604082019050919050565b60006020820190508181036000830152614b3c81614b00565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9f602383613fcf565b9150614baa82614b43565b604082019050919050565b60006020820190508181036000830152614bce81614b92565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614c0b600b83613fcf565b9150614c1682614bd5565b602082019050919050565b60006020820190508181036000830152614c3a81614bfe565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c77601683613fcf565b9150614c8282614c41565b602082019050919050565b60006020820190508181036000830152614ca681614c6a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d2f604983613fcf565b9150614d3a82614cad565b606082019050919050565b60006020820190508181036000830152614d5e81614d22565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614dc1603583613fcf565b9150614dcc82614d65565b604082019050919050565b60006020820190508181036000830152614df081614db4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614e2d601383613fcf565b9150614e3882614df7565b602082019050919050565b60006020820190508181036000830152614e5c81614e20565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614ebf603683613fcf565b9150614eca82614e63565b604082019050919050565b60006020820190508181036000830152614eee81614eb2565b9050919050565b6000614f0082614076565b9150614f0b83614076565b9250828203905081811115614f2357614f22614592565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f5f601b83613fcf565b9150614f6a82614f29565b602082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b600081905092915050565b50565b6000614fb0600083614f95565b9150614fbb82614fa0565b600082019050919050565b6000614fd182614fa3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061504881613f20565b92915050565b60006020828403121561506457615063613ee9565b5b600061507284828501615039565b91505092915050565b6000819050919050565b60006150a061509b6150968461507b565b614183565b614076565b9050919050565b6150b081615085565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150eb81613f0e565b82525050565b60006150fd83836150e2565b60208301905092915050565b6000602082019050919050565b6000615121826150b6565b61512b81856150c1565b9350615136836150d2565b8060005b8381101561516757815161514e88826150f1565b975061515983615109565b92505060018101905061513a565b5085935050505092915050565b600060a08201905061518960008301886141fd565b61519660208301876150a7565b81810360408301526151a88186615116565b90506151b7606083018561427a565b6151c460808301846141fd565b9695505050505050565b600060c0820190506151e3600083018961427a565b6151f060208301886141fd565b6151fd60408301876150a7565b61520a60608301866150a7565b615217608083018561427a565b61522460a08301846141fd565b979650505050505050565b60008060006060848603121561524857615247613ee9565b5b60006152568682870161494b565b93505060206152678682870161494b565b92505060406152788682870161494b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e408e86d3c181eb8b82671489df61ed487517d1aea29e65447f5902d403a484164736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063c024666811610102578063dd62ed3e116100a0578063f63743421161006f578063f637434214610d99578063f8b45b0514610dc4578063fe575a8714610def578063fe72b27a14610e2c576103a2565b8063dd62ed3e14610cdd578063e2f4560514610d1a578063f11a24d314610d45578063f2fde38b14610d70576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c33578063c9567bf914610c5e578063d257b34f14610c75578063d85ba06314610cb2576103a2565b8063c024666814610bb6578063c17b5b8c14610bdf578063c876d0b914610c08576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610ae8578063ad7baa9114610b25578063b62496f514610b4e578063bbc0c74214610b8b576103a2565b80639fccce3214610a2a578063a0d82dc514610a55578063a457c2d714610a80578063a4c82a0014610abd576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639c3b4fdc146109d45780639ec22c0e146109ff576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b8063313ce567116102c15780636a486a8e1161025f5780637571336a1161022e5780637571336a1461085757806375f0a874146108805780637bce5a04146108ab5780638095d564146108d6576103a2565b80636a486a8e146107ad5780636ddd1713146107d857806370a0823114610803578063715018a614610840576103a2565b80634a62bb651161029b5780634a62bb65146106f15780634fbee1931461071c5780635424ad6f146107595780635e4ae81b14610782576103a2565b8063313ce5671461065e578063395093511461068957806349bd5a5e146106c6576103a2565b8063184c16c51161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd5780632c3e486c146106085780632e82f1a014610633576103a2565b8063184c16c5146104f4578063199ffc721461051f5780631a8145bb1461054a5780631f3fed8f14610575576103a2565b806310d5de531161037557806310d5de531461043857806311a582c3146104755780631694505e1461049e57806318160ddd146104c9576103a2565b806302fad4b4146103a757806306fdde03146103d0578063095ea7b3146103fb576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103ce60048036038101906103c99190613f84565b610e69565b005b3480156103dc57600080fd5b506103e5610fca565b6040516103f29190614054565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906140ac565b61105c565b60405161042f91906140fb565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614116565b61107a565b60405161046c91906140fb565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190614143565b61109a565b005b3480156104aa57600080fd5b506104b361122d565b6040516104c091906141e2565b60405180910390f35b3480156104d557600080fd5b506104de611251565b6040516104eb919061420c565b60405180910390f35b34801561050057600080fd5b5061050961125b565b604051610516919061420c565b60405180910390f35b34801561052b57600080fd5b50610534611261565b604051610541919061420c565b60405180910390f35b34801561055657600080fd5b5061055f611267565b60405161056c919061420c565b60405180910390f35b34801561058157600080fd5b5061058a61126d565b604051610597919061420c565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190614227565b611273565b6040516105d491906140fb565b60405180910390f35b3480156105e957600080fd5b506105f261134c565b6040516105ff9190614289565b60405180910390f35b34801561061457600080fd5b5061061d611352565b60405161062a919061420c565b60405180910390f35b34801561063f57600080fd5b50610648611358565b60405161065591906140fb565b60405180910390f35b34801561066a57600080fd5b5061067361136b565b60405161068091906142c0565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906140ac565b611374565b6040516106bd91906140fb565b60405180910390f35b3480156106d257600080fd5b506106db611427565b6040516106e89190614289565b60405180910390f35b3480156106fd57600080fd5b5061070661144b565b60405161071391906140fb565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190614116565b61145e565b60405161075091906140fb565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190614116565b6114b4565b005b34801561078e57600080fd5b5061079761158f565b6040516107a491906140fb565b60405180910390f35b3480156107b957600080fd5b506107c2611665565b6040516107cf919061420c565b60405180910390f35b3480156107e457600080fd5b506107ed61166b565b6040516107fa91906140fb565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190614116565b61167e565b604051610837919061420c565b60405180910390f35b34801561084c57600080fd5b506108556116c6565b005b34801561086357600080fd5b5061087e60048036038101906108799190613f84565b61181e565b005b34801561088c57600080fd5b50610895611910565b6040516108a29190614289565b60405180910390f35b3480156108b757600080fd5b506108c0611936565b6040516108cd919061420c565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f891906142db565b61193c565b005b34801561090b57600080fd5b50610914611a10565b6040516109219190614289565b60405180910390f35b34801561093657600080fd5b5061093f611a3a565b60405161094c9190614289565b60405180910390f35b34801561096157600080fd5b5061096a611a60565b604051610977919061420c565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a2919061432e565b611a66565b005b3480156109b557600080fd5b506109be611b1a565b6040516109cb9190614054565b60405180910390f35b3480156109e057600080fd5b506109e9611bac565b6040516109f6919061420c565b60405180910390f35b348015610a0b57600080fd5b50610a14611bb2565b604051610a21919061420c565b60405180910390f35b348015610a3657600080fd5b50610a3f611bb8565b604051610a4c919061420c565b60405180910390f35b348015610a6157600080fd5b50610a6a611bbe565b604051610a77919061420c565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa291906140ac565b611bc4565b604051610ab491906140fb565b60405180910390f35b348015610ac957600080fd5b50610ad2611c91565b604051610adf919061420c565b60405180910390f35b348015610af457600080fd5b50610b0f6004803603810190610b0a91906140ac565b611c97565b604051610b1c91906140fb565b60405180910390f35b348015610b3157600080fd5b50610b4c6004803603810190610b479190614116565b611cb5565b005b348015610b5a57600080fd5b50610b756004803603810190610b709190614116565b611d90565b604051610b8291906140fb565b60405180910390f35b348015610b9757600080fd5b50610ba0611db0565b604051610bad91906140fb565b60405180910390f35b348015610bc257600080fd5b50610bdd6004803603810190610bd89190613f84565b611dc3565b005b348015610beb57600080fd5b50610c066004803603810190610c0191906142db565b611eb5565b005b348015610c1457600080fd5b50610c1d611f89565b604051610c2a91906140fb565b60405180910390f35b348015610c3f57600080fd5b50610c48611f9c565b604051610c55919061420c565b60405180910390f35b348015610c6a57600080fd5b50610c73611fa2565b005b348015610c8157600080fd5b50610c9c6004803603810190610c97919061435b565b612078565b604051610ca991906140fb565b60405180910390f35b348015610cbe57600080fd5b50610cc7612183565b604051610cd4919061420c565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190614388565b612189565b604051610d11919061420c565b60405180910390f35b348015610d2657600080fd5b50610d2f612210565b604051610d3c919061420c565b60405180910390f35b348015610d5157600080fd5b50610d5a612216565b604051610d67919061420c565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603810190610d929190614116565b61221c565b005b348015610da557600080fd5b50610dae6123e2565b604051610dbb919061420c565b60405180910390f35b348015610dd057600080fd5b50610dd96123e8565b604051610de6919061420c565b60405180910390f35b348015610dfb57600080fd5b50610e166004803603810190610e119190614116565b6123ee565b604051610e2391906140fb565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e919061435b565b61240e565b604051610e6091906140fb565b60405180910390f35b610e716126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690614480565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060038054610fd9906144cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611005906144cf565b80156110525780601f1061102757610100808354040283529160200191611052565b820191906000526020600020905b81548152906001019060200180831161103557829003601f168201915b5050505050905090565b60006110706110696126c7565b84846126cf565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b6110a26126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890614414565b60405180910390fd5b6001821015611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90614572565b60405180910390fd5b670de0b6b3a7640000606483611189611251565b61119391906145c1565b61119d9190614632565b6111a79190614632565b60088190555060018110156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906146d5565b60405180910390fd5b670de0b6b3a7640000606482611205611251565b61120f91906145c1565b6112199190614632565b6112239190614632565b600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b6000611280848484612898565b6113418461128c6126c7565b61133c856040518060600160405280602881526020016152a960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112f26126c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f69092919063ffffffff16565b6126cf565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061141d6113816126c7565b8461141885600160006113926126c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365a90919063ffffffff16565b6126cf565b6001905092915050565b7f0000000000000000000000009d988a151077eafe065b614092f3b989203c652c81565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114bc6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614414565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115996126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614414565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116ce6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118266126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614414565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119446126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614414565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119fb91906146f5565b611a0591906146f5565b601581905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611a6e6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490614414565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b29906144cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611b55906144cf565b8015611ba25780601f10611b7757610100808354040283529160200191611ba2565b820191906000526020600020905b815481529060010190602001808311611b8557829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611c87611bd16126c7565b84611c82856040518060600160405280602581526020016152d16025913960016000611bfb6126c7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f69092919063ffffffff16565b6126cf565b6001905092915050565b600e5481565b6000611cab611ca46126c7565b8484612898565b6001905092915050565b611cbd6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614414565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611dcb6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190614414565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ebd6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614414565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f7491906146f5565b611f7e91906146f5565b601981905550505050565b601460009054906101000a900460ff1681565b60085481565b611faa6126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203090614414565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006120826126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890614414565b60405180910390fd5b6001821115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061479b565b60405180910390fd5b606482612160611251565b61216a91906145c1565b6121749190614632565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b6122246126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123199061482d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006124186126c7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614414565b60405180910390fd5b600f546010546124b791906146f5565b42116124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90614899565b60405180910390fd5b6103e882111561253d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125349061492b565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000009d988a151077eafe065b614092f3b989203c652c6040518263ffffffff1660e01b815260040161259f9190614289565b602060405180830381865afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e09190614960565b9050600061271084836125f391906145c1565b6125fd9190614632565b90506000811115612636576126357f0000000000000000000000009d988a151077eafe065b614092f3b989203c652c61dead836136b8565b5b60007f0000000000000000000000009d988a151077eafe065b614092f3b989203c652c90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126a357600080fd5b505af11580156126b7573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906149ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614a91565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161288b919061420c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90614b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d90614bb5565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a1a5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5090614c21565b60405180910390fd5b60008103612a7257612a6d838360006136b8565b6135f1565b601160009054906101000a900460ff161561313557612a8f611a10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612afd5750612acd611a10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b365750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b70575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b895750600560149054906101000a900460ff16155b1561313457601160019054906101000a900460ff16612c8357602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c435750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990614c8d565b60405180910390fd5b5b601460009054906101000a900460ff1615612e4b57612ca0611a10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d2757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7f57507f0000000000000000000000009d988a151077eafe065b614092f3b989203c652c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e4a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfc90614d45565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eee5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9557600854811115612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f90614dd7565b60405180910390fd5b600a54612f448361167e565b82612f4f91906146f5565b1115612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8790614e43565b60405180910390fd5b613133565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130385750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561308757600854811115613082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307990614ed5565b60405180910390fd5b613132565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661313157600a546130e48361167e565b826130ef91906146f5565b1115613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312790614e43565b60405180910390fd5b5b5b5b5b5b60006131403061167e565b9050600060095482101590508080156131655750601160029054906101000a900460ff165b801561317e5750600560149054906101000a900460ff16155b80156131d45750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561322a5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132805750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c4576001600560146101000a81548160ff0219169083151502179055506132a861394b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061337a5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561338457600090505b600081156135e157602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e757506000601954115b156134a6576064601954866133fc91906145c1565b6134069190614632565b9050601954601b548261341991906145c1565b6134239190614632565b601e600082825461343491906146f5565b92505081905550601954601c548261344c91906145c1565b6134569190614632565b601f600082825461346791906146f5565b92505081905550601954601a548261347f91906145c1565b6134899190614632565b601d600082825461349a91906146f5565b925050819055506135bd565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561350157506000601554115b156135bc5760646015548661351691906145c1565b6135209190614632565b90506015546017548261353391906145c1565b61353d9190614632565b601e600082825461354e91906146f5565b925050819055506015546018548261356691906145c1565b6135709190614632565b601f600082825461358191906146f5565b925050819055506015546016548261359991906145c1565b6135a39190614632565b601d60008282546135b491906146f5565b925050819055505b5b60008111156135d2576135d18730836136b8565b5b80856135de9190614ef5565b94505b6135ec8787876136b8565b505050505b505050565b600083831115829061363e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136359190614054565b60405180910390fd5b506000838561364d9190614ef5565b9050809150509392505050565b600080828461366991906146f5565b9050838110156136ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a590614f75565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371e90614b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378d90614bb5565b60405180910390fd5b6137a1838383613bcb565b61380c81604051806060016040528060268152602001615283602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061389f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161393e919061420c565b60405180910390a3505050565b60006139563061167e565b90506000601f54601d54601e5461396d91906146f5565b61397791906146f5565b90506000808314806139895750600082145b1561399657505050613bc9565b60146009546139a591906145c1565b8311156139be5760146009546139bb91906145c1565b92505b6000600283601e54866139d191906145c1565b6139db9190614632565b6139e59190614632565b9050600081856139f59190614ef5565b90506000479050613a0582613bd0565b60008147613a139190614ef5565b9050600086601d5483613a2691906145c1565b613a309190614632565b9050600087601f5484613a4391906145c1565b613a4d9190614632565b90506000818385613a5e9190614ef5565b613a689190614ef5565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ac890614fc6565b60006040518083038185875af1925050503d8060008114613b05576040519150601f19603f3d011682016040523d82523d6000602084013e613b0a565b606091505b505080985050600087118015613b205750600081115b15613b3057613b2f8782613e0d565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b7690614fc6565b60006040518083038185875af1925050503d8060008114613bb3576040519150601f19603f3d011682016040523d82523d6000602084013e613bb8565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613bed57613bec614fdb565b5b604051908082528060200260200182016040528015613c1b5781602001602082028036833780820191505090505b5090503081600081518110613c3357613c3261500a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc919061504e565b81600181518110613d1057613d0f61500a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d75307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126cf565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd7959493929190615174565b600060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050505050565b613e38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126cf565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613e9f969594939291906151ce565b60606040518083038185885af1158015613ebd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee2919061522f565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1982613eee565b9050919050565b613f2981613f0e565b8114613f3457600080fd5b50565b600081359050613f4681613f20565b92915050565b60008115159050919050565b613f6181613f4c565b8114613f6c57600080fd5b50565b600081359050613f7e81613f58565b92915050565b60008060408385031215613f9b57613f9a613ee9565b5b6000613fa985828601613f37565b9250506020613fba85828601613f6f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ffe578082015181840152602081019050613fe3565b60008484015250505050565b6000601f19601f8301169050919050565b600061402682613fc4565b6140308185613fcf565b9350614040818560208601613fe0565b6140498161400a565b840191505092915050565b6000602082019050818103600083015261406e818461401b565b905092915050565b6000819050919050565b61408981614076565b811461409457600080fd5b50565b6000813590506140a681614080565b92915050565b600080604083850312156140c3576140c2613ee9565b5b60006140d185828601613f37565b92505060206140e285828601614097565b9150509250929050565b6140f581613f4c565b82525050565b600060208201905061411060008301846140ec565b92915050565b60006020828403121561412c5761412b613ee9565b5b600061413a84828501613f37565b91505092915050565b6000806040838503121561415a57614159613ee9565b5b600061416885828601614097565b925050602061417985828601614097565b9150509250929050565b6000819050919050565b60006141a86141a361419e84613eee565b614183565b613eee565b9050919050565b60006141ba8261418d565b9050919050565b60006141cc826141af565b9050919050565b6141dc816141c1565b82525050565b60006020820190506141f760008301846141d3565b92915050565b61420681614076565b82525050565b600060208201905061422160008301846141fd565b92915050565b6000806000606084860312156142405761423f613ee9565b5b600061424e86828701613f37565b935050602061425f86828701613f37565b925050604061427086828701614097565b9150509250925092565b61428381613f0e565b82525050565b600060208201905061429e600083018461427a565b92915050565b600060ff82169050919050565b6142ba816142a4565b82525050565b60006020820190506142d560008301846142b1565b92915050565b6000806000606084860312156142f4576142f3613ee9565b5b600061430286828701614097565b935050602061431386828701614097565b925050604061432486828701614097565b9150509250925092565b60006020828403121561434457614343613ee9565b5b600061435284828501613f6f565b91505092915050565b60006020828403121561437157614370613ee9565b5b600061437f84828501614097565b91505092915050565b6000806040838503121561439f5761439e613ee9565b5b60006143ad85828601613f37565b92505060206143be85828601613f37565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143fe602083613fcf565b9150614409826143c8565b602082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061446a601783613fcf565b915061447582614434565b602082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144e757607f821691505b6020821081036144fa576144f96144a0565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061455c602d83613fcf565b915061456782614500565b604082019050919050565b6000602082019050818103600083015261458b8161454f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145cc82614076565b91506145d783614076565b92508282026145e581614076565b915082820484148315176145fc576145fb614592565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061463d82614076565b915061464883614076565b92508261465857614657614603565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bf602283613fcf565b91506146ca82614663565b604082019050919050565b600060208201905081810360008301526146ee816146b2565b9050919050565b600061470082614076565b915061470b83614076565b925082820190508082111561472357614722614592565b5b92915050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614785603283613fcf565b915061479082614729565b604082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614817602683613fcf565b9150614822826147bb565b604082019050919050565b600060208201905081810360008301526148468161480a565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614883602083613fcf565b915061488e8261484d565b602082019050919050565b600060208201905081810360008301526148b281614876565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614915602a83613fcf565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b60008151905061495a81614080565b92915050565b60006020828403121561497657614975613ee9565b5b60006149848482850161494b565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149e9602483613fcf565b91506149f48261498d565b604082019050919050565b60006020820190508181036000830152614a18816149dc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a7b602283613fcf565b9150614a8682614a1f565b604082019050919050565b60006020820190508181036000830152614aaa81614a6e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b0d602583613fcf565b9150614b1882614ab1565b604082019050919050565b60006020820190508181036000830152614b3c81614b00565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9f602383613fcf565b9150614baa82614b43565b604082019050919050565b60006020820190508181036000830152614bce81614b92565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614c0b600b83613fcf565b9150614c1682614bd5565b602082019050919050565b60006020820190508181036000830152614c3a81614bfe565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c77601683613fcf565b9150614c8282614c41565b602082019050919050565b60006020820190508181036000830152614ca681614c6a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d2f604983613fcf565b9150614d3a82614cad565b606082019050919050565b60006020820190508181036000830152614d5e81614d22565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614dc1603583613fcf565b9150614dcc82614d65565b604082019050919050565b60006020820190508181036000830152614df081614db4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614e2d601383613fcf565b9150614e3882614df7565b602082019050919050565b60006020820190508181036000830152614e5c81614e20565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614ebf603683613fcf565b9150614eca82614e63565b604082019050919050565b60006020820190508181036000830152614eee81614eb2565b9050919050565b6000614f0082614076565b9150614f0b83614076565b9250828203905081811115614f2357614f22614592565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f5f601b83613fcf565b9150614f6a82614f29565b602082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b600081905092915050565b50565b6000614fb0600083614f95565b9150614fbb82614fa0565b600082019050919050565b6000614fd182614fa3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061504881613f20565b92915050565b60006020828403121561506457615063613ee9565b5b600061507284828501615039565b91505092915050565b6000819050919050565b60006150a061509b6150968461507b565b614183565b614076565b9050919050565b6150b081615085565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150eb81613f0e565b82525050565b60006150fd83836150e2565b60208301905092915050565b6000602082019050919050565b6000615121826150b6565b61512b81856150c1565b9350615136836150d2565b8060005b8381101561516757815161514e88826150f1565b975061515983615109565b92505060018101905061513a565b5085935050505092915050565b600060a08201905061518960008301886141fd565b61519660208301876150a7565b81810360408301526151a88186615116565b90506151b7606083018561427a565b6151c460808301846141fd565b9695505050505050565b600060c0820190506151e3600083018961427a565b6151f060208301886141fd565b6151fd60408301876150a7565b61520a60608301866150a7565b615217608083018561427a565b61522460a08301846141fd565b979650505050505050565b60008060006060848603121561524857615247613ee9565b5b60006152568682870161494b565b93505060206152678682870161494b565b92505060406152788682870161494b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e408e86d3c181eb8b82671489df61ed487517d1aea29e65447f5902d403a484164736f6c63430008130033

Deployed Bytecode Sourcemap

24638:15871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32471:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6958:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9125:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26282:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30449:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24679:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8078:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25257:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25067:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26093:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26053;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9776:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24782:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25163:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25123:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7920:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10540:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24737:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25355:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32338:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32076:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29941:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25904:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25435:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8249:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21423:148;;;;;;;;;;;;;:::i;:::-;;30817:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24874:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25793;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31174:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20781:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24911:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25939:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31061:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7177:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25867:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25311:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26133:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26015:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11261:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25215:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8589:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32224:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26504:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25395:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31798:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31484:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25711:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24948:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29732:153;;;;;;;;;;;;;:::i;:::-;;30174:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25759:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8827:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24990:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25830:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21726:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25977:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25030:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25658:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39526:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32471:190;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32581:1:::1;32561:22;;:8;:22;;::::0;32553:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32647:6;32621:13;:23;32635:8;32621:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32471:190:::0;;:::o;6958:100::-;7012:13;7045:5;7038:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6958:100;:::o;9125:169::-;9208:4;9225:39;9234:12;:10;:12::i;:::-;9248:7;9257:6;9225:8;:39::i;:::-;9282:4;9275:11;;9125:169;;;;:::o;26282:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30449:360::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30555:1:::1;30546:5;:10;;30538:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30670:4;30665:3;30657:5;30641:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:27;;;;:::i;:::-;30640:34;;;;:::i;:::-;30617:20;:57;;;;30703:1;30693:6;:11;;30685:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30797:4;30792:3;30783:6;30767:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;30766:35;;;;:::i;:::-;30754:9;:47;;;;30449:360:::0;;:::o;24679:51::-;;;:::o;8078:108::-;8139:7;8166:12;;8159:19;;8078:108;:::o;25257:47::-;;;;:::o;25067:36::-;;;;:::o;26093:33::-;;;;:::o;26053:::-;;;;:::o;9776:355::-;9916:4;9933:36;9943:6;9951:9;9962:6;9933:9;:36::i;:::-;9980:121;9989:6;9997:12;:10;:12::i;:::-;10011:89;10049:6;10011:89;;;;;;;;;;;;;;;;;:11;:19;10023:6;10011:19;;;;;;;;;;;;;;;:33;10031:12;:10;:12::i;:::-;10011:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9980:8;:121::i;:::-;10119:4;10112:11;;9776:355;;;;;:::o;24782:53::-;24828:6;24782:53;:::o;25163:45::-;;;;:::o;25123:33::-;;;;;;;;;;;;;:::o;7920:93::-;7978:5;8003:2;7996:9;;7920:93;:::o;10540:218::-;10628:4;10645:83;10654:12;:10;:12::i;:::-;10668:7;10677:50;10716:10;10677:11;:25;10689:12;:10;:12::i;:::-;10677:25;;;;;;;;;;;;;;;:34;10703:7;10677:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10645:8;:83::i;:::-;10746:4;10739:11;;10540:218;;;;:::o;24737:38::-;;;:::o;25355:33::-;;;;;;;;;;;;;:::o;32338:125::-;32403:4;32427:19;:28;32447:7;32427:28;;;;;;;;;;;;;;;;;;;;;;;;;32420:35;;32338:125;;;:::o;32076:136::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32186:18:::1;32168:15;;:36;;;;;;;;;;;;;;;;;;32076:136:::0;:::o;29941:159::-;29993:4;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30026:5:::1;30009:14;;:22;;;;;;;;;;;;;;;;;;30065:5;30042:20;;:28;;;;;;;;;;;;;;;;;;30088:4;30081:11;;29941:159:::0;:::o;25904:28::-;;;;:::o;25435:31::-;;;;;;;;;;;;;:::o;8249:127::-;8323:7;8350:9;:18;8360:7;8350:18;;;;;;;;;;;;;;;;8343:25;;8249:127;;;:::o;21423:148::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21530:1:::1;21493:40;;21514:6;;;;;;;;;;;21493:40;;;;;;;;;;;;21561:1;21544:6;;:19;;;;;;;;;;;;;;;;;;21423:148::o:0;30817:144::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30949:4:::1;30907:31;:39;30939:6;30907:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30817:144:::0;;:::o;24874:30::-;;;;;;;;;;;;;:::o;25793:::-;;;;:::o;31174:298::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31308:13:::1;31290:15;:31;;;;31350:13;31332:15;:31;;;;31386:7;31374:9;:19;;;;31455:9;;31437:15;;31419;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;31404:12;:60;;;;31174:298:::0;;;:::o;20781:79::-;20819:7;20846:6;;;;;;;;;;;20839:13;;20781:79;:::o;24911:24::-;;;;;;;;;;;;;:::o;25939:31::-;;;;:::o;31061:101::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31147:7:::1;31133:11;;:21;;;;;;;;;;;;;;;;;;31061:101:::0;:::o;7177:104::-;7233:13;7266:7;7259:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7177:104;:::o;25867:24::-;;;;:::o;25311:35::-;;;;:::o;26133:27::-;;;;:::o;26015:25::-;;;;:::o;11261:269::-;11354:4;11371:129;11380:12;:10;:12::i;:::-;11394:7;11403:96;11442:15;11403:96;;;;;;;;;;;;;;;;;:11;:25;11415:12;:10;:12::i;:::-;11403:25;;;;;;;;;;;;;;;:34;11429:7;11403:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11371:8;:129::i;:::-;11518:4;11511:11;;11261:269;;;;:::o;25215:29::-;;;;:::o;8589:175::-;8675:4;8692:42;8702:12;:10;:12::i;:::-;8716:9;8727:6;8692:9;:42::i;:::-;8752:4;8745:11;;8589:175;;;;:::o;32224:106::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32313:9:::1;32301;;:21;;;;;;;;;;;;;;;;;;32224:106:::0;:::o;26504:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25395:33::-;;;;;;;;;;;;;:::o;31798:132::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31914:8:::1;31883:19;:28;31903:7;31883:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31798:132:::0;;:::o;31484:306::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:13:::1;31601:16;:32;;;;31663:13;31644:16;:32;;;;31700:7;31687:10;:20;;;;31772:10;;31753:16;;31734;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;31718:13;:64;;;;31484:306:::0;;;:::o;25711:39::-;;;;;;;;;;;;;:::o;24948:35::-;;;;:::o;29732:153::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29801:4:::1;29785:13;;:20;;;;;;;;;;;;;;;;;;29830:4;29816:11;;:18;;;;;;;;;;;;;;;;;;29862:15;29845:14;:32;;;;29732:153::o:0;30174:263::-;30255:4;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30291:1:::1;30278:9;:14;;30270:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30406:3;30394:9;30378:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;30357:18;:52;;;;30426:4;30419:11;;30174:263:::0;;;:::o;25759:27::-;;;;:::o;8827:151::-;8916:7;8943:11;:18;8955:5;8943:18;;;;;;;;;;;;;;;:27;8962:7;8943:27;;;;;;;;;;;;;;;;8936:34;;8827:151;;;;:::o;24990:33::-;;;;:::o;25830:30::-;;;;:::o;21726:244::-;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21835:1:::1;21815:22;;:8;:22;;::::0;21807:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21925:8;21896:38;;21917:6;;;;;;;;;;;21896:38;;;;;;;;;;;;21954:8;21945:6;;:17;;;;;;;;;;;;;;;;;;21726:244:::0;:::o;25977:31::-;;;;:::o;25030:24::-;;;;:::o;25658:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;39526:980::-;39610:4;21003:12;:10;:12::i;:::-;20993:22;;:6;;;;;;;;;;;:22;;;20985:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39675:19:::1;;39652:20;;:42;;;;:::i;:::-;39634:15;:60;39626:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;39762:4;39751:7;:15;;39743:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39847:15;39824:20;:38;;;;39925:28;39956:4;:14;;;39971:13;39956:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39925:60;;40043:20;40097:5;40089:7;40066:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;40043:59;;40230:1;40215:12;:16;40211:109;;;40247:61;40263:13;40286:6;40295:12;40247:15;:61::i;:::-;40211:109;40403:19;40440:13;40403:51;;40465:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40494:4;40487:11;;;;;39526:980:::0;;;:::o;1695:98::-;1748:7;1775:10;1768:17;;1695:98;:::o;14447:380::-;14600:1;14583:19;;:5;:19;;;14575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14681:1;14662:21;;:7;:21;;;14654:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14765:6;14735:11;:18;14747:5;14735:18;;;;;;;;;;;;;;;:27;14754:7;14735:27;;;;;;;;;;;;;;;:36;;;;14803:7;14787:32;;14796:5;14787:32;;;14812:6;14787:32;;;;;;:::i;:::-;;;;;;;;14447:380;;;:::o;32669:4174::-;32817:1;32801:18;;:4;:18;;;32793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32894:1;32880:16;;:2;:16;;;32872:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32956:13;:19;32970:4;32956:19;;;;;;;;;;;;;;;;;;;;;;;;;32955:20;:42;;;;;32980:13;:17;32994:2;32980:17;;;;;;;;;;;;;;;;;;;;;;;;;32979:18;32955:42;32947:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33047:1;33037:6;:11;33034:92;;33065:28;33081:4;33087:2;33091:1;33065:15;:28::i;:::-;33108:7;;33034:92;33149:14;;;;;;;;;;;33146:1841;;;33209:7;:5;:7::i;:::-;33201:15;;:4;:15;;;;:49;;;;;33243:7;:5;:7::i;:::-;33237:13;;:2;:13;;;;33201:49;:86;;;;;33285:1;33271:16;;:2;:16;;;;33201:86;:128;;;;;33322:6;33308:21;;:2;:21;;;;33201:128;:158;;;;;33351:8;;;;;;;;;;;33350:9;33201:158;33179:1797;;;33397:13;;;;;;;;;;;33393:148;;33442:19;:25;33462:4;33442:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33471:19;:23;33491:2;33471:23;;;;;;;;;;;;;;;;;;;;;;;;;33442:52;33434:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33393:148;33699:20;;;;;;;;;;;33695:423;;;33753:7;:5;:7::i;:::-;33747:13;;:2;:13;;;;:47;;;;;33778:15;33764:30;;:2;:30;;;;33747:47;:79;;;;;33812:13;33798:28;;:2;:28;;;;33747:79;33743:356;;;33904:12;33862:28;:39;33891:9;33862:39;;;;;;;;;;;;;;;;:54;33854:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34063:12;34021:28;:39;34050:9;34021:39;;;;;;;;;;;;;;;:54;;;;33743:356;33695:423;34187:25;:31;34213:4;34187:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;34223:31;:35;34255:2;34223:35;;;;;;;;;;;;;;;;;;;;;;;;;34222:36;34187:71;34183:778;;;34305:20;;34295:6;:30;;34287:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;34444:9;;34427:13;34437:2;34427:9;:13::i;:::-;34418:6;:22;;;;:::i;:::-;:35;;34410:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34183:778;;;34571:25;:29;34597:2;34571:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;34605:31;:37;34637:4;34605:37;;;;;;;;;;;;;;;;;;;;;;;;;34604:38;34571:71;34567:394;;;34689:20;;34679:6;:30;;34671:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:394;;;34815:31;:35;34847:2;34815:35;;;;;;;;;;;;;;;;;;;;;;;;;34811:150;;34908:9;;34891:13;34901:2;34891:9;:13::i;:::-;34882:6;:22;;;;:::i;:::-;:35;;34874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34811:150;34567:394;34183:778;33179:1797;33146:1841;35001:28;35032:24;35050:4;35032:9;:24::i;:::-;35001:55;;35077:12;35116:18;;35092:20;:42;;35077:57;;35165:7;:35;;;;;35189:11;;;;;;;;;;;35165:35;:61;;;;;35218:8;;;;;;;;;;;35217:9;35165:61;:110;;;;;35244:25;:31;35270:4;35244:31;;;;;;;;;;;;;;;;;;;;;;;;;35243:32;35165:110;:153;;;;;35293:19;:25;35313:4;35293:25;;;;;;;;;;;;;;;;;;;;;;;;;35292:26;35165:153;:194;;;;;35336:19;:23;35356:2;35336:23;;;;;;;;;;;;;;;;;;;;;;;;;35335:24;35165:194;35147:338;;;35397:4;35386:8;;:15;;;;;;;;;;;;;;;;;;35430:10;:8;:10::i;:::-;35468:5;35457:8;;:16;;;;;;;;;;;;;;;;;;35147:338;35497:12;35513:8;;;;;;;;;;;35512:9;35497:24;;35622:19;:25;35642:4;35622:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35651:19;:23;35671:2;35651:23;;;;;;;;;;;;;;;;;;;;;;;;;35622:52;35619:99;;;35701:5;35691:15;;35619:99;35738:12;35842:7;35839:951;;;35893:25;:29;35919:2;35893:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35942:1;35926:13;;:17;35893:50;35889:732;;;35993:3;35979:13;;35970:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;35963:33;;36063:13;;36044:16;;36037:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36015:18;;:61;;;;;;;:::i;:::-;;;;;;;;36131:13;;36118:10;;36111:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;36095:12;;:49;;;;;;;:::i;:::-;;;;;;;;36211:13;;36192:16;;36185:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36163:18;;:61;;;;;;;:::i;:::-;;;;;;;;35889:732;;;36285:25;:31;36311:4;36285:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36335:1;36320:12;;:16;36285:51;36282:339;;;36383:3;36370:12;;36361:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;36354:32;;36449:12;;36431:15;;36424:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36402:18;;:59;;;;;;;:::i;:::-;;;;;;;;36515:12;;36503:9;;36496:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;36480:12;;:47;;;;;;;:::i;:::-;;;;;;;;36593:12;;36575:15;;36568:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36546:18;;:59;;;;;;;:::i;:::-;;;;;;;;36282:339;35889:732;36659:1;36652:4;:8;36649:93;;;36684:42;36700:4;36714;36721;36684:15;:42::i;:::-;36649:93;36774:4;36764:14;;;;;:::i;:::-;;;35839:951;36802:33;36818:4;36824:2;36828:6;36802:15;:33::i;:::-;32782:4061;;;;32669:4174;;;;:::o;16728:192::-;16814:7;16847:1;16842;:6;;16850:12;16834:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16874:9;16890:1;16886;:5;;;;:::i;:::-;16874:17;;16911:1;16904:8;;;16728:192;;;;;:::o;15825:181::-;15883:7;15903:9;15919:1;15915;:5;;;;:::i;:::-;15903:17;;15944:1;15939;:6;;15931:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15997:1;15990:8;;;15825:181;;;;:::o;12020:573::-;12178:1;12160:20;;:6;:20;;;12152:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12262:1;12241:23;;:9;:23;;;12233:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12317:47;12338:6;12346:9;12357:6;12317:20;:47::i;:::-;12397:71;12419:6;12397:71;;;;;;;;;;;;;;;;;:9;:17;12407:6;12397:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12377:9;:17;12387:6;12377:17;;;;;;;;;;;;;;;:91;;;;12502:32;12527:6;12502:9;:20;12512:9;12502:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12479:9;:20;12489:9;12479:20;;;;;;;;;;;;;;;:55;;;;12567:9;12550:35;;12559:6;12550:35;;;12578:6;12550:35;;;;;;:::i;:::-;;;;;;;;12020:573;;;:::o;37995:1523::-;38034:23;38060:24;38078:4;38060:9;:24::i;:::-;38034:50;;38095:25;38165:12;;38144:18;;38123;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;38095:82;;38188:12;38243:1;38224:15;:20;:46;;;;38269:1;38248:17;:22;38224:46;38221:60;;;38273:7;;;;;38221:60;38335:2;38314:18;;:23;;;;:::i;:::-;38296:15;:41;38293:111;;;38390:2;38369:18;;:23;;;;:::i;:::-;38351:41;;38293:111;38473:23;38558:1;38538:17;38517:18;;38499:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;38473:86;;38570:26;38617:15;38599;:33;;;;:::i;:::-;38570:62;;38653:25;38681:21;38653:49;;38715:36;38732:18;38715:16;:36::i;:::-;38773:18;38818:17;38794:21;:41;;;;:::i;:::-;38773:62;;38856:23;38914:17;38895:18;;38882:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;38856:75;;38942:17;38988;38975:12;;38962:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;38942:63;;39026:23;39083:9;39065:15;39052:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;39026:66;;39134:1;39113:18;:22;;;;39167:1;39146:18;:22;;;;39194:1;39179:12;:16;;;;39237:9;;;;;;;;;;;39229:23;;39260:9;39229:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39216:58;;;;;39316:1;39298:15;:19;:42;;;;;39339:1;39321:15;:19;39298:42;39295:119;;;39356:46;39369:15;39386;39356:12;:46::i;:::-;39295:119;39455:15;;;;;;;;;;;39447:29;;39484:21;39447:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39434:76;;;;;38023:1495;;;;;;;;;;37995:1523;:::o;15430:125::-;;;;:::o;36851:601::-;36979:21;37017:1;37003:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36979:40;;37048:4;37030;37035:1;37030:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37074:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37064:4;37069:1;37064:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37109:62;37126:4;37141:15;37159:11;37109:8;:62::i;:::-;37210:15;:66;;;37291:11;37317:1;37361:4;37388;37408:15;37210:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36906:546;36851:601;:::o;37470:517::-;37618:62;37635:4;37650:15;37668:11;37618:8;:62::i;:::-;37723:15;:31;;;37762:9;37795:4;37815:11;37841:1;37884;24828:6;37953:15;37723:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37470:517;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:246::-;2033:1;2043:113;2057:6;2054:1;2051:13;2043:113;;;2142:1;2137:3;2133:11;2127:18;2123:1;2118:3;2114:11;2107:39;2079:2;2076:1;2072:10;2067:15;;2043:113;;;2190:1;2181:6;2176:3;2172:16;2165:27;2014:184;1952:246;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:377::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:65;2621:6;2616:3;2609:4;2602:5;2598:16;2563:65;:::i;:::-;2653:29;2675:6;2653:29;:::i;:::-;2648:3;2644:39;2637:46;;2404:285;2312:377;;;;:::o;2695:313::-;2808:4;2846:2;2835:9;2831:18;2823:26;;2895:9;2889:4;2885:20;2881:1;2870:9;2866:17;2859:47;2923:78;2996:4;2987:6;2923:78;:::i;:::-;2915:86;;2695:313;;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3014:77;;;:::o;3097:122::-;3170:24;3188:5;3170:24;:::i;:::-;3163:5;3160:35;3150:63;;3209:1;3206;3199:12;3150:63;3097:122;:::o;3225:139::-;3271:5;3309:6;3296:20;3287:29;;3325:33;3352:5;3325:33;:::i;:::-;3225:139;;;;:::o;3370:474::-;3438:6;3446;3495:2;3483:9;3474:7;3470:23;3466:32;3463:119;;;3501:79;;:::i;:::-;3463:119;3621:1;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;:::i;:::-;3636:63;;3592:117;3748:2;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3719:118;3370:474;;;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:474::-;4584:6;4592;4641:2;4629:9;4620:7;4616:23;4612:32;4609:119;;;4647:79;;:::i;:::-;4609:119;4767:1;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4738:117;4894:2;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4865:118;4516:474;;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:118::-;6061:24;6079:5;6061:24;:::i;:::-;6056:3;6049:37;5974:118;;:::o;6098:222::-;6191:4;6229:2;6218:9;6214:18;6206:26;;6242:71;6310:1;6299:9;6295:17;6286:6;6242:71;:::i;:::-;6098:222;;;;:::o;6326:619::-;6403:6;6411;6419;6468:2;6456:9;6447:7;6443:23;6439:32;6436:119;;;6474:79;;:::i;:::-;6436:119;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6326:619;;;;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7075:222::-;7168:4;7206:2;7195:9;7191:18;7183:26;;7219:71;7287:1;7276:9;7272:17;7263:6;7219:71;:::i;:::-;7075:222;;;;:::o;7303:86::-;7338:7;7378:4;7371:5;7367:16;7356:27;;7303:86;;;:::o;7395:112::-;7478:22;7494:5;7478:22;:::i;:::-;7473:3;7466:35;7395:112;;:::o;7513:214::-;7602:4;7640:2;7629:9;7625:18;7617:26;;7653:67;7717:1;7706:9;7702:17;7693:6;7653:67;:::i;:::-;7513:214;;;;:::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:182::-;9642:34;9638:1;9630:6;9626:14;9619:58;9502:182;:::o;9690:366::-;9832:3;9853:67;9917:2;9912:3;9853:67;:::i;:::-;9846:74;;9929:93;10018:3;9929:93;:::i;:::-;10047:2;10042:3;10038:12;10031:19;;9690:366;;;:::o;10062:419::-;10228:4;10266:2;10255:9;10251:18;10243:26;;10315:9;10309:4;10305:20;10301:1;10290:9;10286:17;10279:47;10343:131;10469:4;10343:131;:::i;:::-;10335:139;;10062:419;;;:::o;10487:173::-;10627:25;10623:1;10615:6;10611:14;10604:49;10487:173;:::o;10666:366::-;10808:3;10829:67;10893:2;10888:3;10829:67;:::i;:::-;10822:74;;10905:93;10994:3;10905:93;:::i;:::-;11023:2;11018:3;11014:12;11007:19;;10666:366;;;:::o;11038:419::-;11204:4;11242:2;11231:9;11227:18;11219:26;;11291:9;11285:4;11281:20;11277:1;11266:9;11262:17;11255:47;11319:131;11445:4;11319:131;:::i;:::-;11311:139;;11038:419;;;:::o;11463:180::-;11511:77;11508:1;11501:88;11608:4;11605:1;11598:15;11632:4;11629:1;11622:15;11649:320;11693:6;11730:1;11724:4;11720:12;11710:22;;11777:1;11771:4;11767:12;11798:18;11788:81;;11854:4;11846:6;11842:17;11832:27;;11788:81;11916:2;11908:6;11905:14;11885:18;11882:38;11879:84;;11935:18;;:::i;:::-;11879:84;11700:269;11649:320;;;:::o;11975:232::-;12115:34;12111:1;12103:6;12099:14;12092:58;12184:15;12179:2;12171:6;12167:15;12160:40;11975:232;:::o;12213:366::-;12355:3;12376:67;12440:2;12435:3;12376:67;:::i;:::-;12369:74;;12452:93;12541:3;12452:93;:::i;:::-;12570:2;12565:3;12561:12;12554:19;;12213:366;;;:::o;12585:419::-;12751:4;12789:2;12778:9;12774:18;12766:26;;12838:9;12832:4;12828:20;12824:1;12813:9;12809:17;12802:47;12866:131;12992:4;12866:131;:::i;:::-;12858:139;;12585:419;;;:::o;13010:180::-;13058:77;13055:1;13048:88;13155:4;13152:1;13145:15;13179:4;13176:1;13169:15;13196:410;13236:7;13259:20;13277:1;13259:20;:::i;:::-;13254:25;;13293:20;13311:1;13293:20;:::i;:::-;13288:25;;13348:1;13345;13341:9;13370:30;13388:11;13370:30;:::i;:::-;13359:41;;13549:1;13540:7;13536:15;13533:1;13530:22;13510:1;13503:9;13483:83;13460:139;;13579:18;;:::i;:::-;13460:139;13244:362;13196:410;;;;:::o;13612:180::-;13660:77;13657:1;13650:88;13757:4;13754:1;13747:15;13781:4;13778:1;13771:15;13798:185;13838:1;13855:20;13873:1;13855:20;:::i;:::-;13850:25;;13889:20;13907:1;13889:20;:::i;:::-;13884:25;;13928:1;13918:35;;13933:18;;:::i;:::-;13918:35;13975:1;13972;13968:9;13963:14;;13798:185;;;;:::o;13989:221::-;14129:34;14125:1;14117:6;14113:14;14106:58;14198:4;14193:2;14185:6;14181:15;14174:29;13989:221;:::o;14216:366::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:419::-;14754:4;14792:2;14781:9;14777:18;14769:26;;14841:9;14835:4;14831:20;14827:1;14816:9;14812:17;14805:47;14869:131;14995:4;14869:131;:::i;:::-;14861:139;;14588:419;;;:::o;15013:191::-;15053:3;15072:20;15090:1;15072:20;:::i;:::-;15067:25;;15106:20;15124:1;15106:20;:::i;:::-;15101:25;;15149:1;15146;15142:9;15135:16;;15170:3;15167:1;15164:10;15161:36;;;15177:18;;:::i;:::-;15161:36;15013:191;;;;:::o;15210:237::-;15350:34;15346:1;15338:6;15334:14;15327:58;15419:20;15414:2;15406:6;15402:15;15395:45;15210:237;:::o;15453:366::-;15595:3;15616:67;15680:2;15675:3;15616:67;:::i;:::-;15609:74;;15692:93;15781:3;15692:93;:::i;:::-;15810:2;15805:3;15801:12;15794:19;;15453:366;;;:::o;15825:419::-;15991:4;16029:2;16018:9;16014:18;16006:26;;16078:9;16072:4;16068:20;16064:1;16053:9;16049:17;16042:47;16106:131;16232:4;16106:131;:::i;:::-;16098:139;;15825:419;;;:::o;16250:225::-;16390:34;16386:1;16378:6;16374:14;16367:58;16459:8;16454:2;16446:6;16442:15;16435:33;16250:225;:::o;16481:366::-;16623:3;16644:67;16708:2;16703:3;16644:67;:::i;:::-;16637:74;;16720:93;16809:3;16720:93;:::i;:::-;16838:2;16833:3;16829:12;16822:19;;16481:366;;;:::o;16853:419::-;17019:4;17057:2;17046:9;17042:18;17034:26;;17106:9;17100:4;17096:20;17092:1;17081:9;17077:17;17070:47;17134:131;17260:4;17134:131;:::i;:::-;17126:139;;16853:419;;;:::o;17278:182::-;17418:34;17414:1;17406:6;17402:14;17395:58;17278:182;:::o;17466:366::-;17608:3;17629:67;17693:2;17688:3;17629:67;:::i;:::-;17622:74;;17705:93;17794:3;17705:93;:::i;:::-;17823:2;17818:3;17814:12;17807:19;;17466:366;;;:::o;17838:419::-;18004:4;18042:2;18031:9;18027:18;18019:26;;18091:9;18085:4;18081:20;18077:1;18066:9;18062:17;18055:47;18119:131;18245:4;18119:131;:::i;:::-;18111:139;;17838:419;;;:::o;18263:229::-;18403:34;18399:1;18391:6;18387:14;18380:58;18472:12;18467:2;18459:6;18455:15;18448:37;18263:229;:::o;18498:366::-;18640:3;18661:67;18725:2;18720:3;18661:67;:::i;:::-;18654:74;;18737:93;18826:3;18737:93;:::i;:::-;18855:2;18850:3;18846:12;18839:19;;18498:366;;;:::o;18870:419::-;19036:4;19074:2;19063:9;19059:18;19051:26;;19123:9;19117:4;19113:20;19109:1;19098:9;19094:17;19087:47;19151:131;19277:4;19151:131;:::i;:::-;19143:139;;18870:419;;;:::o;19295:143::-;19352:5;19383:6;19377:13;19368:22;;19399:33;19426:5;19399:33;:::i;:::-;19295:143;;;;:::o;19444:351::-;19514:6;19563:2;19551:9;19542:7;19538:23;19534:32;19531:119;;;19569:79;;:::i;:::-;19531:119;19689:1;19714:64;19770:7;19761:6;19750:9;19746:22;19714:64;:::i;:::-;19704:74;;19660:128;19444:351;;;;:::o;19801:223::-;19941:34;19937:1;19929:6;19925:14;19918:58;20010:6;20005:2;19997:6;19993:15;19986:31;19801:223;:::o;20030:366::-;20172:3;20193:67;20257:2;20252:3;20193:67;:::i;:::-;20186:74;;20269:93;20358:3;20269:93;:::i;:::-;20387:2;20382:3;20378:12;20371:19;;20030:366;;;:::o;20402:419::-;20568:4;20606:2;20595:9;20591:18;20583:26;;20655:9;20649:4;20645:20;20641:1;20630:9;20626:17;20619:47;20683:131;20809:4;20683:131;:::i;:::-;20675:139;;20402:419;;;:::o;20827:221::-;20967:34;20963:1;20955:6;20951:14;20944:58;21036:4;21031:2;21023:6;21019:15;21012:29;20827:221;:::o;21054:366::-;21196:3;21217:67;21281:2;21276:3;21217:67;:::i;:::-;21210:74;;21293:93;21382:3;21293:93;:::i;:::-;21411:2;21406:3;21402:12;21395:19;;21054:366;;;:::o;21426:419::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21679:9;21673:4;21669:20;21665:1;21654:9;21650:17;21643:47;21707:131;21833:4;21707:131;:::i;:::-;21699:139;;21426:419;;;:::o;21851:224::-;21991:34;21987:1;21979:6;21975:14;21968:58;22060:7;22055:2;22047:6;22043:15;22036:32;21851:224;:::o;22081:366::-;22223:3;22244:67;22308:2;22303:3;22244:67;:::i;:::-;22237:74;;22320:93;22409:3;22320:93;:::i;:::-;22438:2;22433:3;22429:12;22422:19;;22081:366;;;:::o;22453:419::-;22619:4;22657:2;22646:9;22642:18;22634:26;;22706:9;22700:4;22696:20;22692:1;22681:9;22677:17;22670:47;22734:131;22860:4;22734:131;:::i;:::-;22726:139;;22453:419;;;:::o;22878:222::-;23018:34;23014:1;23006:6;23002:14;22995:58;23087:5;23082:2;23074:6;23070:15;23063:30;22878:222;:::o;23106:366::-;23248:3;23269:67;23333:2;23328:3;23269:67;:::i;:::-;23262:74;;23345:93;23434:3;23345:93;:::i;:::-;23463:2;23458:3;23454:12;23447:19;;23106:366;;;:::o;23478:419::-;23644:4;23682:2;23671:9;23667:18;23659:26;;23731:9;23725:4;23721:20;23717:1;23706:9;23702:17;23695:47;23759:131;23885:4;23759:131;:::i;:::-;23751:139;;23478:419;;;:::o;23903:161::-;24043:13;24039:1;24031:6;24027:14;24020:37;23903:161;:::o;24070:366::-;24212:3;24233:67;24297:2;24292:3;24233:67;:::i;:::-;24226:74;;24309:93;24398:3;24309:93;:::i;:::-;24427:2;24422:3;24418:12;24411:19;;24070:366;;;:::o;24442:419::-;24608:4;24646:2;24635:9;24631:18;24623:26;;24695:9;24689:4;24685:20;24681:1;24670:9;24666:17;24659:47;24723:131;24849:4;24723:131;:::i;:::-;24715:139;;24442:419;;;:::o;24867:172::-;25007:24;25003:1;24995:6;24991:14;24984:48;24867:172;:::o;25045:366::-;25187:3;25208:67;25272:2;25267:3;25208:67;:::i;:::-;25201:74;;25284:93;25373:3;25284:93;:::i;:::-;25402:2;25397:3;25393:12;25386:19;;25045:366;;;:::o;25417:419::-;25583:4;25621:2;25610:9;25606:18;25598:26;;25670:9;25664:4;25660:20;25656:1;25645:9;25641:17;25634:47;25698:131;25824:4;25698:131;:::i;:::-;25690:139;;25417:419;;;:::o;25842:297::-;25982:34;25978:1;25970:6;25966:14;25959:58;26051:34;26046:2;26038:6;26034:15;26027:59;26120:11;26115:2;26107:6;26103:15;26096:36;25842:297;:::o;26145:366::-;26287:3;26308:67;26372:2;26367:3;26308:67;:::i;:::-;26301:74;;26384:93;26473:3;26384:93;:::i;:::-;26502:2;26497:3;26493:12;26486:19;;26145:366;;;:::o;26517:419::-;26683:4;26721:2;26710:9;26706:18;26698:26;;26770:9;26764:4;26760:20;26756:1;26745:9;26741:17;26734:47;26798:131;26924:4;26798:131;:::i;:::-;26790:139;;26517:419;;;:::o;26942:240::-;27082:34;27078:1;27070:6;27066:14;27059:58;27151:23;27146:2;27138:6;27134:15;27127:48;26942:240;:::o;27188:366::-;27330:3;27351:67;27415:2;27410:3;27351:67;:::i;:::-;27344:74;;27427:93;27516:3;27427:93;:::i;:::-;27545:2;27540:3;27536:12;27529:19;;27188:366;;;:::o;27560:419::-;27726:4;27764:2;27753:9;27749:18;27741:26;;27813:9;27807:4;27803:20;27799:1;27788:9;27784:17;27777:47;27841:131;27967:4;27841:131;:::i;:::-;27833:139;;27560:419;;;:::o;27985:169::-;28125:21;28121:1;28113:6;28109:14;28102:45;27985:169;:::o;28160:366::-;28302:3;28323:67;28387:2;28382:3;28323:67;:::i;:::-;28316:74;;28399:93;28488:3;28399:93;:::i;:::-;28517:2;28512:3;28508:12;28501:19;;28160:366;;;:::o;28532:419::-;28698:4;28736:2;28725:9;28721:18;28713:26;;28785:9;28779:4;28775:20;28771:1;28760:9;28756:17;28749:47;28813:131;28939:4;28813:131;:::i;:::-;28805:139;;28532:419;;;:::o;28957:241::-;29097:34;29093:1;29085:6;29081:14;29074:58;29166:24;29161:2;29153:6;29149:15;29142:49;28957:241;:::o;29204:366::-;29346:3;29367:67;29431:2;29426:3;29367:67;:::i;:::-;29360:74;;29443:93;29532:3;29443:93;:::i;:::-;29561:2;29556:3;29552:12;29545:19;;29204:366;;;:::o;29576:419::-;29742:4;29780:2;29769:9;29765:18;29757:26;;29829:9;29823:4;29819:20;29815:1;29804:9;29800:17;29793:47;29857:131;29983:4;29857:131;:::i;:::-;29849:139;;29576:419;;;:::o;30001:194::-;30041:4;30061:20;30079:1;30061:20;:::i;:::-;30056:25;;30095:20;30113:1;30095:20;:::i;:::-;30090:25;;30139:1;30136;30132:9;30124:17;;30163:1;30157:4;30154:11;30151:37;;;30168:18;;:::i;:::-;30151:37;30001:194;;;;:::o;30201:177::-;30341:29;30337:1;30329:6;30325:14;30318:53;30201:177;:::o;30384:366::-;30526:3;30547:67;30611:2;30606:3;30547:67;:::i;:::-;30540:74;;30623:93;30712:3;30623:93;:::i;:::-;30741:2;30736:3;30732:12;30725:19;;30384:366;;;:::o;30756:419::-;30922:4;30960:2;30949:9;30945:18;30937:26;;31009:9;31003:4;30999:20;30995:1;30984:9;30980:17;30973:47;31037:131;31163:4;31037:131;:::i;:::-;31029:139;;30756:419;;;:::o;31181:147::-;31282:11;31319:3;31304:18;;31181:147;;;;:::o;31334:114::-;;:::o;31454:398::-;31613:3;31634:83;31715:1;31710:3;31634:83;:::i;:::-;31627:90;;31726:93;31815:3;31726:93;:::i;:::-;31844:1;31839:3;31835:11;31828:18;;31454:398;;;:::o;31858:379::-;32042:3;32064:147;32207:3;32064:147;:::i;:::-;32057:154;;32228:3;32221:10;;31858:379;;;:::o;32243:180::-;32291:77;32288:1;32281:88;32388:4;32385:1;32378:15;32412:4;32409:1;32402:15;32429:180;32477:77;32474:1;32467:88;32574:4;32571:1;32564:15;32598:4;32595:1;32588:15;32615:143;32672:5;32703:6;32697:13;32688:22;;32719:33;32746:5;32719:33;:::i;:::-;32615:143;;;;:::o;32764:351::-;32834:6;32883:2;32871:9;32862:7;32858:23;32854:32;32851:119;;;32889:79;;:::i;:::-;32851:119;33009:1;33034:64;33090:7;33081:6;33070:9;33066:22;33034:64;:::i;:::-;33024:74;;32980:128;32764:351;;;;:::o;33121:85::-;33166:7;33195:5;33184:16;;33121:85;;;:::o;33212:158::-;33270:9;33303:61;33321:42;33330:32;33356:5;33330:32;:::i;:::-;33321:42;:::i;:::-;33303:61;:::i;:::-;33290:74;;33212:158;;;:::o;33376:147::-;33471:45;33510:5;33471:45;:::i;:::-;33466:3;33459:58;33376:147;;:::o;33529:114::-;33596:6;33630:5;33624:12;33614:22;;33529:114;;;:::o;33649:184::-;33748:11;33782:6;33777:3;33770:19;33822:4;33817:3;33813:14;33798:29;;33649:184;;;;:::o;33839:132::-;33906:4;33929:3;33921:11;;33959:4;33954:3;33950:14;33942:22;;33839:132;;;:::o;33977:108::-;34054:24;34072:5;34054:24;:::i;:::-;34049:3;34042:37;33977:108;;:::o;34091:179::-;34160:10;34181:46;34223:3;34215:6;34181:46;:::i;:::-;34259:4;34254:3;34250:14;34236:28;;34091:179;;;;:::o;34276:113::-;34346:4;34378;34373:3;34369:14;34361:22;;34276:113;;;:::o;34425:732::-;34544:3;34573:54;34621:5;34573:54;:::i;:::-;34643:86;34722:6;34717:3;34643:86;:::i;:::-;34636:93;;34753:56;34803:5;34753:56;:::i;:::-;34832:7;34863:1;34848:284;34873:6;34870:1;34867:13;34848:284;;;34949:6;34943:13;34976:63;35035:3;35020:13;34976:63;:::i;:::-;34969:70;;35062:60;35115:6;35062:60;:::i;:::-;35052:70;;34908:224;34895:1;34892;34888:9;34883:14;;34848:284;;;34852:14;35148:3;35141:10;;34549:608;;;34425:732;;;;:::o;35163:831::-;35426:4;35464:3;35453:9;35449:19;35441:27;;35478:71;35546:1;35535:9;35531:17;35522:6;35478:71;:::i;:::-;35559:80;35635:2;35624:9;35620:18;35611:6;35559:80;:::i;:::-;35686:9;35680:4;35676:20;35671:2;35660:9;35656:18;35649:48;35714:108;35817:4;35808:6;35714:108;:::i;:::-;35706:116;;35832:72;35900:2;35889:9;35885:18;35876:6;35832:72;:::i;:::-;35914:73;35982:3;35971:9;35967:19;35958:6;35914:73;:::i;:::-;35163:831;;;;;;;;:::o;36000:807::-;36249:4;36287:3;36276:9;36272:19;36264:27;;36301:71;36369:1;36358:9;36354:17;36345:6;36301:71;:::i;:::-;36382:72;36450:2;36439:9;36435:18;36426:6;36382:72;:::i;:::-;36464:80;36540:2;36529:9;36525:18;36516:6;36464:80;:::i;:::-;36554;36630:2;36619:9;36615:18;36606:6;36554:80;:::i;:::-;36644:73;36712:3;36701:9;36697:19;36688:6;36644:73;:::i;:::-;36727;36795:3;36784:9;36780:19;36771:6;36727:73;:::i;:::-;36000:807;;;;;;;;;:::o;36813:663::-;36901:6;36909;36917;36966:2;36954:9;36945:7;36941:23;36937:32;36934:119;;;36972:79;;:::i;:::-;36934:119;37092:1;37117:64;37173:7;37164:6;37153:9;37149:22;37117:64;:::i;:::-;37107:74;;37063:128;37230:2;37256:64;37312:7;37303:6;37292:9;37288:22;37256:64;:::i;:::-;37246:74;;37201:129;37369:2;37395:64;37451:7;37442:6;37431:9;37427:22;37395:64;:::i;:::-;37385:74;;37340:129;36813:663;;;;;:::o

Swarm Source

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