ETH Price: $1,872.04 (-12.69%)
 

Overview

Max Total Supply

10,000,000 PUNKX

Holders

1

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
PUNKXToken

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-11-04
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.16;

abstract contract Context {

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

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

interface IERC20 {

    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
    
}

library MerkleProof {
    /**
     *@dev The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     */
    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,  bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;  uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Sorts the pair (a, b) and hashes the result.
     */
    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
          return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target,
         data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value : weiValue}(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address public _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function waiveOwnership() 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 IUniswapV2Factory {


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


interface ISwapPair {
     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;

}

contract PUNKXToken is Context, IERC20, Ownable {


    using SafeMath for uint256;
    using Address for address;

    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address payable private marketingWalletAddress;
    address payable private teamWalletAddress;
    address private deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private preLPUnlockTime = 1695560500;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private isMarketPair;

    mapping(address => UserInfo) private _userInfo;
    struct UserInfo {
        uint256 lpAmount;
        bool preLP;
        uint256 unlockTime;
    }
    
    uint256 private _totalTaxIfBuying = 0;
    uint256 private _totalTaxIfSelling = 0;

    uint256 private _totalSupply;
    uint256 private _minimumTokensBeforeSwap = 0;

    IUniswapV2Router02 private uniswap;
    address private uniswapPair;

    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = false;
    bool private swapAndLiquifyByLimitOnly = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped, uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn, address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }


    constructor (
        string memory coinName,
        string memory coinSymbol,
        uint8 coinDecimals,
        uint256 supply
    ) payable {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        _name = coinName;
        _symbol = coinSymbol;
        _decimals = coinDecimals;
        _owner = 0xfa75deb2e93F0240DE0Dbd36Db2A2461a7DA80A6;
        _totalSupply = supply  * 10 ** _decimals;
        marketingWalletAddress = payable(0xfa75deb2e93F0240DE0Dbd36Db2A2461a7DA80A6);
        teamWalletAddress = payable(0xfa75deb2e93F0240DE0Dbd36Db2A2461a7DA80A6);
        uniswap = _uniswapV2Router;
        _allowances[address(this)][address(uniswap)] = _totalSupply;

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _totalSupply);
    }


    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));  return true;
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        _minimumTokensBeforeSwap = newLimit;
    }


    function changeRouter(address newRouterAddress) external onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswap);

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        _uniswapV2Router = IUniswapV2Router02(newRouterAddress);
        uniswap = _uniswapV2Router;
        swapAndLiquifyEnabled = true;
        isMarketPair[address(uniswapPair)] = true;
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(inSwapAndLiquify)
        {
            return _basicTransfer(sender, recipient, amount);
        }
        else
        {

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= _minimumTokensBeforeSwap;

            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled)
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = _minimumTokensBeforeSwap;
                addLiquidity(sender,contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = takeFee(sender, recipient, amount);


            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }


    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        
        // swap token -> eth
        swapTokensForEth(tAmount);
        uint256 amountReceived = address(this).balance;
         
        // team eth
        uint256 amountUSDTTeam = amountReceived.mul(50).div(100);
        // marketing eth
        uint256 amountUSDTMarketing = amountReceived.sub(amountUSDTTeam);

        if(amountUSDTMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountUSDTMarketing);

        if(amountUSDTTeam > 0)
            transferToAddressETH(teamWalletAddress, amountUSDTTeam);


    }

    function addLiquidity(address sender,uint256 tokenAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswap), tokenAmount);
        uint256 ethAmount =  address(this).balance;
        // add the liquidity
        uniswap.addLiquidityETH{value: ethAmount}(
            sender,
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }



    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 feeAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
    

}


library ECDSA {
    enum RecoverError {
        NoError,   InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS
    }

    /**
     * @dev The signature derives the `address(0)`.
     */
    error ECDSAInvalidSignature();

    /**
     * @dev The signature has an invalid length.
     */
    error ECDSAInvalidSignatureLength(uint256 length);

    /**
     * @dev The signature has an S value that is in the upper half order.
     */
    error ECDSAInvalidSignatureS(bytes32 s);

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
     * return address(0) without also returning an error description. Errors are documented using an enum (error type)
     * and a bytes32 providing additional information about the error.
     *
     * If no error is returned, then the address can be used for verification purposes.
     *
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            /// @solidity memory-safe-assembly
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     */
    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {
        unchecked {
            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            // We do not check for an overflow here since the shift operation results in 0 or 1.
            uint8 v = uint8((uint256(vs) >> 255) + 27);
            return tryRecover(hash, v, r, s);
        }
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     */
    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        (address recovered, RecoverError error,
         bytes32 errorArg) = tryRecover(hash, r, vs);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError, bytes32) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS, s);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature, bytes32(0));
        }

        return (signer, RecoverError.NoError, bytes32(0));
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
     */
    function _throwError(RecoverError error, bytes32 errorArg) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert ECDSAInvalidSignature();
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert ECDSAInvalidSignatureLength(uint256(errorArg));
        } else if (error == RecoverError.InvalidSignatureS) {
            revert ECDSAInvalidSignatureS(errorArg);
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"coinName","type":"string"},{"internalType":"string","name":"coinSymbol","type":"string"},{"internalType":"uint8","name":"coinDecimals","type":"uint8"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouter","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555063651033346006556000600b556000600c556000600e556000601060156101000a81548160ff0219169083151502179055506000601060166101000a81548160ff02191690831515021790555060405162003512380380620035128339818101604052810190620000b991906200062e565b60007310ed43c718714eb63d5aa57b78b54704e256024e90508460019081620000e391906200091f565b508360029081620000f591906200091f565b5082600360006101000a81548160ff021916908360ff16021790555073fa75deb2e93f0240de0dbd36db2a2461a7da80a66000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900460ff16600a62000183919062000b89565b8262000190919062000bda565b600d8190555073fa75deb2e93f0240de0dbd36db2a2461a7da80a6600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fa75deb2e93f0240de0dbd36db2a2461a7da80a6600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d54600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200040f919062000c4c565b60405180910390a3505050505062000c69565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200048b8262000440565b810181811067ffffffffffffffff82111715620004ad57620004ac62000451565b5b80604052505050565b6000620004c262000422565b9050620004d0828262000480565b919050565b600067ffffffffffffffff821115620004f357620004f262000451565b5b620004fe8262000440565b9050602081019050919050565b60005b838110156200052b5780820151818401526020810190506200050e565b60008484015250505050565b60006200054e6200054884620004d5565b620004b6565b9050828152602081018484840111156200056d576200056c6200043b565b5b6200057a8482856200050b565b509392505050565b600082601f8301126200059a576200059962000436565b5b8151620005ac84826020860162000537565b91505092915050565b600060ff82169050919050565b620005cd81620005b5565b8114620005d957600080fd5b50565b600081519050620005ed81620005c2565b92915050565b6000819050919050565b6200060881620005f3565b81146200061457600080fd5b50565b6000815190506200062881620005fd565b92915050565b600080600080608085870312156200064b576200064a6200042c565b5b600085015167ffffffffffffffff8111156200066c576200066b62000431565b5b6200067a8782880162000582565b945050602085015167ffffffffffffffff8111156200069e576200069d62000431565b5b620006ac8782880162000582565b9350506040620006bf87828801620005dc565b9250506060620006d28782880162000617565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073157607f821691505b602082108103620007475762000746620006e9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007b17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000772565b620007bd868362000772565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000800620007fa620007f484620005f3565b620007d5565b620005f3565b9050919050565b6000819050919050565b6200081c83620007df565b620008346200082b8262000807565b8484546200077f565b825550505050565b600090565b6200084b6200083c565b6200085881848462000811565b505050565b5b8181101562000880576200087460008262000841565b6001810190506200085e565b5050565b601f821115620008cf5762000899816200074d565b620008a48462000762565b81016020851015620008b4578190505b620008cc620008c38562000762565b8301826200085d565b50505b505050565b600082821c905092915050565b6000620008f460001984600802620008d4565b1980831691505092915050565b60006200090f8383620008e1565b9150826002028217905092915050565b6200092a82620006de565b67ffffffffffffffff81111562000946576200094562000451565b5b62000952825462000718565b6200095f82828562000884565b600060209050601f83116001811462000997576000841562000982578287015190505b6200098e858262000901565b865550620009fe565b601f198416620009a7866200074d565b60005b82811015620009d157848901518255600182019150602085019450602081019050620009aa565b86831015620009f15784890151620009ed601f891682620008e1565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a945780860481111562000a6c5762000a6b62000a06565b5b600185161562000a7c5780820291505b808102905062000a8c8562000a35565b945062000a4c565b94509492505050565b60008262000aaf576001905062000b82565b8162000abf576000905062000b82565b816001811462000ad8576002811462000ae35762000b19565b600191505062000b82565b60ff84111562000af85762000af762000a06565b5b8360020a91508482111562000b125762000b1162000a06565b5b5062000b82565b5060208310610133831016604e8410600b841016171562000b535782820a90508381111562000b4d5762000b4c62000a06565b5b62000b82565b62000b62848484600162000a42565b9250905081840481111562000b7c5762000b7b62000a06565b5b81810290505b9392505050565b600062000b9682620005f3565b915062000ba383620005b5565b925062000bd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a9d565b905092915050565b600062000be782620005f3565b915062000bf483620005f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c305762000c2f62000a06565b5b828202905092915050565b62000c4681620005f3565b82525050565b600060208201905062000c63600083018462000c3b565b92915050565b6128998062000c796000396000f3fe6080604052600436106101025760003560e01c806370a0823111610095578063a457c2d711610064578063a457c2d714610356578063a9059cbb14610393578063b2bdfa7b146103d0578063dd62ed3e146103fb578063f2fde38b1461043857610109565b806370a08231146102ac5780638da5cb5b146102e9578063914eb66a1461031457806395d89b411461032b57610109565b8063313ce567116100d1578063313ce567146101de578063340ac20f1461020957806339509351146102465780633b97084a1461028357610109565b806306fdde031461010e578063095ea7b31461013957806318160ddd1461017657806323b872dd146101a157610109565b3661010957005b600080fd5b34801561011a57600080fd5b50610123610461565b6040516101309190611d6d565b60405180910390f35b34801561014557600080fd5b50610160600480360381019061015b9190611e28565b6104f3565b60405161016d9190611e83565b60405180910390f35b34801561018257600080fd5b5061018b610511565b6040516101989190611ead565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190611ec8565b61051b565b6040516101d59190611e83565b60405180910390f35b3480156101ea57600080fd5b506101f36105f5565b6040516102009190611f37565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190611f52565b61060c565b60405161023d9190611f8e565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190611e28565b610903565b60405161027a9190611e83565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a59190611fa9565b6109b6565b005b3480156102b857600080fd5b506102d360048036038101906102ce9190611f52565b610a55565b6040516102e09190611ead565b60405180910390f35b3480156102f557600080fd5b506102fe610a9e565b60405161030b9190611f8e565b60405180910390f35b34801561032057600080fd5b50610329610ac7565b005b34801561033757600080fd5b50610340610c1a565b60405161034d9190611d6d565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190611e28565b610cac565b60405161038a9190611e83565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190611e28565b610d79565b6040516103c79190611e83565b60405180910390f35b3480156103dc57600080fd5b506103e5610d98565b6040516103f29190611f8e565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190611fd6565b610dbc565b60405161042f9190611ead565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190611f52565b610e43565b005b60606001805461047090612045565b80601f016020809104026020016040519081016040528092919081815260200182805461049c90612045565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b6000610507610500611004565b848461100c565b6001905092915050565b6000600d54905090565b60006105288484846111d5565b506105ea84610535611004565b6105e58560405180606001604052806028815260200161281760289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059b611004565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b61100c565b600190509392505050565b6000600360009054906101000a900460ff16905090565b6000610616611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069a906120c2565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073991906120f7565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c491906120f7565b6040518363ffffffff1660e01b81526004016107e1929190612124565b602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082291906120f7565b915082905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060156101000a81548160ff021916908315150217905550600160096000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60006109ac610910611004565b846109a78560086000610921611004565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b61100c565b6001905092915050565b6109be611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a42906120c2565b60405180910390fd5b80600e8190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610acf611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906120c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054610c2990612045565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5590612045565b8015610ca25780601f10610c7757610100808354040283529160200191610ca2565b820191906000526020600020905b815481529060010190602001808311610c8557829003601f168201915b5050505050905090565b6000610d6f610cb9611004565b84610d6a8560405180606001604052806025815260200161283f6025913960086000610ce3611004565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b61100c565b6001905092915050565b6000610d8d610d86611004565b84846111d5565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e4b611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf906120c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906121bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290612251565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e1906122e3565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111c89190611ead565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90612375565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90612407565b60405180910390fd5b600082116112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612499565b60405180910390fd5b601060149054906101000a900460ff161561131e5761131784848461168e565b90506115c5565b600061132930610a55565b90506000600e54821015905080801561134f5750601060149054906101000a900460ff16155b80156113a55750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156113bd5750601060159054906101000a900460ff165b156113e857601060169054906101000a900460ff16156113dd57600e5491505b6113e78683611861565b5b611471846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114c1878787611945565b905061151581600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115b59190611ead565b60405180910390a3600193505050505b9392505050565b6000838311158290611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b9190611d6d565b60405180910390fd5b506000838561162391906124e8565b9050809150509392505050565b600080828461163f919061251c565b905083811015611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b9061259c565b60405180910390fd5b8091505092915050565b6000611719826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ae82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161184e9190611ead565b60405180910390a3600190509392505050565b61188e30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361100c565b6000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982858560008030426040518863ffffffff1660e01b81526004016118fa96959493929190612601565b60606040518083038185885af1158015611918573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061193d9190612677565b505050505050565b60008060009050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119cd576119c660646119b8600b5486611b6c90919063ffffffff16565b611be690919063ffffffff16565b9050611a4b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a4a57611a476064611a39600c5486611b6c90919063ffffffff16565b611be690919063ffffffff16565b90505b5b6000811115611b4f57611aa681600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b469190611ead565b60405180910390a35b611b628184611c3090919063ffffffff16565b9150509392505050565b6000808303611b7e5760009050611be0565b60008284611b8c91906126ca565b9050828482611b9b9190612753565b14611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd2906127f6565b60405180910390fd5b809150505b92915050565b6000611c2883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c7a565b905092915050565b6000611c7283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115cc565b905092915050565b60008083118290611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb89190611d6d565b60405180910390fd5b5060008385611cd09190612753565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d17578082015181840152602081019050611cfc565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d3f82611cdd565b611d498185611ce8565b9350611d59818560208601611cf9565b611d6281611d23565b840191505092915050565b60006020820190508181036000830152611d878184611d34565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611dbf82611d94565b9050919050565b611dcf81611db4565b8114611dda57600080fd5b50565b600081359050611dec81611dc6565b92915050565b6000819050919050565b611e0581611df2565b8114611e1057600080fd5b50565b600081359050611e2281611dfc565b92915050565b60008060408385031215611e3f57611e3e611d8f565b5b6000611e4d85828601611ddd565b9250506020611e5e85828601611e13565b9150509250929050565b60008115159050919050565b611e7d81611e68565b82525050565b6000602082019050611e986000830184611e74565b92915050565b611ea781611df2565b82525050565b6000602082019050611ec26000830184611e9e565b92915050565b600080600060608486031215611ee157611ee0611d8f565b5b6000611eef86828701611ddd565b9350506020611f0086828701611ddd565b9250506040611f1186828701611e13565b9150509250925092565b600060ff82169050919050565b611f3181611f1b565b82525050565b6000602082019050611f4c6000830184611f28565b92915050565b600060208284031215611f6857611f67611d8f565b5b6000611f7684828501611ddd565b91505092915050565b611f8881611db4565b82525050565b6000602082019050611fa36000830184611f7f565b92915050565b600060208284031215611fbf57611fbe611d8f565b5b6000611fcd84828501611e13565b91505092915050565b60008060408385031215611fed57611fec611d8f565b5b6000611ffb85828601611ddd565b925050602061200c85828601611ddd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061205d57607f821691505b6020821081036120705761206f612016565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120ac602083611ce8565b91506120b782612076565b602082019050919050565b600060208201905081810360008301526120db8161209f565b9050919050565b6000815190506120f181611dc6565b92915050565b60006020828403121561210d5761210c611d8f565b5b600061211b848285016120e2565b91505092915050565b60006040820190506121396000830185611f7f565b6121466020830184611f7f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006121a9602683611ce8565b91506121b48261214d565b604082019050919050565b600060208201905081810360008301526121d88161219c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061223b602483611ce8565b9150612246826121df565b604082019050919050565b6000602082019050818103600083015261226a8161222e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006122cd602283611ce8565b91506122d882612271565b604082019050919050565b600060208201905081810360008301526122fc816122c0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061235f602583611ce8565b915061236a82612303565b604082019050919050565b6000602082019050818103600083015261238e81612352565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006123f1602383611ce8565b91506123fc82612395565b604082019050919050565b60006020820190508181036000830152612420816123e4565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612483602983611ce8565b915061248e82612427565b604082019050919050565b600060208201905081810360008301526124b281612476565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124f382611df2565b91506124fe83611df2565b9250828203905081811115612516576125156124b9565b5b92915050565b600061252782611df2565b915061253283611df2565b925082820190508082111561254a576125496124b9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612586601b83611ce8565b915061259182612550565b602082019050919050565b600060208201905081810360008301526125b581612579565b9050919050565b6000819050919050565b6000819050919050565b60006125eb6125e66125e1846125bc565b6125c6565b611df2565b9050919050565b6125fb816125d0565b82525050565b600060c0820190506126166000830189611f7f565b6126236020830188611e9e565b61263060408301876125f2565b61263d60608301866125f2565b61264a6080830185611f7f565b61265760a0830184611e9e565b979650505050505050565b60008151905061267181611dfc565b92915050565b6000806000606084860312156126905761268f611d8f565b5b600061269e86828701612662565b93505060206126af86828701612662565b92505060406126c086828701612662565b9150509250925092565b60006126d582611df2565b91506126e083611df2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612719576127186124b9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061275e82611df2565b915061276983611df2565b92508261277957612778612724565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006127e0602183611ce8565b91506127eb82612784565b604082019050919050565b6000602082019050818103600083015261280f816127d3565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220976207bc64b189f6e350df893ee7c8b9ce4973e18f0e4fafd3d7791ea8ab3bb164736f6c63430008100033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000000000550554e4b58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000550554e4b58000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101025760003560e01c806370a0823111610095578063a457c2d711610064578063a457c2d714610356578063a9059cbb14610393578063b2bdfa7b146103d0578063dd62ed3e146103fb578063f2fde38b1461043857610109565b806370a08231146102ac5780638da5cb5b146102e9578063914eb66a1461031457806395d89b411461032b57610109565b8063313ce567116100d1578063313ce567146101de578063340ac20f1461020957806339509351146102465780633b97084a1461028357610109565b806306fdde031461010e578063095ea7b31461013957806318160ddd1461017657806323b872dd146101a157610109565b3661010957005b600080fd5b34801561011a57600080fd5b50610123610461565b6040516101309190611d6d565b60405180910390f35b34801561014557600080fd5b50610160600480360381019061015b9190611e28565b6104f3565b60405161016d9190611e83565b60405180910390f35b34801561018257600080fd5b5061018b610511565b6040516101989190611ead565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190611ec8565b61051b565b6040516101d59190611e83565b60405180910390f35b3480156101ea57600080fd5b506101f36105f5565b6040516102009190611f37565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190611f52565b61060c565b60405161023d9190611f8e565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190611e28565b610903565b60405161027a9190611e83565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a59190611fa9565b6109b6565b005b3480156102b857600080fd5b506102d360048036038101906102ce9190611f52565b610a55565b6040516102e09190611ead565b60405180910390f35b3480156102f557600080fd5b506102fe610a9e565b60405161030b9190611f8e565b60405180910390f35b34801561032057600080fd5b50610329610ac7565b005b34801561033757600080fd5b50610340610c1a565b60405161034d9190611d6d565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190611e28565b610cac565b60405161038a9190611e83565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190611e28565b610d79565b6040516103c79190611e83565b60405180910390f35b3480156103dc57600080fd5b506103e5610d98565b6040516103f29190611f8e565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190611fd6565b610dbc565b60405161042f9190611ead565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190611f52565b610e43565b005b60606001805461047090612045565b80601f016020809104026020016040519081016040528092919081815260200182805461049c90612045565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b6000610507610500611004565b848461100c565b6001905092915050565b6000600d54905090565b60006105288484846111d5565b506105ea84610535611004565b6105e58560405180606001604052806028815260200161281760289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059b611004565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b61100c565b600190509392505050565b6000600360009054906101000a900460ff16905090565b6000610616611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069a906120c2565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073991906120f7565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c491906120f7565b6040518363ffffffff1660e01b81526004016107e1929190612124565b602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082291906120f7565b915082905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060156101000a81548160ff021916908315150217905550600160096000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60006109ac610910611004565b846109a78560086000610921611004565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b61100c565b6001905092915050565b6109be611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a42906120c2565b60405180910390fd5b80600e8190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610acf611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906120c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054610c2990612045565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5590612045565b8015610ca25780601f10610c7757610100808354040283529160200191610ca2565b820191906000526020600020905b815481529060010190602001808311610c8557829003601f168201915b5050505050905090565b6000610d6f610cb9611004565b84610d6a8560405180606001604052806025815260200161283f6025913960086000610ce3611004565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b61100c565b6001905092915050565b6000610d8d610d86611004565b84846111d5565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e4b611004565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf906120c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906121bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290612251565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e1906122e3565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111c89190611ead565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90612375565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90612407565b60405180910390fd5b600082116112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612499565b60405180910390fd5b601060149054906101000a900460ff161561131e5761131784848461168e565b90506115c5565b600061132930610a55565b90506000600e54821015905080801561134f5750601060149054906101000a900460ff16155b80156113a55750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156113bd5750601060159054906101000a900460ff165b156113e857601060169054906101000a900460ff16156113dd57600e5491505b6113e78683611861565b5b611471846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114c1878787611945565b905061151581600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115b59190611ead565b60405180910390a3600193505050505b9392505050565b6000838311158290611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b9190611d6d565b60405180910390fd5b506000838561162391906124e8565b9050809150509392505050565b600080828461163f919061251c565b905083811015611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b9061259c565b60405180910390fd5b8091505092915050565b6000611719826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cc9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ae82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161184e9190611ead565b60405180910390a3600190509392505050565b61188e30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361100c565b6000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982858560008030426040518863ffffffff1660e01b81526004016118fa96959493929190612601565b60606040518083038185885af1158015611918573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061193d9190612677565b505050505050565b60008060009050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119cd576119c660646119b8600b5486611b6c90919063ffffffff16565b611be690919063ffffffff16565b9050611a4b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a4a57611a476064611a39600c5486611b6c90919063ffffffff16565b611be690919063ffffffff16565b90505b5b6000811115611b4f57611aa681600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163090919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b469190611ead565b60405180910390a35b611b628184611c3090919063ffffffff16565b9150509392505050565b6000808303611b7e5760009050611be0565b60008284611b8c91906126ca565b9050828482611b9b9190612753565b14611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd2906127f6565b60405180910390fd5b809150505b92915050565b6000611c2883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c7a565b905092915050565b6000611c7283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115cc565b905092915050565b60008083118290611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb89190611d6d565b60405180910390fd5b5060008385611cd09190612753565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d17578082015181840152602081019050611cfc565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d3f82611cdd565b611d498185611ce8565b9350611d59818560208601611cf9565b611d6281611d23565b840191505092915050565b60006020820190508181036000830152611d878184611d34565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611dbf82611d94565b9050919050565b611dcf81611db4565b8114611dda57600080fd5b50565b600081359050611dec81611dc6565b92915050565b6000819050919050565b611e0581611df2565b8114611e1057600080fd5b50565b600081359050611e2281611dfc565b92915050565b60008060408385031215611e3f57611e3e611d8f565b5b6000611e4d85828601611ddd565b9250506020611e5e85828601611e13565b9150509250929050565b60008115159050919050565b611e7d81611e68565b82525050565b6000602082019050611e986000830184611e74565b92915050565b611ea781611df2565b82525050565b6000602082019050611ec26000830184611e9e565b92915050565b600080600060608486031215611ee157611ee0611d8f565b5b6000611eef86828701611ddd565b9350506020611f0086828701611ddd565b9250506040611f1186828701611e13565b9150509250925092565b600060ff82169050919050565b611f3181611f1b565b82525050565b6000602082019050611f4c6000830184611f28565b92915050565b600060208284031215611f6857611f67611d8f565b5b6000611f7684828501611ddd565b91505092915050565b611f8881611db4565b82525050565b6000602082019050611fa36000830184611f7f565b92915050565b600060208284031215611fbf57611fbe611d8f565b5b6000611fcd84828501611e13565b91505092915050565b60008060408385031215611fed57611fec611d8f565b5b6000611ffb85828601611ddd565b925050602061200c85828601611ddd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061205d57607f821691505b6020821081036120705761206f612016565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120ac602083611ce8565b91506120b782612076565b602082019050919050565b600060208201905081810360008301526120db8161209f565b9050919050565b6000815190506120f181611dc6565b92915050565b60006020828403121561210d5761210c611d8f565b5b600061211b848285016120e2565b91505092915050565b60006040820190506121396000830185611f7f565b6121466020830184611f7f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006121a9602683611ce8565b91506121b48261214d565b604082019050919050565b600060208201905081810360008301526121d88161219c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061223b602483611ce8565b9150612246826121df565b604082019050919050565b6000602082019050818103600083015261226a8161222e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006122cd602283611ce8565b91506122d882612271565b604082019050919050565b600060208201905081810360008301526122fc816122c0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061235f602583611ce8565b915061236a82612303565b604082019050919050565b6000602082019050818103600083015261238e81612352565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006123f1602383611ce8565b91506123fc82612395565b604082019050919050565b60006020820190508181036000830152612420816123e4565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612483602983611ce8565b915061248e82612427565b604082019050919050565b600060208201905081810360008301526124b281612476565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124f382611df2565b91506124fe83611df2565b9250828203905081811115612516576125156124b9565b5b92915050565b600061252782611df2565b915061253283611df2565b925082820190508082111561254a576125496124b9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612586601b83611ce8565b915061259182612550565b602082019050919050565b600060208201905081810360008301526125b581612579565b9050919050565b6000819050919050565b6000819050919050565b60006125eb6125e66125e1846125bc565b6125c6565b611df2565b9050919050565b6125fb816125d0565b82525050565b600060c0820190506126166000830189611f7f565b6126236020830188611e9e565b61263060408301876125f2565b61263d60608301866125f2565b61264a6080830185611f7f565b61265760a0830184611e9e565b979650505050505050565b60008151905061267181611dfc565b92915050565b6000806000606084860312156126905761268f611d8f565b5b600061269e86828701612662565b93505060206126af86828701612662565b92505060406126c086828701612662565b9150509250925092565b60006126d582611df2565b91506126e083611df2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612719576127186124b9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061275e82611df2565b915061276983611df2565b92508261277957612778612724565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006127e0602183611ce8565b91506127eb82612784565b604082019050919050565b6000602082019050818103600083015261280f816127d3565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220976207bc64b189f6e350df893ee7c8b9ce4973e18f0e4fafd3d7791ea8ab3bb164736f6c63430008100033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000000000550554e4b58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000550554e4b58000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : coinName (string): PUNKX
Arg [1] : coinSymbol (string): PUNKX
Arg [2] : coinDecimals (uint8): 18
Arg [3] : supply (uint256): 10000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 50554e4b58000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 50554e4b58000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

23779:13070:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26515:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27673:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26792:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29243:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26701:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28322:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27178:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28187:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26900:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14736:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14950:145;;;;;;;;;;;;;:::i;:::-;;26606:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27396:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29068:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14612:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27027:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15103:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26515:83;26552:13;26585:5;26578:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26515:83;:::o;27673:161::-;27748:4;27765:39;27774:12;:10;:12::i;:::-;27788:7;27797:6;27765:8;:39::i;:::-;27822:4;27815:11;;27673:161;;;;:::o;26792:100::-;26845:7;26872:12;;26865:19;;26792:100;:::o;29243:313::-;29341:4;29358:36;29368:6;29376:9;29387:6;29358:9;:36::i;:::-;;29405:121;29414:6;29422:12;:10;:12::i;:::-;29436:89;29474:6;29436:89;;;;;;;;;;;;;;;;;:11;:19;29448:6;29436:19;;;;;;;;;;;;;;;:33;29456:12;:10;:12::i;:::-;29436:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29405:8;:121::i;:::-;29544:4;29537:11;;29243:313;;;;;:::o;26701:83::-;26742:5;26767:9;;;;;;;;;;;26760:16;;26701:83;:::o;28322:504::-;28397:22;14873:12;:10;:12::i;:::-;14863:22;;:6;;;;;;;;;;:22;;;14855:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28434:35:::1;28491:7;;;;;;;;;;;28434:65;;28547:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28529:53;;;28591:4;28598:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28529:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28512:110;;28673:16;28635:55;;28711:16;28701:7;;:26;;;;;;;;;;;;;;;;;;28762:4;28738:21;;:28;;;;;;;;;;;;;;;;;;28814:4;28777:12;:34;28798:11;;;;;;;;;;;28777:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;28421:405;28322:504:::0;;;:::o;27178:210::-;27266:4;27283:83;27292:12;:10;:12::i;:::-;27306:7;27315:50;27354:10;27315:11;:25;27327:12;:10;:12::i;:::-;27315:25;;;;;;;;;;;;;;;:34;27341:7;27315:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27283:8;:83::i;:::-;27376:4;27369:11;;27178:210;;;;:::o;28187:125::-;14873:12;:10;:12::i;:::-;14863:22;;:6;;;;;;;;;;:22;;;14855:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28296:8:::1;28269:24;:35;;;;28187:125:::0;:::o;26900:119::-;26966:7;26993:9;:18;27003:7;26993:18;;;;;;;;;;;;;;;;26986:25;;26900:119;;;:::o;14736:79::-;14774:7;14801:6;;;;;;;;;;;14794:13;;14736:79;:::o;14950:145::-;14873:12;:10;:12::i;:::-;14863:22;;:6;;;;;;;;;;:22;;;14855:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15054:1:::1;15017:40;;15038:6;::::0;::::1;;;;;;;;15017:40;;;;;;;;;;;;15085:1;15068:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;14950:145::o:0;26606:87::-;26645:13;26678:7;26671:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26606:87;:::o;27396:269::-;27489:4;27506:129;27515:12;:10;:12::i;:::-;27529:7;27538:96;27577:15;27538:96;;;;;;;;;;;;;;;;;:11;:25;27550:12;:10;:12::i;:::-;27538:25;;;;;;;;;;;;;;;:34;27564:7;27538:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;27506:8;:129::i;:::-;27653:4;27646:11;;27396:269;;;;:::o;29068:167::-;29146:4;29163:42;29173:12;:10;:12::i;:::-;29187:9;29198:6;29163:9;:42::i;:::-;;29223:4;29216:11;;29068:167;;;;:::o;14612:21::-;;;;;;;;;;;;:::o;27027:143::-;27108:7;27135:11;:18;27147:5;27135:18;;;;;;;;;;;;;;;:27;27154:7;27135:27;;;;;;;;;;;;;;;;27128:34;;27027:143;;;;:::o;15103:236::-;14873:12;:10;:12::i;:::-;14863:22;;:6;;;;;;;;;;:22;;;14855:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15212:1:::1;15192:22;;:8;:22;;::::0;15184:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15302:8;15273:38;;15294:6;::::0;::::1;;;;;;;;15273:38;;;;;;;;;;;;15323:8;15314:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15103:236:::0;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;27842:337::-;27952:1;27935:19;;:5;:19;;;27927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28033:1;28014:21;;:7;:21;;;28006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28117:6;28087:11;:18;28099:5;28087:18;;;;;;;;;;;;;;;:27;28106:7;28087:27;;;;;;;;;;;;;;;:36;;;;28155:7;28139:32;;28148:5;28139:32;;;28164:6;28139:32;;;;;;:::i;:::-;;;;;;;;27842:337;;;:::o;29564:1312::-;29651:4;29696:1;29678:20;;:6;:20;;;29670:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29780:1;29759:23;;:9;:23;;;29751:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29850:1;29841:6;:10;29833:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29913:16;;;;;;;;;;;29910:959;;;29962:41;29977:6;29985:9;29996:6;29962:14;:41::i;:::-;29955:48;;;;29910:959;30056:28;30087:24;30105:4;30087:9;:24::i;:::-;30056:55;;30126:28;30181:24;;30157:20;:48;;30126:79;;30226:23;:44;;;;;30254:16;;;;;;;;;;;30253:17;30226:44;:69;;;;;30275:12;:20;30288:6;30275:20;;;;;;;;;;;;;;;;;;;;;;;;;30274:21;30226:69;:94;;;;;30299:21;;;;;;;;;;;30226:94;30222:306;;;30357:25;;;;;;;;;;;30354:98;;;30428:24;;30405:47;;30354:98;30471:41;30484:6;30491:20;30471:12;:41::i;:::-;30222:306;30564:53;30586:6;30564:53;;;;;;;;;;;;;;;;;:9;:17;30574:6;30564:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;30544:9;:17;30554:6;30544:17;;;;;;;;;;;;;;;:73;;;;30634:19;30656:34;30664:6;30672:9;30683:6;30656:7;:34::i;:::-;30634:56;;30732:37;30757:11;30732:9;:20;30742:9;30732:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;30709:9;:20;30719:9;30709:20;;;;;;;;;;;;;;;:60;;;;30808:9;30791:40;;30800:6;30791:40;;;30819:11;30791:40;;;;;;:::i;:::-;;;;;;;;30853:4;30846:11;;;;;29564:1312;;;;;;:::o;10670:192::-;10756:7;10789:1;10784;:6;;10792:12;10776:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10816:9;10832:1;10828;:5;;;;:::i;:::-;10816:17;;10853:1;10846:8;;;10670:192;;;;;:::o;10339:179::-;10397:7;10417:9;10433:1;10429;:5;;;;:::i;:::-;10417:17;;10458:1;10453;:6;;10445:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10509:1;10502:8;;;10339:179;;;;:::o;30884:330::-;30977:4;31014:53;31036:6;31014:53;;;;;;;;;;;;;;;;;:9;:17;31024:6;31014:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;30994:9;:17;31004:6;30994:17;;;;;;;;;;;;;;;:73;;;;31101:32;31126:6;31101:9;:20;31111:9;31101:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;31078:9;:20;31088:9;31078:20;;;;;;;;;;;;;;;:55;;;;31166:9;31149:35;;31158:6;31149:35;;;31177:6;31149:35;;;;;;:::i;:::-;;;;;;;;31202:4;31195:11;;30884:330;;;;;:::o;31863:543::-;32007:54;32024:4;32039:7;;;;;;;;;;;32049:11;32007:8;:54::i;:::-;32072:17;32093:21;32072:42;;32155:7;;;;;;;;;;;:23;;;32186:9;32211:6;32232:11;32258:1;32301;32352:4;32372:15;32155:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31929:477;31863:543;;:::o;33047:596::-;33133:7;33155:17;33175:1;33155:21;;33190:12;:20;33203:6;33190:20;;;;;;;;;;;;;;;;;;;;;;;;;33187:223;;;33239:38;33273:3;33239:29;33250:17;;33239:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;33227:50;;33187:223;;;33307:12;:23;33320:9;33307:23;;;;;;;;;;;;;;;;;;;;;;;;;33304:106;;;33359:39;33394:3;33359:30;33370:18;;33359:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;33347:51;;33304:106;33187:223;33437:1;33425:9;:13;33422:173;;;33482:39;33511:9;33482;:24;33500:4;33482:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;33455:9;:24;33473:4;33455:24;;;;;;;;;;;;;;;:66;;;;33566:4;33541:42;;33550:6;33541:42;;;33573:9;33541:42;;;;;;:::i;:::-;;;;;;;;33422:173;33614:21;33625:9;33614:6;:10;;:21;;;;:::i;:::-;33607:28;;;33047:596;;;;;:::o;10870:250::-;10928:7;10957:1;10952;:6;10948:47;;10982:1;10975:8;;;;10948:47;11007:9;11023:1;11019;:5;;;;:::i;:::-;11007:17;;11052:1;11047;11043;:5;;;;:::i;:::-;:10;11035:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11111:1;11104:8;;;10870:250;;;;;:::o;11128:132::-;11186:7;11213:39;11217:1;11220;11213:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11206:46;;11128:132;;;;:::o;10526:136::-;10584:7;10611:43;10615:1;10618;10611:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10604:50;;10526:136;;;;:::o;11268:278::-;11354:7;11386:1;11382;:5;11389:12;11374:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11413:9;11429:1;11425;:5;;;;:::i;:::-;11413:17;;11537:1;11530:8;;;11268:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:329::-;5599:6;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5540:329;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:180::-;6403:77;6400:1;6393:88;6500:4;6497:1;6490:15;6524:4;6521:1;6514:15;6541:320;6585:6;6622:1;6616:4;6612:12;6602:22;;6669:1;6663:4;6659:12;6690:18;6680:81;;6746:4;6738:6;6734:17;6724:27;;6680:81;6808:2;6800:6;6797:14;6777:18;6774:38;6771:84;;6827:18;;:::i;:::-;6771:84;6592:269;6541:320;;;:::o;6867:182::-;7007:34;7003:1;6995:6;6991:14;6984:58;6867:182;:::o;7055:366::-;7197:3;7218:67;7282:2;7277:3;7218:67;:::i;:::-;7211:74;;7294:93;7383:3;7294:93;:::i;:::-;7412:2;7407:3;7403:12;7396:19;;7055:366;;;:::o;7427:419::-;7593:4;7631:2;7620:9;7616:18;7608:26;;7680:9;7674:4;7670:20;7666:1;7655:9;7651:17;7644:47;7708:131;7834:4;7708:131;:::i;:::-;7700:139;;7427:419;;;:::o;7852:143::-;7909:5;7940:6;7934:13;7925:22;;7956:33;7983:5;7956:33;:::i;:::-;7852:143;;;;:::o;8001:351::-;8071:6;8120:2;8108:9;8099:7;8095:23;8091:32;8088:119;;;8126:79;;:::i;:::-;8088:119;8246:1;8271:64;8327:7;8318:6;8307:9;8303:22;8271:64;:::i;:::-;8261:74;;8217:128;8001:351;;;;:::o;8358:332::-;8479:4;8517:2;8506:9;8502:18;8494:26;;8530:71;8598:1;8587:9;8583:17;8574:6;8530:71;:::i;:::-;8611:72;8679:2;8668:9;8664:18;8655:6;8611:72;:::i;:::-;8358:332;;;;;:::o;8696:225::-;8836:34;8832:1;8824:6;8820:14;8813:58;8905:8;8900:2;8892:6;8888:15;8881:33;8696:225;:::o;8927:366::-;9069:3;9090:67;9154:2;9149:3;9090:67;:::i;:::-;9083:74;;9166:93;9255:3;9166:93;:::i;:::-;9284:2;9279:3;9275:12;9268:19;;8927:366;;;:::o;9299:419::-;9465:4;9503:2;9492:9;9488:18;9480:26;;9552:9;9546:4;9542:20;9538:1;9527:9;9523:17;9516:47;9580:131;9706:4;9580:131;:::i;:::-;9572:139;;9299:419;;;:::o;9724:223::-;9864:34;9860:1;9852:6;9848:14;9841:58;9933:6;9928:2;9920:6;9916:15;9909:31;9724:223;:::o;9953:366::-;10095:3;10116:67;10180:2;10175:3;10116:67;:::i;:::-;10109:74;;10192:93;10281:3;10192:93;:::i;:::-;10310:2;10305:3;10301:12;10294:19;;9953:366;;;:::o;10325:419::-;10491:4;10529:2;10518:9;10514:18;10506:26;;10578:9;10572:4;10568:20;10564:1;10553:9;10549:17;10542:47;10606:131;10732:4;10606:131;:::i;:::-;10598:139;;10325:419;;;:::o;10750:221::-;10890:34;10886:1;10878:6;10874:14;10867:58;10959:4;10954:2;10946:6;10942:15;10935:29;10750:221;:::o;10977:366::-;11119:3;11140:67;11204:2;11199:3;11140:67;:::i;:::-;11133:74;;11216:93;11305:3;11216:93;:::i;:::-;11334:2;11329:3;11325:12;11318:19;;10977:366;;;:::o;11349:419::-;11515:4;11553:2;11542:9;11538:18;11530:26;;11602:9;11596:4;11592:20;11588:1;11577:9;11573:17;11566:47;11630:131;11756:4;11630:131;:::i;:::-;11622:139;;11349:419;;;:::o;11774:224::-;11914:34;11910:1;11902:6;11898:14;11891:58;11983:7;11978:2;11970:6;11966:15;11959:32;11774:224;:::o;12004:366::-;12146:3;12167:67;12231:2;12226:3;12167:67;:::i;:::-;12160:74;;12243:93;12332:3;12243:93;:::i;:::-;12361:2;12356:3;12352:12;12345:19;;12004:366;;;:::o;12376:419::-;12542:4;12580:2;12569:9;12565:18;12557:26;;12629:9;12623:4;12619:20;12615:1;12604:9;12600:17;12593:47;12657:131;12783:4;12657:131;:::i;:::-;12649:139;;12376:419;;;:::o;12801:222::-;12941:34;12937:1;12929:6;12925:14;12918:58;13010:5;13005:2;12997:6;12993:15;12986:30;12801:222;:::o;13029:366::-;13171:3;13192:67;13256:2;13251:3;13192:67;:::i;:::-;13185:74;;13268:93;13357:3;13268:93;:::i;:::-;13386:2;13381:3;13377:12;13370:19;;13029:366;;;:::o;13401:419::-;13567:4;13605:2;13594:9;13590:18;13582:26;;13654:9;13648:4;13644:20;13640:1;13629:9;13625:17;13618:47;13682:131;13808:4;13682:131;:::i;:::-;13674:139;;13401:419;;;:::o;13826:228::-;13966:34;13962:1;13954:6;13950:14;13943:58;14035:11;14030:2;14022:6;14018:15;14011:36;13826:228;:::o;14060:366::-;14202:3;14223:67;14287:2;14282:3;14223:67;:::i;:::-;14216:74;;14299:93;14388:3;14299:93;:::i;:::-;14417:2;14412:3;14408:12;14401:19;;14060:366;;;:::o;14432:419::-;14598:4;14636:2;14625:9;14621:18;14613:26;;14685:9;14679:4;14675:20;14671:1;14660:9;14656:17;14649:47;14713:131;14839:4;14713:131;:::i;:::-;14705:139;;14432:419;;;:::o;14857:180::-;14905:77;14902:1;14895:88;15002:4;14999:1;14992:15;15026:4;15023:1;15016:15;15043:194;15083:4;15103:20;15121:1;15103:20;:::i;:::-;15098:25;;15137:20;15155:1;15137:20;:::i;:::-;15132:25;;15181:1;15178;15174:9;15166:17;;15205:1;15199:4;15196:11;15193:37;;;15210:18;;:::i;:::-;15193:37;15043:194;;;;:::o;15243:191::-;15283:3;15302:20;15320:1;15302:20;:::i;:::-;15297:25;;15336:20;15354:1;15336:20;:::i;:::-;15331:25;;15379:1;15376;15372:9;15365:16;;15400:3;15397:1;15394:10;15391:36;;;15407:18;;:::i;:::-;15391:36;15243:191;;;;:::o;15440:177::-;15580:29;15576:1;15568:6;15564:14;15557:53;15440:177;:::o;15623:366::-;15765:3;15786:67;15850:2;15845:3;15786:67;:::i;:::-;15779:74;;15862:93;15951:3;15862:93;:::i;:::-;15980:2;15975:3;15971:12;15964:19;;15623:366;;;:::o;15995:419::-;16161:4;16199:2;16188:9;16184:18;16176:26;;16248:9;16242:4;16238:20;16234:1;16223:9;16219:17;16212:47;16276:131;16402:4;16276:131;:::i;:::-;16268:139;;15995:419;;;:::o;16420:85::-;16465:7;16494:5;16483:16;;16420:85;;;:::o;16511:60::-;16539:3;16560:5;16553:12;;16511:60;;;:::o;16577:158::-;16635:9;16668:61;16686:42;16695:32;16721:5;16695:32;:::i;:::-;16686:42;:::i;:::-;16668:61;:::i;:::-;16655:74;;16577:158;;;:::o;16741:147::-;16836:45;16875:5;16836:45;:::i;:::-;16831:3;16824:58;16741:147;;:::o;16894:807::-;17143:4;17181:3;17170:9;17166:19;17158:27;;17195:71;17263:1;17252:9;17248:17;17239:6;17195:71;:::i;:::-;17276:72;17344:2;17333:9;17329:18;17320:6;17276:72;:::i;:::-;17358:80;17434:2;17423:9;17419:18;17410:6;17358:80;:::i;:::-;17448;17524:2;17513:9;17509:18;17500:6;17448:80;:::i;:::-;17538:73;17606:3;17595:9;17591:19;17582:6;17538:73;:::i;:::-;17621;17689:3;17678:9;17674:19;17665:6;17621:73;:::i;:::-;16894:807;;;;;;;;;:::o;17707:143::-;17764:5;17795:6;17789:13;17780:22;;17811:33;17838:5;17811:33;:::i;:::-;17707:143;;;;:::o;17856:663::-;17944:6;17952;17960;18009:2;17997:9;17988:7;17984:23;17980:32;17977:119;;;18015:79;;:::i;:::-;17977:119;18135:1;18160:64;18216:7;18207:6;18196:9;18192:22;18160:64;:::i;:::-;18150:74;;18106:128;18273:2;18299:64;18355:7;18346:6;18335:9;18331:22;18299:64;:::i;:::-;18289:74;;18244:129;18412:2;18438:64;18494:7;18485:6;18474:9;18470:22;18438:64;:::i;:::-;18428:74;;18383:129;17856:663;;;;;:::o;18525:348::-;18565:7;18588:20;18606:1;18588:20;:::i;:::-;18583:25;;18622:20;18640:1;18622:20;:::i;:::-;18617:25;;18810:1;18742:66;18738:74;18735:1;18732:81;18727:1;18720:9;18713:17;18709:105;18706:131;;;18817:18;;:::i;:::-;18706:131;18865:1;18862;18858:9;18847:20;;18525:348;;;;:::o;18879:180::-;18927:77;18924:1;18917:88;19024:4;19021:1;19014:15;19048:4;19045:1;19038:15;19065:185;19105:1;19122:20;19140:1;19122:20;:::i;:::-;19117:25;;19156:20;19174:1;19156:20;:::i;:::-;19151:25;;19195:1;19185:35;;19200:18;;:::i;:::-;19185:35;19242:1;19239;19235:9;19230:14;;19065:185;;;;:::o;19256:220::-;19396:34;19392:1;19384:6;19380:14;19373:58;19465:3;19460:2;19452:6;19448:15;19441:28;19256:220;:::o;19482:366::-;19624:3;19645:67;19709:2;19704:3;19645:67;:::i;:::-;19638:74;;19721:93;19810:3;19721:93;:::i;:::-;19839:2;19834:3;19830:12;19823:19;;19482:366;;;:::o;19854:419::-;20020:4;20058:2;20047:9;20043:18;20035:26;;20107:9;20101:4;20097:20;20093:1;20082:9;20078:17;20071:47;20135:131;20261:4;20135:131;:::i;:::-;20127:139;;19854:419;;;:::o

Swarm Source

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