ETH Price: $3,417.06 (+0.35%)
Gas: 8 Gwei

Token

Decentra Inu (WOOF)
 

Overview

Max Total Supply

1,000,000 WOOF

Holders

15

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,950.000000000000051349 WOOF

Value
$0.00
0x2c4d8491da647594086af2c4300b71d28b501119
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:
TOKEN

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-17
*/

// SPDX-License-Identifier: Unlicensed

        pragma solidity ^0.8.4;

        interface IERC20 {
            
            function totalSupply() external view returns (uint256);
            function balanceOf(address account) external view returns (uint256);
            function transfer(address recipient, uint256 amount) external returns (bool);
            function allowance(address owner, address spender) external view returns (uint256);
            function approve(address spender, uint256 amount) external returns (bool);
            function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
            
            event Transfer(address indexed from, address indexed to, uint256 value);
            event Approval(address indexed owner, address indexed spender, uint256 value);
        }

        library SafeMath {
            
            function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    uint256 c = a + b;
                    if (c < a) return (false, 0);
                    return (true, c);
                }
            }
            
            function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    if (b > a) return (false, 0);
                    return (true, a - b);
                }
            }
            
            function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
                    // benefit is lost if 'b' is also tested.
                    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
                    if (a == 0) return (true, 0);
                    uint256 c = a * b;
                    if (c / a != b) return (false, 0);
                    return (true, c);
                }
            }
            
            function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    if (b == 0) return (false, 0);
                    return (true, a / b);
                }
            }
            
            function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
                unchecked {
                    if (b == 0) return (false, 0);
                    return (true, a % b);
                }
            }

            function add(uint256 a, uint256 b) internal pure returns (uint256) {
                return a + b;
            }


            function sub(uint256 a, uint256 b) internal pure returns (uint256) {
                return a - b;
            }


            function mul(uint256 a, uint256 b) internal pure returns (uint256) {
                return a * b;
            }
            
            function div(uint256 a, uint256 b) internal pure returns (uint256) {
                return a / b;
            }


            function mod(uint256 a, uint256 b) internal pure returns (uint256) {
                return a % b;
            }
            
            function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
                unchecked {
                    require(b <= a, errorMessage);
                    return a - b;
                }
            }
            
            function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
                unchecked {
                    require(b > 0, errorMessage);
                    return a / b;
                }
            }
            
            function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
                unchecked {
                    require(b > 0, errorMessage);
                    return a % b;
                }
            }
        }

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

        library Address {
            
            function isContract(address account) internal view returns (bool) {
                uint256 size;
                assembly { size := extcodesize(account) }
                return size > 0;
            }

            function sendValue(address payable recipient, uint256 amount) internal {
                require(address(this).balance >= amount, "Address: insufficient balance");
                (bool success, ) = recipient.call{ value: amount }("");
                require(success, "Address: unable to send value, recipient may have reverted");
            }
            
            function functionCall(address target, bytes memory data) internal returns (bytes memory) {
            return functionCall(target, data, "Address: low-level call failed");
            }
            
            function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
                return functionCallWithValue(target, data, 0, errorMessage);
            }
            
            function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
                return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
            }
            
            function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
                require(address(this).balance >= value, "Address: insufficient balance for call");
                require(isContract(target), "Address: call to non-contract");
                (bool success, bytes memory returndata) = target.call{ value: value }(data);
                return _verifyCallResult(success, returndata, errorMessage);
            }
            
            function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
                return functionStaticCall(target, data, "Address: low-level static call failed");
            }
            
            function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
                require(isContract(target), "Address: static call to non-contract");
                (bool success, bytes memory returndata) = target.staticcall(data);
                return _verifyCallResult(success, returndata, errorMessage);
            }


            function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
                return functionDelegateCall(target, data, "Address: low-level delegate call failed");
            }
            
            function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
                require(isContract(target), "Address: delegate call to non-contract");
                (bool success, bytes memory returndata) = target.delegatecall(data);
                return _verifyCallResult(success, returndata, errorMessage);
            }

            function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
                if (success) {
                    return returndata;
                } else {
                    if (returndata.length > 0) {
                        assembly {
                            let returndata_size := mload(returndata)
                            revert(add(32, returndata), returndata_size)
                        }
                    } else {
                        revert(errorMessage);
                    }
                }
            }
        }

        abstract contract Ownable is Context {
            address internal _owner;
            address private _previousOwner;

            event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
            constructor () {
                _owner = _msgSender();
                emit OwnershipTransferred(address(0), _owner);
            }
            
            function owner() public view virtual returns (address) {
                return _owner;
            }
            
            modifier onlyOwner() {
                require(owner() == _msgSender(), "Ownable: caller is not the owner");
                _;
            }
            
            function renounceOwnership() public virtual onlyOwner {
                emit OwnershipTransferred(_owner, address(0));
                _owner = address(0);
            }


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

         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,Ownable, 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 {}
        }


        interface IUniswapV2Factory {
            event PairCreated(address indexed token0, address indexed token1, address pair, uint);
            function feeTo() external view returns (address);
            function feeToSetter() external view returns (address);
            function getPair(address tokenA, address tokenB) external view returns (address pair);
            function allPairs(uint) external view returns (address pair);
            function allPairsLength() external view returns (uint);
            function createPair(address tokenA, address tokenB) external returns (address pair);
            function setFeeTo(address) external;
            function setFeeToSetter(address) external;
        }

        interface IUniswapV2Pair {
            event Approval(address indexed owner, address indexed spender, uint value);
            event Transfer(address indexed from, address indexed to, uint value);
            function name() external pure returns (string memory);
            function symbol() external pure returns (string memory);
            function decimals() external pure returns (uint8);
            function totalSupply() external view returns (uint);
            function balanceOf(address owner) external view returns (uint);
            function allowance(address owner, address spender) external view returns (uint);
            function approve(address spender, uint value) external returns (bool);
            function transfer(address to, uint value) external returns (bool);
            function transferFrom(address from, address to, uint value) external returns (bool);
            function DOMAIN_SEPARATOR() external view returns (bytes32);
            function PERMIT_TYPEHASH() external pure returns (bytes32);
            function nonces(address owner) external view returns (uint);
            function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
            event Mint(address indexed sender, uint amount0, uint amount1);
            event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
            event Swap(
                address indexed sender,
                uint amount0In,
                uint amount1In,
                uint amount0Out,
                uint amount1Out,
                address indexed to
            );
            event Sync(uint112 reserve0, uint112 reserve1);
            function MINIMUM_LIQUIDITY() external pure returns (uint);
            function factory() external view returns (address);
            function token0() external view returns (address);
            function token1() external view returns (address);
            function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
            function price0CumulativeLast() external view returns (uint);
            function price1CumulativeLast() external view returns (uint);
            function kLast() external view returns (uint);
            function mint(address to) external returns (uint liquidity);
            function burn(address to) external returns (uint amount0, uint amount1);
            function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
            function skim(address to) external;
            function sync() external;
            function initialize(address, address) external;
        }

        interface IUniswapV2Router01 {
            function factory() external pure returns (address);
            function WETH() external pure returns (address);
            function addLiquidity(
                address tokenA,
                address tokenB,
                uint amountADesired,
                uint amountBDesired,
                uint amountAMin,
                uint amountBMin,
                address to,
                uint deadline
            ) external returns (uint amountA, uint amountB, uint liquidity);
            function addLiquidityETH(
                address token,
                uint amountTokenDesired,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
            function removeLiquidity(
                address tokenA,
                address tokenB,
                uint liquidity,
                uint amountAMin,
                uint amountBMin,
                address to,
                uint deadline
            ) external returns (uint amountA, uint amountB);
            function removeLiquidityETH(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external returns (uint amountToken, uint amountETH);
            function removeLiquidityWithPermit(
                address tokenA,
                address tokenB,
                uint liquidity,
                uint amountAMin,
                uint amountBMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountA, uint amountB);
            function removeLiquidityETHWithPermit(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountToken, uint amountETH);
            function swapExactTokensForTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external returns (uint[] memory amounts);
            function swapTokensForExactTokens(
                uint amountOut,
                uint amountInMax,
                address[] calldata path,
                address to,
                uint deadline
            ) external returns (uint[] memory amounts);
            function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
                external
                payable
                returns (uint[] memory amounts);
            function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
                external
                returns (uint[] memory amounts);
            function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
                external
                returns (uint[] memory amounts);
            function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
                external
                payable
                returns (uint[] memory amounts);

            function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
            function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
            function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
            function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
            function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
        }

        interface IUniswapV2Router02 is IUniswapV2Router01 {
            function removeLiquidityETHSupportingFeeOnTransferTokens(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external returns (uint amountETH);
            function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountETH);

            function swapExactTokensForTokensSupportingFeeOnTransferTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external;
            function swapExactETHForTokensSupportingFeeOnTransferTokens(
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external payable;
            function swapExactTokensForETHSupportingFeeOnTransferTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external;
        }

        contract TOKEN is ERC20 {
            using SafeMath for uint256;
            using Address for address;

            mapping (address => bool) private _isExcludedFromFee;
            mapping(address => bool) private _isExcludedFromMaxWallet;

           
            address public  _devAddress;
            address private _burnAddress;

            // Buy tax
            uint256 public _buyDevFee = 25;
            // Sell tax    
            uint256 public _sellDevFee = 200;

            IUniswapV2Router02 public uniswapV2Router;
            address public uniswapV2Pair;
            bool inSwapAndLiquify;
            bool public swapAndSendFeeEnabled = true;
            uint256 public numTokensSellToSendFees;
            uint256 public _maxWalletBalance;
            event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
            event swapAndSendFeeEnabledUpdated(bool enabled);
            
            constructor () ERC20("Decentra Inu", "WOOF"){


                 numTokensSellToSendFees = 10000 * 10 ** decimals();
                _maxWalletBalance = 15000 * 10 ** decimals();
                _devAddress = 0xdEd78C19e0bf79a40Fd4E799A880E9D737afA46E;
                _burnAddress = 0x000000000000000000000000000000000000dEaD;

                
                IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
                // Create a uniswap pair for this new token
                uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                    .createPair(address(this), _uniswapV2Router.WETH());

                // set the rest of the contract variables
                uniswapV2Router = _uniswapV2Router;
                
                //exclude owner and this contract from fee
                _isExcludedFromFee[_msgSender()] = true;
                _isExcludedFromFee[address(this)] = true;
                _isExcludedFromFee[_burnAddress]= true;
                _isExcludedFromFee[_devAddress]= true;

                // exclude from the Max wallet balance 
               _isExcludedFromMaxWallet[owner()] = true;
               _isExcludedFromMaxWallet[address(this)] = true;
               _isExcludedFromMaxWallet[_burnAddress] = true;
               _isExcludedFromMaxWallet[_devAddress] = true;


                /*
                    _mint is an internal function in ERC20.sol that is only called here,
                    and CANNOT be called ever again
                */
                _mint(owner(), 1000000 * 10 ** decimals());		
                
            }

            function excludeFromFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = true;
            }
            
            function includeInFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = false;
            }

             function includeAndExcludedFromMaxWallet(address account, bool value) public onlyOwner {
            _isExcludedFromMaxWallet[account] = value;
            }

            function isExcludedFromMaxWallet(address account) public view returns(bool){
                return _isExcludedFromMaxWallet[account];
            }

            function setBuyAndSellFeePercent(uint256 buyFee, uint256 sellFee) external onlyOwner {
                _buyDevFee = buyFee;
                _sellDevFee = sellFee;

            }

            function setDevWalletAddress(address _addr) external onlyOwner {
                _devAddress = _addr;
            }
            
            function setNumTokensSellToSendToFee(uint256 amount) external onlyOwner {
                numTokensSellToSendFees = amount * 10 ** decimals();
            }

            function setMaxBalance(uint256 maxBalancePercent) external onlyOwner {
                _maxWalletBalance = maxBalancePercent * 10** decimals();
            }

            function setRouterAddress(address newRouter) external onlyOwner {
                IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
                uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
                uniswapV2Router = _uniswapV2Router;
            }

            function setSwapAndSendFeeEnabled(bool _enabled) external onlyOwner {
                swapAndSendFeeEnabled = _enabled;
                emit swapAndSendFeeEnabledUpdated(_enabled);
            }
            
            //to recieve ETH from uniswapV2Router when swaping
            receive() external payable {}

            // to withdraw stucked ETH 
            function withdrawStuckedFunds(uint amount) external onlyOwner{
                // This is the current recommended method to use.
                (bool sent,) = _owner.call{value: amount}("");
                require(sent, "Failed to send ETH");    
            }

            // Withdraw stuked tokens 
            function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
            return IERC20(tokenAddress).transfer(msg.sender, tokens);
            }
        

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

            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(amount > 0, "Transfer amount must be greater than zero");
                
                if (
                    from != owner() &&
                    to != address(this) &&
                    to != _burnAddress &&
                    to != uniswapV2Pair ) 
                {
                    uint256 currentBalance = balanceOf(to);
                    require(_isExcludedFromMaxWallet[to] || (currentBalance + amount <= _maxWalletBalance),
                            "ERC20: Reached max wallet holding");
                }

                uint256 contractTokenBalance = balanceOf(address(this)); 
                bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSendFees;
                if (
                    overMinTokenBalance &&
                    !inSwapAndLiquify &&
                    from != uniswapV2Pair &&
                    swapAndSendFeeEnabled
                ) {
                    contractTokenBalance = numTokensSellToSendFees;
                    inSwapAndLiquify = true;
                    swapBack(contractTokenBalance);
                    inSwapAndLiquify = false;
                }
                
                if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
                super._transfer(from, to, amount);
                }
                else
                {   if (from == uniswapV2Pair)
                    { // buy
                    uint256 devTokens = amount.mul(_buyDevFee).div(1000);
                    amount= amount.sub(devTokens);
                    super._transfer(from, address(this), devTokens);
                    super._transfer(from, to, amount);
                    }
                     else if (to == uniswapV2Pair)
                    { // sell
                    uint256 devTokens = amount.mul(_sellDevFee).div(1000);
                    amount= amount.sub(devTokens);
                    super._transfer(from, address(this),devTokens);
                    super._transfer(from, to, amount);
                    }
                     else
                    {   // transfer
                        super._transfer(from, to, amount);
                    }
                }                
            }

            function swapBack(uint256 contractBalance) private {

                 swapTokensForEth(contractBalance);                
               }       

        

            function swapTokensForEth(uint256 tokenAmount) private {
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = uniswapV2Router.WETH();
                _approve(address(this), address(uniswapV2Router), tokenAmount);
                uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    tokenAmount,
                    0, // accept any amount of ETH
                    path,
                    _devAddress,
                    block.timestamp
                );
            }
    
        }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndSendFeeEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToSendFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setBuyAndSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToSendToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526019600b5560c8600c556001600e60156101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600c81526020017f446563656e74726120496e7500000000000000000000000000000000000000008152506040518060400160405280600481526020017f574f4f4600000000000000000000000000000000000000000000000000000000815250620000b36200084b60201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600590816200017e919062000ccc565b50806006908162000190919062000ccc565b505050620001a36200085360201b60201c565b600a620001b1919062000f43565b612710620001c0919062000f94565b600f81905550620001d66200085360201b60201c565b600a620001e4919062000f43565b613a98620001f3919062000f94565b60108190555073ded78c19e0bf79a40fd4e799a880e9d737afa46e600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031c91906200105f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000384573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003aa91906200105f565b6040518363ffffffff1660e01b8152600401620003c9929190620010a2565b6020604051808303816000875af1158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f91906200105f565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620004a66200084b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620006596200085c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008446200080a6200085c60201b60201c565b6200081a6200085360201b60201c565b600a62000828919062000f43565b620f424062000838919062000f94565b6200088560201b60201c565b50620011bb565b600033905090565b60006012905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ee9062001130565b60405180910390fd5b6200090b6000838362000a3560201b60201c565b620009278160045462000a3a60201b62001c0b1790919060201c565b6004819055506200098681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a3a60201b62001c0b1790919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a29919062001163565b60405180910390a35050565b505050565b6000818362000a4a919062001180565b905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ad457607f821691505b60208210810362000aea5762000ae962000a8c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b15565b62000b60868362000b15565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bad62000ba762000ba18462000b78565b62000b82565b62000b78565b9050919050565b6000819050919050565b62000bc98362000b8c565b62000be162000bd88262000bb4565b84845462000b22565b825550505050565b600090565b62000bf862000be9565b62000c0581848462000bbe565b505050565b5b8181101562000c2d5762000c2160008262000bee565b60018101905062000c0b565b5050565b601f82111562000c7c5762000c468162000af0565b62000c518462000b05565b8101602085101562000c61578190505b62000c7962000c708562000b05565b83018262000c0a565b50505b505050565b600082821c905092915050565b600062000ca16000198460080262000c81565b1980831691505092915050565b600062000cbc838362000c8e565b9150826002028217905092915050565b62000cd78262000a52565b67ffffffffffffffff81111562000cf35762000cf262000a5d565b5b62000cff825462000abb565b62000d0c82828562000c31565b600060209050601f83116001811462000d44576000841562000d2f578287015190505b62000d3b858262000cae565b86555062000dab565b601f19841662000d548662000af0565b60005b8281101562000d7e5784890151825560018201915060208501945060208101905062000d57565b8683101562000d9e578489015162000d9a601f89168262000c8e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e415780860481111562000e195762000e1862000db3565b5b600185161562000e295780820291505b808102905062000e398562000de2565b945062000df9565b94509492505050565b60008262000e5c576001905062000f2f565b8162000e6c576000905062000f2f565b816001811462000e85576002811462000e905762000ec6565b600191505062000f2f565b60ff84111562000ea55762000ea462000db3565b5b8360020a91508482111562000ebf5762000ebe62000db3565b5b5062000f2f565b5060208310610133831016604e8410600b841016171562000f005782820a90508381111562000efa5762000ef962000db3565b5b62000f2f565b62000f0f848484600162000def565b9250905081840481111562000f295762000f2862000db3565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f508262000b78565b915062000f5d8362000f36565b925062000f8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e4a565b905092915050565b600062000fa18262000b78565b915062000fae8362000b78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fea5762000fe962000db3565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010278262000ffa565b9050919050565b62001039816200101a565b81146200104557600080fd5b50565b60008151905062001059816200102e565b92915050565b60006020828403121562001078576200107762000ff5565b5b6000620010888482850162001048565b91505092915050565b6200109c816200101a565b82525050565b6000604082019050620010b9600083018562001091565b620010c8602083018462001091565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001118601f83620010cf565b91506200112582620010e0565b602082019050919050565b600060208201905081810360008301526200114b8162001109565b9050919050565b6200115d8162000b78565b82525050565b60006020820190506200117a600083018462001152565b92915050565b60006200118d8262000b78565b91506200119a8362000b78565b9250828201905080821115620011b557620011b462000db3565b5b92915050565b6139b780620011cb6000396000f3fe6080604052600436106102085760003560e01c80636af6592911610118578063a9059cbb116100a0578063d4a5af841161006f578063d4a5af841461079c578063dd62ed3e146107c7578063ea2f0b3714610804578063ea50cf4e1461082d578063f2fde38b146108565761020f565b8063a9059cbb146106e2578063ad04455e1461071f578063c9cf778914610748578063caea37b7146107735761020f565b80637bc4c447116100e75780637bc4c447146105fd5780638da5cb5b1461062657806395d89b41146106515780639d51d9b71461067c578063a457c2d7146106a55761020f565b80636af65929146105415780636dd3d39f1461056c57806370a08231146105a9578063715018a6146105e65761020f565b80633d0dbec01161019b57806349bd5a5e1161016a57806349bd5a5e146104465780635342acb41461047157806353cae9cf146104ae5780635d729d8c146104d957806362015852146105165761020f565b80633d0dbec0146103a057806341cb87fc146103cb578063437823ec146103f457806348eb61b61461041d5761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f578063120a06121461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961087f565b6040516102369190612a40565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612afb565b610911565b6040516102739190612b56565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612b71565b61092f565b005b3480156102b157600080fd5b506102ba6109ef565b6040516102c79190612bfd565b60405180910390f35b3480156102dc57600080fd5b506102e5610a15565b6040516102f29190612c27565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612c42565b610a1f565b60405161032f9190612b56565b60405180910390f35b34801561034457600080fd5b5061034d610af8565b60405161035a9190612cb1565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612afb565b610b01565b6040516103979190612b56565b60405180910390f35b3480156103ac57600080fd5b506103b5610bb4565b6040516103c29190612b56565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612b71565b610bc7565b005b34801561040057600080fd5b5061041b60048036038101906104169190612b71565b610e27565b005b34801561042957600080fd5b50610444600480360381019061043f9190612cf8565b610efe565b005b34801561045257600080fd5b5061045b610fd5565b6040516104689190612d47565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612b71565b610ffb565b6040516104a59190612b56565b60405180910390f35b3480156104ba57600080fd5b506104c3611051565b6040516104d09190612c27565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612afb565b611057565b60405161050d9190612b56565b60405180910390f35b34801561052257600080fd5b5061052b61115b565b6040516105389190612c27565b60405180910390f35b34801561054d57600080fd5b50610556611161565b6040516105639190612d47565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612b71565b611187565b6040516105a09190612b56565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612b71565b6111dd565b6040516105dd9190612c27565b60405180910390f35b3480156105f257600080fd5b506105fb611226565b005b34801561060957600080fd5b50610624600480360381019061061f9190612d62565b611360565b005b34801561063257600080fd5b5061063b6113ee565b6040516106489190612d47565b60405180910390f35b34801561065d57600080fd5b50610666611417565b6040516106739190612a40565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612da2565b6114a9565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190612afb565b61154d565b6040516106d99190612b56565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612afb565b61161a565b6040516107169190612b56565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612da2565b611638565b005b34801561075457600080fd5b5061075d6116dc565b60405161076a9190612c27565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190612da2565b6116e2565b005b3480156107a857600080fd5b506107b161182f565b6040516107be9190612c27565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190612dcf565b611835565b6040516107fb9190612c27565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190612b71565b6118bc565b005b34801561083957600080fd5b50610854600480360381019061084f9190612e0f565b611993565b005b34801561086257600080fd5b5061087d60048036038101906108789190612b71565b611a63565b005b60606005805461088e90612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90612e6b565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061092561091e611c21565b8484611c29565b6001905092915050565b610937611c21565b73ffffffffffffffffffffffffffffffffffffffff166109556113ee565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290612ee8565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610a2c848484611df2565b610aed84610a38611c21565b610ae88560405180606001604052806028815260200161393560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a9e611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240c9092919063ffffffff16565b611c29565b600190509392505050565b60006012905090565b6000610baa610b0e611c21565b84610ba58560036000610b1f611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0b90919063ffffffff16565b611c29565b6001905092915050565b600e60159054906101000a900460ff1681565b610bcf611c21565b73ffffffffffffffffffffffffffffffffffffffff16610bed6113ee565b73ffffffffffffffffffffffffffffffffffffffff1614610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90612ee8565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb79190612f1d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d429190612f1d565b6040518363ffffffff1660e01b8152600401610d5f929190612f4a565b6020604051808303816000875af1158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190612f1d565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e2f611c21565b73ffffffffffffffffffffffffffffffffffffffff16610e4d6113ee565b73ffffffffffffffffffffffffffffffffffffffff1614610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90612ee8565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f06611c21565b73ffffffffffffffffffffffffffffffffffffffff16610f246113ee565b73ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190612ee8565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000611061611c21565b73ffffffffffffffffffffffffffffffffffffffff1661107f6113ee565b73ffffffffffffffffffffffffffffffffffffffff16146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90612ee8565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611110929190612f73565b6020604051808303816000875af115801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190612fb1565b905092915050565b600b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122e611c21565b73ffffffffffffffffffffffffffffffffffffffff1661124c6113ee565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612ee8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611368611c21565b73ffffffffffffffffffffffffffffffffffffffff166113866113ee565b73ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612ee8565b60405180910390fd5b81600b8190555080600c819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461142690612e6b565b80601f016020809104026020016040519081016040528092919081815260200182805461145290612e6b565b801561149f5780601f106114745761010080835404028352916020019161149f565b820191906000526020600020905b81548152906001019060200180831161148257829003601f168201915b5050505050905090565b6114b1611c21565b73ffffffffffffffffffffffffffffffffffffffff166114cf6113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90612ee8565b60405180910390fd5b61152d610af8565b600a6115399190613140565b81611544919061318b565b60108190555050565b600061161061155a611c21565b8461160b8560405180606001604052806025815260200161395d6025913960036000611584611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240c9092919063ffffffff16565b611c29565b6001905092915050565b600061162e611627611c21565b8484611df2565b6001905092915050565b611640611c21565b73ffffffffffffffffffffffffffffffffffffffff1661165e6113ee565b73ffffffffffffffffffffffffffffffffffffffff16146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90612ee8565b60405180910390fd5b6116bc610af8565b600a6116c89190613140565b816116d3919061318b565b600f8190555050565b600c5481565b6116ea611c21565b73ffffffffffffffffffffffffffffffffffffffff166117086113ee565b73ffffffffffffffffffffffffffffffffffffffff161461175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590612ee8565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117a590613216565b60006040518083038185875af1925050503d80600081146117e2576040519150601f19603f3d011682016040523d82523d6000602084013e6117e7565b606091505b505090508061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613277565b60405180910390fd5b5050565b60105481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118c4611c21565b73ffffffffffffffffffffffffffffffffffffffff166118e26113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90612ee8565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61199b611c21565b73ffffffffffffffffffffffffffffffffffffffff166119b96113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690612ee8565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611a589190612b56565b60405180910390a150565b611a6b611c21565b73ffffffffffffffffffffffffffffffffffffffff16611a896113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690612ee8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613309565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611c199190613329565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613461565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611de59190612c27565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906134f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec790613585565b60405180910390fd5b60008111611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90613617565b60405180910390fd5b611f1b6113ee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f8257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fdc5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120365750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120ee576000612046836111dd565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120ad575060105482826120aa9190613329565b11155b6120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906136a9565b60405180910390fd5b505b60006120f9306111dd565b90506000600f54821015905080801561211f5750600e60149054906101000a900460ff16155b80156121795750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121915750600e60159054906101000a900460ff165b156121db57600f5491506001600e60146101000a81548160ff0219169083151502179055506121bf82612461565b6000600e60146101000a81548160ff0219169083151502179055505b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061227c5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122915761228c85858561246d565b612405565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123445760006123116103e8612303600b548761270490919063ffffffff16565b61271a90919063ffffffff16565b9050612326818561273090919063ffffffff16565b935061233386308361246d565b61233e86868661246d565b50612404565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123f75760006123c46103e86123b6600c548761270490919063ffffffff16565b61271a90919063ffffffff16565b90506123d9818561273090919063ffffffff16565b93506123e686308361246d565b6123f186868661246d565b50612403565b61240285858561246d565b5b5b5b5050505050565b6000838311158290612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b9190612a40565b60405180910390fd5b5082840390509392505050565b61246a81612746565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906134f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290613585565b60405180910390fd5b6125568383836129ab565b6125c28160405180606001604052806026815260200161390f60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240c9092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061265781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f79190612c27565b60405180910390a3505050565b60008183612712919061318b565b905092915050565b6000818361272891906136f8565b905092915050565b6000818361273e9190613729565b905092915050565b6000600267ffffffffffffffff8111156127635761276261375d565b5b6040519080825280602002602001820160405280156127915781602001602082028036833780820191505090505b50905030816000815181106127a9576127a861378c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128749190612f1d565b816001815181106128885761288761378c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128ef30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c29565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016129759594939291906138b4565b600060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b505050505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129ea5780820151818401526020810190506129cf565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a12826129b0565b612a1c81856129bb565b9350612a2c8185602086016129cc565b612a35816129f6565b840191505092915050565b60006020820190508181036000830152612a5a8184612a07565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9282612a67565b9050919050565b612aa281612a87565b8114612aad57600080fd5b50565b600081359050612abf81612a99565b92915050565b6000819050919050565b612ad881612ac5565b8114612ae357600080fd5b50565b600081359050612af581612acf565b92915050565b60008060408385031215612b1257612b11612a62565b5b6000612b2085828601612ab0565b9250506020612b3185828601612ae6565b9150509250929050565b60008115159050919050565b612b5081612b3b565b82525050565b6000602082019050612b6b6000830184612b47565b92915050565b600060208284031215612b8757612b86612a62565b5b6000612b9584828501612ab0565b91505092915050565b6000819050919050565b6000612bc3612bbe612bb984612a67565b612b9e565b612a67565b9050919050565b6000612bd582612ba8565b9050919050565b6000612be782612bca565b9050919050565b612bf781612bdc565b82525050565b6000602082019050612c126000830184612bee565b92915050565b612c2181612ac5565b82525050565b6000602082019050612c3c6000830184612c18565b92915050565b600080600060608486031215612c5b57612c5a612a62565b5b6000612c6986828701612ab0565b9350506020612c7a86828701612ab0565b9250506040612c8b86828701612ae6565b9150509250925092565b600060ff82169050919050565b612cab81612c95565b82525050565b6000602082019050612cc66000830184612ca2565b92915050565b612cd581612b3b565b8114612ce057600080fd5b50565b600081359050612cf281612ccc565b92915050565b60008060408385031215612d0f57612d0e612a62565b5b6000612d1d85828601612ab0565b9250506020612d2e85828601612ce3565b9150509250929050565b612d4181612a87565b82525050565b6000602082019050612d5c6000830184612d38565b92915050565b60008060408385031215612d7957612d78612a62565b5b6000612d8785828601612ae6565b9250506020612d9885828601612ae6565b9150509250929050565b600060208284031215612db857612db7612a62565b5b6000612dc684828501612ae6565b91505092915050565b60008060408385031215612de657612de5612a62565b5b6000612df485828601612ab0565b9250506020612e0585828601612ab0565b9150509250929050565b600060208284031215612e2557612e24612a62565b5b6000612e3384828501612ce3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e8357607f821691505b602082108103612e9657612e95612e3c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ed26020836129bb565b9150612edd82612e9c565b602082019050919050565b60006020820190508181036000830152612f0181612ec5565b9050919050565b600081519050612f1781612a99565b92915050565b600060208284031215612f3357612f32612a62565b5b6000612f4184828501612f08565b91505092915050565b6000604082019050612f5f6000830185612d38565b612f6c6020830184612d38565b9392505050565b6000604082019050612f886000830185612d38565b612f956020830184612c18565b9392505050565b600081519050612fab81612ccc565b92915050565b600060208284031215612fc757612fc6612a62565b5b6000612fd584828501612f9c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613064578086048111156130405761303f612fde565b5b600185161561304f5780820291505b808102905061305d8561300d565b9450613024565b94509492505050565b60008261307d5760019050613139565b8161308b5760009050613139565b81600181146130a157600281146130ab576130da565b6001915050613139565b60ff8411156130bd576130bc612fde565b5b8360020a9150848211156130d4576130d3612fde565b5b50613139565b5060208310610133831016604e8410600b841016171561310f5782820a90508381111561310a57613109612fde565b5b613139565b61311c848484600161301a565b9250905081840481111561313357613132612fde565b5b81810290505b9392505050565b600061314b82612ac5565b915061315683612c95565b92506131837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461306d565b905092915050565b600061319682612ac5565b91506131a183612ac5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131da576131d9612fde565b5b828202905092915050565b600081905092915050565b50565b60006132006000836131e5565b915061320b826131f0565b600082019050919050565b6000613221826131f3565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006132616012836129bb565b915061326c8261322b565b602082019050919050565b6000602082019050818103600083015261329081613254565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132f36026836129bb565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b600061333482612ac5565b915061333f83612ac5565b925082820190508082111561335757613356612fde565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133b96024836129bb565b91506133c48261335d565b604082019050919050565b600060208201905081810360008301526133e8816133ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061344b6022836129bb565b9150613456826133ef565b604082019050919050565b6000602082019050818103600083015261347a8161343e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134dd6025836129bb565b91506134e882613481565b604082019050919050565b6000602082019050818103600083015261350c816134d0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061356f6023836129bb565b915061357a82613513565b604082019050919050565b6000602082019050818103600083015261359e81613562565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006136016029836129bb565b915061360c826135a5565b604082019050919050565b60006020820190508181036000830152613630816135f4565b9050919050565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b60006136936021836129bb565b915061369e82613637565b604082019050919050565b600060208201905081810360008301526136c281613686565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061370382612ac5565b915061370e83612ac5565b92508261371e5761371d6136c9565b5b828204905092915050565b600061373482612ac5565b915061373f83612ac5565b925082820390508181111561375757613756612fde565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006137e06137db6137d6846137bb565b612b9e565b612ac5565b9050919050565b6137f0816137c5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61382b81612a87565b82525050565b600061383d8383613822565b60208301905092915050565b6000602082019050919050565b6000613861826137f6565b61386b8185613801565b935061387683613812565b8060005b838110156138a757815161388e8882613831565b975061389983613849565b92505060018101905061387a565b5085935050505092915050565b600060a0820190506138c96000830188612c18565b6138d660208301876137e7565b81810360408301526138e88186613856565b90506138f76060830185612d38565b6139046080830184612c18565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a18da5f26755bdfef68049f50cec35ff92d14bf3d6a7a675402374c47ee4a5a964736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80636af6592911610118578063a9059cbb116100a0578063d4a5af841161006f578063d4a5af841461079c578063dd62ed3e146107c7578063ea2f0b3714610804578063ea50cf4e1461082d578063f2fde38b146108565761020f565b8063a9059cbb146106e2578063ad04455e1461071f578063c9cf778914610748578063caea37b7146107735761020f565b80637bc4c447116100e75780637bc4c447146105fd5780638da5cb5b1461062657806395d89b41146106515780639d51d9b71461067c578063a457c2d7146106a55761020f565b80636af65929146105415780636dd3d39f1461056c57806370a08231146105a9578063715018a6146105e65761020f565b80633d0dbec01161019b57806349bd5a5e1161016a57806349bd5a5e146104465780635342acb41461047157806353cae9cf146104ae5780635d729d8c146104d957806362015852146105165761020f565b80633d0dbec0146103a057806341cb87fc146103cb578063437823ec146103f457806348eb61b61461041d5761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f578063120a06121461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961087f565b6040516102369190612a40565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612afb565b610911565b6040516102739190612b56565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612b71565b61092f565b005b3480156102b157600080fd5b506102ba6109ef565b6040516102c79190612bfd565b60405180910390f35b3480156102dc57600080fd5b506102e5610a15565b6040516102f29190612c27565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612c42565b610a1f565b60405161032f9190612b56565b60405180910390f35b34801561034457600080fd5b5061034d610af8565b60405161035a9190612cb1565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612afb565b610b01565b6040516103979190612b56565b60405180910390f35b3480156103ac57600080fd5b506103b5610bb4565b6040516103c29190612b56565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612b71565b610bc7565b005b34801561040057600080fd5b5061041b60048036038101906104169190612b71565b610e27565b005b34801561042957600080fd5b50610444600480360381019061043f9190612cf8565b610efe565b005b34801561045257600080fd5b5061045b610fd5565b6040516104689190612d47565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612b71565b610ffb565b6040516104a59190612b56565b60405180910390f35b3480156104ba57600080fd5b506104c3611051565b6040516104d09190612c27565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612afb565b611057565b60405161050d9190612b56565b60405180910390f35b34801561052257600080fd5b5061052b61115b565b6040516105389190612c27565b60405180910390f35b34801561054d57600080fd5b50610556611161565b6040516105639190612d47565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612b71565b611187565b6040516105a09190612b56565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612b71565b6111dd565b6040516105dd9190612c27565b60405180910390f35b3480156105f257600080fd5b506105fb611226565b005b34801561060957600080fd5b50610624600480360381019061061f9190612d62565b611360565b005b34801561063257600080fd5b5061063b6113ee565b6040516106489190612d47565b60405180910390f35b34801561065d57600080fd5b50610666611417565b6040516106739190612a40565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612da2565b6114a9565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190612afb565b61154d565b6040516106d99190612b56565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612afb565b61161a565b6040516107169190612b56565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612da2565b611638565b005b34801561075457600080fd5b5061075d6116dc565b60405161076a9190612c27565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190612da2565b6116e2565b005b3480156107a857600080fd5b506107b161182f565b6040516107be9190612c27565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190612dcf565b611835565b6040516107fb9190612c27565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190612b71565b6118bc565b005b34801561083957600080fd5b50610854600480360381019061084f9190612e0f565b611993565b005b34801561086257600080fd5b5061087d60048036038101906108789190612b71565b611a63565b005b60606005805461088e90612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90612e6b565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061092561091e611c21565b8484611c29565b6001905092915050565b610937611c21565b73ffffffffffffffffffffffffffffffffffffffff166109556113ee565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290612ee8565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610a2c848484611df2565b610aed84610a38611c21565b610ae88560405180606001604052806028815260200161393560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a9e611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240c9092919063ffffffff16565b611c29565b600190509392505050565b60006012905090565b6000610baa610b0e611c21565b84610ba58560036000610b1f611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0b90919063ffffffff16565b611c29565b6001905092915050565b600e60159054906101000a900460ff1681565b610bcf611c21565b73ffffffffffffffffffffffffffffffffffffffff16610bed6113ee565b73ffffffffffffffffffffffffffffffffffffffff1614610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90612ee8565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb79190612f1d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d429190612f1d565b6040518363ffffffff1660e01b8152600401610d5f929190612f4a565b6020604051808303816000875af1158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190612f1d565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e2f611c21565b73ffffffffffffffffffffffffffffffffffffffff16610e4d6113ee565b73ffffffffffffffffffffffffffffffffffffffff1614610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90612ee8565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f06611c21565b73ffffffffffffffffffffffffffffffffffffffff16610f246113ee565b73ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190612ee8565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000611061611c21565b73ffffffffffffffffffffffffffffffffffffffff1661107f6113ee565b73ffffffffffffffffffffffffffffffffffffffff16146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90612ee8565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611110929190612f73565b6020604051808303816000875af115801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190612fb1565b905092915050565b600b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122e611c21565b73ffffffffffffffffffffffffffffffffffffffff1661124c6113ee565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612ee8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611368611c21565b73ffffffffffffffffffffffffffffffffffffffff166113866113ee565b73ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612ee8565b60405180910390fd5b81600b8190555080600c819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461142690612e6b565b80601f016020809104026020016040519081016040528092919081815260200182805461145290612e6b565b801561149f5780601f106114745761010080835404028352916020019161149f565b820191906000526020600020905b81548152906001019060200180831161148257829003601f168201915b5050505050905090565b6114b1611c21565b73ffffffffffffffffffffffffffffffffffffffff166114cf6113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90612ee8565b60405180910390fd5b61152d610af8565b600a6115399190613140565b81611544919061318b565b60108190555050565b600061161061155a611c21565b8461160b8560405180606001604052806025815260200161395d6025913960036000611584611c21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240c9092919063ffffffff16565b611c29565b6001905092915050565b600061162e611627611c21565b8484611df2565b6001905092915050565b611640611c21565b73ffffffffffffffffffffffffffffffffffffffff1661165e6113ee565b73ffffffffffffffffffffffffffffffffffffffff16146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90612ee8565b60405180910390fd5b6116bc610af8565b600a6116c89190613140565b816116d3919061318b565b600f8190555050565b600c5481565b6116ea611c21565b73ffffffffffffffffffffffffffffffffffffffff166117086113ee565b73ffffffffffffffffffffffffffffffffffffffff161461175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590612ee8565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117a590613216565b60006040518083038185875af1925050503d80600081146117e2576040519150601f19603f3d011682016040523d82523d6000602084013e6117e7565b606091505b505090508061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613277565b60405180910390fd5b5050565b60105481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118c4611c21565b73ffffffffffffffffffffffffffffffffffffffff166118e26113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90612ee8565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61199b611c21565b73ffffffffffffffffffffffffffffffffffffffff166119b96113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690612ee8565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611a589190612b56565b60405180910390a150565b611a6b611c21565b73ffffffffffffffffffffffffffffffffffffffff16611a896113ee565b73ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690612ee8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613309565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611c199190613329565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613461565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611de59190612c27565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906134f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec790613585565b60405180910390fd5b60008111611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90613617565b60405180910390fd5b611f1b6113ee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f8257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fdc5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120365750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120ee576000612046836111dd565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120ad575060105482826120aa9190613329565b11155b6120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906136a9565b60405180910390fd5b505b60006120f9306111dd565b90506000600f54821015905080801561211f5750600e60149054906101000a900460ff16155b80156121795750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121915750600e60159054906101000a900460ff165b156121db57600f5491506001600e60146101000a81548160ff0219169083151502179055506121bf82612461565b6000600e60146101000a81548160ff0219169083151502179055505b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061227c5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122915761228c85858561246d565b612405565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123445760006123116103e8612303600b548761270490919063ffffffff16565b61271a90919063ffffffff16565b9050612326818561273090919063ffffffff16565b935061233386308361246d565b61233e86868661246d565b50612404565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123f75760006123c46103e86123b6600c548761270490919063ffffffff16565b61271a90919063ffffffff16565b90506123d9818561273090919063ffffffff16565b93506123e686308361246d565b6123f186868661246d565b50612403565b61240285858561246d565b5b5b5b5050505050565b6000838311158290612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b9190612a40565b60405180910390fd5b5082840390509392505050565b61246a81612746565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906134f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290613585565b60405180910390fd5b6125568383836129ab565b6125c28160405180606001604052806026815260200161390f60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461240c9092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061265781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f79190612c27565b60405180910390a3505050565b60008183612712919061318b565b905092915050565b6000818361272891906136f8565b905092915050565b6000818361273e9190613729565b905092915050565b6000600267ffffffffffffffff8111156127635761276261375d565b5b6040519080825280602002602001820160405280156127915781602001602082028036833780820191505090505b50905030816000815181106127a9576127a861378c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128749190612f1d565b816001815181106128885761288761378c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128ef30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c29565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016129759594939291906138b4565b600060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b505050505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129ea5780820151818401526020810190506129cf565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a12826129b0565b612a1c81856129bb565b9350612a2c8185602086016129cc565b612a35816129f6565b840191505092915050565b60006020820190508181036000830152612a5a8184612a07565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9282612a67565b9050919050565b612aa281612a87565b8114612aad57600080fd5b50565b600081359050612abf81612a99565b92915050565b6000819050919050565b612ad881612ac5565b8114612ae357600080fd5b50565b600081359050612af581612acf565b92915050565b60008060408385031215612b1257612b11612a62565b5b6000612b2085828601612ab0565b9250506020612b3185828601612ae6565b9150509250929050565b60008115159050919050565b612b5081612b3b565b82525050565b6000602082019050612b6b6000830184612b47565b92915050565b600060208284031215612b8757612b86612a62565b5b6000612b9584828501612ab0565b91505092915050565b6000819050919050565b6000612bc3612bbe612bb984612a67565b612b9e565b612a67565b9050919050565b6000612bd582612ba8565b9050919050565b6000612be782612bca565b9050919050565b612bf781612bdc565b82525050565b6000602082019050612c126000830184612bee565b92915050565b612c2181612ac5565b82525050565b6000602082019050612c3c6000830184612c18565b92915050565b600080600060608486031215612c5b57612c5a612a62565b5b6000612c6986828701612ab0565b9350506020612c7a86828701612ab0565b9250506040612c8b86828701612ae6565b9150509250925092565b600060ff82169050919050565b612cab81612c95565b82525050565b6000602082019050612cc66000830184612ca2565b92915050565b612cd581612b3b565b8114612ce057600080fd5b50565b600081359050612cf281612ccc565b92915050565b60008060408385031215612d0f57612d0e612a62565b5b6000612d1d85828601612ab0565b9250506020612d2e85828601612ce3565b9150509250929050565b612d4181612a87565b82525050565b6000602082019050612d5c6000830184612d38565b92915050565b60008060408385031215612d7957612d78612a62565b5b6000612d8785828601612ae6565b9250506020612d9885828601612ae6565b9150509250929050565b600060208284031215612db857612db7612a62565b5b6000612dc684828501612ae6565b91505092915050565b60008060408385031215612de657612de5612a62565b5b6000612df485828601612ab0565b9250506020612e0585828601612ab0565b9150509250929050565b600060208284031215612e2557612e24612a62565b5b6000612e3384828501612ce3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e8357607f821691505b602082108103612e9657612e95612e3c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ed26020836129bb565b9150612edd82612e9c565b602082019050919050565b60006020820190508181036000830152612f0181612ec5565b9050919050565b600081519050612f1781612a99565b92915050565b600060208284031215612f3357612f32612a62565b5b6000612f4184828501612f08565b91505092915050565b6000604082019050612f5f6000830185612d38565b612f6c6020830184612d38565b9392505050565b6000604082019050612f886000830185612d38565b612f956020830184612c18565b9392505050565b600081519050612fab81612ccc565b92915050565b600060208284031215612fc757612fc6612a62565b5b6000612fd584828501612f9c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613064578086048111156130405761303f612fde565b5b600185161561304f5780820291505b808102905061305d8561300d565b9450613024565b94509492505050565b60008261307d5760019050613139565b8161308b5760009050613139565b81600181146130a157600281146130ab576130da565b6001915050613139565b60ff8411156130bd576130bc612fde565b5b8360020a9150848211156130d4576130d3612fde565b5b50613139565b5060208310610133831016604e8410600b841016171561310f5782820a90508381111561310a57613109612fde565b5b613139565b61311c848484600161301a565b9250905081840481111561313357613132612fde565b5b81810290505b9392505050565b600061314b82612ac5565b915061315683612c95565b92506131837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461306d565b905092915050565b600061319682612ac5565b91506131a183612ac5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131da576131d9612fde565b5b828202905092915050565b600081905092915050565b50565b60006132006000836131e5565b915061320b826131f0565b600082019050919050565b6000613221826131f3565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006132616012836129bb565b915061326c8261322b565b602082019050919050565b6000602082019050818103600083015261329081613254565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132f36026836129bb565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b600061333482612ac5565b915061333f83612ac5565b925082820190508082111561335757613356612fde565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133b96024836129bb565b91506133c48261335d565b604082019050919050565b600060208201905081810360008301526133e8816133ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061344b6022836129bb565b9150613456826133ef565b604082019050919050565b6000602082019050818103600083015261347a8161343e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134dd6025836129bb565b91506134e882613481565b604082019050919050565b6000602082019050818103600083015261350c816134d0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061356f6023836129bb565b915061357a82613513565b604082019050919050565b6000602082019050818103600083015261359e81613562565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006136016029836129bb565b915061360c826135a5565b604082019050919050565b60006020820190508181036000830152613630816135f4565b9050919050565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b60006136936021836129bb565b915061369e82613637565b604082019050919050565b600060208201905081810360008301526136c281613686565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061370382612ac5565b915061370e83612ac5565b92508261371e5761371d6136c9565b5b828204905092915050565b600061373482612ac5565b915061373f83612ac5565b925082820390508181111561375757613756612fde565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006137e06137db6137d6846137bb565b612b9e565b612ac5565b9050919050565b6137f0816137c5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61382b81612a87565b82525050565b600061383d8383613822565b60208301905092915050565b6000602082019050919050565b6000613861826137f6565b61386b8185613801565b935061387683613812565b8060005b838110156138a757815161388e8882613831565b975061389983613849565b92505060018101905061387a565b5085935050505092915050565b600060a0820190506138c96000830188612c18565b6138d660208301876137e7565b81810360408301526138e88186613856565b90506138f76060830185612d38565b6139046080830184612c18565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a18da5f26755bdfef68049f50cec35ff92d14bf3d6a7a675402374c47ee4a5a964736f6c63430008100033

Deployed Bytecode Sourcemap

30806:8840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11117:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13754:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34309:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31316:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12452:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14529:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12248:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15450:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31451:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34803:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33473:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33771:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31372:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36089:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31506:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35866:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31193:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31082:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33946:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12669:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9102:172;;;;;;;;;;;;;:::i;:::-;;34112:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8799:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11389:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34628:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16302:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13090:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34454:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31267:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35544:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31559:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13382:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33628:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35169:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9292:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11117:116;11171:13;11212:5;11205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11117:116;:::o;13754:193::-;13837:4;13862:39;13871:12;:10;:12::i;:::-;13885:7;13894:6;13862:8;:39::i;:::-;13927:4;13920:11;;13754:193;;;;:::o;34309:117::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34405:5:::1;34391:11;;:19;;;;;;;;;;;;;;;;;;34309:117:::0;:::o;31316:41::-;;;;;;;;;;;;;:::o;12452:124::-;12513:7;12548:12;;12541:19;;12452:124;:::o;14529:419::-;14701:4;14726:36;14736:6;14744:9;14755:6;14726:9;:36::i;:::-;14781:121;14790:6;14798:12;:10;:12::i;:::-;14812:89;14850:6;14812:89;;;;;;;;;;;;;;;;;:11;:19;14824:6;14812:19;;;;;;;;;;;;;;;:33;14832:12;:10;:12::i;:::-;14812:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14781:8;:121::i;:::-;14928:4;14921:11;;14529:419;;;;;:::o;12248:109::-;12306:5;12339:2;12332:9;;12248:109;:::o;15450:242::-;15538:4;15563:83;15572:12;:10;:12::i;:::-;15586:7;15595:50;15634:10;15595:11;:25;15607:12;:10;:12::i;:::-;15595:25;;;;;;;;;;;;;;;:34;15621:7;15595:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15563:8;:83::i;:::-;15672:4;15665:11;;15450:242;;;;:::o;31451:40::-;;;;;;;;;;;;;:::o;34803:350::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34886:35:::1;34943:9;34886:67;;35006:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34988:56;;;35053:4;35060:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34988:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34972:13;;:112;;;;;;;;;;;;;;;;;;35121:16;35103:15;;:34;;;;;;;;;;;;;;;;;;34867:286;34803:350:::0;:::o;33473:127::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33580:4:::1;33550:18;:27;33569:7;33550:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33473:127:::0;:::o;33771:159::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33909:5:::1;33873:24;:33;33898:7;33873:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;33771:159:::0;;:::o;31372:28::-;;;;;;;;;;;;;:::o;36089:139::-;36153:4;36185:18;:27;36204:7;36185:27;;;;;;;;;;;;;;;;;;;;;;;;;36178:34;;36089:139;;;:::o;31506:38::-;;;;:::o;35866:197::-;35963:12;8989;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36005:12:::1;35998:29;;;36028:10;36040:6;35998:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35991:56;;35866:197:::0;;;;:::o;31193:30::-;;;;:::o;31082:27::-;;;;;;;;;;;;;:::o;33946:150::-;34016:4;34047:24;:33;34072:7;34047:33;;;;;;;;;;;;;;;;;;;;;;;;;34040:40;;33946:150;;;:::o;12669:143::-;12743:7;12778:9;:18;12788:7;12778:18;;;;;;;;;;;;;;;;12771:25;;12669:143;;;:::o;9102:172::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9217:1:::1;9180:40;;9201:6;::::0;::::1;;;;;;;;9180:40;;;;;;;;;;;;9256:1;9239:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9102:172::o:0;34112:181::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34229:6:::1;34216:10;:19;;;;34268:7;34254:11;:21;;;;34112:181:::0;;:::o;8799:103::-;8845:7;8880:6;;;;;;;;;;;8873:13;;8799:103;:::o;11389:120::-;11445:13;11486:7;11479:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11389:120;:::o;34628:159::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34761:10:::1;:8;:10::i;:::-;34756:2;:15;;;;:::i;:::-;34736:17;:35;;;;:::i;:::-;34716:17;:55;;;;34628:159:::0;:::o;16302:293::-;16395:4;16420:129;16429:12;:10;:12::i;:::-;16443:7;16452:96;16491:15;16452:96;;;;;;;;;;;;;;;;;:11;:25;16464:12;:10;:12::i;:::-;16452:25;;;;;;;;;;;;;;;:34;16478:7;16452:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16420:8;:129::i;:::-;16575:4;16568:11;;16302:293;;;;:::o;13090:199::-;13176:4;13201:42;13211:12;:10;:12::i;:::-;13225:9;13236:6;13201:9;:42::i;:::-;13269:4;13262:11;;13090:199;;;;:::o;34454:158::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34586:10:::1;:8;:10::i;:::-;34580:2;:16;;;;:::i;:::-;34571:6;:25;;;;:::i;:::-;34545:23;:51;;;;34454:158:::0;:::o;31267:32::-;;;;:::o;35544:266::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:9:::1;35706:6:::0;::::1;;;;;;;;;;:11;;35725:6;35706:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35691:45;;;35763:4;35755:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;35605:205;35544:266:::0;:::o;31559:32::-;;;;:::o;13382:167::-;13471:7;13506:11;:18;13518:5;13506:18;;;;;;;;;;;;;;;:27;13525:7;13506:27;;;;;;;;;;;;;;;;13499:34;;13382:167;;;;:::o;33628:126::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33733:5:::1;33703:18;:27;33722:7;33703:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33628:126:::0;:::o;35169:197::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35280:8:::1;35256:21;;:32;;;;;;;;;;;;;;;;;;35312:38;35341:8;35312:38;;;;;;:::i;:::-;;;;;;;;35169:197:::0;:::o;9292:276::-;8989:12;:10;:12::i;:::-;8978:23;;:7;:5;:7::i;:::-;:23;;;8970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9409:1:::1;9389:22;;:8;:22;;::::0;9381:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9507:8;9478:38;;9499:6;::::0;::::1;;;;;;;;9478:38;;;;;;;;;;;;9544:8;9535:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;9292:276:::0;:::o;2601:114::-;2659:7;2698:1;2694;:5;;;;:::i;:::-;2687:12;;2601:114;;;;:::o;4137:::-;4190:7;4225:10;4218:17;;4137:114;:::o;20061:452::-;20254:1;20237:19;;:5;:19;;;20229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20343:1;20324:21;;:7;:21;;;20316:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20435:6;20405:11;:18;20417:5;20405:18;;;;;;;;;;;;;;;:27;20424:7;20405:27;;;;;;;;;;;;;;;:36;;;;20481:7;20465:32;;20474:5;20465:32;;;20490:6;20465:32;;;;;;:::i;:::-;;;;;;;;20061:452;;;:::o;36244:2600::-;36431:1;36415:18;;:4;:18;;;36407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36516:1;36502:16;;:2;:16;;;36494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36594:1;36585:6;:10;36577:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36712:7;:5;:7::i;:::-;36704:15;;:4;:15;;;;:59;;;;;36758:4;36744:19;;:2;:19;;;;36704:59;:102;;;;;36794:12;;;;;;;;;;;36788:18;;:2;:18;;;;36704:102;:146;;;;;36837:13;;;;;;;;;;;36831:19;;:2;:19;;;;36704:146;36678:450;;;36894:22;36919:13;36929:2;36919:9;:13::i;:::-;36894:38;;36963:24;:28;36988:2;36963:28;;;;;;;;;;;;;;;;;;;;;;;;;:78;;;;37023:17;;37013:6;36996:14;:23;;;;:::i;:::-;:44;;36963:78;36955:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;36871:257;36678:450;37148:28;37179:24;37197:4;37179:9;:24::i;:::-;37148:55;;37223:24;37274:23;;37250:20;:47;;37223:74;;37342:19;:61;;;;;37387:16;;;;;;;;;;;37386:17;37342:61;:107;;;;;37436:13;;;;;;;;;;;37428:21;;:4;:21;;;;37342:107;:153;;;;;37474:21;;;;;;;;;;;37342:153;37316:434;;;37561:23;;37538:46;;37626:4;37607:16;;:23;;;;;;;;;;;;;;;;;;37653:30;37662:20;37653:8;:30::i;:::-;37725:5;37706:16;;:24;;;;;;;;;;;;;;;;;;37316:434;37789:18;:24;37808:4;37789:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;37817:18;:22;37836:2;37817:22;;;;;;;;;;;;;;;;;;;;;;;;;37789:50;37786:1027;;;37859:33;37875:4;37881:2;37885:6;37859:15;:33::i;:::-;37786:1027;;;37968:13;;;;;;;;;;;37960:21;;:4;:21;;;37956:838;;38034:17;38054:32;38081:4;38054:22;38065:10;;38054:6;:10;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;38034:52;;38117:21;38128:9;38117:6;:10;;:21;;;;:::i;:::-;38109:29;;38161:47;38177:4;38191;38198:9;38161:15;:47::i;:::-;38231:33;38247:4;38253:2;38257:6;38231:15;:33::i;:::-;38004:284;37956:838;;;38326:13;;;;;;;;;;;38320:19;;:2;:19;;;38316:478;;38393:17;38413:33;38441:4;38413:23;38424:11;;38413:6;:10;;:23;;;;:::i;:::-;:27;;:33;;;;:::i;:::-;38393:53;;38477:21;38488:9;38477:6;:10;;:21;;;;:::i;:::-;38469:29;;38521:46;38537:4;38551;38557:9;38521:15;:46::i;:::-;38590:33;38606:4;38612:2;38616:6;38590:15;:33::i;:::-;38362:285;38316:478;;;38737:33;38753:4;38759:2;38763:6;38737:15;:33::i;:::-;38316:478;37956:838;37786:1027;36388:2456;;36244:2600;;;:::o;3281:246::-;3367:7;3441:1;3436;:6;;3444:12;3428:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3491:1;3487;:5;3480:12;;3281:246;;;;;:::o;38860:141::-;38933:33;38950:15;38933:16;:33::i;:::-;38860:141;:::o;17192:661::-;17390:1;17372:20;;:6;:20;;;17364:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17482:1;17461:23;;:9;:23;;;17453:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17545:47;17566:6;17574:9;17585:6;17545:20;:47::i;:::-;17633:71;17655:6;17633:71;;;;;;;;;;;;;;;;;:9;:17;17643:6;17633:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;17613:9;:17;17623:6;17613:17;;;;;;;;;;;;;;;:91;;;;17746:32;17771:6;17746:9;:20;17756:9;17746:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;17723:9;:20;17733:9;17723:20;;;;;;;;;;;;;;;:55;;;;17819:9;17802:35;;17811:6;17802:35;;;17830:6;17802:35;;;;;;:::i;:::-;;;;;;;;17192:661;;;:::o;2865:114::-;2923:7;2962:1;2958;:5;;;;:::i;:::-;2951:12;;2865:114;;;;:::o;3007:::-;3065:7;3104:1;3100;:5;;;;:::i;:::-;3093:12;;3007:114;;;;:::o;2733:::-;2791:7;2830:1;2826;:5;;;;:::i;:::-;2819:12;;2733:114;;;;:::o;39036:593::-;39110:21;39148:1;39134:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39110:40;;39187:4;39169;39174:1;39169:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39221:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39211:4;39216:1;39211:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39262:62;39279:4;39294:15;;;;;;;;;;;39312:11;39262:8;:62::i;:::-;39343:15;;;;;;;;;;;:66;;;39432:11;39466:1;39518:4;39545:11;;;;;;;;;;;39579:15;39343:270;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39091:538;39036:593;:::o;21223:157::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:116::-;6236:21;6251:5;6236:21;:::i;:::-;6229:5;6226:32;6216:60;;6272:1;6269;6262:12;6216:60;6166:116;:::o;6288:133::-;6331:5;6369:6;6356:20;6347:29;;6385:30;6409:5;6385:30;:::i;:::-;6288:133;;;;:::o;6427:468::-;6492:6;6500;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:53;6745:7;6736:6;6725:9;6721:22;6700:53;:::i;:::-;6690:63;;6646:117;6802:2;6828:50;6870:7;6861:6;6850:9;6846:22;6828:50;:::i;:::-;6818:60;;6773:115;6427:468;;;;;:::o;6901:118::-;6988:24;7006:5;6988:24;:::i;:::-;6983:3;6976:37;6901:118;;:::o;7025:222::-;7118:4;7156:2;7145:9;7141:18;7133:26;;7169:71;7237:1;7226:9;7222:17;7213:6;7169:71;:::i;:::-;7025:222;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:329::-;7792:6;7841:2;7829:9;7820:7;7816:23;7812:32;7809:119;;;7847:79;;:::i;:::-;7809:119;7967:1;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7938:117;7733:329;;;;:::o;8068:474::-;8136:6;8144;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:53;8517:7;8508:6;8497:9;8493:22;8472:53;:::i;:::-;8462:63;;8417:118;8068:474;;;;;:::o;8548:323::-;8604:6;8653:2;8641:9;8632:7;8628:23;8624:32;8621:119;;;8659:79;;:::i;:::-;8621:119;8779:1;8804:50;8846:7;8837:6;8826:9;8822:22;8804:50;:::i;:::-;8794:60;;8750:114;8548:323;;;;:::o;8877:180::-;8925:77;8922:1;8915:88;9022:4;9019:1;9012:15;9046:4;9043:1;9036:15;9063:320;9107:6;9144:1;9138:4;9134:12;9124:22;;9191:1;9185:4;9181:12;9212:18;9202:81;;9268:4;9260:6;9256:17;9246:27;;9202:81;9330:2;9322:6;9319:14;9299:18;9296:38;9293:84;;9349:18;;:::i;:::-;9293:84;9114:269;9063:320;;;:::o;9389:182::-;9529:34;9525:1;9517:6;9513:14;9506:58;9389:182;:::o;9577:366::-;9719:3;9740:67;9804:2;9799:3;9740:67;:::i;:::-;9733:74;;9816:93;9905:3;9816:93;:::i;:::-;9934:2;9929:3;9925:12;9918:19;;9577:366;;;:::o;9949:419::-;10115:4;10153:2;10142:9;10138:18;10130:26;;10202:9;10196:4;10192:20;10188:1;10177:9;10173:17;10166:47;10230:131;10356:4;10230:131;:::i;:::-;10222:139;;9949:419;;;:::o;10374:143::-;10431:5;10462:6;10456:13;10447:22;;10478:33;10505:5;10478:33;:::i;:::-;10374:143;;;;:::o;10523:351::-;10593:6;10642:2;10630:9;10621:7;10617:23;10613:32;10610:119;;;10648:79;;:::i;:::-;10610:119;10768:1;10793:64;10849:7;10840:6;10829:9;10825:22;10793:64;:::i;:::-;10783:74;;10739:128;10523:351;;;;:::o;10880:332::-;11001:4;11039:2;11028:9;11024:18;11016:26;;11052:71;11120:1;11109:9;11105:17;11096:6;11052:71;:::i;:::-;11133:72;11201:2;11190:9;11186:18;11177:6;11133:72;:::i;:::-;10880:332;;;;;:::o;11218:::-;11339:4;11377:2;11366:9;11362:18;11354:26;;11390:71;11458:1;11447:9;11443:17;11434:6;11390:71;:::i;:::-;11471:72;11539:2;11528:9;11524:18;11515:6;11471:72;:::i;:::-;11218:332;;;;;:::o;11556:137::-;11610:5;11641:6;11635:13;11626:22;;11657:30;11681:5;11657:30;:::i;:::-;11556:137;;;;:::o;11699:345::-;11766:6;11815:2;11803:9;11794:7;11790:23;11786:32;11783:119;;;11821:79;;:::i;:::-;11783:119;11941:1;11966:61;12019:7;12010:6;11999:9;11995:22;11966:61;:::i;:::-;11956:71;;11912:125;11699:345;;;;:::o;12050:180::-;12098:77;12095:1;12088:88;12195:4;12192:1;12185:15;12219:4;12216:1;12209:15;12236:102;12278:8;12325:5;12322:1;12318:13;12297:34;;12236:102;;;:::o;12344:848::-;12405:5;12412:4;12436:6;12427:15;;12460:5;12451:14;;12474:712;12495:1;12485:8;12482:15;12474:712;;;12590:4;12585:3;12581:14;12575:4;12572:24;12569:50;;;12599:18;;:::i;:::-;12569:50;12649:1;12639:8;12635:16;12632:451;;;13064:4;13057:5;13053:16;13044:25;;12632:451;13114:4;13108;13104:15;13096:23;;13144:32;13167:8;13144:32;:::i;:::-;13132:44;;12474:712;;;12344:848;;;;;;;:::o;13198:1073::-;13252:5;13443:8;13433:40;;13464:1;13455:10;;13466:5;;13433:40;13492:4;13482:36;;13509:1;13500:10;;13511:5;;13482:36;13578:4;13626:1;13621:27;;;;13662:1;13657:191;;;;13571:277;;13621:27;13639:1;13630:10;;13641:5;;;13657:191;13702:3;13692:8;13689:17;13686:43;;;13709:18;;:::i;:::-;13686:43;13758:8;13755:1;13751:16;13742:25;;13793:3;13786:5;13783:14;13780:40;;;13800:18;;:::i;:::-;13780:40;13833:5;;;13571:277;;13957:2;13947:8;13944:16;13938:3;13932:4;13929:13;13925:36;13907:2;13897:8;13894:16;13889:2;13883:4;13880:12;13876:35;13860:111;13857:246;;;14013:8;14007:4;14003:19;13994:28;;14048:3;14041:5;14038:14;14035:40;;;14055:18;;:::i;:::-;14035:40;14088:5;;13857:246;14128:42;14166:3;14156:8;14150:4;14147:1;14128:42;:::i;:::-;14113:57;;;;14202:4;14197:3;14193:14;14186:5;14183:25;14180:51;;;14211:18;;:::i;:::-;14180:51;14260:4;14253:5;14249:16;14240:25;;13198:1073;;;;;;:::o;14277:281::-;14335:5;14359:23;14377:4;14359:23;:::i;:::-;14351:31;;14403:25;14419:8;14403:25;:::i;:::-;14391:37;;14447:104;14484:66;14474:8;14468:4;14447:104;:::i;:::-;14438:113;;14277:281;;;;:::o;14564:348::-;14604:7;14627:20;14645:1;14627:20;:::i;:::-;14622:25;;14661:20;14679:1;14661:20;:::i;:::-;14656:25;;14849:1;14781:66;14777:74;14774:1;14771:81;14766:1;14759:9;14752:17;14748:105;14745:131;;;14856:18;;:::i;:::-;14745:131;14904:1;14901;14897:9;14886:20;;14564:348;;;;:::o;14918:147::-;15019:11;15056:3;15041:18;;14918:147;;;;:::o;15071:114::-;;:::o;15191:398::-;15350:3;15371:83;15452:1;15447:3;15371:83;:::i;:::-;15364:90;;15463:93;15552:3;15463:93;:::i;:::-;15581:1;15576:3;15572:11;15565:18;;15191:398;;;:::o;15595:379::-;15779:3;15801:147;15944:3;15801:147;:::i;:::-;15794:154;;15965:3;15958:10;;15595:379;;;:::o;15980:168::-;16120:20;16116:1;16108:6;16104:14;16097:44;15980:168;:::o;16154:366::-;16296:3;16317:67;16381:2;16376:3;16317:67;:::i;:::-;16310:74;;16393:93;16482:3;16393:93;:::i;:::-;16511:2;16506:3;16502:12;16495:19;;16154:366;;;:::o;16526:419::-;16692:4;16730:2;16719:9;16715:18;16707:26;;16779:9;16773:4;16769:20;16765:1;16754:9;16750:17;16743:47;16807:131;16933:4;16807:131;:::i;:::-;16799:139;;16526:419;;;:::o;16951:225::-;17091:34;17087:1;17079:6;17075:14;17068:58;17160:8;17155:2;17147:6;17143:15;17136:33;16951:225;:::o;17182:366::-;17324:3;17345:67;17409:2;17404:3;17345:67;:::i;:::-;17338:74;;17421:93;17510:3;17421:93;:::i;:::-;17539:2;17534:3;17530:12;17523:19;;17182:366;;;:::o;17554:419::-;17720:4;17758:2;17747:9;17743:18;17735:26;;17807:9;17801:4;17797:20;17793:1;17782:9;17778:17;17771:47;17835:131;17961:4;17835:131;:::i;:::-;17827:139;;17554:419;;;:::o;17979:191::-;18019:3;18038:20;18056:1;18038:20;:::i;:::-;18033:25;;18072:20;18090:1;18072:20;:::i;:::-;18067:25;;18115:1;18112;18108:9;18101:16;;18136:3;18133:1;18130:10;18127:36;;;18143:18;;:::i;:::-;18127:36;17979:191;;;;:::o;18176:223::-;18316:34;18312:1;18304:6;18300:14;18293:58;18385:6;18380:2;18372:6;18368:15;18361:31;18176:223;:::o;18405:366::-;18547:3;18568:67;18632:2;18627:3;18568:67;:::i;:::-;18561:74;;18644:93;18733:3;18644:93;:::i;:::-;18762:2;18757:3;18753:12;18746:19;;18405:366;;;:::o;18777:419::-;18943:4;18981:2;18970:9;18966:18;18958:26;;19030:9;19024:4;19020:20;19016:1;19005:9;19001:17;18994:47;19058:131;19184:4;19058:131;:::i;:::-;19050:139;;18777:419;;;:::o;19202:221::-;19342:34;19338:1;19330:6;19326:14;19319:58;19411:4;19406:2;19398:6;19394:15;19387:29;19202:221;:::o;19429:366::-;19571:3;19592:67;19656:2;19651:3;19592:67;:::i;:::-;19585:74;;19668:93;19757:3;19668:93;:::i;:::-;19786:2;19781:3;19777:12;19770:19;;19429:366;;;:::o;19801:419::-;19967:4;20005:2;19994:9;19990:18;19982:26;;20054:9;20048:4;20044:20;20040:1;20029:9;20025:17;20018:47;20082:131;20208:4;20082:131;:::i;:::-;20074:139;;19801:419;;;:::o;20226:224::-;20366:34;20362:1;20354:6;20350:14;20343:58;20435:7;20430:2;20422:6;20418:15;20411:32;20226:224;:::o;20456:366::-;20598:3;20619:67;20683:2;20678:3;20619:67;:::i;:::-;20612:74;;20695:93;20784:3;20695:93;:::i;:::-;20813:2;20808:3;20804:12;20797:19;;20456:366;;;:::o;20828:419::-;20994:4;21032:2;21021:9;21017:18;21009:26;;21081:9;21075:4;21071:20;21067:1;21056:9;21052:17;21045:47;21109:131;21235:4;21109:131;:::i;:::-;21101:139;;20828:419;;;:::o;21253:222::-;21393:34;21389:1;21381:6;21377:14;21370:58;21462:5;21457:2;21449:6;21445:15;21438:30;21253:222;:::o;21481:366::-;21623:3;21644:67;21708:2;21703:3;21644:67;:::i;:::-;21637:74;;21720:93;21809:3;21720:93;:::i;:::-;21838:2;21833:3;21829:12;21822:19;;21481:366;;;:::o;21853:419::-;22019:4;22057:2;22046:9;22042:18;22034:26;;22106:9;22100:4;22096:20;22092:1;22081:9;22077:17;22070:47;22134:131;22260:4;22134:131;:::i;:::-;22126:139;;21853:419;;;:::o;22278:228::-;22418:34;22414:1;22406:6;22402:14;22395:58;22487:11;22482:2;22474:6;22470:15;22463:36;22278:228;:::o;22512:366::-;22654:3;22675:67;22739:2;22734:3;22675:67;:::i;:::-;22668:74;;22751:93;22840:3;22751:93;:::i;:::-;22869:2;22864:3;22860:12;22853:19;;22512:366;;;:::o;22884:419::-;23050:4;23088:2;23077:9;23073:18;23065:26;;23137:9;23131:4;23127:20;23123:1;23112:9;23108:17;23101:47;23165:131;23291:4;23165:131;:::i;:::-;23157:139;;22884:419;;;:::o;23309:220::-;23449:34;23445:1;23437:6;23433:14;23426:58;23518:3;23513:2;23505:6;23501:15;23494:28;23309:220;:::o;23535:366::-;23677:3;23698:67;23762:2;23757:3;23698:67;:::i;:::-;23691:74;;23774:93;23863:3;23774:93;:::i;:::-;23892:2;23887:3;23883:12;23876:19;;23535:366;;;:::o;23907:419::-;24073:4;24111:2;24100:9;24096:18;24088:26;;24160:9;24154:4;24150:20;24146:1;24135:9;24131:17;24124:47;24188:131;24314:4;24188:131;:::i;:::-;24180:139;;23907:419;;;:::o;24332:180::-;24380:77;24377:1;24370:88;24477:4;24474:1;24467:15;24501:4;24498:1;24491:15;24518:185;24558:1;24575:20;24593:1;24575:20;:::i;:::-;24570:25;;24609:20;24627:1;24609:20;:::i;:::-;24604:25;;24648:1;24638:35;;24653:18;;:::i;:::-;24638:35;24695:1;24692;24688:9;24683:14;;24518:185;;;;:::o;24709:194::-;24749:4;24769:20;24787:1;24769:20;:::i;:::-;24764:25;;24803:20;24821:1;24803:20;:::i;:::-;24798:25;;24847:1;24844;24840:9;24832:17;;24871:1;24865:4;24862:11;24859:37;;;24876:18;;:::i;:::-;24859:37;24709:194;;;;:::o;24909:180::-;24957:77;24954:1;24947:88;25054:4;25051:1;25044:15;25078:4;25075:1;25068:15;25095:180;25143:77;25140:1;25133:88;25240:4;25237:1;25230:15;25264:4;25261:1;25254:15;25281:85;25326:7;25355:5;25344:16;;25281:85;;;:::o;25372:158::-;25430:9;25463:61;25481:42;25490:32;25516:5;25490:32;:::i;:::-;25481:42;:::i;:::-;25463:61;:::i;:::-;25450:74;;25372:158;;;:::o;25536:147::-;25631:45;25670:5;25631:45;:::i;:::-;25626:3;25619:58;25536:147;;:::o;25689:114::-;25756:6;25790:5;25784:12;25774:22;;25689:114;;;:::o;25809:184::-;25908:11;25942:6;25937:3;25930:19;25982:4;25977:3;25973:14;25958:29;;25809:184;;;;:::o;25999:132::-;26066:4;26089:3;26081:11;;26119:4;26114:3;26110:14;26102:22;;25999:132;;;:::o;26137:108::-;26214:24;26232:5;26214:24;:::i;:::-;26209:3;26202:37;26137:108;;:::o;26251:179::-;26320:10;26341:46;26383:3;26375:6;26341:46;:::i;:::-;26419:4;26414:3;26410:14;26396:28;;26251:179;;;;:::o;26436:113::-;26506:4;26538;26533:3;26529:14;26521:22;;26436:113;;;:::o;26585:732::-;26704:3;26733:54;26781:5;26733:54;:::i;:::-;26803:86;26882:6;26877:3;26803:86;:::i;:::-;26796:93;;26913:56;26963:5;26913:56;:::i;:::-;26992:7;27023:1;27008:284;27033:6;27030:1;27027:13;27008:284;;;27109:6;27103:13;27136:63;27195:3;27180:13;27136:63;:::i;:::-;27129:70;;27222:60;27275:6;27222:60;:::i;:::-;27212:70;;27068:224;27055:1;27052;27048:9;27043:14;;27008:284;;;27012:14;27308:3;27301:10;;26709:608;;;26585:732;;;;:::o;27323:831::-;27586:4;27624:3;27613:9;27609:19;27601:27;;27638:71;27706:1;27695:9;27691:17;27682:6;27638:71;:::i;:::-;27719:80;27795:2;27784:9;27780:18;27771:6;27719:80;:::i;:::-;27846:9;27840:4;27836:20;27831:2;27820:9;27816:18;27809:48;27874:108;27977:4;27968:6;27874:108;:::i;:::-;27866:116;;27992:72;28060:2;28049:9;28045:18;28036:6;27992:72;:::i;:::-;28074:73;28142:3;28131:9;28127:19;28118:6;28074:73;:::i;:::-;27323:831;;;;;;;;:::o

Swarm Source

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