ETH Price: $3,392.75 (-1.92%)
Gas: 9 Gwei

Token

$STCL WLT SKNS Mintpass (WLTSKNS)
 

Overview

Max Total Supply

108 WLTSKNS

Holders

86

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
Villains by Felt Zine: Deployer
0x5e080d8b14c1da5936509c2c9ef0168a19304202
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:
MintPassContract

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 10 : MintPassContract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

// Built by Satoshi's Closet

// https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC1155
// https://docs.openzeppelin.com/contracts/4.x/api/token/erc1155

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";

contract MintPassContract is ERC1155, ERC1155Supply {
  // Contract name
  string public name;
  // Contract symbol
  string public symbol;

  address public owner;
  bool private _paused;
  bool private _whitelist_only;
  
  // shared payout
  struct Shareholder {
    uint share;
    address payable shareholder_address;
  }

  Shareholder[] public shareholders;

  event Payout(address indexed _to, uint _value);
  
  mapping(address => bool) public whitelist;
    
  constructor(string memory _name,
              string memory _symbol,
              string memory _uri,
              address payable[] memory _whitelist,
              uint[] memory _shares,
              address payable[] memory _shareholder_addresses) ERC1155(_uri) {
    for (uint i = 0; i < _whitelist.length; i++) {
      whitelist[_whitelist[i]] = true;
    }

    name = _name;
    symbol = _symbol;
    
    owner = msg.sender;
    _paused = false;
    _whitelist_only = true;

    // there should be at least one shareholder
    assert(_shareholder_addresses.length > 0);

    // the _shares and _shareholder_addresses provided should be the same length
    assert(_shares.length == _shareholder_addresses.length);

    // keep track of the total number of shares
    uint _total_number_of_shares = 0;
    for (uint i = 0; i < _shares.length; i++) {
      _total_number_of_shares += _shares[i];
      Shareholder memory x = Shareholder({share: _shares[i], shareholder_address: _shareholder_addresses[i]});
      shareholders.push(x);
    }

    // there should be exactly 10,000 shares, this amount is used to calculate payouts
    assert(_total_number_of_shares == 10000);
  }

  modifier onlyOwner(){
    require(msg.sender == owner);
    _;
  }

  modifier whenNotPaused(){
    require(!_paused);
    _;
  }

  modifier whenPaused(){
    require(_paused);
    _;
  }  

  event Mint(address indexed _minter, uint _amount);

  function mint(uint256 amount) public payable whenNotPaused() {
    require(totalSupply(1) + amount <= 300, "Total supply is 300");
    require(msg.value == (0.04 ether * amount), "Insufficient minting fee");

    // during the first seven days, only those in the whitelist can mint once
    if (_whitelist_only) {
      require(whitelist[msg.sender] == true, "Sender not on whitelist. Cannot mint during whitelist period.");
      require(amount == 1, "Mint capped at 1 per whitelist address per transaction.");
      // whitelist[msg.sender] = false;
    } else {
      require(amount == 1, "Mint capped at 1 per address per transaction.");
    }

    emit Mint(msg.sender, amount);
    
    _mint(msg.sender, 1, amount, "");
  }

  // once the royalty contract has a balance, call this to payout to the shareholders
  function payout() public payable onlyOwner whenNotPaused returns (bool) {
    // the balance must be greater than 0
    assert(address(this).balance > 0);

    // get the balance of ETH held by the royalty contract
    uint balance = address(this).balance;
    for (uint i = 0; i < shareholders.length; i++) {

      // 10,000 shares represents 100.00% ownership
      uint amount = balance * shareholders[i].share / 10000;

      // https://solidity-by-example.org/sending-ether/
      // this considered the safest way to send ETH
      (bool success, ) = shareholders[i].shareholder_address.call{value: amount}("");

      // it should not fail
      require(success, "Transfer failed.");

      emit Payout(shareholders[i].shareholder_address, amount);
    }
    return true;
  }
  
  // required by ERC1155Supply
  function _beforeTokenTransfer(
    address operator,
    address from,
    address to,
    uint256[] memory ids,
    uint256[] memory amounts,
    bytes memory data
  ) internal virtual override(ERC1155, ERC1155Supply) {
    super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
  }

  function pause() public onlyOwner whenNotPaused {
    _paused = true;
  }

  function unpause() public onlyOwner whenPaused {
    _paused = false;
  }

  function is_whitelisted(address _address) public view returns (bool) {
    return whitelist[_address];
  }

  function get_whitelist_only() public view returns (bool) {
    return _whitelist_only;
  }

  function set_whitelist_only() public onlyOwner {
    _whitelist_only = true;
  }

  function unset_whitelist_only() public onlyOwner {
    _whitelist_only = false;
  }  
  // https://solidity-by-example.org/sending-ether/
  // receive is called when msg.data is empty.
  receive() external payable {}

  // https://solidity-by-example.org/sending-ether/
  // fallback function is called when msg.data is not empty.
  fallback() external payable {}  
}

File 2 of 10 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 3 of 10 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 4 of 10 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 5 of 10 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 6 of 10 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 7 of 10 : ERC1155Supply.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC1155.sol";

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates weither any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

File 8 of 10 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 9 of 10 : IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 10 of 10 : ERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

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

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address payable[]","name":"_whitelist","type":"address[]"},{"internalType":"uint256[]","name":"_shares","type":"uint256[]"},{"internalType":"address payable[]","name":"_shareholder_addresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"_minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Payout","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":"values","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":"value","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_whitelist_only","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"is_whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"payout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","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":[],"name":"set_whitelist_only","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shareholders","outputs":[{"internalType":"uint256","name":"share","type":"uint256"},{"internalType":"address payable","name":"shareholder_address","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unset_whitelist_only","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620047e0380380620047e08339818101604052810190620000379190620006bf565b8362000049816200040f60201b60201c565b5060005b8351811015620001065760016008600086848151811062000097577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620000fd90620009e5565b9150506200004d565b5085600490805190602001906200011f9291906200042b565b508460059080519060200190620001389291906200042b565b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff0219169083151502179055506000815111620001e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b805182511462000222577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000805b8351811015620003c8578381815181106200026a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826200027f9190620008a8565b915060006040518060400160405280868481518110620002c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020018584815181106200030f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815250905060078190806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508080620003bf90620009e5565b91505062000226565b50612710811462000402577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5050505050505062000b05565b8060029080519060200190620004279291906200042b565b5050565b828054620004399062000979565b90600052602060002090601f0160209004810192826200045d5760008555620004a9565b82601f106200047857805160ff1916838001178555620004a9565b82800160010185558215620004a9579182015b82811115620004a85782518255916020019190600101906200048b565b5b509050620004b89190620004bc565b5090565b5b80821115620004d7576000816000905550600101620004bd565b5090565b6000620004f2620004ec8462000814565b620007eb565b905080838252602082019050828560208602820111156200051257600080fd5b60005b858110156200054657816200052b88826200060a565b84526020840193506020830192505060018101905062000515565b5050509392505050565b600062000567620005618462000843565b620007eb565b905080838252602082019050828560208602820111156200058757600080fd5b60005b85811015620005bb5781620005a08882620006a8565b8452602084019350602083019250506001810190506200058a565b5050509392505050565b6000620005dc620005d68462000872565b620007eb565b905082815260208101848484011115620005f557600080fd5b6200060284828562000943565b509392505050565b6000815190506200061b8162000ad1565b92915050565b600082601f8301126200063357600080fd5b815162000645848260208601620004db565b91505092915050565b600082601f8301126200066057600080fd5b81516200067284826020860162000550565b91505092915050565b600082601f8301126200068d57600080fd5b81516200069f848260208601620005c5565b91505092915050565b600081519050620006b98162000aeb565b92915050565b60008060008060008060c08789031215620006d957600080fd5b600087015167ffffffffffffffff811115620006f457600080fd5b6200070289828a016200067b565b965050602087015167ffffffffffffffff8111156200072057600080fd5b6200072e89828a016200067b565b955050604087015167ffffffffffffffff8111156200074c57600080fd5b6200075a89828a016200067b565b945050606087015167ffffffffffffffff8111156200077857600080fd5b6200078689828a0162000621565b935050608087015167ffffffffffffffff811115620007a457600080fd5b620007b289828a016200064e565b92505060a087015167ffffffffffffffff811115620007d057600080fd5b620007de89828a0162000621565b9150509295509295509295565b6000620007f76200080a565b9050620008058282620009af565b919050565b6000604051905090565b600067ffffffffffffffff82111562000832576200083162000a91565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000861576200086062000a91565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000890576200088f62000a91565b5b6200089b8262000ac0565b9050602081019050919050565b6000620008b58262000939565b9150620008c28362000939565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008fa57620008f962000a33565b5b828201905092915050565b6000620009128262000919565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200096357808201518184015260208101905062000946565b8381111562000973576000848401525b50505050565b600060028204905060018216806200099257607f821691505b60208210811415620009a957620009a862000a62565b5b50919050565b620009ba8262000ac0565b810181811067ffffffffffffffff82111715620009dc57620009db62000a91565b5b80604052505050565b6000620009f28262000939565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000a285762000a2762000a33565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62000adc8162000905565b811462000ae857600080fd5b50565b62000af68162000939565b811462000b0257600080fd5b50565b613ccb8062000b156000396000f3fe6080604052600436106101435760003560e01c80638456cb59116100b6578063ab377daa1161006f578063ab377daa1461045d578063b75752771461049b578063bd85b039146104b2578063e985e9c5146104ef578063f242432a1461052c578063f57b450f146105555761014a565b80638456cb591461036e5780638da5cb5b1461038557806395d89b41146103b05780639b19251a146103db578063a0712d6814610418578063a22cb465146104345761014a565b80633f4ba83a116101085780633f4ba83a1461025757806340a888ba1461026e5780634e1273f4146102995780634f558e79146102d657806363bd1d4a14610313578063779ee628146103315761014a565b8062fdd58e1461014c57806301ffc9a71461018957806306fdde03146101c65780630e89341c146101f15780632eb2c2d61461022e5761014a565b3661014a57005b005b34801561015857600080fd5b50610173600480360381019061016e9190612943565b61056c565b60405161018091906131b7565b60405180910390f35b34801561019557600080fd5b506101b060048036038101906101ab91906129eb565b610635565b6040516101bd9190612f5a565b60405180910390f35b3480156101d257600080fd5b506101db610717565b6040516101e89190612f75565b60405180910390f35b3480156101fd57600080fd5b5061021860048036038101906102139190612a3d565b6107a5565b6040516102259190612f75565b60405180910390f35b34801561023a57600080fd5b50610255600480360381019061025091906127b9565b610839565b005b34801561026357600080fd5b5061026c6108da565b005b34801561027a57600080fd5b5061028361096a565b6040516102909190612f5a565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb919061297f565b610981565b6040516102cd9190612f01565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612a3d565b610b32565b60405161030a9190612f5a565b60405180910390f35b61031b610b46565b6040516103289190612f5a565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612754565b610e5e565b6040516103659190612f5a565b60405180910390f35b34801561037a57600080fd5b50610383610eb4565b005b34801561039157600080fd5b5061039a610f45565b6040516103a79190612e24565b60405180910390f35b3480156103bc57600080fd5b506103c5610f6b565b6040516103d29190612f75565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190612754565b610ff9565b60405161040f9190612f5a565b60405180910390f35b610432600480360381019061042d9190612a3d565b611019565b005b34801561044057600080fd5b5061045b60048036038101906104569190612907565b611281565b005b34801561046957600080fd5b50610484600480360381019061047f9190612a3d565b611402565b6040516104929291906131d2565b60405180910390f35b3480156104a757600080fd5b506104b0611456565b005b3480156104be57600080fd5b506104d960048036038101906104d49190612a3d565b6114cd565b6040516104e691906131b7565b60405180910390f35b3480156104fb57600080fd5b506105166004803603810190610511919061277d565b6114ea565b6040516105239190612f5a565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190612878565b61157e565b005b34801561056157600080fd5b5061056a61161f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d490612ff7565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610710575061070f82611696565b5b9050919050565b600480546107249061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546107509061352b565b801561079d5780601f106107725761010080835404028352916020019161079d565b820191906000526020600020905b81548152906001019060200180831161078057829003601f168201915b505050505081565b6060600280546107b49061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546107e09061352b565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b50505050509050919050565b610841611700565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610887575061088685610881611700565b6114ea565b5b6108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd90613097565b60405180910390fd5b6108d38585858585611708565b5050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461093457600080fd5b600660149054906101000a900460ff1661094d57600080fd5b6000600660146101000a81548160ff021916908315150217905550565b6000600660159054906101000a900460ff16905090565b606081518351146109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613137565b60405180910390fd5b6000835167ffffffffffffffff811115610a0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a385781602001602082028036833780820191505090505b50905060005b8451811015610b2757610ad1858281518110610a83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610ac4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161056c565b828281518110610b0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610b209061358e565b9050610a3e565b508091505092915050565b600080610b3e836114cd565b119050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba257600080fd5b600660149054906101000a900460ff1615610bbc57600080fd5b60004711610bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600047905060005b600780549050811015610e5557600061271060078381548110610c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600202016000015484610c6491906133d5565b610c6e91906133a4565b9050600060078381548110610cac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d0190612e0f565b60006040518083038185875af1925050503d8060008114610d3e576040519150601f19603f3d011682016040523d82523d6000602084013e610d43565b606091505b5050905080610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906130f7565b60405180910390fd5b60078381548110610dc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5afeca38b2064c23a692c4cf353015d80ab3ecc417b4f893f372690c11fbd9a683604051610e3891906131b7565b60405180910390a250508080610e4d9061358e565b915050610bfb565b50600191505090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f0e57600080fd5b600660149054906101000a900460ff1615610f2857600080fd5b6001600660146101000a81548160ff021916908315150217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054610f789061352b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa49061352b565b8015610ff15780601f10610fc657610100808354040283529160200191610ff1565b820191906000526020600020905b815481529060010190602001808311610fd457829003601f168201915b505050505081565b60086020528060005260406000206000915054906101000a900460ff1681565b600660149054906101000a900460ff161561103357600080fd5b61012c8161104160016114cd565b61104b919061334e565b111561108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390613197565b60405180910390fd5b80668e1bc9bf04000061109f91906133d5565b34146110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790613037565b60405180910390fd5b600660159054906101000a900460ff16156111d05760011515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90613057565b60405180910390fd5b600181146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290612fd7565b60405180910390fd5b611214565b60018114611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906130d7565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161125a91906131b7565b60405180910390a261127e3360018360405180602001604052806000815250611a68565b50565b8173ffffffffffffffffffffffffffffffffffffffff166112a0611700565b73ffffffffffffffffffffffffffffffffffffffff1614156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90613117565b60405180910390fd5b8060016000611304611700565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113b1611700565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113f69190612f5a565b60405180910390a35050565b6007818154811061141257600080fd5b90600052602060002090600202016000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b057600080fd5b6000600660156101000a81548160ff021916908315150217905550565b600060036000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611586611700565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115cc57506115cb856115c6611700565b6114ea565b5b61160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613017565b60405180910390fd5b6116188585858585611bfe565b5050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461167957600080fd5b6001600660156101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b815183511461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390613157565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613077565b60405180910390fd5b60006117c6611700565b90506117d6818787878787611e80565b60005b84518110156119d357600085828151811061181d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa906130b7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b8919061334e565b92505081905550505050806119cc9061358e565b90506117d9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a4a929190612f23565b60405180910390a4611a60818787878787611e96565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf90613177565b60405180910390fd5b6000611ae2611700565b9050611b0381600087611af48861207d565b611afd8861207d565b87611e80565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b62919061334e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611be09291906131fb565b60405180910390a4611bf781600087878787612143565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613077565b60405180910390fd5b6000611c78611700565b9050611c98818787611c898861207d565b611c928861207d565b87611e80565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d26906130b7565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611de4919061334e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e619291906131fb565b60405180910390a4611e77828888888888612143565b50505050505050565b611e8e86868686868661232a565b505050505050565b611eb58473ffffffffffffffffffffffffffffffffffffffff1661253c565b15612075578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611efb959493929190612e3f565b602060405180830381600087803b158015611f1557600080fd5b505af1925050508015611f4657506040513d601f19601f82011682018060405250810190611f439190612a14565b60015b611fec57611f52613693565b806308c379a01415611faf5750611f67613ba3565b80611f725750611fb1565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69190612f75565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390612f97565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90612fb7565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156120c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120f05781602001602082028036833780820191505090505b509050828160008151811061212e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6121628473ffffffffffffffffffffffffffffffffffffffff1661253c565b15612322578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121a8959493929190612ea7565b602060405180830381600087803b1580156121c257600080fd5b505af19250505080156121f357506040513d601f19601f820116820180604052508101906121f09190612a14565b60015b612299576121ff613693565b806308c379a0141561225c5750612214613ba3565b8061221f575061225e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122539190612f75565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090612f97565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790612fb7565b60405180910390fd5b505b505050505050565b61233886868686868661254f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156124365760005b8351811015612434578281815181106123b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106123f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020600082825461241c919061334e565b925050819055508061242d9061358e565b9050612370565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125345760005b8351811015612532578281815181106124b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106124f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020600082825461251a919061342f565b925050819055508061252b9061358e565b905061246e565b505b505050505050565b600080823b905060008111915050919050565b505050505050565b600061256a61256584613249565b613224565b9050808382526020820190508285602086028201111561258957600080fd5b60005b858110156125b9578161259f888261266d565b84526020840193506020830192505060018101905061258c565b5050509392505050565b60006125d66125d184613275565b613224565b905080838252602082019050828560208602820111156125f557600080fd5b60005b85811015612625578161260b888261273f565b8452602084019350602083019250506001810190506125f8565b5050509392505050565b600061264261263d846132a1565b613224565b90508281526020810184848401111561265a57600080fd5b6126658482856134e9565b509392505050565b60008135905061267c81613c39565b92915050565b600082601f83011261269357600080fd5b81356126a3848260208601612557565b91505092915050565b600082601f8301126126bd57600080fd5b81356126cd8482602086016125c3565b91505092915050565b6000813590506126e581613c50565b92915050565b6000813590506126fa81613c67565b92915050565b60008151905061270f81613c67565b92915050565b600082601f83011261272657600080fd5b813561273684826020860161262f565b91505092915050565b60008135905061274e81613c7e565b92915050565b60006020828403121561276657600080fd5b60006127748482850161266d565b91505092915050565b6000806040838503121561279057600080fd5b600061279e8582860161266d565b92505060206127af8582860161266d565b9150509250929050565b600080600080600060a086880312156127d157600080fd5b60006127df8882890161266d565b95505060206127f08882890161266d565b945050604086013567ffffffffffffffff81111561280d57600080fd5b612819888289016126ac565b935050606086013567ffffffffffffffff81111561283657600080fd5b612842888289016126ac565b925050608086013567ffffffffffffffff81111561285f57600080fd5b61286b88828901612715565b9150509295509295909350565b600080600080600060a0868803121561289057600080fd5b600061289e8882890161266d565b95505060206128af8882890161266d565b94505060406128c08882890161273f565b93505060606128d18882890161273f565b925050608086013567ffffffffffffffff8111156128ee57600080fd5b6128fa88828901612715565b9150509295509295909350565b6000806040838503121561291a57600080fd5b60006129288582860161266d565b9250506020612939858286016126d6565b9150509250929050565b6000806040838503121561295657600080fd5b60006129648582860161266d565b92505060206129758582860161273f565b9150509250929050565b6000806040838503121561299257600080fd5b600083013567ffffffffffffffff8111156129ac57600080fd5b6129b885828601612682565b925050602083013567ffffffffffffffff8111156129d557600080fd5b6129e1858286016126ac565b9150509250929050565b6000602082840312156129fd57600080fd5b6000612a0b848285016126eb565b91505092915050565b600060208284031215612a2657600080fd5b6000612a3484828501612700565b91505092915050565b600060208284031215612a4f57600080fd5b6000612a5d8482850161273f565b91505092915050565b6000612a728383612df1565b60208301905092915050565b612a8781613475565b82525050565b612a9681613463565b82525050565b6000612aa7826132e2565b612ab18185613310565b9350612abc836132d2565b8060005b83811015612aed578151612ad48882612a66565b9750612adf83613303565b925050600181019050612ac0565b5085935050505092915050565b612b0381613487565b82525050565b6000612b14826132ed565b612b1e8185613321565b9350612b2e8185602086016134f8565b612b37816136b5565b840191505092915050565b6000612b4d826132f8565b612b57818561333d565b9350612b678185602086016134f8565b612b70816136b5565b840191505092915050565b6000612b8860348361333d565b9150612b93826136d3565b604082019050919050565b6000612bab60288361333d565b9150612bb682613722565b604082019050919050565b6000612bce60378361333d565b9150612bd982613771565b604082019050919050565b6000612bf1602b8361333d565b9150612bfc826137c0565b604082019050919050565b6000612c1460298361333d565b9150612c1f8261380f565b604082019050919050565b6000612c3760188361333d565b9150612c428261385e565b602082019050919050565b6000612c5a603d8361333d565b9150612c6582613887565b604082019050919050565b6000612c7d60258361333d565b9150612c88826138d6565b604082019050919050565b6000612ca060328361333d565b9150612cab82613925565b604082019050919050565b6000612cc3602a8361333d565b9150612cce82613974565b604082019050919050565b6000612ce6602d8361333d565b9150612cf1826139c3565b604082019050919050565b6000612d09600083613332565b9150612d1482613a12565b600082019050919050565b6000612d2c60108361333d565b9150612d3782613a15565b602082019050919050565b6000612d4f60298361333d565b9150612d5a82613a3e565b604082019050919050565b6000612d7260298361333d565b9150612d7d82613a8d565b604082019050919050565b6000612d9560288361333d565b9150612da082613adc565b604082019050919050565b6000612db860218361333d565b9150612dc382613b2b565b604082019050919050565b6000612ddb60138361333d565b9150612de682613b7a565b602082019050919050565b612dfa816134df565b82525050565b612e09816134df565b82525050565b6000612e1a82612cfc565b9150819050919050565b6000602082019050612e396000830184612a8d565b92915050565b600060a082019050612e546000830188612a8d565b612e616020830187612a8d565b8181036040830152612e738186612a9c565b90508181036060830152612e878185612a9c565b90508181036080830152612e9b8184612b09565b90509695505050505050565b600060a082019050612ebc6000830188612a8d565b612ec96020830187612a8d565b612ed66040830186612e00565b612ee36060830185612e00565b8181036080830152612ef58184612b09565b90509695505050505050565b60006020820190508181036000830152612f1b8184612a9c565b905092915050565b60006040820190508181036000830152612f3d8185612a9c565b90508181036020830152612f518184612a9c565b90509392505050565b6000602082019050612f6f6000830184612afa565b92915050565b60006020820190508181036000830152612f8f8184612b42565b905092915050565b60006020820190508181036000830152612fb081612b7b565b9050919050565b60006020820190508181036000830152612fd081612b9e565b9050919050565b60006020820190508181036000830152612ff081612bc1565b9050919050565b6000602082019050818103600083015261301081612be4565b9050919050565b6000602082019050818103600083015261303081612c07565b9050919050565b6000602082019050818103600083015261305081612c2a565b9050919050565b6000602082019050818103600083015261307081612c4d565b9050919050565b6000602082019050818103600083015261309081612c70565b9050919050565b600060208201905081810360008301526130b081612c93565b9050919050565b600060208201905081810360008301526130d081612cb6565b9050919050565b600060208201905081810360008301526130f081612cd9565b9050919050565b6000602082019050818103600083015261311081612d1f565b9050919050565b6000602082019050818103600083015261313081612d42565b9050919050565b6000602082019050818103600083015261315081612d65565b9050919050565b6000602082019050818103600083015261317081612d88565b9050919050565b6000602082019050818103600083015261319081612dab565b9050919050565b600060208201905081810360008301526131b081612dce565b9050919050565b60006020820190506131cc6000830184612e00565b92915050565b60006040820190506131e76000830185612e00565b6131f46020830184612a7e565b9392505050565b60006040820190506132106000830185612e00565b61321d6020830184612e00565b9392505050565b600061322e61323f565b905061323a828261355d565b919050565b6000604051905090565b600067ffffffffffffffff82111561326457613263613664565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156132905761328f613664565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156132bc576132bb613664565b5b6132c5826136b5565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613359826134df565b9150613364836134df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613399576133986135d7565b5b828201905092915050565b60006133af826134df565b91506133ba836134df565b9250826133ca576133c9613606565b5b828204905092915050565b60006133e0826134df565b91506133eb836134df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613424576134236135d7565b5b828202905092915050565b600061343a826134df565b9150613445836134df565b925082821015613458576134576135d7565b5b828203905092915050565b600061346e826134bf565b9050919050565b6000613480826134bf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135165780820151818401526020810190506134fb565b83811115613525576000848401525b50505050565b6000600282049050600182168061354357607f821691505b6020821081141561355757613556613635565b5b50919050565b613566826136b5565b810181811067ffffffffffffffff8211171561358557613584613664565b5b80604052505050565b6000613599826134df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135cc576135cb6135d7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156136b25760046000803e6136af6000516136c6565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206361707065642061742031207065722077686974656c697374206160008201527f64647265737320706572207472616e73616374696f6e2e000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e74696e67206665650000000000000000600082015250565b7f53656e646572206e6f74206f6e2077686974656c6973742e2043616e6e6f742060008201527f6d696e7420647572696e672077686974656c69737420706572696f642e000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4d696e742063617070656420617420312070657220616464726573732070657260008201527f207472616e73616374696f6e2e00000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c20737570706c792069732033303000000000000000000000000000600082015250565b600060443d1015613bb357613c36565b613bbb61323f565b60043d036004823e80513d602482011167ffffffffffffffff82111715613be3575050613c36565b808201805167ffffffffffffffff811115613c015750505050613c36565b80602083010160043d038501811115613c1e575050505050613c36565b613c2d8260200185018661355d565b82955050505050505b90565b613c4281613463565b8114613c4d57600080fd5b50565b613c5981613487565b8114613c6457600080fd5b50565b613c7081613493565b8114613c7b57600080fd5b50565b613c87816134df565b8114613c9257600080fd5b5056fea26469706673582212201db948d00beb41d7373fd216a112124b9ce3c1d82bd3f0a467db844067afdcfe64736f6c6343000801003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000017245354434c20574c5420534b4e53204d696e74706173730000000000000000000000000000000000000000000000000000000000000000000000000000000007574c54534b4e5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f6e51333366704d35583745723955716c71674e4c663057783055456d456c4c654d78546f36516d33304e3800000000000000000000000000000000000000000000000000000000000000002600000000000000000000000069c38c760634c23f3a3d9be441eccbd2e50e5f7300000000000000000000000017a77d63765963d0cb9dec12fa8f62e68fee8fd40000000000000000000000002c42e8f3dba3c17e765702fbc6918defeb76cd5f000000000000000000000000d83fcd0ce05895acae34519bec5dae8686608e0a000000000000000000000000c968416370639a9b74b077a4a8f97076e4ae1d9e000000000000000000000000c1ed40524e7b3dd9b3432008e77aa7e7b36403840000000000000000000000005e080d8b14c1da5936509c2c9ef0168a19304202000000000000000000000000cfd95a14677b05580ce9efc8ed66e0a897ca1703000000000000000000000000b1ce2c57a6f8816113fd172a75fc3b98033202280000000000000000000000009814fc9368ba5242d558642e0dac716a75757b99000000000000000000000000dbb304335f760df21294ec361c1ccc76b1d873820000000000000000000000006b3bacba7a6da1d6660079f5fd49fdc167ec5783000000000000000000000000e0f5afbfa874cef79e67deb4f9bdbf96f36c9083000000000000000000000000b72dc1e80a501256ed235a32a815b78fddfbf811000000000000000000000000aa621b960f22911462550c078df678493c22b2ae000000000000000000000000f2caa3b954c1099612a228e7087ce14e107bf4da00000000000000000000000008109a9be5dd5387e9b3982c73da41cb1df1ce4a0000000000000000000000004c39bab642b3ad7c4d93ea7074b7d9bba8ad04ac000000000000000000000000a3e51498579db0f7bb1ec9e3093b2f44158e25a5000000000000000000000000eaabb075675a06be1445ef1d59c3a7f58833f48d00000000000000000000000025dda97333a39e4933f556739170d0452078d785000000000000000000000000a8771fd60920f165fb4e4cfca2cb1ab055f9ed530000000000000000000000008a2b44457fb62c84da10ecf10ce7e5ce17ecf08e000000000000000000000000ef8a28b8a39fb292afc471e21106eeef1985ce4c0000000000000000000000003782b8fd1200b7f63fcfe6f5d8bc4a8f7c70b35b000000000000000000000000b16478a432a0377f49e6b6b0e0fe322b07b3397200000000000000000000000015d1cc60a08feb583ad5ac32bb6fde270925540d000000000000000000000000a2e9ec27b948d85b11f7935728cb68e11d73d8fd000000000000000000000000ed98c163390dcc7bd868cb465e30fde2e13a7abd000000000000000000000000a19d4ef03a71c9cbe3170e008bda46cbfa40942c00000000000000000000000047315368b6acb04d2275a3249be34b876b8e9cc30000000000000000000000006ed75e90dc27a1241335bbcac03f052a4bf590c000000000000000000000000076366ce4a4a3d80f1c135fcfa16546279777f6a60000000000000000000000006eebd90cd8d4a346ec09a93678fca8a468285d7d0000000000000000000000000aaabefcf998b23157096a96c2e2896961188997000000000000000000000000b88f65bd2493ba8e4fc15d9d0c3905d16874e9bc000000000000000000000000b8c97b9e919212f31933ad0c6094007eb7f7f8db000000000000000000000000ecae2bf6c1197dd17fac8c84227be6bf39e5a356000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000213400000000000000000000000000000000000000000000000000000000000000030000000000000000000000000aaabefcf998b23157096a96c2e28969611889970000000000000000000000006eebd90cd8d4a346ec09a93678fca8a468285d7d000000000000000000000000ecae2bf6c1197dd17fac8c84227be6bf39e5a356

Deployed Bytecode

0x6080604052600436106101435760003560e01c80638456cb59116100b6578063ab377daa1161006f578063ab377daa1461045d578063b75752771461049b578063bd85b039146104b2578063e985e9c5146104ef578063f242432a1461052c578063f57b450f146105555761014a565b80638456cb591461036e5780638da5cb5b1461038557806395d89b41146103b05780639b19251a146103db578063a0712d6814610418578063a22cb465146104345761014a565b80633f4ba83a116101085780633f4ba83a1461025757806340a888ba1461026e5780634e1273f4146102995780634f558e79146102d657806363bd1d4a14610313578063779ee628146103315761014a565b8062fdd58e1461014c57806301ffc9a71461018957806306fdde03146101c65780630e89341c146101f15780632eb2c2d61461022e5761014a565b3661014a57005b005b34801561015857600080fd5b50610173600480360381019061016e9190612943565b61056c565b60405161018091906131b7565b60405180910390f35b34801561019557600080fd5b506101b060048036038101906101ab91906129eb565b610635565b6040516101bd9190612f5a565b60405180910390f35b3480156101d257600080fd5b506101db610717565b6040516101e89190612f75565b60405180910390f35b3480156101fd57600080fd5b5061021860048036038101906102139190612a3d565b6107a5565b6040516102259190612f75565b60405180910390f35b34801561023a57600080fd5b50610255600480360381019061025091906127b9565b610839565b005b34801561026357600080fd5b5061026c6108da565b005b34801561027a57600080fd5b5061028361096a565b6040516102909190612f5a565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb919061297f565b610981565b6040516102cd9190612f01565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612a3d565b610b32565b60405161030a9190612f5a565b60405180910390f35b61031b610b46565b6040516103289190612f5a565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612754565b610e5e565b6040516103659190612f5a565b60405180910390f35b34801561037a57600080fd5b50610383610eb4565b005b34801561039157600080fd5b5061039a610f45565b6040516103a79190612e24565b60405180910390f35b3480156103bc57600080fd5b506103c5610f6b565b6040516103d29190612f75565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190612754565b610ff9565b60405161040f9190612f5a565b60405180910390f35b610432600480360381019061042d9190612a3d565b611019565b005b34801561044057600080fd5b5061045b60048036038101906104569190612907565b611281565b005b34801561046957600080fd5b50610484600480360381019061047f9190612a3d565b611402565b6040516104929291906131d2565b60405180910390f35b3480156104a757600080fd5b506104b0611456565b005b3480156104be57600080fd5b506104d960048036038101906104d49190612a3d565b6114cd565b6040516104e691906131b7565b60405180910390f35b3480156104fb57600080fd5b506105166004803603810190610511919061277d565b6114ea565b6040516105239190612f5a565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190612878565b61157e565b005b34801561056157600080fd5b5061056a61161f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d490612ff7565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610710575061070f82611696565b5b9050919050565b600480546107249061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546107509061352b565b801561079d5780601f106107725761010080835404028352916020019161079d565b820191906000526020600020905b81548152906001019060200180831161078057829003601f168201915b505050505081565b6060600280546107b49061352b565b80601f01602080910402602001604051908101604052809291908181526020018280546107e09061352b565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b50505050509050919050565b610841611700565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610887575061088685610881611700565b6114ea565b5b6108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd90613097565b60405180910390fd5b6108d38585858585611708565b5050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461093457600080fd5b600660149054906101000a900460ff1661094d57600080fd5b6000600660146101000a81548160ff021916908315150217905550565b6000600660159054906101000a900460ff16905090565b606081518351146109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613137565b60405180910390fd5b6000835167ffffffffffffffff811115610a0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a385781602001602082028036833780820191505090505b50905060005b8451811015610b2757610ad1858281518110610a83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610ac4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161056c565b828281518110610b0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610b209061358e565b9050610a3e565b508091505092915050565b600080610b3e836114cd565b119050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba257600080fd5b600660149054906101000a900460ff1615610bbc57600080fd5b60004711610bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600047905060005b600780549050811015610e5557600061271060078381548110610c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600202016000015484610c6491906133d5565b610c6e91906133a4565b9050600060078381548110610cac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d0190612e0f565b60006040518083038185875af1925050503d8060008114610d3e576040519150601f19603f3d011682016040523d82523d6000602084013e610d43565b606091505b5050905080610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906130f7565b60405180910390fd5b60078381548110610dc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5afeca38b2064c23a692c4cf353015d80ab3ecc417b4f893f372690c11fbd9a683604051610e3891906131b7565b60405180910390a250508080610e4d9061358e565b915050610bfb565b50600191505090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f0e57600080fd5b600660149054906101000a900460ff1615610f2857600080fd5b6001600660146101000a81548160ff021916908315150217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054610f789061352b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa49061352b565b8015610ff15780601f10610fc657610100808354040283529160200191610ff1565b820191906000526020600020905b815481529060010190602001808311610fd457829003601f168201915b505050505081565b60086020528060005260406000206000915054906101000a900460ff1681565b600660149054906101000a900460ff161561103357600080fd5b61012c8161104160016114cd565b61104b919061334e565b111561108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390613197565b60405180910390fd5b80668e1bc9bf04000061109f91906133d5565b34146110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790613037565b60405180910390fd5b600660159054906101000a900460ff16156111d05760011515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90613057565b60405180910390fd5b600181146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290612fd7565b60405180910390fd5b611214565b60018114611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906130d7565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161125a91906131b7565b60405180910390a261127e3360018360405180602001604052806000815250611a68565b50565b8173ffffffffffffffffffffffffffffffffffffffff166112a0611700565b73ffffffffffffffffffffffffffffffffffffffff1614156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90613117565b60405180910390fd5b8060016000611304611700565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113b1611700565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113f69190612f5a565b60405180910390a35050565b6007818154811061141257600080fd5b90600052602060002090600202016000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b057600080fd5b6000600660156101000a81548160ff021916908315150217905550565b600060036000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611586611700565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115cc57506115cb856115c6611700565b6114ea565b5b61160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613017565b60405180910390fd5b6116188585858585611bfe565b5050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461167957600080fd5b6001600660156101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b815183511461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390613157565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390613077565b60405180910390fd5b60006117c6611700565b90506117d6818787878787611e80565b60005b84518110156119d357600085828151811061181d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa906130b7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b8919061334e565b92505081905550505050806119cc9061358e565b90506117d9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a4a929190612f23565b60405180910390a4611a60818787878787611e96565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf90613177565b60405180910390fd5b6000611ae2611700565b9050611b0381600087611af48861207d565b611afd8861207d565b87611e80565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b62919061334e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611be09291906131fb565b60405180910390a4611bf781600087878787612143565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613077565b60405180910390fd5b6000611c78611700565b9050611c98818787611c898861207d565b611c928861207d565b87611e80565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d26906130b7565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611de4919061334e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e619291906131fb565b60405180910390a4611e77828888888888612143565b50505050505050565b611e8e86868686868661232a565b505050505050565b611eb58473ffffffffffffffffffffffffffffffffffffffff1661253c565b15612075578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611efb959493929190612e3f565b602060405180830381600087803b158015611f1557600080fd5b505af1925050508015611f4657506040513d601f19601f82011682018060405250810190611f439190612a14565b60015b611fec57611f52613693565b806308c379a01415611faf5750611f67613ba3565b80611f725750611fb1565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69190612f75565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390612f97565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90612fb7565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156120c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120f05781602001602082028036833780820191505090505b509050828160008151811061212e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6121628473ffffffffffffffffffffffffffffffffffffffff1661253c565b15612322578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121a8959493929190612ea7565b602060405180830381600087803b1580156121c257600080fd5b505af19250505080156121f357506040513d601f19601f820116820180604052508101906121f09190612a14565b60015b612299576121ff613693565b806308c379a0141561225c5750612214613ba3565b8061221f575061225e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122539190612f75565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090612f97565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790612fb7565b60405180910390fd5b505b505050505050565b61233886868686868661254f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156124365760005b8351811015612434578281815181106123b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106123f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020600082825461241c919061334e565b925050819055508061242d9061358e565b9050612370565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125345760005b8351811015612532578281815181106124b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106124f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020600082825461251a919061342f565b925050819055508061252b9061358e565b905061246e565b505b505050505050565b600080823b905060008111915050919050565b505050505050565b600061256a61256584613249565b613224565b9050808382526020820190508285602086028201111561258957600080fd5b60005b858110156125b9578161259f888261266d565b84526020840193506020830192505060018101905061258c565b5050509392505050565b60006125d66125d184613275565b613224565b905080838252602082019050828560208602820111156125f557600080fd5b60005b85811015612625578161260b888261273f565b8452602084019350602083019250506001810190506125f8565b5050509392505050565b600061264261263d846132a1565b613224565b90508281526020810184848401111561265a57600080fd5b6126658482856134e9565b509392505050565b60008135905061267c81613c39565b92915050565b600082601f83011261269357600080fd5b81356126a3848260208601612557565b91505092915050565b600082601f8301126126bd57600080fd5b81356126cd8482602086016125c3565b91505092915050565b6000813590506126e581613c50565b92915050565b6000813590506126fa81613c67565b92915050565b60008151905061270f81613c67565b92915050565b600082601f83011261272657600080fd5b813561273684826020860161262f565b91505092915050565b60008135905061274e81613c7e565b92915050565b60006020828403121561276657600080fd5b60006127748482850161266d565b91505092915050565b6000806040838503121561279057600080fd5b600061279e8582860161266d565b92505060206127af8582860161266d565b9150509250929050565b600080600080600060a086880312156127d157600080fd5b60006127df8882890161266d565b95505060206127f08882890161266d565b945050604086013567ffffffffffffffff81111561280d57600080fd5b612819888289016126ac565b935050606086013567ffffffffffffffff81111561283657600080fd5b612842888289016126ac565b925050608086013567ffffffffffffffff81111561285f57600080fd5b61286b88828901612715565b9150509295509295909350565b600080600080600060a0868803121561289057600080fd5b600061289e8882890161266d565b95505060206128af8882890161266d565b94505060406128c08882890161273f565b93505060606128d18882890161273f565b925050608086013567ffffffffffffffff8111156128ee57600080fd5b6128fa88828901612715565b9150509295509295909350565b6000806040838503121561291a57600080fd5b60006129288582860161266d565b9250506020612939858286016126d6565b9150509250929050565b6000806040838503121561295657600080fd5b60006129648582860161266d565b92505060206129758582860161273f565b9150509250929050565b6000806040838503121561299257600080fd5b600083013567ffffffffffffffff8111156129ac57600080fd5b6129b885828601612682565b925050602083013567ffffffffffffffff8111156129d557600080fd5b6129e1858286016126ac565b9150509250929050565b6000602082840312156129fd57600080fd5b6000612a0b848285016126eb565b91505092915050565b600060208284031215612a2657600080fd5b6000612a3484828501612700565b91505092915050565b600060208284031215612a4f57600080fd5b6000612a5d8482850161273f565b91505092915050565b6000612a728383612df1565b60208301905092915050565b612a8781613475565b82525050565b612a9681613463565b82525050565b6000612aa7826132e2565b612ab18185613310565b9350612abc836132d2565b8060005b83811015612aed578151612ad48882612a66565b9750612adf83613303565b925050600181019050612ac0565b5085935050505092915050565b612b0381613487565b82525050565b6000612b14826132ed565b612b1e8185613321565b9350612b2e8185602086016134f8565b612b37816136b5565b840191505092915050565b6000612b4d826132f8565b612b57818561333d565b9350612b678185602086016134f8565b612b70816136b5565b840191505092915050565b6000612b8860348361333d565b9150612b93826136d3565b604082019050919050565b6000612bab60288361333d565b9150612bb682613722565b604082019050919050565b6000612bce60378361333d565b9150612bd982613771565b604082019050919050565b6000612bf1602b8361333d565b9150612bfc826137c0565b604082019050919050565b6000612c1460298361333d565b9150612c1f8261380f565b604082019050919050565b6000612c3760188361333d565b9150612c428261385e565b602082019050919050565b6000612c5a603d8361333d565b9150612c6582613887565b604082019050919050565b6000612c7d60258361333d565b9150612c88826138d6565b604082019050919050565b6000612ca060328361333d565b9150612cab82613925565b604082019050919050565b6000612cc3602a8361333d565b9150612cce82613974565b604082019050919050565b6000612ce6602d8361333d565b9150612cf1826139c3565b604082019050919050565b6000612d09600083613332565b9150612d1482613a12565b600082019050919050565b6000612d2c60108361333d565b9150612d3782613a15565b602082019050919050565b6000612d4f60298361333d565b9150612d5a82613a3e565b604082019050919050565b6000612d7260298361333d565b9150612d7d82613a8d565b604082019050919050565b6000612d9560288361333d565b9150612da082613adc565b604082019050919050565b6000612db860218361333d565b9150612dc382613b2b565b604082019050919050565b6000612ddb60138361333d565b9150612de682613b7a565b602082019050919050565b612dfa816134df565b82525050565b612e09816134df565b82525050565b6000612e1a82612cfc565b9150819050919050565b6000602082019050612e396000830184612a8d565b92915050565b600060a082019050612e546000830188612a8d565b612e616020830187612a8d565b8181036040830152612e738186612a9c565b90508181036060830152612e878185612a9c565b90508181036080830152612e9b8184612b09565b90509695505050505050565b600060a082019050612ebc6000830188612a8d565b612ec96020830187612a8d565b612ed66040830186612e00565b612ee36060830185612e00565b8181036080830152612ef58184612b09565b90509695505050505050565b60006020820190508181036000830152612f1b8184612a9c565b905092915050565b60006040820190508181036000830152612f3d8185612a9c565b90508181036020830152612f518184612a9c565b90509392505050565b6000602082019050612f6f6000830184612afa565b92915050565b60006020820190508181036000830152612f8f8184612b42565b905092915050565b60006020820190508181036000830152612fb081612b7b565b9050919050565b60006020820190508181036000830152612fd081612b9e565b9050919050565b60006020820190508181036000830152612ff081612bc1565b9050919050565b6000602082019050818103600083015261301081612be4565b9050919050565b6000602082019050818103600083015261303081612c07565b9050919050565b6000602082019050818103600083015261305081612c2a565b9050919050565b6000602082019050818103600083015261307081612c4d565b9050919050565b6000602082019050818103600083015261309081612c70565b9050919050565b600060208201905081810360008301526130b081612c93565b9050919050565b600060208201905081810360008301526130d081612cb6565b9050919050565b600060208201905081810360008301526130f081612cd9565b9050919050565b6000602082019050818103600083015261311081612d1f565b9050919050565b6000602082019050818103600083015261313081612d42565b9050919050565b6000602082019050818103600083015261315081612d65565b9050919050565b6000602082019050818103600083015261317081612d88565b9050919050565b6000602082019050818103600083015261319081612dab565b9050919050565b600060208201905081810360008301526131b081612dce565b9050919050565b60006020820190506131cc6000830184612e00565b92915050565b60006040820190506131e76000830185612e00565b6131f46020830184612a7e565b9392505050565b60006040820190506132106000830185612e00565b61321d6020830184612e00565b9392505050565b600061322e61323f565b905061323a828261355d565b919050565b6000604051905090565b600067ffffffffffffffff82111561326457613263613664565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156132905761328f613664565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156132bc576132bb613664565b5b6132c5826136b5565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613359826134df565b9150613364836134df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613399576133986135d7565b5b828201905092915050565b60006133af826134df565b91506133ba836134df565b9250826133ca576133c9613606565b5b828204905092915050565b60006133e0826134df565b91506133eb836134df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613424576134236135d7565b5b828202905092915050565b600061343a826134df565b9150613445836134df565b925082821015613458576134576135d7565b5b828203905092915050565b600061346e826134bf565b9050919050565b6000613480826134bf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135165780820151818401526020810190506134fb565b83811115613525576000848401525b50505050565b6000600282049050600182168061354357607f821691505b6020821081141561355757613556613635565b5b50919050565b613566826136b5565b810181811067ffffffffffffffff8211171561358557613584613664565b5b80604052505050565b6000613599826134df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135cc576135cb6135d7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156136b25760046000803e6136af6000516136c6565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206361707065642061742031207065722077686974656c697374206160008201527f64647265737320706572207472616e73616374696f6e2e000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e74696e67206665650000000000000000600082015250565b7f53656e646572206e6f74206f6e2077686974656c6973742e2043616e6e6f742060008201527f6d696e7420647572696e672077686974656c69737420706572696f642e000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4d696e742063617070656420617420312070657220616464726573732070657260008201527f207472616e73616374696f6e2e00000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c20737570706c792069732033303000000000000000000000000000600082015250565b600060443d1015613bb357613c36565b613bbb61323f565b60043d036004823e80513d602482011167ffffffffffffffff82111715613be3575050613c36565b808201805167ffffffffffffffff811115613c015750505050613c36565b80602083010160043d038501811115613c1e575050505050613c36565b613c2d8260200185018661355d565b82955050505050505b90565b613c4281613463565b8114613c4d57600080fd5b50565b613c5981613487565b8114613c6457600080fd5b50565b613c7081613493565b8114613c7b57600080fd5b50565b613c87816134df565b8114613c9257600080fd5b5056fea26469706673582212201db948d00beb41d7373fd216a112124b9ce3c1d82bd3f0a467db844067afdcfe64736f6c63430008010033

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

00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000017245354434c20574c5420534b4e53204d696e74706173730000000000000000000000000000000000000000000000000000000000000000000000000000000007574c54534b4e5300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f6e51333366704d35583745723955716c71674e4c663057783055456d456c4c654d78546f36516d33304e3800000000000000000000000000000000000000000000000000000000000000002600000000000000000000000069c38c760634c23f3a3d9be441eccbd2e50e5f7300000000000000000000000017a77d63765963d0cb9dec12fa8f62e68fee8fd40000000000000000000000002c42e8f3dba3c17e765702fbc6918defeb76cd5f000000000000000000000000d83fcd0ce05895acae34519bec5dae8686608e0a000000000000000000000000c968416370639a9b74b077a4a8f97076e4ae1d9e000000000000000000000000c1ed40524e7b3dd9b3432008e77aa7e7b36403840000000000000000000000005e080d8b14c1da5936509c2c9ef0168a19304202000000000000000000000000cfd95a14677b05580ce9efc8ed66e0a897ca1703000000000000000000000000b1ce2c57a6f8816113fd172a75fc3b98033202280000000000000000000000009814fc9368ba5242d558642e0dac716a75757b99000000000000000000000000dbb304335f760df21294ec361c1ccc76b1d873820000000000000000000000006b3bacba7a6da1d6660079f5fd49fdc167ec5783000000000000000000000000e0f5afbfa874cef79e67deb4f9bdbf96f36c9083000000000000000000000000b72dc1e80a501256ed235a32a815b78fddfbf811000000000000000000000000aa621b960f22911462550c078df678493c22b2ae000000000000000000000000f2caa3b954c1099612a228e7087ce14e107bf4da00000000000000000000000008109a9be5dd5387e9b3982c73da41cb1df1ce4a0000000000000000000000004c39bab642b3ad7c4d93ea7074b7d9bba8ad04ac000000000000000000000000a3e51498579db0f7bb1ec9e3093b2f44158e25a5000000000000000000000000eaabb075675a06be1445ef1d59c3a7f58833f48d00000000000000000000000025dda97333a39e4933f556739170d0452078d785000000000000000000000000a8771fd60920f165fb4e4cfca2cb1ab055f9ed530000000000000000000000008a2b44457fb62c84da10ecf10ce7e5ce17ecf08e000000000000000000000000ef8a28b8a39fb292afc471e21106eeef1985ce4c0000000000000000000000003782b8fd1200b7f63fcfe6f5d8bc4a8f7c70b35b000000000000000000000000b16478a432a0377f49e6b6b0e0fe322b07b3397200000000000000000000000015d1cc60a08feb583ad5ac32bb6fde270925540d000000000000000000000000a2e9ec27b948d85b11f7935728cb68e11d73d8fd000000000000000000000000ed98c163390dcc7bd868cb465e30fde2e13a7abd000000000000000000000000a19d4ef03a71c9cbe3170e008bda46cbfa40942c00000000000000000000000047315368b6acb04d2275a3249be34b876b8e9cc30000000000000000000000006ed75e90dc27a1241335bbcac03f052a4bf590c000000000000000000000000076366ce4a4a3d80f1c135fcfa16546279777f6a60000000000000000000000006eebd90cd8d4a346ec09a93678fca8a468285d7d0000000000000000000000000aaabefcf998b23157096a96c2e2896961188997000000000000000000000000b88f65bd2493ba8e4fc15d9d0c3905d16874e9bc000000000000000000000000b8c97b9e919212f31933ad0c6094007eb7f7f8db000000000000000000000000ecae2bf6c1197dd17fac8c84227be6bf39e5a356000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000213400000000000000000000000000000000000000000000000000000000000000030000000000000000000000000aaabefcf998b23157096a96c2e28969611889970000000000000000000000006eebd90cd8d4a346ec09a93678fca8a468285d7d000000000000000000000000ecae2bf6c1197dd17fac8c84227be6bf39e5a356

-----Decoded View---------------
Arg [0] : _name (string): $STCL WLT SKNS Mintpass
Arg [1] : _symbol (string): WLTSKNS
Arg [2] : _uri (string): https://arweave.net/nQ33fpM5X7Er9UqlqgNLf0Wx0UEmElLeMxTo6Qm30N8
Arg [3] : _whitelist (address[]): 0x69C38C760634C23F3a3D9bE441ecCbD2e50e5F73,0x17A77D63765963d0Cb9deC12Fa8F62E68Fee8fD4,0x2C42E8F3dBA3C17E765702FbC6918DeFeb76cd5f,0xD83FcD0Ce05895Acae34519bEc5DaE8686608E0A,0xc968416370639A9B74B077A4a8f97076e4Ae1D9E,0xC1eD40524E7b3dd9B3432008E77Aa7e7b3640384,0x5e080D8b14c1DA5936509c2c9EF0168A19304202,0xcfd95A14677B05580Ce9EFc8ED66E0A897ca1703,0xB1Ce2c57A6f8816113fd172A75fC3B9803320228,0x9814fc9368BA5242d558642E0daC716a75757b99,0xDbb304335F760Df21294ec361c1cCc76B1D87382,0x6B3bAcBA7a6dA1D6660079F5fd49FDC167Ec5783,0xE0f5AFBFa874cEF79E67deb4F9BDbf96F36c9083,0xB72dc1e80A501256ED235a32A815b78FDDFBf811,0xaA621B960F22911462550c078df678493c22b2ae,0xF2Caa3b954C1099612a228e7087CE14E107bF4DA,0x08109a9be5Dd5387E9B3982C73dA41Cb1df1ce4a,0x4c39BaB642B3Ad7C4d93eA7074B7D9bbA8aD04AC,0xA3e51498579Db0f7bb1ec9E3093B2F44158E25a5,0xEAaBb075675a06Be1445ef1d59C3a7f58833F48D,0x25dda97333a39E4933F556739170d0452078d785,0xa8771fD60920f165Fb4E4CFCA2Cb1ab055f9ED53,0x8a2B44457FB62C84DA10eCF10Ce7e5cE17ECf08E,0xEF8a28B8A39FB292Afc471E21106eeef1985CE4c,0x3782b8fd1200b7F63FcFe6F5d8bC4a8F7c70b35b,0xB16478a432A0377F49e6B6B0E0FE322b07b33972,0x15D1cC60a08FEb583Ad5ac32bB6fde270925540d,0xa2e9eC27b948d85B11f7935728cB68E11D73D8Fd,0xed98c163390DCC7BD868cB465e30Fde2E13A7Abd,0xA19D4Ef03a71c9cbE3170E008BdA46cBfa40942c,0x47315368B6acb04D2275a3249BE34B876b8e9cc3,0x6ed75E90DC27a1241335bBcAC03f052A4Bf590c0,0x76366CE4a4a3D80F1C135FCfA16546279777f6A6,0x6EEBd90CD8d4a346EC09a93678fcA8a468285d7d,0x0AAabeFCf998b23157096A96c2e2896961188997,0xB88f65Bd2493BA8e4fc15d9D0C3905d16874e9Bc,0xB8c97b9E919212F31933aD0c6094007EB7f7f8dB,0xECae2bF6c1197dd17fAC8C84227be6BF39E5a356
Arg [4] : _shares (uint256[]): 500,1000,8500
Arg [5] : _shareholder_addresses (address[]): 0x0AAabeFCf998b23157096A96c2e2896961188997,0x6EEBd90CD8d4a346EC09a93678fcA8a468285d7d,0xECae2bF6c1197dd17fAC8C84227be6BF39E5a356

-----Encoded View---------------
60 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000680
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000700
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [7] : 245354434c20574c5420534b4e53204d696e7470617373000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [9] : 574c54534b4e5300000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [11] : 68747470733a2f2f617277656176652e6e65742f6e51333366704d3558374572
Arg [12] : 3955716c71674e4c663057783055456d456c4c654d78546f36516d33304e3800
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [14] : 00000000000000000000000069c38c760634c23f3a3d9be441eccbd2e50e5f73
Arg [15] : 00000000000000000000000017a77d63765963d0cb9dec12fa8f62e68fee8fd4
Arg [16] : 0000000000000000000000002c42e8f3dba3c17e765702fbc6918defeb76cd5f
Arg [17] : 000000000000000000000000d83fcd0ce05895acae34519bec5dae8686608e0a
Arg [18] : 000000000000000000000000c968416370639a9b74b077a4a8f97076e4ae1d9e
Arg [19] : 000000000000000000000000c1ed40524e7b3dd9b3432008e77aa7e7b3640384
Arg [20] : 0000000000000000000000005e080d8b14c1da5936509c2c9ef0168a19304202
Arg [21] : 000000000000000000000000cfd95a14677b05580ce9efc8ed66e0a897ca1703
Arg [22] : 000000000000000000000000b1ce2c57a6f8816113fd172a75fc3b9803320228
Arg [23] : 0000000000000000000000009814fc9368ba5242d558642e0dac716a75757b99
Arg [24] : 000000000000000000000000dbb304335f760df21294ec361c1ccc76b1d87382
Arg [25] : 0000000000000000000000006b3bacba7a6da1d6660079f5fd49fdc167ec5783
Arg [26] : 000000000000000000000000e0f5afbfa874cef79e67deb4f9bdbf96f36c9083
Arg [27] : 000000000000000000000000b72dc1e80a501256ed235a32a815b78fddfbf811
Arg [28] : 000000000000000000000000aa621b960f22911462550c078df678493c22b2ae
Arg [29] : 000000000000000000000000f2caa3b954c1099612a228e7087ce14e107bf4da
Arg [30] : 00000000000000000000000008109a9be5dd5387e9b3982c73da41cb1df1ce4a
Arg [31] : 0000000000000000000000004c39bab642b3ad7c4d93ea7074b7d9bba8ad04ac
Arg [32] : 000000000000000000000000a3e51498579db0f7bb1ec9e3093b2f44158e25a5
Arg [33] : 000000000000000000000000eaabb075675a06be1445ef1d59c3a7f58833f48d
Arg [34] : 00000000000000000000000025dda97333a39e4933f556739170d0452078d785
Arg [35] : 000000000000000000000000a8771fd60920f165fb4e4cfca2cb1ab055f9ed53
Arg [36] : 0000000000000000000000008a2b44457fb62c84da10ecf10ce7e5ce17ecf08e
Arg [37] : 000000000000000000000000ef8a28b8a39fb292afc471e21106eeef1985ce4c
Arg [38] : 0000000000000000000000003782b8fd1200b7f63fcfe6f5d8bc4a8f7c70b35b
Arg [39] : 000000000000000000000000b16478a432a0377f49e6b6b0e0fe322b07b33972
Arg [40] : 00000000000000000000000015d1cc60a08feb583ad5ac32bb6fde270925540d
Arg [41] : 000000000000000000000000a2e9ec27b948d85b11f7935728cb68e11d73d8fd
Arg [42] : 000000000000000000000000ed98c163390dcc7bd868cb465e30fde2e13a7abd
Arg [43] : 000000000000000000000000a19d4ef03a71c9cbe3170e008bda46cbfa40942c
Arg [44] : 00000000000000000000000047315368b6acb04d2275a3249be34b876b8e9cc3
Arg [45] : 0000000000000000000000006ed75e90dc27a1241335bbcac03f052a4bf590c0
Arg [46] : 00000000000000000000000076366ce4a4a3d80f1c135fcfa16546279777f6a6
Arg [47] : 0000000000000000000000006eebd90cd8d4a346ec09a93678fca8a468285d7d
Arg [48] : 0000000000000000000000000aaabefcf998b23157096a96c2e2896961188997
Arg [49] : 000000000000000000000000b88f65bd2493ba8e4fc15d9d0c3905d16874e9bc
Arg [50] : 000000000000000000000000b8c97b9e919212f31933ad0c6094007eb7f7f8db
Arg [51] : 000000000000000000000000ecae2bf6c1197dd17fac8c84227be6bf39e5a356
Arg [52] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [53] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [54] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [55] : 0000000000000000000000000000000000000000000000000000000000002134
Arg [56] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [57] : 0000000000000000000000000aaabefcf998b23157096a96c2e2896961188997
Arg [58] : 0000000000000000000000006eebd90cd8d4a346ec09a93678fca8a468285d7d
Arg [59] : 000000000000000000000000ecae2bf6c1197dd17fac8c84227be6bf39e5a356


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.