ETH Price: $2,629.61 (+1.50%)
Gas: 2.3 Gwei

Token

Quetzalcoatl (Aztec)
 

Overview

Max Total Supply

1,000,000 Aztec

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,225.704479714548652373 Aztec

Value
$0.00
0x7576876e73265ab493a35511e3fe41b6a3e0523c
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.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-23
*/

// https://quetzalcoatlerc.com/

// 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 = 0;
            // Sell tax    
            uint256 public _sellDevFee = 0;

            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("Quetzalcoatl", "Aztec"){


                 numTokensSellToSendFees = 10000 * 10 ** decimals();
                _maxWalletBalance = 15000 * 10 ** decimals();
                _devAddress = 0xABe1b87eC00aEC3eb3519A28022DD8b73680Cb63;
                _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"}]

60806040526000600b556000600c556001600e60156101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600c81526020017f517565747a616c636f61746c00000000000000000000000000000000000000008152506040518060400160405280600581526020017f417a746563000000000000000000000000000000000000000000000000000000815250620000b36200088960201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600590805190602001906200018592919062000a91565b5080600690805190602001906200019e92919062000a91565b505050620001b16200089160201b60201c565b600a620001bf919062000d02565b612710620001ce919062000e3f565b600f81905550620001e46200089160201b60201c565b600a620001f2919062000d02565b613a9862000201919062000e3f565b60108190555073abe1b87ec00aec3eb3519a28022dd8b73680cb63600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000b58565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039d57600080fd5b505afa158015620003b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d8919062000b58565b6040518363ffffffff1660e01b8152600401620003f792919062000bcd565b602060405180830381600087803b1580156200041257600080fd5b505af115801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000b58565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620004e46200088960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620006976200089a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000882620008486200089a60201b60201c565b620008586200089160201b60201c565b600a62000866919062000d02565b620f424062000876919062000e3f565b620008c360201b60201c565b5062000fcf565b600033905090565b60006012905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000936576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092d9062000bfa565b60405180910390fd5b6200094a6000838362000a7460201b60201c565b620009668160045462000a7960201b62001c481790919060201c565b600481905550620009c581600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a7960201b62001c481790919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a68919062000c1c565b60405180910390a35050565b505050565b6000818362000a89919062000c4a565b905092915050565b82805462000a9f9062000eeb565b90600052602060002090601f01602090048101928262000ac3576000855562000b0f565b82601f1062000ade57805160ff191683800117855562000b0f565b8280016001018555821562000b0f579182015b8281111562000b0e57825182559160200191906001019062000af1565b5b50905062000b1e919062000b22565b5090565b5b8082111562000b3d57600081600090555060010162000b23565b5090565b60008151905062000b528162000fb5565b92915050565b60006020828403121562000b6b57600080fd5b600062000b7b8482850162000b41565b91505092915050565b62000b8f8162000ea0565b82525050565b600062000ba4601f8362000c39565b915062000bb18262000f8c565b602082019050919050565b62000bc78162000ed4565b82525050565b600060408201905062000be4600083018562000b84565b62000bf3602083018462000b84565b9392505050565b6000602082019050818103600083015262000c158162000b95565b9050919050565b600060208201905062000c33600083018462000bbc565b92915050565b600082825260208201905092915050565b600062000c578262000ed4565b915062000c648362000ed4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c9c5762000c9b62000f21565b5b828201905092915050565b6000808291508390505b600185111562000cf95780860481111562000cd15762000cd062000f21565b5b600185161562000ce15780820291505b808102905062000cf18562000f7f565b945062000cb1565b94509492505050565b600062000d0f8262000ed4565b915062000d1c8362000ede565b925062000d4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d53565b905092915050565b60008262000d65576001905062000e38565b8162000d75576000905062000e38565b816001811462000d8e576002811462000d995762000dcf565b600191505062000e38565b60ff84111562000dae5762000dad62000f21565b5b8360020a91508482111562000dc85762000dc762000f21565b5b5062000e38565b5060208310610133831016604e8410600b841016171562000e095782820a90508381111562000e035762000e0262000f21565b5b62000e38565b62000e18848484600162000ca7565b9250905081840481111562000e325762000e3162000f21565b5b81810290505b9392505050565b600062000e4c8262000ed4565b915062000e598362000ed4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e955762000e9462000f21565b5b828202905092915050565b600062000ead8262000eb4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000f0457607f821691505b6020821081141562000f1b5762000f1a62000f50565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000fc08162000ea0565b811462000fcc57600080fd5b50565b6139d88062000fdf6000396000f3fe6080604052600436106102085760003560e01c80636af6592911610118578063a9059cbb116100a0578063d4a5af841161006f578063d4a5af841461079c578063dd62ed3e146107c7578063ea2f0b3714610804578063ea50cf4e1461082d578063f2fde38b146108565761020f565b8063a9059cbb146106e2578063ad04455e1461071f578063c9cf778914610748578063caea37b7146107735761020f565b80637bc4c447116100e75780637bc4c447146105fd5780638da5cb5b1461062657806395d89b41146106515780639d51d9b71461067c578063a457c2d7146106a55761020f565b80636af65929146105415780636dd3d39f1461056c57806370a08231146105a9578063715018a6146105e65761020f565b80633d0dbec01161019b57806349bd5a5e1161016a57806349bd5a5e146104465780635342acb41461047157806353cae9cf146104ae5780635d729d8c146104d957806362015852146105165761020f565b80633d0dbec0146103a057806341cb87fc146103cb578063437823ec146103f457806348eb61b61461041d5761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f578063120a06121461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961087f565b6040516102369190613019565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612bf8565b610911565b6040516102739190612fe3565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612adf565b61092f565b005b3480156102b157600080fd5b506102ba6109ef565b6040516102c79190612ffe565b60405180910390f35b3480156102dc57600080fd5b506102e5610a15565b6040516102f2919061315b565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612b6d565b610a1f565b60405161032f9190612fe3565b60405180910390f35b34801561034457600080fd5b5061034d610af8565b60405161035a91906131d0565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612bf8565b610b01565b6040516103979190612fe3565b60405180910390f35b3480156103ac57600080fd5b506103b5610bb4565b6040516103c29190612fe3565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612adf565b610bc7565b005b34801561040057600080fd5b5061041b60048036038101906104169190612adf565b610e54565b005b34801561042957600080fd5b50610444600480360381019061043f9190612bbc565b610f2b565b005b34801561045257600080fd5b5061045b611002565b6040516104689190612f76565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612adf565b611028565b6040516104a59190612fe3565b60405180910390f35b3480156104ba57600080fd5b506104c361107e565b6040516104d0919061315b565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612bf8565b611084565b60405161050d9190612fe3565b60405180910390f35b34801561052257600080fd5b5061052b611197565b604051610538919061315b565b60405180910390f35b34801561054d57600080fd5b5061055661119d565b6040516105639190612f76565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612adf565b6111c3565b6040516105a09190612fe3565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612adf565b611219565b6040516105dd919061315b565b60405180910390f35b3480156105f257600080fd5b506105fb611262565b005b34801561060957600080fd5b50610624600480360381019061061f9190612caf565b61139c565b005b34801561063257600080fd5b5061063b61142a565b6040516106489190612f76565b60405180910390f35b34801561065d57600080fd5b50610666611453565b6040516106739190613019565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612c86565b6114e5565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190612bf8565b611589565b6040516106d99190612fe3565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612bf8565b611656565b6040516107169190612fe3565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612c86565b611674565b005b34801561075457600080fd5b5061075d611718565b60405161076a919061315b565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190612c86565b61171e565b005b3480156107a857600080fd5b506107b161186b565b6040516107be919061315b565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190612b31565b611871565b6040516107fb919061315b565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190612adf565b6118f8565b005b34801561083957600080fd5b50610854600480360381019061084f9190612c34565b6119cf565b005b34801561086257600080fd5b5061087d60048036038101906108789190612adf565b611a9f565b005b60606005805461088e9061358f565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba9061358f565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061092561091e611c5e565b8484611c66565b6001905092915050565b610937611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661095561142a565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29061309b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610a2c848484611e31565b610aed84610a38611c5e565b610ae88560405180606001604052806028815260200161395660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a9e611c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244f9092919063ffffffff16565b611c66565b600190509392505050565b60006012905090565b6000610baa610b0e611c5e565b84610ba58560036000610b1f611c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4890919063ffffffff16565b611c66565b6001905092915050565b600e60159054906101000a900460ff1681565b610bcf611c5e565b73ffffffffffffffffffffffffffffffffffffffff16610bed61142a565b73ffffffffffffffffffffffffffffffffffffffff1614610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a9061309b565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8e57600080fd5b505afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190612b08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d609190612b08565b6040518363ffffffff1660e01b8152600401610d7d929190612f91565b602060405180830381600087803b158015610d9757600080fd5b505af1158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190612b08565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e5c611c5e565b73ffffffffffffffffffffffffffffffffffffffff16610e7a61142a565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061309b565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f33611c5e565b73ffffffffffffffffffffffffffffffffffffffff16610f5161142a565b73ffffffffffffffffffffffffffffffffffffffff1614610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e9061309b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600061108e611c5e565b73ffffffffffffffffffffffffffffffffffffffff166110ac61142a565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f99061309b565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161113d929190612fba565b602060405180830381600087803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f9190612c5d565b905092915050565b600b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61126a611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661128861142a565b73ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d59061309b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113a4611c5e565b73ffffffffffffffffffffffffffffffffffffffff166113c261142a565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f9061309b565b60405180910390fd5b81600b8190555080600c819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546114629061358f565b80601f016020809104026020016040519081016040528092919081815260200182805461148e9061358f565b80156114db5780601f106114b0576101008083540402835291602001916114db565b820191906000526020600020905b8154815290600101906020018083116114be57829003601f168201915b5050505050905090565b6114ed611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661150b61142a565b73ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115589061309b565b60405180910390fd5b611569610af8565b600a6115759190613325565b816115809190613443565b60108190555050565b600061164c611596611c5e565b846116478560405180606001604052806025815260200161397e60259139600360006115c0611c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244f9092919063ffffffff16565b611c66565b6001905092915050565b600061166a611663611c5e565b8484611e31565b6001905092915050565b61167c611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661169a61142a565b73ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e79061309b565b60405180910390fd5b6116f8610af8565b600a6117049190613325565b8161170f9190613443565b600f8190555050565b600c5481565b611726611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661174461142a565b73ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117919061309b565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117e190612f61565b60006040518083038185875af1925050503d806000811461181e576040519150601f19603f3d011682016040523d82523d6000602084013e611823565b606091505b5050905080611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906130db565b60405180910390fd5b5050565b60105481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611900611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661191e61142a565b73ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b9061309b565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119d7611c5e565b73ffffffffffffffffffffffffffffffffffffffff166119f561142a565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a429061309b565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611a949190612fe3565b60405180910390a150565b611aa7611c5e565b73ffffffffffffffffffffffffffffffffffffffff16611ac561142a565b73ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b129061309b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b829061305b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611c56919061324b565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd9061313b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d9061307b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e24919061315b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e98906130fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061303b565b60405180910390fd5b60008111611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b906130bb565b60405180910390fd5b611f5c61142a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fc357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561201d5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120775750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561212f57600061208783611219565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120ee575060105482826120eb919061324b565b11155b61212d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121249061311b565b60405180910390fd5b505b600061213a30611219565b90506000600f5482101590508080156121605750600e60149054906101000a900460ff16155b80156121ba5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121d25750600e60159054906101000a900460ff165b1561221c57600f5491506001600e60146101000a81548160ff021916908315150217905550612200826124a4565b6000600e60146101000a81548160ff0219169083151502179055505b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122bd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122d2576122cd8585856124b0565b612448565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123865760006123536103e8612345600b548761274990919063ffffffff16565b61275f90919063ffffffff16565b9050612368818561277590919063ffffffff16565b93506123758630836124b0565b6123808686866124b0565b50612447565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561243a5760006124076103e86123f9600c548761274990919063ffffffff16565b61275f90919063ffffffff16565b905061241c818561277590919063ffffffff16565b93506124298630836124b0565b6124348686866124b0565b50612446565b6124458585856124b0565b5b5b5b5050505050565b6000838311158290612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e9190613019565b60405180910390fd5b5082840390509392505050565b6124ad8161278b565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906130fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125879061303b565b60405180910390fd5b61259b838383612a71565b6126078160405180606001604052806026815260200161393060269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244f9092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269c81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161273c919061315b565b60405180910390a3505050565b600081836127579190613443565b905092915050565b6000818361276d91906132a1565b905092915050565b60008183612783919061349d565b905092915050565b6000600267ffffffffffffffff8111156127ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127fc5781602001602082028036833780820191505090505b509050308160008151811061283a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128dc57600080fd5b505afa1580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129149190612b08565b8160018151811061294e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129b530600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c66565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a3b959493929190613176565b600060405180830381600087803b158015612a5557600080fd5b505af1158015612a69573d6000803e3d6000fd5b505050505050565b505050565b600081359050612a85816138ea565b92915050565b600081519050612a9a816138ea565b92915050565b600081359050612aaf81613901565b92915050565b600081519050612ac481613901565b92915050565b600081359050612ad981613918565b92915050565b600060208284031215612af157600080fd5b6000612aff84828501612a76565b91505092915050565b600060208284031215612b1a57600080fd5b6000612b2884828501612a8b565b91505092915050565b60008060408385031215612b4457600080fd5b6000612b5285828601612a76565b9250506020612b6385828601612a76565b9150509250929050565b600080600060608486031215612b8257600080fd5b6000612b9086828701612a76565b9350506020612ba186828701612a76565b9250506040612bb286828701612aca565b9150509250925092565b60008060408385031215612bcf57600080fd5b6000612bdd85828601612a76565b9250506020612bee85828601612aa0565b9150509250929050565b60008060408385031215612c0b57600080fd5b6000612c1985828601612a76565b9250506020612c2a85828601612aca565b9150509250929050565b600060208284031215612c4657600080fd5b6000612c5484828501612aa0565b91505092915050565b600060208284031215612c6f57600080fd5b6000612c7d84828501612ab5565b91505092915050565b600060208284031215612c9857600080fd5b6000612ca684828501612aca565b91505092915050565b60008060408385031215612cc257600080fd5b6000612cd085828601612aca565b9250506020612ce185828601612aca565b9150509250929050565b6000612cf78383612d03565b60208301905092915050565b612d0c816134d1565b82525050565b612d1b816134d1565b82525050565b6000612d2c826131fb565b612d36818561321e565b9350612d41836131eb565b8060005b83811015612d72578151612d598882612ceb565b9750612d6483613211565b925050600181019050612d45565b5085935050505092915050565b612d88816134e3565b82525050565b612d9781613526565b82525050565b612da68161354a565b82525050565b6000612db782613206565b612dc1818561323a565b9350612dd181856020860161355c565b612dda8161364e565b840191505092915050565b6000612df260238361323a565b9150612dfd8261366c565b604082019050919050565b6000612e1560268361323a565b9150612e20826136bb565b604082019050919050565b6000612e3860228361323a565b9150612e438261370a565b604082019050919050565b6000612e5b60208361323a565b9150612e6682613759565b602082019050919050565b6000612e7e60298361323a565b9150612e8982613782565b604082019050919050565b6000612ea160128361323a565b9150612eac826137d1565b602082019050919050565b6000612ec460258361323a565b9150612ecf826137fa565b604082019050919050565b6000612ee760218361323a565b9150612ef282613849565b604082019050919050565b6000612f0a60008361322f565b9150612f1582613898565b600082019050919050565b6000612f2d60248361323a565b9150612f388261389b565b604082019050919050565b612f4c8161350f565b82525050565b612f5b81613519565b82525050565b6000612f6c82612efd565b9150819050919050565b6000602082019050612f8b6000830184612d12565b92915050565b6000604082019050612fa66000830185612d12565b612fb36020830184612d12565b9392505050565b6000604082019050612fcf6000830185612d12565b612fdc6020830184612f43565b9392505050565b6000602082019050612ff86000830184612d7f565b92915050565b60006020820190506130136000830184612d8e565b92915050565b600060208201905081810360008301526130338184612dac565b905092915050565b6000602082019050818103600083015261305481612de5565b9050919050565b6000602082019050818103600083015261307481612e08565b9050919050565b6000602082019050818103600083015261309481612e2b565b9050919050565b600060208201905081810360008301526130b481612e4e565b9050919050565b600060208201905081810360008301526130d481612e71565b9050919050565b600060208201905081810360008301526130f481612e94565b9050919050565b6000602082019050818103600083015261311481612eb7565b9050919050565b6000602082019050818103600083015261313481612eda565b9050919050565b6000602082019050818103600083015261315481612f20565b9050919050565b60006020820190506131706000830184612f43565b92915050565b600060a08201905061318b6000830188612f43565b6131986020830187612d9d565b81810360408301526131aa8186612d21565b90506131b96060830185612d12565b6131c66080830184612f43565b9695505050505050565b60006020820190506131e56000830184612f52565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006132568261350f565b91506132618361350f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613296576132956135c1565b5b828201905092915050565b60006132ac8261350f565b91506132b78361350f565b9250826132c7576132c66135f0565b5b828204905092915050565b6000808291508390505b600185111561331c578086048111156132f8576132f76135c1565b5b60018516156133075780820291505b80810290506133158561365f565b94506132dc565b94509492505050565b60006133308261350f565b915061333b83613519565b92506133687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613370565b905092915050565b600082613380576001905061343c565b8161338e576000905061343c565b81600181146133a457600281146133ae576133dd565b600191505061343c565b60ff8411156133c0576133bf6135c1565b5b8360020a9150848211156133d7576133d66135c1565b5b5061343c565b5060208310610133831016604e8410600b84101617156134125782820a90508381111561340d5761340c6135c1565b5b61343c565b61341f84848460016132d2565b92509050818404811115613436576134356135c1565b5b81810290505b9392505050565b600061344e8261350f565b91506134598361350f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613492576134916135c1565b5b828202905092915050565b60006134a88261350f565b91506134b38361350f565b9250828210156134c6576134c56135c1565b5b828203905092915050565b60006134dc826134ef565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061353182613538565b9050919050565b6000613543826134ef565b9050919050565b60006135558261350f565b9050919050565b60005b8381101561357a57808201518184015260208101905061355f565b83811115613589576000848401525b50505050565b600060028204905060018216806135a757607f821691505b602082108114156135bb576135ba61361f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6138f3816134d1565b81146138fe57600080fd5b50565b61390a816134e3565b811461391557600080fd5b50565b6139218161350f565b811461392c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220543251b0fb86d3f44a0df4c79c555f5e6a052c2062b80fe0028524a884ea2cfe64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80636af6592911610118578063a9059cbb116100a0578063d4a5af841161006f578063d4a5af841461079c578063dd62ed3e146107c7578063ea2f0b3714610804578063ea50cf4e1461082d578063f2fde38b146108565761020f565b8063a9059cbb146106e2578063ad04455e1461071f578063c9cf778914610748578063caea37b7146107735761020f565b80637bc4c447116100e75780637bc4c447146105fd5780638da5cb5b1461062657806395d89b41146106515780639d51d9b71461067c578063a457c2d7146106a55761020f565b80636af65929146105415780636dd3d39f1461056c57806370a08231146105a9578063715018a6146105e65761020f565b80633d0dbec01161019b57806349bd5a5e1161016a57806349bd5a5e146104465780635342acb41461047157806353cae9cf146104ae5780635d729d8c146104d957806362015852146105165761020f565b80633d0dbec0146103a057806341cb87fc146103cb578063437823ec146103f457806348eb61b61461041d5761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f578063120a06121461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961087f565b6040516102369190613019565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612bf8565b610911565b6040516102739190612fe3565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612adf565b61092f565b005b3480156102b157600080fd5b506102ba6109ef565b6040516102c79190612ffe565b60405180910390f35b3480156102dc57600080fd5b506102e5610a15565b6040516102f2919061315b565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612b6d565b610a1f565b60405161032f9190612fe3565b60405180910390f35b34801561034457600080fd5b5061034d610af8565b60405161035a91906131d0565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612bf8565b610b01565b6040516103979190612fe3565b60405180910390f35b3480156103ac57600080fd5b506103b5610bb4565b6040516103c29190612fe3565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612adf565b610bc7565b005b34801561040057600080fd5b5061041b60048036038101906104169190612adf565b610e54565b005b34801561042957600080fd5b50610444600480360381019061043f9190612bbc565b610f2b565b005b34801561045257600080fd5b5061045b611002565b6040516104689190612f76565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612adf565b611028565b6040516104a59190612fe3565b60405180910390f35b3480156104ba57600080fd5b506104c361107e565b6040516104d0919061315b565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612bf8565b611084565b60405161050d9190612fe3565b60405180910390f35b34801561052257600080fd5b5061052b611197565b604051610538919061315b565b60405180910390f35b34801561054d57600080fd5b5061055661119d565b6040516105639190612f76565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612adf565b6111c3565b6040516105a09190612fe3565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612adf565b611219565b6040516105dd919061315b565b60405180910390f35b3480156105f257600080fd5b506105fb611262565b005b34801561060957600080fd5b50610624600480360381019061061f9190612caf565b61139c565b005b34801561063257600080fd5b5061063b61142a565b6040516106489190612f76565b60405180910390f35b34801561065d57600080fd5b50610666611453565b6040516106739190613019565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612c86565b6114e5565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190612bf8565b611589565b6040516106d99190612fe3565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612bf8565b611656565b6040516107169190612fe3565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612c86565b611674565b005b34801561075457600080fd5b5061075d611718565b60405161076a919061315b565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190612c86565b61171e565b005b3480156107a857600080fd5b506107b161186b565b6040516107be919061315b565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190612b31565b611871565b6040516107fb919061315b565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190612adf565b6118f8565b005b34801561083957600080fd5b50610854600480360381019061084f9190612c34565b6119cf565b005b34801561086257600080fd5b5061087d60048036038101906108789190612adf565b611a9f565b005b60606005805461088e9061358f565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba9061358f565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061092561091e611c5e565b8484611c66565b6001905092915050565b610937611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661095561142a565b73ffffffffffffffffffffffffffffffffffffffff16146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29061309b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610a2c848484611e31565b610aed84610a38611c5e565b610ae88560405180606001604052806028815260200161395660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a9e611c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244f9092919063ffffffff16565b611c66565b600190509392505050565b60006012905090565b6000610baa610b0e611c5e565b84610ba58560036000610b1f611c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4890919063ffffffff16565b611c66565b6001905092915050565b600e60159054906101000a900460ff1681565b610bcf611c5e565b73ffffffffffffffffffffffffffffffffffffffff16610bed61142a565b73ffffffffffffffffffffffffffffffffffffffff1614610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a9061309b565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8e57600080fd5b505afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190612b08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d609190612b08565b6040518363ffffffff1660e01b8152600401610d7d929190612f91565b602060405180830381600087803b158015610d9757600080fd5b505af1158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190612b08565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610e5c611c5e565b73ffffffffffffffffffffffffffffffffffffffff16610e7a61142a565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061309b565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f33611c5e565b73ffffffffffffffffffffffffffffffffffffffff16610f5161142a565b73ffffffffffffffffffffffffffffffffffffffff1614610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e9061309b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600061108e611c5e565b73ffffffffffffffffffffffffffffffffffffffff166110ac61142a565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f99061309b565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161113d929190612fba565b602060405180830381600087803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f9190612c5d565b905092915050565b600b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61126a611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661128861142a565b73ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d59061309b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113a4611c5e565b73ffffffffffffffffffffffffffffffffffffffff166113c261142a565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f9061309b565b60405180910390fd5b81600b8190555080600c819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546114629061358f565b80601f016020809104026020016040519081016040528092919081815260200182805461148e9061358f565b80156114db5780601f106114b0576101008083540402835291602001916114db565b820191906000526020600020905b8154815290600101906020018083116114be57829003601f168201915b5050505050905090565b6114ed611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661150b61142a565b73ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115589061309b565b60405180910390fd5b611569610af8565b600a6115759190613325565b816115809190613443565b60108190555050565b600061164c611596611c5e565b846116478560405180606001604052806025815260200161397e60259139600360006115c0611c5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244f9092919063ffffffff16565b611c66565b6001905092915050565b600061166a611663611c5e565b8484611e31565b6001905092915050565b61167c611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661169a61142a565b73ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e79061309b565b60405180910390fd5b6116f8610af8565b600a6117049190613325565b8161170f9190613443565b600f8190555050565b600c5481565b611726611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661174461142a565b73ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117919061309b565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117e190612f61565b60006040518083038185875af1925050503d806000811461181e576040519150601f19603f3d011682016040523d82523d6000602084013e611823565b606091505b5050905080611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906130db565b60405180910390fd5b5050565b60105481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611900611c5e565b73ffffffffffffffffffffffffffffffffffffffff1661191e61142a565b73ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b9061309b565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119d7611c5e565b73ffffffffffffffffffffffffffffffffffffffff166119f561142a565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a429061309b565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611a949190612fe3565b60405180910390a150565b611aa7611c5e565b73ffffffffffffffffffffffffffffffffffffffff16611ac561142a565b73ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b129061309b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b829061305b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611c56919061324b565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd9061313b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d9061307b565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e24919061315b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e98906130fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061303b565b60405180910390fd5b60008111611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b906130bb565b60405180910390fd5b611f5c61142a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fc357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561201d5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120775750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561212f57600061208783611219565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120ee575060105482826120eb919061324b565b11155b61212d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121249061311b565b60405180910390fd5b505b600061213a30611219565b90506000600f5482101590508080156121605750600e60149054906101000a900460ff16155b80156121ba5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121d25750600e60159054906101000a900460ff165b1561221c57600f5491506001600e60146101000a81548160ff021916908315150217905550612200826124a4565b6000600e60146101000a81548160ff0219169083151502179055505b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122bd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122d2576122cd8585856124b0565b612448565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123865760006123536103e8612345600b548761274990919063ffffffff16565b61275f90919063ffffffff16565b9050612368818561277590919063ffffffff16565b93506123758630836124b0565b6123808686866124b0565b50612447565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561243a5760006124076103e86123f9600c548761274990919063ffffffff16565b61275f90919063ffffffff16565b905061241c818561277590919063ffffffff16565b93506124298630836124b0565b6124348686866124b0565b50612446565b6124458585856124b0565b5b5b5b5050505050565b6000838311158290612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e9190613019565b60405180910390fd5b5082840390509392505050565b6124ad8161278b565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906130fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125879061303b565b60405180910390fd5b61259b838383612a71565b6126078160405180606001604052806026815260200161393060269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244f9092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269c81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161273c919061315b565b60405180910390a3505050565b600081836127579190613443565b905092915050565b6000818361276d91906132a1565b905092915050565b60008183612783919061349d565b905092915050565b6000600267ffffffffffffffff8111156127ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127fc5781602001602082028036833780820191505090505b509050308160008151811061283a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128dc57600080fd5b505afa1580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129149190612b08565b8160018151811061294e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129b530600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c66565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a3b959493929190613176565b600060405180830381600087803b158015612a5557600080fd5b505af1158015612a69573d6000803e3d6000fd5b505050505050565b505050565b600081359050612a85816138ea565b92915050565b600081519050612a9a816138ea565b92915050565b600081359050612aaf81613901565b92915050565b600081519050612ac481613901565b92915050565b600081359050612ad981613918565b92915050565b600060208284031215612af157600080fd5b6000612aff84828501612a76565b91505092915050565b600060208284031215612b1a57600080fd5b6000612b2884828501612a8b565b91505092915050565b60008060408385031215612b4457600080fd5b6000612b5285828601612a76565b9250506020612b6385828601612a76565b9150509250929050565b600080600060608486031215612b8257600080fd5b6000612b9086828701612a76565b9350506020612ba186828701612a76565b9250506040612bb286828701612aca565b9150509250925092565b60008060408385031215612bcf57600080fd5b6000612bdd85828601612a76565b9250506020612bee85828601612aa0565b9150509250929050565b60008060408385031215612c0b57600080fd5b6000612c1985828601612a76565b9250506020612c2a85828601612aca565b9150509250929050565b600060208284031215612c4657600080fd5b6000612c5484828501612aa0565b91505092915050565b600060208284031215612c6f57600080fd5b6000612c7d84828501612ab5565b91505092915050565b600060208284031215612c9857600080fd5b6000612ca684828501612aca565b91505092915050565b60008060408385031215612cc257600080fd5b6000612cd085828601612aca565b9250506020612ce185828601612aca565b9150509250929050565b6000612cf78383612d03565b60208301905092915050565b612d0c816134d1565b82525050565b612d1b816134d1565b82525050565b6000612d2c826131fb565b612d36818561321e565b9350612d41836131eb565b8060005b83811015612d72578151612d598882612ceb565b9750612d6483613211565b925050600181019050612d45565b5085935050505092915050565b612d88816134e3565b82525050565b612d9781613526565b82525050565b612da68161354a565b82525050565b6000612db782613206565b612dc1818561323a565b9350612dd181856020860161355c565b612dda8161364e565b840191505092915050565b6000612df260238361323a565b9150612dfd8261366c565b604082019050919050565b6000612e1560268361323a565b9150612e20826136bb565b604082019050919050565b6000612e3860228361323a565b9150612e438261370a565b604082019050919050565b6000612e5b60208361323a565b9150612e6682613759565b602082019050919050565b6000612e7e60298361323a565b9150612e8982613782565b604082019050919050565b6000612ea160128361323a565b9150612eac826137d1565b602082019050919050565b6000612ec460258361323a565b9150612ecf826137fa565b604082019050919050565b6000612ee760218361323a565b9150612ef282613849565b604082019050919050565b6000612f0a60008361322f565b9150612f1582613898565b600082019050919050565b6000612f2d60248361323a565b9150612f388261389b565b604082019050919050565b612f4c8161350f565b82525050565b612f5b81613519565b82525050565b6000612f6c82612efd565b9150819050919050565b6000602082019050612f8b6000830184612d12565b92915050565b6000604082019050612fa66000830185612d12565b612fb36020830184612d12565b9392505050565b6000604082019050612fcf6000830185612d12565b612fdc6020830184612f43565b9392505050565b6000602082019050612ff86000830184612d7f565b92915050565b60006020820190506130136000830184612d8e565b92915050565b600060208201905081810360008301526130338184612dac565b905092915050565b6000602082019050818103600083015261305481612de5565b9050919050565b6000602082019050818103600083015261307481612e08565b9050919050565b6000602082019050818103600083015261309481612e2b565b9050919050565b600060208201905081810360008301526130b481612e4e565b9050919050565b600060208201905081810360008301526130d481612e71565b9050919050565b600060208201905081810360008301526130f481612e94565b9050919050565b6000602082019050818103600083015261311481612eb7565b9050919050565b6000602082019050818103600083015261313481612eda565b9050919050565b6000602082019050818103600083015261315481612f20565b9050919050565b60006020820190506131706000830184612f43565b92915050565b600060a08201905061318b6000830188612f43565b6131986020830187612d9d565b81810360408301526131aa8186612d21565b90506131b96060830185612d12565b6131c66080830184612f43565b9695505050505050565b60006020820190506131e56000830184612f52565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006132568261350f565b91506132618361350f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613296576132956135c1565b5b828201905092915050565b60006132ac8261350f565b91506132b78361350f565b9250826132c7576132c66135f0565b5b828204905092915050565b6000808291508390505b600185111561331c578086048111156132f8576132f76135c1565b5b60018516156133075780820291505b80810290506133158561365f565b94506132dc565b94509492505050565b60006133308261350f565b915061333b83613519565b92506133687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613370565b905092915050565b600082613380576001905061343c565b8161338e576000905061343c565b81600181146133a457600281146133ae576133dd565b600191505061343c565b60ff8411156133c0576133bf6135c1565b5b8360020a9150848211156133d7576133d66135c1565b5b5061343c565b5060208310610133831016604e8410600b84101617156134125782820a90508381111561340d5761340c6135c1565b5b61343c565b61341f84848460016132d2565b92509050818404811115613436576134356135c1565b5b81810290505b9392505050565b600061344e8261350f565b91506134598361350f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613492576134916135c1565b5b828202905092915050565b60006134a88261350f565b91506134b38361350f565b9250828210156134c6576134c56135c1565b5b828203905092915050565b60006134dc826134ef565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061353182613538565b9050919050565b6000613543826134ef565b9050919050565b60006135558261350f565b9050919050565b60005b8381101561357a57808201518184015260208101905061355f565b83811115613589576000848401525b50505050565b600060028204905060018216806135a757607f821691505b602082108114156135bb576135ba61361f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6138f3816134d1565b81146138fe57600080fd5b50565b61390a816134e3565b811461391557600080fd5b50565b6139218161350f565b811461392c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220543251b0fb86d3f44a0df4c79c555f5e6a052c2062b80fe0028524a884ea2cfe64736f6c63430008040033

Deployed Bytecode Sourcemap

30841:8838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11152:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13789:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34342:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31348:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12487:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14564:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12283:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15485:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31483:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34836:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33506:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33804:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31404:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36122:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31538:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35899:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31228:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31117:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33979:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12704:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9137:172;;;;;;;;;;;;;:::i;:::-;;34145:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8834:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11424:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34661:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16337:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13125:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34487:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31301:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35577:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31591:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13417:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33661:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35202:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9327:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11152:116;11206:13;11247:5;11240:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11152:116;:::o;13789:193::-;13872:4;13897:39;13906:12;:10;:12::i;:::-;13920:7;13929:6;13897:8;:39::i;:::-;13962:4;13955:11;;13789:193;;;;:::o;34342:117::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34438:5:::1;34424:11;;:19;;;;;;;;;;;;;;;;;;34342:117:::0;:::o;31348:41::-;;;;;;;;;;;;;:::o;12487:124::-;12548:7;12583:12;;12576:19;;12487:124;:::o;14564:419::-;14736:4;14761:36;14771:6;14779:9;14790:6;14761:9;:36::i;:::-;14816:121;14825:6;14833:12;:10;:12::i;:::-;14847:89;14885:6;14847:89;;;;;;;;;;;;;;;;;:11;:19;14859:6;14847:19;;;;;;;;;;;;;;;:33;14867:12;:10;:12::i;:::-;14847:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14816:8;:121::i;:::-;14963:4;14956:11;;14564:419;;;;;:::o;12283:109::-;12341:5;12374:2;12367:9;;12283:109;:::o;15485:242::-;15573:4;15598:83;15607:12;:10;:12::i;:::-;15621:7;15630:50;15669:10;15630:11;:25;15642:12;:10;:12::i;:::-;15630:25;;;;;;;;;;;;;;;:34;15656:7;15630:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15598:8;:83::i;:::-;15707:4;15700:11;;15485:242;;;;:::o;31483:40::-;;;;;;;;;;;;;:::o;34836:350::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34919:35:::1;34976:9;34919:67;;35039:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35021:56;;;35086:4;35093:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35021:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35005:13;;:112;;;;;;;;;;;;;;;;;;35154:16;35136:15;;:34;;;;;;;;;;;;;;;;;;9092:1;34836:350:::0;:::o;33506:127::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33613:4:::1;33583:18;:27;33602:7;33583:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33506:127:::0;:::o;33804:159::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33942:5:::1;33906:24;:33;33931:7;33906:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;33804:159:::0;;:::o;31404:28::-;;;;;;;;;;;;;:::o;36122:139::-;36186:4;36218:18;:27;36237:7;36218:27;;;;;;;;;;;;;;;;;;;;;;;;;36211:34;;36122:139;;;:::o;31538:38::-;;;;:::o;35899:197::-;35996:12;9024;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36038:12:::1;36031:29;;;36061:10;36073:6;36031:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36024:56;;35899:197:::0;;;;:::o;31228:29::-;;;;:::o;31117:27::-;;;;;;;;;;;;;:::o;33979:150::-;34049:4;34080:24;:33;34105:7;34080:33;;;;;;;;;;;;;;;;;;;;;;;;;34073:40;;33979:150;;;:::o;12704:143::-;12778:7;12813:9;:18;12823:7;12813:18;;;;;;;;;;;;;;;;12806:25;;12704:143;;;:::o;9137:172::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9252:1:::1;9215:40;;9236:6;::::0;::::1;;;;;;;;9215:40;;;;;;;;;;;;9291:1;9274:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9137:172::o:0;34145:181::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34262:6:::1;34249:10;:19;;;;34301:7;34287:11;:21;;;;34145:181:::0;;:::o;8834:103::-;8880:7;8915:6;;;;;;;;;;;8908:13;;8834:103;:::o;11424:120::-;11480:13;11521:7;11514:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11424:120;:::o;34661:159::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34794:10:::1;:8;:10::i;:::-;34789:2;:15;;;;:::i;:::-;34769:17;:35;;;;:::i;:::-;34749:17;:55;;;;34661:159:::0;:::o;16337:293::-;16430:4;16455:129;16464:12;:10;:12::i;:::-;16478:7;16487:96;16526:15;16487:96;;;;;;;;;;;;;;;;;:11;:25;16499:12;:10;:12::i;:::-;16487:25;;;;;;;;;;;;;;;:34;16513:7;16487:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16455:8;:129::i;:::-;16610:4;16603:11;;16337:293;;;;:::o;13125:199::-;13211:4;13236:42;13246:12;:10;:12::i;:::-;13260:9;13271:6;13236:9;:42::i;:::-;13304:4;13297:11;;13125:199;;;;:::o;34487:158::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34619:10:::1;:8;:10::i;:::-;34613:2;:16;;;;:::i;:::-;34604:6;:25;;;;:::i;:::-;34578:23;:51;;;;34487:158:::0;:::o;31301:30::-;;;;:::o;35577:266::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35725:9:::1;35739:6:::0;::::1;;;;;;;;;;:11;;35758:6;35739:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35724:45;;;35796:4;35788:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;9092:1;35577:266:::0;:::o;31591:32::-;;;;:::o;13417:167::-;13506:7;13541:11;:18;13553:5;13541:18;;;;;;;;;;;;;;;:27;13560:7;13541:27;;;;;;;;;;;;;;;;13534:34;;13417:167;;;;:::o;33661:126::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33766:5:::1;33736:18;:27;33755:7;33736:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33661:126:::0;:::o;35202:197::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35313:8:::1;35289:21;;:32;;;;;;;;;;;;;;;;;;35345:38;35374:8;35345:38;;;;;;:::i;:::-;;;;;;;;35202:197:::0;:::o;9327:276::-;9024:12;:10;:12::i;:::-;9013:23;;:7;:5;:7::i;:::-;:23;;;9005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9444:1:::1;9424:22;;:8;:22;;;;9416:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9542:8;9513:38;;9534:6;::::0;::::1;;;;;;;;9513:38;;;;;;;;;;;;9579:8;9570:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;9327:276:::0;:::o;2636:114::-;2694:7;2733:1;2729;:5;;;;:::i;:::-;2722:12;;2636:114;;;;:::o;4172:::-;4225:7;4260:10;4253:17;;4172:114;:::o;20096:452::-;20289:1;20272:19;;:5;:19;;;;20264:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20378:1;20359:21;;:7;:21;;;;20351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20470:6;20440:11;:18;20452:5;20440:18;;;;;;;;;;;;;;;:27;20459:7;20440:27;;;;;;;;;;;;;;;:36;;;;20516:7;20500:32;;20509:5;20500:32;;;20525:6;20500:32;;;;;;:::i;:::-;;;;;;;;20096:452;;;:::o;36277:2600::-;36464:1;36448:18;;:4;:18;;;;36440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36549:1;36535:16;;:2;:16;;;;36527:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36627:1;36618:6;:10;36610:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36745:7;:5;:7::i;:::-;36737:15;;:4;:15;;;;:59;;;;;36791:4;36777:19;;:2;:19;;;;36737:59;:102;;;;;36827:12;;;;;;;;;;;36821:18;;:2;:18;;;;36737:102;:146;;;;;36870:13;;;;;;;;;;;36864:19;;:2;:19;;;;36737:146;36711:450;;;36927:22;36952:13;36962:2;36952:9;:13::i;:::-;36927:38;;36996:24;:28;37021:2;36996:28;;;;;;;;;;;;;;;;;;;;;;;;;:78;;;;37056:17;;37046:6;37029:14;:23;;;;:::i;:::-;:44;;36996:78;36988:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;36711:450;;37181:28;37212:24;37230:4;37212:9;:24::i;:::-;37181:55;;37256:24;37307:23;;37283:20;:47;;37256:74;;37375:19;:61;;;;;37420:16;;;;;;;;;;;37419:17;37375:61;:107;;;;;37469:13;;;;;;;;;;;37461:21;;:4;:21;;;;37375:107;:153;;;;;37507:21;;;;;;;;;;;37375:153;37349:434;;;37594:23;;37571:46;;37659:4;37640:16;;:23;;;;;;;;;;;;;;;;;;37686:30;37695:20;37686:8;:30::i;:::-;37758:5;37739:16;;:24;;;;;;;;;;;;;;;;;;37349:434;37822:18;:24;37841:4;37822:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;37850:18;:22;37869:2;37850:22;;;;;;;;;;;;;;;;;;;;;;;;;37822:50;37819:1027;;;37892:33;37908:4;37914:2;37918:6;37892:15;:33::i;:::-;37819:1027;;;38001:13;;;;;;;;;;;37993:21;;:4;:21;;;37989:838;;;38067:17;38087:32;38114:4;38087:22;38098:10;;38087:6;:10;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;38067:52;;38150:21;38161:9;38150:6;:10;;:21;;;;:::i;:::-;38142:29;;38194:47;38210:4;38224;38231:9;38194:15;:47::i;:::-;38264:33;38280:4;38286:2;38290:6;38264:15;:33::i;:::-;37989:838;;;;38359:13;;;;;;;;;;;38353:19;;:2;:19;;;38349:478;;;38426:17;38446:33;38474:4;38446:23;38457:11;;38446:6;:10;;:23;;;;:::i;:::-;:27;;:33;;;;:::i;:::-;38426:53;;38510:21;38521:9;38510:6;:10;;:21;;;;:::i;:::-;38502:29;;38554:46;38570:4;38584;38590:9;38554:15;:46::i;:::-;38623:33;38639:4;38645:2;38649:6;38623:15;:33::i;:::-;38349:478;;;;38770:33;38786:4;38792:2;38796:6;38770:15;:33::i;:::-;38349:478;37989:838;37819:1027;36277:2600;;;;;:::o;3316:246::-;3402:7;3476:1;3471;:6;;3479:12;3463:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3526:1;3522;:5;3515:12;;3316:246;;;;;:::o;38893:141::-;38966:33;38983:15;38966:16;:33::i;:::-;38893:141;:::o;17227:661::-;17425:1;17407:20;;:6;:20;;;;17399:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17517:1;17496:23;;:9;:23;;;;17488:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17580:47;17601:6;17609:9;17620:6;17580:20;:47::i;:::-;17668:71;17690:6;17668:71;;;;;;;;;;;;;;;;;:9;:17;17678:6;17668:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;17648:9;:17;17658:6;17648:17;;;;;;;;;;;;;;;:91;;;;17781:32;17806:6;17781:9;:20;17791:9;17781:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;17758:9;:20;17768:9;17758:20;;;;;;;;;;;;;;;:55;;;;17854:9;17837:35;;17846:6;17837:35;;;17865:6;17837:35;;;;;;:::i;:::-;;;;;;;;17227:661;;;:::o;2900:114::-;2958:7;2997:1;2993;:5;;;;:::i;:::-;2986:12;;2900:114;;;;:::o;3042:::-;3100:7;3139:1;3135;:5;;;;:::i;:::-;3128:12;;3042:114;;;;:::o;2768:::-;2826:7;2865:1;2861;:5;;;;:::i;:::-;2854:12;;2768:114;;;;:::o;39069:593::-;39143:21;39181:1;39167:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39143:40;;39220:4;39202;39207:1;39202:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;39254:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39244:4;39249:1;39244:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;39295:62;39312:4;39327:15;;;;;;;;;;;39345:11;39295:8;:62::i;:::-;39376:15;;;;;;;;;;;:66;;;39465:11;39499:1;39551:4;39578:11;;;;;;;;;;;39612:15;39376:270;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39069:593;;:::o;21258:157::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:262::-;787:6;836:2;824:9;815:7;811:23;807:32;804:2;;;852:1;849;842:12;804:2;895:1;920:53;965:7;956:6;945:9;941:22;920:53;:::i;:::-;910:63;;866:117;794:196;;;;:::o;996:284::-;1066:6;1115:2;1103:9;1094:7;1090:23;1086:32;1083:2;;;1131:1;1128;1121:12;1083:2;1174:1;1199:64;1255:7;1246:6;1235:9;1231:22;1199:64;:::i;:::-;1189:74;;1145:128;1073:207;;;;:::o;1286:407::-;1354:6;1362;1411:2;1399:9;1390:7;1386:23;1382:32;1379:2;;;1427:1;1424;1417:12;1379:2;1470:1;1495:53;1540:7;1531:6;1520:9;1516:22;1495:53;:::i;:::-;1485:63;;1441:117;1597:2;1623:53;1668:7;1659:6;1648:9;1644:22;1623:53;:::i;:::-;1613:63;;1568:118;1369:324;;;;;:::o;1699:552::-;1776:6;1784;1792;1841:2;1829:9;1820:7;1816:23;1812:32;1809:2;;;1857:1;1854;1847:12;1809:2;1900:1;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1871:117;2027:2;2053:53;2098:7;2089:6;2078:9;2074:22;2053:53;:::i;:::-;2043:63;;1998:118;2155:2;2181:53;2226:7;2217:6;2206:9;2202:22;2181:53;:::i;:::-;2171:63;;2126:118;1799:452;;;;;:::o;2257:401::-;2322:6;2330;2379:2;2367:9;2358:7;2354:23;2350:32;2347:2;;;2395:1;2392;2385:12;2347:2;2438:1;2463:53;2508:7;2499:6;2488:9;2484:22;2463:53;:::i;:::-;2453:63;;2409:117;2565:2;2591:50;2633:7;2624:6;2613:9;2609:22;2591:50;:::i;:::-;2581:60;;2536:115;2337:321;;;;;:::o;2664:407::-;2732:6;2740;2789:2;2777:9;2768:7;2764:23;2760:32;2757:2;;;2805:1;2802;2795:12;2757:2;2848:1;2873:53;2918:7;2909:6;2898:9;2894:22;2873:53;:::i;:::-;2863:63;;2819:117;2975:2;3001:53;3046:7;3037:6;3026:9;3022:22;3001:53;:::i;:::-;2991:63;;2946:118;2747:324;;;;;:::o;3077:256::-;3133:6;3182:2;3170:9;3161:7;3157:23;3153:32;3150:2;;;3198:1;3195;3188:12;3150:2;3241:1;3266:50;3308:7;3299:6;3288:9;3284:22;3266:50;:::i;:::-;3256:60;;3212:114;3140:193;;;;:::o;3339:278::-;3406:6;3455:2;3443:9;3434:7;3430:23;3426:32;3423:2;;;3471:1;3468;3461:12;3423:2;3514:1;3539:61;3592:7;3583:6;3572:9;3568:22;3539:61;:::i;:::-;3529:71;;3485:125;3413:204;;;;:::o;3623:262::-;3682:6;3731:2;3719:9;3710:7;3706:23;3702:32;3699:2;;;3747:1;3744;3737:12;3699:2;3790:1;3815:53;3860:7;3851:6;3840:9;3836:22;3815:53;:::i;:::-;3805:63;;3761:117;3689:196;;;;:::o;3891:407::-;3959:6;3967;4016:2;4004:9;3995:7;3991:23;3987:32;3984:2;;;4032:1;4029;4022:12;3984:2;4075:1;4100:53;4145:7;4136:6;4125:9;4121:22;4100:53;:::i;:::-;4090:63;;4046:117;4202:2;4228:53;4273:7;4264:6;4253:9;4249:22;4228:53;:::i;:::-;4218:63;;4173:118;3974:324;;;;;:::o;4304:179::-;4373:10;4394:46;4436:3;4428:6;4394:46;:::i;:::-;4472:4;4467:3;4463:14;4449:28;;4384:99;;;;:::o;4489:108::-;4566:24;4584:5;4566:24;:::i;:::-;4561:3;4554:37;4544:53;;:::o;4603:118::-;4690:24;4708:5;4690:24;:::i;:::-;4685:3;4678:37;4668:53;;:::o;4757:732::-;4876:3;4905:54;4953:5;4905:54;:::i;:::-;4975:86;5054:6;5049:3;4975:86;:::i;:::-;4968:93;;5085:56;5135:5;5085:56;:::i;:::-;5164:7;5195:1;5180:284;5205:6;5202:1;5199:13;5180:284;;;5281:6;5275:13;5308:63;5367:3;5352:13;5308:63;:::i;:::-;5301:70;;5394:60;5447:6;5394:60;:::i;:::-;5384:70;;5240:224;5227:1;5224;5220:9;5215:14;;5180:284;;;5184:14;5480:3;5473:10;;4881:608;;;;;;;:::o;5495:109::-;5576:21;5591:5;5576:21;:::i;:::-;5571:3;5564:34;5554:50;;:::o;5610:185::-;5724:64;5782:5;5724:64;:::i;:::-;5719:3;5712:77;5702:93;;:::o;5801:147::-;5896:45;5935:5;5896:45;:::i;:::-;5891:3;5884:58;5874:74;;:::o;5954:364::-;6042:3;6070:39;6103:5;6070:39;:::i;:::-;6125:71;6189:6;6184:3;6125:71;:::i;:::-;6118:78;;6205:52;6250:6;6245:3;6238:4;6231:5;6227:16;6205:52;:::i;:::-;6282:29;6304:6;6282:29;:::i;:::-;6277:3;6273:39;6266:46;;6046:272;;;;;:::o;6324:366::-;6466:3;6487:67;6551:2;6546:3;6487:67;:::i;:::-;6480:74;;6563:93;6652:3;6563:93;:::i;:::-;6681:2;6676:3;6672:12;6665:19;;6470:220;;;:::o;6696:366::-;6838:3;6859:67;6923:2;6918:3;6859:67;:::i;:::-;6852:74;;6935:93;7024:3;6935:93;:::i;:::-;7053:2;7048:3;7044:12;7037:19;;6842:220;;;:::o;7068:366::-;7210:3;7231:67;7295:2;7290:3;7231:67;:::i;:::-;7224:74;;7307:93;7396:3;7307:93;:::i;:::-;7425:2;7420:3;7416:12;7409:19;;7214:220;;;:::o;7440:366::-;7582:3;7603:67;7667:2;7662:3;7603:67;:::i;:::-;7596:74;;7679:93;7768:3;7679:93;:::i;:::-;7797:2;7792:3;7788:12;7781:19;;7586:220;;;:::o;7812:366::-;7954:3;7975:67;8039:2;8034:3;7975:67;:::i;:::-;7968:74;;8051:93;8140:3;8051:93;:::i;:::-;8169:2;8164:3;8160:12;8153:19;;7958:220;;;:::o;8184:366::-;8326:3;8347:67;8411:2;8406:3;8347:67;:::i;:::-;8340:74;;8423:93;8512:3;8423:93;:::i;:::-;8541:2;8536:3;8532:12;8525:19;;8330:220;;;:::o;8556:366::-;8698:3;8719:67;8783:2;8778:3;8719:67;:::i;:::-;8712:74;;8795:93;8884:3;8795:93;:::i;:::-;8913:2;8908:3;8904:12;8897:19;;8702:220;;;:::o;8928:366::-;9070:3;9091:67;9155:2;9150:3;9091:67;:::i;:::-;9084:74;;9167:93;9256:3;9167:93;:::i;:::-;9285:2;9280:3;9276:12;9269:19;;9074:220;;;:::o;9300:398::-;9459:3;9480:83;9561:1;9556:3;9480:83;:::i;:::-;9473:90;;9572:93;9661:3;9572:93;:::i;:::-;9690:1;9685:3;9681:11;9674:18;;9463:235;;;:::o;9704:366::-;9846:3;9867:67;9931:2;9926:3;9867:67;:::i;:::-;9860:74;;9943:93;10032:3;9943:93;:::i;:::-;10061:2;10056:3;10052:12;10045:19;;9850:220;;;:::o;10076:118::-;10163:24;10181:5;10163:24;:::i;:::-;10158:3;10151:37;10141:53;;:::o;10200:112::-;10283:22;10299:5;10283:22;:::i;:::-;10278:3;10271:35;10261:51;;:::o;10318:379::-;10502:3;10524:147;10667:3;10524:147;:::i;:::-;10517:154;;10688:3;10681:10;;10506:191;;;:::o;10703:222::-;10796:4;10834:2;10823:9;10819:18;10811:26;;10847:71;10915:1;10904:9;10900:17;10891:6;10847:71;:::i;:::-;10801:124;;;;:::o;10931:332::-;11052:4;11090:2;11079:9;11075:18;11067:26;;11103:71;11171:1;11160:9;11156:17;11147:6;11103:71;:::i;:::-;11184:72;11252:2;11241:9;11237:18;11228:6;11184:72;:::i;:::-;11057:206;;;;;:::o;11269:332::-;11390:4;11428:2;11417:9;11413:18;11405:26;;11441:71;11509:1;11498:9;11494:17;11485:6;11441:71;:::i;:::-;11522:72;11590:2;11579:9;11575:18;11566:6;11522:72;:::i;:::-;11395:206;;;;;:::o;11607:210::-;11694:4;11732:2;11721:9;11717:18;11709:26;;11745:65;11807:1;11796:9;11792:17;11783:6;11745:65;:::i;:::-;11699:118;;;;:::o;11823:276::-;11943:4;11981:2;11970:9;11966:18;11958:26;;11994:98;12089:1;12078:9;12074:17;12065:6;11994:98;:::i;:::-;11948:151;;;;:::o;12105:313::-;12218:4;12256:2;12245:9;12241:18;12233:26;;12305:9;12299:4;12295:20;12291:1;12280:9;12276:17;12269:47;12333:78;12406:4;12397:6;12333:78;:::i;:::-;12325:86;;12223:195;;;;:::o;12424:419::-;12590:4;12628:2;12617:9;12613:18;12605:26;;12677:9;12671:4;12667:20;12663:1;12652:9;12648:17;12641:47;12705:131;12831:4;12705:131;:::i;:::-;12697:139;;12595:248;;;:::o;12849:419::-;13015:4;13053:2;13042:9;13038:18;13030:26;;13102:9;13096:4;13092:20;13088:1;13077:9;13073:17;13066:47;13130:131;13256:4;13130:131;:::i;:::-;13122:139;;13020:248;;;:::o;13274:419::-;13440:4;13478:2;13467:9;13463:18;13455:26;;13527:9;13521:4;13517:20;13513:1;13502:9;13498:17;13491:47;13555:131;13681:4;13555:131;:::i;:::-;13547:139;;13445:248;;;:::o;13699:419::-;13865:4;13903:2;13892:9;13888:18;13880:26;;13952:9;13946:4;13942:20;13938:1;13927:9;13923:17;13916:47;13980:131;14106:4;13980:131;:::i;:::-;13972:139;;13870:248;;;:::o;14124:419::-;14290:4;14328:2;14317:9;14313:18;14305:26;;14377:9;14371:4;14367:20;14363:1;14352:9;14348:17;14341:47;14405:131;14531:4;14405:131;:::i;:::-;14397:139;;14295:248;;;:::o;14549:419::-;14715:4;14753:2;14742:9;14738:18;14730:26;;14802:9;14796:4;14792:20;14788:1;14777:9;14773:17;14766:47;14830:131;14956:4;14830:131;:::i;:::-;14822:139;;14720:248;;;:::o;14974:419::-;15140:4;15178:2;15167:9;15163:18;15155:26;;15227:9;15221:4;15217:20;15213:1;15202:9;15198:17;15191:47;15255:131;15381:4;15255:131;:::i;:::-;15247:139;;15145:248;;;:::o;15399:419::-;15565:4;15603:2;15592:9;15588:18;15580:26;;15652:9;15646:4;15642:20;15638:1;15627:9;15623:17;15616:47;15680:131;15806:4;15680:131;:::i;:::-;15672:139;;15570:248;;;:::o;15824:419::-;15990:4;16028:2;16017:9;16013:18;16005:26;;16077:9;16071:4;16067:20;16063:1;16052:9;16048:17;16041:47;16105:131;16231:4;16105:131;:::i;:::-;16097:139;;15995:248;;;:::o;16249:222::-;16342:4;16380:2;16369:9;16365:18;16357:26;;16393:71;16461:1;16450:9;16446:17;16437:6;16393:71;:::i;:::-;16347:124;;;;:::o;16477:831::-;16740:4;16778:3;16767:9;16763:19;16755:27;;16792:71;16860:1;16849:9;16845:17;16836:6;16792:71;:::i;:::-;16873:80;16949:2;16938:9;16934:18;16925:6;16873:80;:::i;:::-;17000:9;16994:4;16990:20;16985:2;16974:9;16970:18;16963:48;17028:108;17131:4;17122:6;17028:108;:::i;:::-;17020:116;;17146:72;17214:2;17203:9;17199:18;17190:6;17146:72;:::i;:::-;17228:73;17296:3;17285:9;17281:19;17272:6;17228:73;:::i;:::-;16745:563;;;;;;;;:::o;17314:214::-;17403:4;17441:2;17430:9;17426:18;17418:26;;17454:67;17518:1;17507:9;17503:17;17494:6;17454:67;:::i;:::-;17408:120;;;;:::o;17534:132::-;17601:4;17624:3;17616:11;;17654:4;17649:3;17645:14;17637:22;;17606:60;;;:::o;17672:114::-;17739:6;17773:5;17767:12;17757:22;;17746:40;;;:::o;17792:99::-;17844:6;17878:5;17872:12;17862:22;;17851:40;;;:::o;17897:113::-;17967:4;17999;17994:3;17990:14;17982:22;;17972:38;;;:::o;18016:184::-;18115:11;18149:6;18144:3;18137:19;18189:4;18184:3;18180:14;18165:29;;18127:73;;;;:::o;18206:147::-;18307:11;18344:3;18329:18;;18319:34;;;;:::o;18359:169::-;18443:11;18477:6;18472:3;18465:19;18517:4;18512:3;18508:14;18493:29;;18455:73;;;;:::o;18534:305::-;18574:3;18593:20;18611:1;18593:20;:::i;:::-;18588:25;;18627:20;18645:1;18627:20;:::i;:::-;18622:25;;18781:1;18713:66;18709:74;18706:1;18703:81;18700:2;;;18787:18;;:::i;:::-;18700:2;18831:1;18828;18824:9;18817:16;;18578:261;;;;:::o;18845:185::-;18885:1;18902:20;18920:1;18902:20;:::i;:::-;18897:25;;18936:20;18954:1;18936:20;:::i;:::-;18931:25;;18975:1;18965:2;;18980:18;;:::i;:::-;18965:2;19022:1;19019;19015:9;19010:14;;18887:143;;;;:::o;19036:848::-;19097:5;19104:4;19128:6;19119:15;;19152:5;19143:14;;19166:712;19187:1;19177:8;19174:15;19166:712;;;19282:4;19277:3;19273:14;19267:4;19264:24;19261:2;;;19291:18;;:::i;:::-;19261:2;19341:1;19331:8;19327:16;19324:2;;;19756:4;19749:5;19745:16;19736:25;;19324:2;19806:4;19800;19796:15;19788:23;;19836:32;19859:8;19836:32;:::i;:::-;19824:44;;19166:712;;;19109:775;;;;;;;:::o;19890:281::-;19948:5;19972:23;19990:4;19972:23;:::i;:::-;19964:31;;20016:25;20032:8;20016:25;:::i;:::-;20004:37;;20060:104;20097:66;20087:8;20081:4;20060:104;:::i;:::-;20051:113;;19954:217;;;;:::o;20177:1073::-;20231:5;20422:8;20412:2;;20443:1;20434:10;;20445:5;;20412:2;20471:4;20461:2;;20488:1;20479:10;;20490:5;;20461:2;20557:4;20605:1;20600:27;;;;20641:1;20636:191;;;;20550:277;;20600:27;20618:1;20609:10;;20620:5;;;20636:191;20681:3;20671:8;20668:17;20665:2;;;20688:18;;:::i;:::-;20665:2;20737:8;20734:1;20730:16;20721:25;;20772:3;20765:5;20762:14;20759:2;;;20779:18;;:::i;:::-;20759:2;20812:5;;;20550:277;;20936:2;20926:8;20923:16;20917:3;20911:4;20908:13;20904:36;20886:2;20876:8;20873:16;20868:2;20862:4;20859:12;20855:35;20839:111;20836:2;;;20992:8;20986:4;20982:19;20973:28;;21027:3;21020:5;21017:14;21014:2;;;21034:18;;:::i;:::-;21014:2;21067:5;;20836:2;21107:42;21145:3;21135:8;21129:4;21126:1;21107:42;:::i;:::-;21092:57;;;;21181:4;21176:3;21172:14;21165:5;21162:25;21159:2;;;21190:18;;:::i;:::-;21159:2;21239:4;21232:5;21228:16;21219:25;;20237:1013;;;;;;:::o;21256:348::-;21296:7;21319:20;21337:1;21319:20;:::i;:::-;21314:25;;21353:20;21371:1;21353:20;:::i;:::-;21348:25;;21541:1;21473:66;21469:74;21466:1;21463:81;21458:1;21451:9;21444:17;21440:105;21437:2;;;21548:18;;:::i;:::-;21437:2;21596:1;21593;21589:9;21578:20;;21304:300;;;;:::o;21610:191::-;21650:4;21670:20;21688:1;21670:20;:::i;:::-;21665:25;;21704:20;21722:1;21704:20;:::i;:::-;21699:25;;21743:1;21740;21737:8;21734:2;;;21748:18;;:::i;:::-;21734:2;21793:1;21790;21786:9;21778:17;;21655:146;;;;:::o;21807:96::-;21844:7;21873:24;21891:5;21873:24;:::i;:::-;21862:35;;21852:51;;;:::o;21909:90::-;21943:7;21986:5;21979:13;21972:21;21961:32;;21951:48;;;:::o;22005:126::-;22042:7;22082:42;22075:5;22071:54;22060:65;;22050:81;;;:::o;22137:77::-;22174:7;22203:5;22192:16;;22182:32;;;:::o;22220:86::-;22255:7;22295:4;22288:5;22284:16;22273:27;;22263:43;;;:::o;22312:180::-;22389:9;22422:64;22480:5;22422:64;:::i;:::-;22409:77;;22399:93;;;:::o;22498:140::-;22575:9;22608:24;22626:5;22608:24;:::i;:::-;22595:37;;22585:53;;;:::o;22644:121::-;22702:9;22735:24;22753:5;22735:24;:::i;:::-;22722:37;;22712:53;;;:::o;22771:307::-;22839:1;22849:113;22863:6;22860:1;22857:13;22849:113;;;22948:1;22943:3;22939:11;22933:18;22929:1;22924:3;22920:11;22913:39;22885:2;22882:1;22878:10;22873:15;;22849:113;;;22980:6;22977:1;22974:13;22971:2;;;23060:1;23051:6;23046:3;23042:16;23035:27;22971:2;22820:258;;;;:::o;23084:320::-;23128:6;23165:1;23159:4;23155:12;23145:22;;23212:1;23206:4;23202:12;23233:18;23223:2;;23289:4;23281:6;23277:17;23267:27;;23223:2;23351;23343:6;23340:14;23320:18;23317:38;23314:2;;;23370:18;;:::i;:::-;23314:2;23135:269;;;;:::o;23410:180::-;23458:77;23455:1;23448:88;23555:4;23552:1;23545:15;23579:4;23576:1;23569:15;23596:180;23644:77;23641:1;23634:88;23741:4;23738:1;23731:15;23765:4;23762:1;23755:15;23782:180;23830:77;23827:1;23820:88;23927:4;23924:1;23917:15;23951:4;23948:1;23941:15;23968:102;24009:6;24060:2;24056:7;24051:2;24044:5;24040:14;24036:28;24026:38;;24016:54;;;:::o;24076:102::-;24118:8;24165:5;24162:1;24158:13;24137:34;;24127:51;;;:::o;24184:222::-;24324:34;24320:1;24312:6;24308:14;24301:58;24393:5;24388:2;24380:6;24376:15;24369:30;24290:116;:::o;24412:225::-;24552:34;24548:1;24540:6;24536:14;24529:58;24621:8;24616:2;24608:6;24604:15;24597:33;24518:119;:::o;24643:221::-;24783:34;24779:1;24771:6;24767:14;24760:58;24852:4;24847:2;24839:6;24835:15;24828:29;24749:115;:::o;24870:182::-;25010:34;25006:1;24998:6;24994:14;24987:58;24976:76;:::o;25058:228::-;25198:34;25194:1;25186:6;25182:14;25175:58;25267:11;25262:2;25254:6;25250:15;25243:36;25164:122;:::o;25292:168::-;25432:20;25428:1;25420:6;25416:14;25409:44;25398:62;:::o;25466:224::-;25606:34;25602:1;25594:6;25590:14;25583:58;25675:7;25670:2;25662:6;25658:15;25651:32;25572:118;:::o;25696:220::-;25836:34;25832:1;25824:6;25820:14;25813:58;25905:3;25900:2;25892:6;25888:15;25881:28;25802:114;:::o;25922:::-;26028:8;:::o;26042:223::-;26182:34;26178:1;26170:6;26166:14;26159:58;26251:6;26246:2;26238:6;26234:15;26227:31;26148:117;:::o;26271:122::-;26344:24;26362:5;26344:24;:::i;:::-;26337:5;26334:35;26324:2;;26383:1;26380;26373:12;26324:2;26314:79;:::o;26399:116::-;26469:21;26484:5;26469:21;:::i;:::-;26462:5;26459:32;26449:2;;26505:1;26502;26495:12;26449:2;26439:76;:::o;26521:122::-;26594:24;26612:5;26594:24;:::i;:::-;26587:5;26584:35;26574:2;;26633:1;26630;26623:12;26574:2;26564:79;:::o

Swarm Source

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