ETH Price: $2,389.25 (+2.74%)

Token

 

Overview

Max Total Supply

0

Holders

5

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x1a3586f3257ee182fbc47129fc496b82c7f25efc
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:
HashnoteVaultShare

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion
File 1 of 6 : HashnoteVaultShare.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

// external librares
import { ERC1155 } from "../../lib/solmate/src/tokens/ERC1155.sol";

// interfaces
import { IVaultShare } from "../interfaces/IVaultShare.sol";
import { IVaultShareDescriptor } from "../interfaces/IVaultShareDescriptor.sol";
import { IWhitelist } from "../interfaces/IWhitelist.sol";

import "../libraries/Errors.sol";

contract HashnoteVaultShare is ERC1155, IVaultShare {
    ///@dev whitelist serve as the vault registry
    IWhitelist public immutable whitelist;

    IVaultShareDescriptor public immutable descriptor;

    // total supply of a particular tokenId
    mapping(uint256 => uint256) private _totalSupply;

    constructor(address _whitelist, address _descriptor) {
        // solhint-disable-next-line reason-string
        if (_whitelist == address(0)) revert();
        whitelist = IWhitelist(_whitelist);

        descriptor = IVaultShareDescriptor(_descriptor);
    }

    /**
     *  @dev return string as defined in token descriptor
     *
     */
    function uri(uint256 id) public view override returns (string memory) {
        return descriptor.tokenURI(id);
    }

    /**
     * @dev mint option token to an address. Can only be called by corresponding margin engine
     * @param _recipient    where to mint token to
     * @param _amount       amount to mint
     */
    function mint(address _recipient, address _vault, uint256 _amount) external override {
        if (!whitelist.isVault(msg.sender)) revert Unauthorized();

        uint256 tokenId = vaultToTokenId(_vault);

        _totalSupply[tokenId] += _amount;

        _mint(_recipient, tokenId, _amount, "");
    }

    /**
     * @dev burn option token from an address. Can only be called by corresponding margin engine
     * @param _from         account to burn from
     * @param _amount       amount to burn
     *
     */
    function burn(address _from, address _vault, uint256 _amount) external override {
        if (!whitelist.isVault(msg.sender)) revert Unauthorized();

        uint256 tokenId = vaultToTokenId(_vault);

        uint256 supply = _totalSupply[tokenId];

        if (supply < _amount) revert VS_SupplyExceeded();

        _totalSupply[tokenId] = supply - _amount;

        _burn(_from, tokenId, _amount);
    }

    function totalSupply(address _vault) external view override returns (uint256) {
        return _totalSupply[vaultToTokenId(_vault)];
    }

    function getBalanceOf(address _owner, address _vault) external view override returns (uint256) {
        return balanceOf[_owner][vaultToTokenId(_vault)];
    }

    function transferFrom(address _from, address _to, address _vault, uint256 _amount, bytes calldata _data) public override {
        ERC1155.safeTransferFrom(_from, _to, vaultToTokenId(_vault), _amount, _data);
    }

    function tokenIdToVault(uint256 tokenId) external pure returns (address) {
        return address(uint160(tokenId));
    }

    function vaultToTokenId(address _vault) internal pure returns (uint256) {
        return uint256(uint160(_vault));
    }
}

File 2 of 6 : ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /*//////////////////////////////////////////////////////////////
                             ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => mapping(uint256 => uint256)) public balanceOf;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                             METADATA LOGIC
    //////////////////////////////////////////////////////////////*/

    function uri(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                              ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public virtual {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        balanceOf[from][id] -= amount;

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

File 3 of 6 : IVaultShare.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

interface IVaultShare {
    /**
     * @dev mint option token to an address. Can only be called by corresponding vault
     * @param _recipient    where to mint token to
     * @param _vault        vault to mint for
     * @param _amount       amount to mint
     *
     */
    function mint(address _recipient, address _vault, uint256 _amount) external;

    /**
     * @dev burn option token from an address. Can only be called by corresponding vault
     * @param _from         account to burn from
     * @param _vault        vault to mint for
     * @param _amount       amount to burn
     *
     */
    function burn(address _from, address _vault, uint256 _amount) external;

    /**
     * @dev returns total supply of a vault
     * @param _vault      address of the vault
     *
     */
    function totalSupply(address _vault) external view returns (uint256 amount);

    /**
     * @dev returns vault share balance for a given holder
     * @param _owner      address of token holder
     * @param _vault      address of the vault
     *
     */
    function getBalanceOf(address _owner, address _vault) external view returns (uint256 amount);

    /**
     * @dev exposing transfer method to vault
     *
     */
    function transferFrom(address _from, address _to, address _vault, uint256 _amount, bytes calldata _data) external;
}

File 4 of 6 : IVaultShareDescriptor.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

/// @title Describes Option NFT
interface IVaultShareDescriptor {
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 5 of 6 : IWhitelist.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

interface ISanctionsList {
    function isSanctioned(address _address) external view returns (bool);
}

interface IWhitelist {
    function isCustomer(address _address) external view returns (bool);

    function isLP(address _address) external view returns (bool);

    function isOTC(address _address) external view returns (bool);

    function isVault(address _vault) external view returns (bool);

    function engineAccess(address _address) external view returns (bool);
}

File 6 of 6 : Errors.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

// common
error Unauthorized();
error Overflow();

// Vault
error HV_ActiveRound();
error HV_AuctionInProgress();
error HV_BadAddress();
error HV_BadAmount();
error HV_BadCap();
error HV_BadCollaterals();
error HV_BadCollateralPosition();
error HV_BadDepositAmount();
error HV_BadDuration();
error HV_BadExpiry();
error HV_BadFee();
error HV_BadLevRatio();
error HV_BadNumRounds();
error HV_BadNumShares();
error HV_BadNumStrikes();
error HV_BadOption();
error HV_BadPPS();
error HV_BadRound();
error HV_BadRoundConfig();
error HV_BadSB();
error HV_BadStructures();
error HV_CustomerNotPermissioned();
error HV_ExistingWithdraw();
error HV_ExceedsCap();
error HV_ExceedsAvailable();
error HV_Initialized();
error HV_InsufficientFunds();
error HV_OptionNotExpired();
error HV_RoundClosed();
error HV_RoundNotClosed();
error HV_Unauthorized();
error HV_Uninitialized();

// VaultPauser
error VP_BadAddress();
error VP_CustomerNotPermissioned();
error VP_Overflow();
error VP_PositionPaused();
error VP_RoundOpen();
error VP_Unauthorized();
error VP_VaultNotPermissioned();

// VaultUtil
error VL_BadCap();
error VL_BadCollateral();
error VL_BadCollateralAddress();
error VL_BadDuration();
error VL_BadExpiryDate();
error VL_BadFee();
error VL_BadFeeAddress();
error VL_BadId();
error VL_BadInstruments();
error VL_BadManagerAddress();
error VL_BadOracleAddress();
error VL_BadOwnerAddress();
error VL_BadPauserAddress();
error VL_BadPrecision();
error VL_BadStrikeAddress();
error VL_BadSupply();
error VL_BadUnderlyingAddress();
error VL_BadWeight();
error VL_DifferentLengths();
error VL_ExceedsSurplus();
error VL_Overflow();
error VL_Unauthorized();

// FeeUtil
error FU_NPSLow();

// BatchAuction
error BA_AuctionClosed();
error BA_AuctionNotClosed();
error BA_AuctionSettled();
error BA_AuctionUnsettled();
error BA_BadAddress();
error BA_BadAmount();
error BA_BadBiddingAddress();
error BA_BadCollateral();
error BA_BadOptionAddress();
error BA_BadOptions();
error BA_BadPrice();
error BA_BadSize();
error BA_BadTime();
error BA_EmptyAuction();
error BA_Unauthorized();
error BA_Uninitialized();

// Whitelist
error WL_BadAddress();
error WL_BadRole();
error WL_Paused();
error WL_Unauthorized();

// VaultShare
error VS_SupplyExceeded();

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"address","name":"_descriptor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"VS_SupplyExceeded","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"descriptor","outputs":[{"internalType":"contract IVaultShareDescriptor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"name":"getBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenIdToVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist","outputs":[{"internalType":"contract IWhitelist","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b5060405162001d2238038062001d2283398101604081905262000034916200007d565b6001600160a01b0382166200004857600080fd5b6001600160a01b039182166080521660a052620000b5565b80516001600160a01b03811681146200007857600080fd5b919050565b600080604083850312156200009157600080fd5b6200009c8362000060565b9150620000ac6020840162000060565b90509250929050565b60805160a051611c32620000f0600039600081816101d2015261042801526000818161023f01528181610b820152610fc10152611c326000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c806353290b4411610097578063e4dc2aa411610066578063e4dc2aa414610287578063e985e9c5146102bd578063f242432a146102eb578063f6b911bc146102fe57600080fd5b806353290b441461022757806393e59dc11461023a578063a22cb46514610261578063c6c3bbe61461027457600080fd5b80632eb2c2d6116100d35780632eb2c2d6146101b8578063303e74df146101cd5780634a280a55146101f45780634e1273f41461020757600080fd5b8062fdd58e1461010457806301ffc9a71461013f5780630e89341c1461016257806316ffc42314610182575b600080fd5b61012c6101123660046113c7565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61015261014d366004611422565b610311565b6040519015158152602001610136565b610175610170366004611446565b6103f6565b60405161013691906114cd565b610193610190366004611446565b90565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b6101cb6101c636600461156e565b6104ca565b005b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6101cb610202366004611629565b6108c0565b61021a6102153660046116a8565b6108ec565b6040516101369190611714565b61012c610235366004611758565b610a63565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6101cb61026f366004611799565b610abd565b6101cb6102823660046117d0565b610b54565b61012c61029536600461180c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b6101526102cb366004611758565b600160209081526000928352604080842090915290825290205460ff1681565b6101cb6102f9366004611827565b610c95565b6101cb61030c3660046117d0565b610f93565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806103a457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806103f057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018290526060907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063c87b56dd90602401600060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103f091908101906118b0565b848314610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8916148061058c575073ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832033845290915290205460ff165b6105f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161052f565b60008060005b878110156106c7578888828181106106125761061261197b565b90506020020135925086868281811061062d5761062d61197b565b73ffffffffffffffffffffffffffffffffffffffff8e16600090815260208181526040808320898452825282208054939091029490940135955085939250906106779084906119d9565b909155505073ffffffffffffffffffffffffffffffffffffffff8a16600090815260208181526040808320868452909152812080548492906106ba9084906119ec565b90915550506001016105f8565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516107429493929190611a4a565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15610834576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c81906107c99033908f908e908e908e908e908e908e90600401611aba565b6020604051808303816000875af11580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c9190611b2b565b7fffffffff00000000000000000000000000000000000000000000000000000000161461084e565b73ffffffffffffffffffffffffffffffffffffffff891615155b6108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e5400000000000000000000000000000000604482015260640161052f565b50505050505050505050565b6108e4868673ffffffffffffffffffffffffffffffffffffffff8716868686610c95565b505050505050565b6060838214610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d415443480000000000000000000000000000000000604482015260640161052f565b8367ffffffffffffffff81111561097057610970611881565b604051908082528060200260200182016040528015610999578160200160208202803683370190505b50905060005b84811015610a5a576000808787848181106109bc576109bc61197b565b90506020020160208101906109d1919061180c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610a1f57610a1f61197b565b90506020020135815260200190815260200160002054828281518110610a4757610a4761197b565b602090810291909101015260010161099f565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812081610aa68473ffffffffffffffffffffffffffffffffffffffff1690565b815260200190815260200160002054905092915050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6040517f652b9b410000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063652b9b4190602401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c029190611b48565b610c38576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602052604081208054849290610c6d9084906119ec565b92505081905550610c8f84828460405180602001604052806000815250611102565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff87161480610ce9575073ffffffffffffffffffffffffffffffffffffffff8616600090815260016020908152604080832033845290915290205460ff165b610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161052f565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832087845290915281208054859290610d8d9084906119d9565b909155505073ffffffffffffffffffffffffffffffffffffffff851660009081526020818152604080832087845290915281208054859290610dd09084906119ec565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15610f13576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e6190610ea89033908b908a908a908a908a90600401611b65565b6020604051808303816000875af1158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb9190611b2b565b7fffffffff000000000000000000000000000000000000000000000000000000001614610f2d565b73ffffffffffffffffffffffffffffffffffffffff851615155b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e5400000000000000000000000000000000604482015260640161052f565b6040517f652b9b410000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063652b9b4190602401602060405180830381865afa15801561101d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110419190611b48565b611077576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020526040902054828110156110d7576040517fd04abcdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e183826119d9565b6000838152600260205260409020556110fb858385611300565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906111409084906119ec565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff84163b15611280576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063f23a6e6190611215903390600090899089908990600401611bb7565b6020604051808303816000875af1158015611234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112589190611b2b565b7fffffffff00000000000000000000000000000000000000000000000000000000161461129a565b73ffffffffffffffffffffffffffffffffffffffff841615155b610c8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e5400000000000000000000000000000000604482015260640161052f565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208584529091528120805483929061133e9084906119d9565b9091555050604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146113c257600080fd5b919050565b600080604083850312156113da57600080fd5b6113e38361139e565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461141f57600080fd5b50565b60006020828403121561143457600080fd5b813561143f816113f1565b9392505050565b60006020828403121561145857600080fd5b5035919050565b60005b8381101561147a578181015183820152602001611462565b50506000910152565b6000815180845261149b81602086016020860161145f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061143f6020830184611483565b60008083601f8401126114f257600080fd5b50813567ffffffffffffffff81111561150a57600080fd5b6020830191508360208260051b850101111561152557600080fd5b9250929050565b60008083601f84011261153e57600080fd5b50813567ffffffffffffffff81111561155657600080fd5b60208301915083602082850101111561152557600080fd5b60008060008060008060008060a0898b03121561158a57600080fd5b6115938961139e565b97506115a160208a0161139e565b9650604089013567ffffffffffffffff808211156115be57600080fd5b6115ca8c838d016114e0565b909850965060608b01359150808211156115e357600080fd5b6115ef8c838d016114e0565b909650945060808b013591508082111561160857600080fd5b506116158b828c0161152c565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561164257600080fd5b61164b8761139e565b95506116596020880161139e565b94506116676040880161139e565b935060608701359250608087013567ffffffffffffffff81111561168a57600080fd5b61169689828a0161152c565b979a9699509497509295939492505050565b600080600080604085870312156116be57600080fd5b843567ffffffffffffffff808211156116d657600080fd5b6116e2888389016114e0565b909650945060208701359150808211156116fb57600080fd5b50611708878288016114e0565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561174c57835183529284019291840191600101611730565b50909695505050505050565b6000806040838503121561176b57600080fd5b6117748361139e565b91506117826020840161139e565b90509250929050565b801515811461141f57600080fd5b600080604083850312156117ac57600080fd5b6117b58361139e565b915060208301356117c58161178b565b809150509250929050565b6000806000606084860312156117e557600080fd5b6117ee8461139e565b92506117fc6020850161139e565b9150604084013590509250925092565b60006020828403121561181e57600080fd5b61143f8261139e565b60008060008060008060a0878903121561184057600080fd5b6118498761139e565b95506118576020880161139e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561168a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156118c257600080fd5b815167ffffffffffffffff808211156118da57600080fd5b818401915084601f8301126118ee57600080fd5b81518181111561190057611900611881565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561194657611946611881565b8160405282815287602084870101111561195f57600080fd5b61197083602083016020880161145f565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156103f0576103f06119aa565b808201808211156103f0576103f06119aa565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611a3157600080fd5b8260051b80836020870137939093016020019392505050565b604081526000611a5e6040830186886119ff565b82810360208401526119708185876119ff565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a06040830152611af460a08301888a6119ff565b8281036060840152611b078187896119ff565b90508281036080840152611b1c818587611a71565b9b9a5050505050505050505050565b600060208284031215611b3d57600080fd5b815161143f816113f1565b600060208284031215611b5a57600080fd5b815161143f8161178b565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a06080830152611bab60a083018486611a71565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261197060a083018461148356fea264697066735822122084577a7da01b2246338e3ef6baa79389f1844e0a83299623f27903d092c963a164736f6c63430008110033000000000000000000000000cedafe1eaa250da15c434a54ece8ba1702876e3a000000000000000000000000a1db133924fc6a615bc5a27fc9b01961250b0381

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c806353290b4411610097578063e4dc2aa411610066578063e4dc2aa414610287578063e985e9c5146102bd578063f242432a146102eb578063f6b911bc146102fe57600080fd5b806353290b441461022757806393e59dc11461023a578063a22cb46514610261578063c6c3bbe61461027457600080fd5b80632eb2c2d6116100d35780632eb2c2d6146101b8578063303e74df146101cd5780634a280a55146101f45780634e1273f41461020757600080fd5b8062fdd58e1461010457806301ffc9a71461013f5780630e89341c1461016257806316ffc42314610182575b600080fd5b61012c6101123660046113c7565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61015261014d366004611422565b610311565b6040519015158152602001610136565b610175610170366004611446565b6103f6565b60405161013691906114cd565b610193610190366004611446565b90565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b6101cb6101c636600461156e565b6104ca565b005b6101937f000000000000000000000000a1db133924fc6a615bc5a27fc9b01961250b038181565b6101cb610202366004611629565b6108c0565b61021a6102153660046116a8565b6108ec565b6040516101369190611714565b61012c610235366004611758565b610a63565b6101937f000000000000000000000000cedafe1eaa250da15c434a54ece8ba1702876e3a81565b6101cb61026f366004611799565b610abd565b6101cb6102823660046117d0565b610b54565b61012c61029536600461180c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b6101526102cb366004611758565b600160209081526000928352604080842090915290825290205460ff1681565b6101cb6102f9366004611827565b610c95565b6101cb61030c3660046117d0565b610f93565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806103a457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806103f057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517fc87b56dd000000000000000000000000000000000000000000000000000000008152600481018290526060907f000000000000000000000000a1db133924fc6a615bc5a27fc9b01961250b038173ffffffffffffffffffffffffffffffffffffffff169063c87b56dd90602401600060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103f091908101906118b0565b848314610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8916148061058c575073ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832033845290915290205460ff165b6105f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161052f565b60008060005b878110156106c7578888828181106106125761061261197b565b90506020020135925086868281811061062d5761062d61197b565b73ffffffffffffffffffffffffffffffffffffffff8e16600090815260208181526040808320898452825282208054939091029490940135955085939250906106779084906119d9565b909155505073ffffffffffffffffffffffffffffffffffffffff8a16600090815260208181526040808320868452909152812080548492906106ba9084906119ec565b90915550506001016105f8565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516107429493929190611a4a565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15610834576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c81906107c99033908f908e908e908e908e908e908e90600401611aba565b6020604051808303816000875af11580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c9190611b2b565b7fffffffff00000000000000000000000000000000000000000000000000000000161461084e565b73ffffffffffffffffffffffffffffffffffffffff891615155b6108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e5400000000000000000000000000000000604482015260640161052f565b50505050505050505050565b6108e4868673ffffffffffffffffffffffffffffffffffffffff8716868686610c95565b505050505050565b6060838214610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d415443480000000000000000000000000000000000604482015260640161052f565b8367ffffffffffffffff81111561097057610970611881565b604051908082528060200260200182016040528015610999578160200160208202803683370190505b50905060005b84811015610a5a576000808787848181106109bc576109bc61197b565b90506020020160208101906109d1919061180c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610a1f57610a1f61197b565b90506020020135815260200190815260200160002054828281518110610a4757610a4761197b565b602090810291909101015260010161099f565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812081610aa68473ffffffffffffffffffffffffffffffffffffffff1690565b815260200190815260200160002054905092915050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6040517f652b9b410000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000cedafe1eaa250da15c434a54ece8ba1702876e3a73ffffffffffffffffffffffffffffffffffffffff169063652b9b4190602401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c029190611b48565b610c38576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602052604081208054849290610c6d9084906119ec565b92505081905550610c8f84828460405180602001604052806000815250611102565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff87161480610ce9575073ffffffffffffffffffffffffffffffffffffffff8616600090815260016020908152604080832033845290915290205460ff165b610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161052f565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832087845290915281208054859290610d8d9084906119d9565b909155505073ffffffffffffffffffffffffffffffffffffffff851660009081526020818152604080832087845290915281208054859290610dd09084906119ec565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15610f13576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e6190610ea89033908b908a908a908a908a90600401611b65565b6020604051808303816000875af1158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb9190611b2b565b7fffffffff000000000000000000000000000000000000000000000000000000001614610f2d565b73ffffffffffffffffffffffffffffffffffffffff851615155b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e5400000000000000000000000000000000604482015260640161052f565b6040517f652b9b410000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000cedafe1eaa250da15c434a54ece8ba1702876e3a73ffffffffffffffffffffffffffffffffffffffff169063652b9b4190602401602060405180830381865afa15801561101d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110419190611b48565b611077576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020526040902054828110156110d7576040517fd04abcdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110e183826119d9565b6000838152600260205260409020556110fb858385611300565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906111409084906119ec565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff84163b15611280576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063f23a6e6190611215903390600090899089908990600401611bb7565b6020604051808303816000875af1158015611234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112589190611b2b565b7fffffffff00000000000000000000000000000000000000000000000000000000161461129a565b73ffffffffffffffffffffffffffffffffffffffff841615155b610c8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e5400000000000000000000000000000000604482015260640161052f565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208584529091528120805483929061133e9084906119d9565b9091555050604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146113c257600080fd5b919050565b600080604083850312156113da57600080fd5b6113e38361139e565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461141f57600080fd5b50565b60006020828403121561143457600080fd5b813561143f816113f1565b9392505050565b60006020828403121561145857600080fd5b5035919050565b60005b8381101561147a578181015183820152602001611462565b50506000910152565b6000815180845261149b81602086016020860161145f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061143f6020830184611483565b60008083601f8401126114f257600080fd5b50813567ffffffffffffffff81111561150a57600080fd5b6020830191508360208260051b850101111561152557600080fd5b9250929050565b60008083601f84011261153e57600080fd5b50813567ffffffffffffffff81111561155657600080fd5b60208301915083602082850101111561152557600080fd5b60008060008060008060008060a0898b03121561158a57600080fd5b6115938961139e565b97506115a160208a0161139e565b9650604089013567ffffffffffffffff808211156115be57600080fd5b6115ca8c838d016114e0565b909850965060608b01359150808211156115e357600080fd5b6115ef8c838d016114e0565b909650945060808b013591508082111561160857600080fd5b506116158b828c0161152c565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561164257600080fd5b61164b8761139e565b95506116596020880161139e565b94506116676040880161139e565b935060608701359250608087013567ffffffffffffffff81111561168a57600080fd5b61169689828a0161152c565b979a9699509497509295939492505050565b600080600080604085870312156116be57600080fd5b843567ffffffffffffffff808211156116d657600080fd5b6116e2888389016114e0565b909650945060208701359150808211156116fb57600080fd5b50611708878288016114e0565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561174c57835183529284019291840191600101611730565b50909695505050505050565b6000806040838503121561176b57600080fd5b6117748361139e565b91506117826020840161139e565b90509250929050565b801515811461141f57600080fd5b600080604083850312156117ac57600080fd5b6117b58361139e565b915060208301356117c58161178b565b809150509250929050565b6000806000606084860312156117e557600080fd5b6117ee8461139e565b92506117fc6020850161139e565b9150604084013590509250925092565b60006020828403121561181e57600080fd5b61143f8261139e565b60008060008060008060a0878903121561184057600080fd5b6118498761139e565b95506118576020880161139e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561168a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156118c257600080fd5b815167ffffffffffffffff808211156118da57600080fd5b818401915084601f8301126118ee57600080fd5b81518181111561190057611900611881565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561194657611946611881565b8160405282815287602084870101111561195f57600080fd5b61197083602083016020880161145f565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156103f0576103f06119aa565b808201808211156103f0576103f06119aa565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611a3157600080fd5b8260051b80836020870137939093016020019392505050565b604081526000611a5e6040830186886119ff565b82810360208401526119708185876119ff565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a06040830152611af460a08301888a6119ff565b8281036060840152611b078187896119ff565b90508281036080840152611b1c818587611a71565b9b9a5050505050505050505050565b600060208284031215611b3d57600080fd5b815161143f816113f1565b600060208284031215611b5a57600080fd5b815161143f8161178b565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a06080830152611bab60a083018486611a71565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261197060a083018461148356fea264697066735822122084577a7da01b2246338e3ef6baa79389f1844e0a83299623f27903d092c963a164736f6c63430008110033

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

000000000000000000000000cedafe1eaa250da15c434a54ece8ba1702876e3a000000000000000000000000a1db133924fc6a615bc5a27fc9b01961250b0381

-----Decoded View---------------
Arg [0] : _whitelist (address): 0xCEDAfE1EaA250DA15c434A54ece8BA1702876e3A
Arg [1] : _descriptor (address): 0xA1Db133924Fc6A615BC5a27fc9b01961250B0381

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cedafe1eaa250da15c434a54ece8ba1702876e3a
Arg [1] : 000000000000000000000000a1db133924fc6a615bc5a27fc9b01961250b0381


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.