Token Web3 INSID3RS Pass

Overview ERC-1155

Total Supply:
0 INSD3R

Holders:
29 addresses

Transfers:
-

Profile Summary

 
Contract:
0x045d7827f087a82e78e8811584934683d0d472800x045D7827f087A82e78E8811584934683D0d47280

Loading
[ Download CSV Export  ] 
Loading
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
InsidersPass

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 13 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 13 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol)

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: address zero is not a valid owner");
        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 {
        _setApprovalForAll(_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 token owner or 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: caller is not token owner or 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

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

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

        _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 `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _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);

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        address operator = _msgSender();

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

        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: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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 `ids` and `amounts` 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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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;
    }
}

File 4 of 13 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

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 5 of 13 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

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 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 6 of 13 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

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.
     *
     * NOTE: 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.
     *
     * NOTE: 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 7 of 13 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

File 8 of 13 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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 9 of 13 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

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 10 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

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 11 of 13 : InsidersPass.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
pragma experimental ABIEncoderV2;
import "./InsidersPassAuctions.sol";
contract InsidersPass is InsidersPassAuction  {
    uint16 eventsCount;
    uint16 ticketsCount;

    event EventRegistered(Event);
    event TicketCreated(TicketType, uint256);



    // //Total Copies minted wrt a ticket
    mapping(uint256 => uint256) totalCopiesMinted;

    mapping(uint256 => string) tokenURI;

    event URI(string value, bytes indexed id);

    //To check all tickets of an event
    // mapping(uint => uint[]) eventticketTypeDetails;

    function setURI(uint256 _id, string memory _uri) private {
        tokenURI[_id] = _uri;
        emit URI(_uri, _id);
    }

    constructor() ERC1155("") {
        pause();
        eventsCount = 0;
        ticketsCount = 0;
        packagesCount = 0;
    }

    //Only Admin can register events
    // tickets will be created on time of event registration
    function registerEvent(
        uint32 _eventStartDate,
        uint32 _eventEndDate,
        TicketType[] memory _TicketTypes,
        // uint32[] memory _auctionStartTimes,
        // uint32[] memory _auctionEndTimes,
        uint8 _royaltyPercentage,
        uint8 _servicePercentage
    ) external whenNotPaused onlyOwner {
        eventsCount++;
        uint64 newEventID = eventsCount;
      
        eventDetails[newEventID].eventStartDate = _eventStartDate;
        eventDetails[newEventID].eventEndDate = _eventEndDate + 24 hours;
        eventExists[newEventID] = true;
        eventIsPaused[newEventID] = false;
        eventDetails[newEventID].royaltyPercentage = _royaltyPercentage;
        eventDetails[newEventID].servicePercentage = _servicePercentage;
        addTicketType(
            newEventID,
            _TicketTypes
        );

        emit EventRegistered(eventDetails[eventsCount]);
    }

    //Only Admin can Update events
    function updateEvent(
        uint16 _eventID,
        uint32 _eventStartDate,
        uint32 _eventEndDate,
        uint8 _royaltyPercentage,
        uint8 _servicePercentage
    ) external whenNotPaused onlyOwner eventIsRegistered(_eventID) {
        eventDetails[_eventID].eventStartDate = _eventStartDate;
        eventDetails[_eventID].eventEndDate = _eventEndDate;
        eventDetails[_eventID].royaltyPercentage = _royaltyPercentage;
        eventDetails[_eventID].servicePercentage = _servicePercentage;
    }
    
    function scanTickets(uint256 ticketID)
        public
        view
        TicketExists(ticketID)
        returns (bool)
    {
        require(
            balanceOf(_msgSender(), ticketID) > 0,
            "You dont have this ticket"
        );
        bool response;
        for (
            uint8 i = 0;
            i < ticketTypeDetails[ticketID].validDates.length;
            i++
        ) {
            if (
                block.timestamp >= ticketTypeDetails[ticketID].validDates[i] &&
                block.timestamp <=
                (ticketTypeDetails[ticketID].validDates[i] + 86399)
            ) response = true;
            else response = false;
        }
          return response;
      
       
    }

    //Add new ticket type for an event
    function addTicketType(uint64 eventID, TicketType[] memory _ticketTypes)
        public
        whenNotPaused
        onlyOwner
        eventIsRegistered(eventID)
    {
        for (uint8 i = 0; i < _ticketTypes.length; i++) {
            ticketsCount++;
            for (uint256 j = 0; j < _ticketTypes[i].validDates.length; j++) {
                require(
                    (eventDetails[eventID].eventStartDate <=
                        _ticketTypes[i].validDates[j]) &&
                        (eventDetails[eventID].eventEndDate >=
                            _ticketTypes[i].validDates[j]),
                    "Validity dates must be within Event Dates"
                );
            }
            ticketTypeDetails[ticketsCount] = _ticketTypes[i];
            //Updating Event ID to total events count
            ticketTypeDetails[ticketsCount].eventIDforTicket = eventID;
            placeTicketForFixedPrice(
                ticketsCount,
                _ticketTypes[i].ticketFixPrice
            );
            
            setURI(ticketsCount, _ticketTypes[i].ticketURI);
            ticketExists[ticketsCount] = true;
            emit TicketCreated(ticketTypeDetails[ticketsCount], ticketsCount);
        }
    }

    //To update ticket type details of an event
    function updateTicket(
        uint64 _eventID,
        uint256 _ticketID,
        TicketType memory _ticket
    )
        external
        whenNotPaused
        onlyOwner
        TicketExists(_ticketID)
        eventIsRegistered(_eventID)
    {
        require(
            _ticket.totalCopies > ticketTypeDetails[_ticketID].copiesSold,
            "These no of copies have already been sold"
        );
        require(_ticket.eventIDforTicket == ticketTypeDetails[_ticketID].eventIDforTicket, "Invalid Event ID!");
        ticketTypeDetails[_ticketID] = _ticket;
        setURI(_ticketID,_ticket.ticketURI );
        emit TicketCreated(ticketTypeDetails[_ticketID], _ticketID);
    }

    function mintTicketsWithFixPrice(
        address account,
        uint256 ticketID,
        uint32 noOfCopies
    )
        public
        payable
        eventIsNotPaused(ticketTypeDetails[ticketID].eventIDforTicket)
    {
        require(eventDetails[ticketTypeDetails[ticketID].eventIDforTicket].eventEndDate > block.timestamp, "This event has passed... Cannot purchase Tickets");
        require((ticketTypeDetails[ticketID].copiesSold + noOfCopies) <= ticketTypeDetails[ticketID].totalCopies, "Not enough Copies available");
        //Admin will mint Tickets freely in case of fiat payments
        if(_msgSender() != owner())
            require(msg.value == (ticketTypeDetails[ticketID].ticketFixPrice)*noOfCopies, "Not enough amount provided");
        
        user_Balance[owner()] += msg.value;
        mint(account, ticketID, noOfCopies, "");
        totalCopiesMinted[ticketID]+=noOfCopies;
        Ticket[account][ticketID].Exists = true;
        setApprovalForAll(address(this),true);
        
    }

    function forceMintTickets(address[] memory addresses, uint[] memory ticketIDs, uint[] memory noOfCopies) external onlyOwner{
        for(uint i=0; i<addresses.length;i++){
             mint(addresses[i], ticketIDs[i], noOfCopies[i], "");
        }
    }

    //Only admin can place tickets for fix price while creating tickets
    function placeTicketForFixedPrice(
        uint256 ticketID,
        uint256 _ticketFixPrice
    ) internal onlyOwner {
        CurrentStatus = saleTypeChoice(2);
        ticketTypeDetails[ticketID].ticketSaleType = CurrentStatus;
        ticketTypeDetails[ticketID].ticketFixPrice = _ticketFixPrice;
    }

    function withdrawAmount(uint256 amount) external payable {
        require(
            user_Balance[_msgSender()] >= amount,
            "Your Balance must be Greater Than or Equal to withdraw Amount"
        );
        user_Balance[_msgSender()] -= amount;
        payable(_msgSender()).transfer(amount);
    }
         function name() public pure returns (string memory) {
        return "Web3 INSID3RS Pass";
    }

    function symbol() public pure returns (string memory) {
        return "INSD3R";
    }

    function setBaseURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal whenNotPaused {
        _mint(account, id, amount, data);
    }

    function mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public whenNotPaused {
        _mintBatch(to, ids, amounts, data);
    }

    function uri(uint256 _id) public view override returns (string memory) {
        return tokenURI[_id];
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal override whenNotPaused {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

File 12 of 13 : InsidersPassAuctions.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
import "./InsidersPass.sol";
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./InsidersPassRoyalties.sol";

abstract contract InsidersPassAuction is
    Ownable,
    ERC1155,
    Pausable,
    InsidersPassRoyalties //is SpaceERC20
{
    event availableForAuction(uint256, string);
    event removeFormSale(uint256, string);
    event packageCreated(uint256 packageID, ticketPackage);
    event bidAccepted(uint bidAmount, address receiver);
    enum saleTypeChoice {
        onAuction,
        onRent,
        OnfixedPrice,
        NotOnSale
    }
    saleTypeChoice public CurrentStatus;
    uint16 public packagesCount;
    //User Balances in Contract
   
    struct TicketDetails {
        uint256[] numOfCopies;
        bool Exists;
        uint256 eventIDforTicket;
        // saleTypeChoice salestatus;
    }

    constructor() {
        contractOwner = msg.sender;
    }

    struct TicketType {
        uint64 eventIDforTicket;
        uint256 ticketFixPrice;
        uint32[] validDates;
        uint256 totalCopies;
        string ticketURI;
        uint32 copiesSold;
        saleTypeChoice ticketSaleType;
    }

    struct Event {
        uint32 eventStartDate;
        uint32 eventEndDate;
        uint8 royaltyPercentage;
        uint8 servicePercentage;
    }

    struct ticketPackage {
        uint256[] ticketIDs;
        uint256[] bidAmount;
        uint256[] numOfCopies;
        address packageOwner;
        address[] bidderAddress;
        uint32 auctionStartTime;
        uint32 auctionEndTime;
        bool Exists;
        // Using minimumPrice == minimumBid
        uint256 minimumPrice;
        uint8 bidIncrementPercentage;
        uint256 index;
        saleTypeChoice salestatus;
    }


    // PackageId to PackageDetails (Struct)
    mapping(uint256 => ticketPackage) ticketsPackage;

    // TicketOwnerAddress to ticketID to TicketDetails (Struct)
    mapping(address => mapping(uint256 => TicketDetails)) Ticket;

    //TicketIDs to their no of copies on bid w.r.t each address
    mapping(address => mapping(uint256 => uint256)) public CopiesOnBidOrSale;

    //to check if event exists or not
    mapping(uint256 => bool) eventExists;

    //to check if a ticket exists
    mapping(uint256 => TicketType) ticketTypeDetails;

    //to check if a ticket already exists or not
    mapping(uint256 => bool) ticketExists;

    //to check event details from ID
    mapping(uint256 => Event) eventDetails;

    //event is paused or not
    mapping(uint64 => bool) public eventIsPaused;

    //mapping to store bids amount of each address
    mapping(address => uint256) BidsAmount;
    modifier NftExist(address _owner, uint256 ticketID) {
        require(
            Ticket[_owner][ticketID].Exists == true,
            "Not Owner of Ticket or NFT Does't Exist "
        );
        _;
    }
    modifier eventIsNotPaused(uint64 _eventID) {
        require(eventIsPaused[_eventID] == false, "Event is Paused");
        _;
    }

    //To check if even already exists or not
    modifier eventIsRegistered(uint64 _eventID) {
        require(eventExists[_eventID] == true, "Event Does not exist");
        _;
    }

    //To check if even already exists or not
    modifier TicketExists(uint256 ticketID) {
        require(ticketExists[ticketID] == true, "Ticket Does not exist");
        _;
    }
    modifier PackageExists(uint256 packageID) {
        require(
            ticketsPackage[packageID].Exists == true,
            "Not Owner of Package or Package Does't Exist "
        );
        _;
    }

    modifier onFixedPrice(address owner, uint256 packageID) {
        require(
            ticketsPackage[packageID].salestatus == saleTypeChoice.OnfixedPrice,
            "Ticket is Not Available for Fixed Price"
        );
        _;
    }
    modifier onAuction(uint256 packageID) {
        require(
            ticketsPackage[packageID].salestatus == saleTypeChoice.onAuction,
            "Ticket is Not Available for Auctions"
        );
        _;
    }

    function changeEventState(uint16 _eventID, bool state) external onlyOwner {
        eventIsPaused[_eventID] = state;
    }


    function _placePackageForFixedPrice(
        uint256 packageID,
        uint16[] memory _ticketIDs,
        uint32[] memory ticketCopiesCount,
        uint256 packageFixPrice
    ) internal {
        CurrentStatus = saleTypeChoice(2);
        ticketsPackage[packageID].ticketIDs = _ticketIDs;
        ticketsPackage[packageID].salestatus = CurrentStatus;
        ticketsPackage[packageID].numOfCopies = ticketCopiesCount;
        ticketsPackage[packageID].minimumPrice = packageFixPrice;
        ticketsPackage[packageID].packageOwner = _msgSender();
        ticketsPackage[packageID].Exists = true;
        emit packageCreated(packageID, ticketsPackage[packageID]);
    }

    function deletePackage(uint256 packageID) external PackageExists(packageID) {
        require(
            ticketsPackage[packageID].packageOwner == _msgSender(),
            "Cannot delete Package as you are not owner of this Ticket"
        );
            for (uint16 k = 0; k < ticketsPackage[packageID].ticketIDs.length;k++) {
                                CopiesOnBidOrSale[ ticketsPackage[packageID].packageOwner][ticketsPackage[packageID].ticketIDs[k]] -= ticketsPackage[packageID].numOfCopies[k]; 
                            }
                ticketsPackage[packageID].Exists = false;

                        
    }

    function buyPackageForFixedPrice(
        address to,
        uint256 packageID,
        uint256 _eventID
    ) external payable PackageExists(packageID) {
        require(eventDetails[_eventID].eventEndDate > block.timestamp, "This event has passed... Cannot purchase Package");
        require(msg.value == ticketsPackage[packageID].minimumPrice,"Not Enough amount Provided");
        CurrentStatus = saleTypeChoice(3);
        uint256 percentage = 0;
        for (uint256 i = 0;i < ticketsPackage[packageID].ticketIDs.length;i++) {
            require((balanceOf(ticketsPackage[packageID].packageOwner,ticketsPackage[packageID].ticketIDs[i])) >=
                    CopiesOnBidOrSale[ticketsPackage[packageID].packageOwner][ticketsPackage[packageID].ticketIDs[i]] &&
                    (_eventID ==ticketTypeDetails[ticketsPackage[packageID].ticketIDs[i]].eventIDforTicket),"Error: Package has been modified");
            CopiesOnBidOrSale[ticketsPackage[packageID].packageOwner][ticketsPackage[packageID].ticketIDs[i]] -= ticketsPackage[packageID].numOfCopies[i];
            ticketsPackage[packageID].Exists = false;
            Ticket[to][ticketsPackage[packageID].ticketIDs[i]].Exists = true;
            //Have some sense calculating percentage
            //For God's Sake
            percentage += eventDetails[_eventID].royaltyPercentage +  eventDetails[_eventID].servicePercentage;
            // Ticket[to][ticketsPackage[packageID].ticketIDs[i]]
            //     .salestatus = CurrentStatus;
            this.safeTransferFrom(
                ticketsPackage[packageID].packageOwner,
                to,
                ticketsPackage[packageID].ticketIDs[i],
                ticketsPackage[packageID].numOfCopies[i],
                ""
            );
        }
       _royaltyAndInsidersPassFee(
            ticketsPackage[packageID].minimumPrice,
           eventDetails[_eventID].royaltyPercentage,
            payable(contractOwner),
            payable(ticketsPackage[packageID].packageOwner),
            eventDetails[_eventID].servicePercentage
        );
        setApprovalForAll(address(this), true);

    }

    // Secondary Sales for Auction & Fix Price
    function placePackageForTimedAuction(
        uint256 _eventID,
        uint16[] memory _ticketIDs,
        uint32[] memory ticketCopiesCount,
        uint32 _auctionStartTime,
        uint32 _auctionEndTime,
        uint256 packageMinPrice,
        uint8 _incrementPercentage
    ) external {
        require(eventDetails[_eventID].eventEndDate > block.timestamp && eventDetails[_eventID].eventEndDate > _auctionEndTime, "Event Passed or Auction time Error");
        for (uint16 i = 0; i < _ticketIDs.length; i++) {
            // require(Ticket[owner][_ticketIDs[i]].Exists && (balanceOf(msg.sender, _ticketIDs[i]) - CopiesOnBidOrSale[msg.sender][_ticketIDs[i]]) <= ticketCopiesCount[i] &&   _eventID ==  ticketTypeDetails[_ticketIDs[i]].eventIDforTicket, "Error: Cannot Place package for Fixed Price");
             
          require(
                (super.balanceOf(msg.sender, _ticketIDs[i]) -
                    CopiesOnBidOrSale[msg.sender][_ticketIDs[i]])  >=
                    ticketCopiesCount[i] && (_eventID == ticketTypeDetails[_ticketIDs[i]].eventIDforTicket),
                "Copies not Available"
            );
            
            CopiesOnBidOrSale[_msgSender()][_ticketIDs[i]] += ticketCopiesCount[
                i
            ];
        }
        packagesCount++;
        uint16 newPackageID = packagesCount;

        _placePackageForTimedAuction(
            newPackageID,
            _ticketIDs,
            ticketCopiesCount,
            _auctionStartTime,
            _auctionEndTime,
            packageMinPrice,
            _incrementPercentage
        );
    }


    function placePackageForFixedPrice(
        uint256 _eventID,
        uint16[] memory _ticketIDs,
        uint32[] memory ticketCopiesCount,
        uint256 packageFixPrice
    ) external {
        require(eventDetails[_eventID].eventEndDate > block.timestamp, "Event Passed");
        for (uint16 i = 0; i < _ticketIDs.length; i++) {
            // require(Ticket[owner][_ticketIDs[i]].Exists && (balanceOf(msg.sender, _ticketIDs[i]) - CopiesOnBidOrSale[msg.sender][_ticketIDs[i]]) <= ticketCopiesCount[i] &&   _eventID ==  ticketTypeDetails[_ticketIDs[i]].eventIDforTicket, "Error: Cannot Place package for Fixed Price");            
            require(
                (super.balanceOf(msg.sender, _ticketIDs[i]) -
                    CopiesOnBidOrSale[msg.sender][_ticketIDs[i]]) >=
                    ticketCopiesCount[i] && (_eventID == ticketTypeDetails[_ticketIDs[i]].eventIDforTicket),
                "Copies not Available"
            );

            CopiesOnBidOrSale[_msgSender()][_ticketIDs[i]] += ticketCopiesCount[i];
        }
        packagesCount++;
        uint256 newPackageID = packagesCount;
        _placePackageForFixedPrice(
            newPackageID,
            _ticketIDs,
            ticketCopiesCount,
            packageFixPrice
        );
    }

    function _placePackageForTimedAuction(
        uint256 packageID,
        uint16[] memory _ticketIDs,
        uint32[] memory ticketCopiesCount,
        uint32 _auctionStartTime,
        uint32 _auctionEndTime,
        uint256 packageMinPrice,
        uint8 _incrementPercentage
    ) internal {
        // start time should be near to Block.timestamp

        require(
            _auctionStartTime != _auctionEndTime &&
                block.timestamp < _auctionEndTime,
            "Error! Time Error"
        );
        CurrentStatus = saleTypeChoice(0);
        ticketsPackage[packageID].ticketIDs = _ticketIDs;
        ticketsPackage[packageID].salestatus = CurrentStatus;
        ticketsPackage[packageID].auctionStartTime = _auctionStartTime;
        ticketsPackage[packageID].numOfCopies = ticketCopiesCount;
        ticketsPackage[packageID].auctionEndTime = _auctionEndTime;
        ticketsPackage[packageID].minimumPrice = packageMinPrice;
        ticketsPackage[packageID].bidIncrementPercentage = _incrementPercentage;
        ticketsPackage[packageID].packageOwner = _msgSender();
        ticketsPackage[packageID].Exists = true;
        emit packageCreated(packageID, ticketsPackage[packageID]);
        emit availableForAuction(packageID, " Accepting Bids");
    }

     

    
    function AcceptYourHighestBid(uint256 packageID, uint256 _eventID)
        external  PackageExists(packageID) returns (bool accepted)
    {
         
        address owner = _msgSender();
        require(
            ticketsPackage[packageID].packageOwner == _msgSender(),
            "Cannot accept Bid as you are not owner of this Ticket"
        );
         uint highestBidAmount =  ticketsPackage[packageID].bidAmount[ticketsPackage[packageID].bidAmount.length - 1];
        CurrentStatus = saleTypeChoice(3);
        bool result = true;
        for (uint16 i = 0; i < ticketsPackage[packageID].ticketIDs.length;i++) 
            {

                if((balanceOf(ticketsPackage[packageID].packageOwner,ticketsPackage[packageID].ticketIDs[i])) <
                        CopiesOnBidOrSale[ticketsPackage[packageID].packageOwner][ticketsPackage[packageID].ticketIDs[i]] &&
                        (_eventID ==ticketTypeDetails[ticketsPackage[packageID].ticketIDs[i]].eventIDforTicket))
                        {
                             result = false;                           
                        }
            }
            if(result == false) 
            {
                for (uint16 j = 0;j < ticketsPackage[packageID].bidderAddress.length;j++) {
                    payable(ticketsPackage[packageID].bidderAddress[j]).transfer(ticketsPackage[packageID].bidAmount[j]);
                }
                for (uint16 k = 0; k < ticketsPackage[packageID].ticketIDs.length;k++) {
                    CopiesOnBidOrSale[owner][ticketsPackage[packageID].ticketIDs[k]] -= ticketsPackage[packageID].numOfCopies[k]; 
                }
                ticketsPackage[packageID].Exists = false;
                return result;

            }
        else{
            for (uint16 m = 0; m < ticketsPackage[packageID].ticketIDs.length;m++) {
            CopiesOnBidOrSale[owner][
                    ticketsPackage[packageID].ticketIDs[m]
                ] -= ticketsPackage[packageID].numOfCopies[m];
                Ticket[
                    ticketsPackage[packageID].bidderAddress[
                        ticketsPackage[packageID].bidderAddress.length - 1
                    ]][ticketsPackage[packageID].ticketIDs[m]].Exists = true;
            
                this.safeTransferFrom(
                    owner,
                    ticketsPackage[packageID].bidderAddress[
                        ticketsPackage[packageID].bidderAddress.length - 1
                    ],
                    ticketsPackage[packageID].ticketIDs[m],
                    ticketsPackage[packageID].numOfCopies[m],
                    ""
                );
            }
            ticketsPackage[packageID].Exists = false;
            for (
                uint16 l = 0;l < ticketsPackage[packageID].bidderAddress.length-1;l++) {
                    payable(ticketsPackage[packageID].bidderAddress[l]).transfer(ticketsPackage[packageID].bidAmount[l]);
                    }
            emit bidAccepted(highestBidAmount, ticketsPackage[packageID].bidderAddress[ticketsPackage[packageID].bidderAddress.length - 1]);

            delete ticketsPackage[packageID].bidAmount;
            delete ticketsPackage[packageID].bidderAddress;

            _royaltyAndInsidersPassFee(
            highestBidAmount,
                eventDetails[_eventID].royaltyPercentage,
                payable(contractOwner),
                payable(ticketsPackage[packageID].packageOwner),
                eventDetails[_eventID].servicePercentage
            );
                    
            setApprovalForAll(address(this), true);
            return result;

            }
        
        
    }

   

     error InsufficientBalance(uint256 available, uint256 required);

    function addAuctionBid(
        uint256 packageID,
        uint256 _bidAmount
    ) external payable  PackageExists(packageID)  onAuction( packageID) {
        
        require(eventDetails[ticketTypeDetails[ticketsPackage[packageID].ticketIDs[0]].eventIDforTicket].eventEndDate > block.timestamp, "Event Passed");
         require(
            block.timestamp <= ticketsPackage[packageID].auctionEndTime,
            "Auction Time Over"
        );
        require(msg.value == _bidAmount, "Insufficient Amount");
        if(ticketsPackage[packageID].bidAmount.length == 0)
        {
            if(_bidAmount < ticketsPackage[packageID].minimumPrice)
                revert InsufficientBalance({
                    available: _bidAmount,
                    required: ticketsPackage[packageID].minimumPrice
                });

        }
            
       else  if (ticketsPackage[packageID].bidAmount.length != 0) {
            if (
                _bidAmount <
                (ticketsPackage[packageID].bidAmount[
                   (ticketsPackage[packageID].bidAmount.length) - 1
                ] +
                    (ticketsPackage[packageID].bidAmount[
                       (ticketsPackage[packageID].bidAmount.length) - 1
                    ] * (ticketsPackage[packageID].bidIncrementPercentage)) /
                    100)
            ) {
                revert InsufficientBalance({
                    available: user_Balance[msg.sender],
                    required: ticketsPackage[packageID].bidAmount[
                       (ticketsPackage[packageID].bidAmount.length) - 1
                    ] +
                        (ticketsPackage[packageID].bidAmount[
                            ticketsPackage[packageID].bidderAddress.length - 1
                        ] *
                            (
                                ticketsPackage[packageID].bidIncrementPercentage
                            )) /
                        100
                });
            }
        }
         ticketsPackage[packageID].bidAmount.push(_bidAmount);
        ticketsPackage[packageID].bidderAddress.push( msg.sender);
    }

}

File 13 of 13 : InsidersPassRoyalties.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

contract InsidersPassRoyalties {
    mapping(address => uint256) public user_Balance;
    event RoyaltiesTransfer(uint256, uint256, uint256);


    address public contractOwner;

    constructor() {
        contractOwner = msg.sender;
    }
 function _royaltyAndInsidersPassFee (uint _NftPrice, uint percentage, address payable minterAddress, address payable NftSeller, uint8 serviceFee) internal {
        uint _TotalNftPrice = _NftPrice;
        //NEW
        //uint _TotalNftPrice = msg.value; 
                                       // require(msg.value >= NftPrice[NftId], "Error! Insufficent Balance");
        uint _InsidersPassFee = _calculateGlobalPassFee(_NftPrice, serviceFee);
        uint _minterFee = _calculateAndSendMinterFee(_NftPrice , percentage,  minterAddress);
        _TotalNftPrice = _TotalNftPrice - (_InsidersPassFee + _minterFee);
        _transferAmountToSeller( _TotalNftPrice, NftSeller);            // Send Amount to NFT Seller after Tax deduction
        emit RoyaltiesTransfer(_InsidersPassFee, _minterFee, _TotalNftPrice);
    }



    function _calculateGlobalPassFee(uint Price, uint8 serviceFee) internal returns(uint) {
       uint InsidersPassFee = (Price*serviceFee)/100;
        user_Balance[contractOwner] +=  InsidersPassFee;
         return InsidersPassFee;
    }

    function _transferAmountToSeller(uint256 amount, address payable seller)
        internal
    {
        seller.transfer(amount);
    }

    function _calculateAndSendMinterFee(
        uint256 _NftPrice,
        uint256 Percentage,
        address payable minterAddr
    ) internal returns (uint256) {
        uint256 AmountToSend = (_NftPrice * Percentage) / 100; //Calculate Minter percentage and Send to his Address from Struct
         user_Balance[minterAddr] +=  AmountToSend;
        return AmountToSend;
    }
}

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"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":[{"components":[{"internalType":"uint32","name":"eventStartDate","type":"uint32"},{"internalType":"uint32","name":"eventEndDate","type":"uint32"},{"internalType":"uint8","name":"royaltyPercentage","type":"uint8"},{"internalType":"uint8","name":"servicePercentage","type":"uint8"}],"indexed":false,"internalType":"struct InsidersPassAuction.Event","name":"","type":"tuple"}],"name":"EventRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RoyaltiesTransfer","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint64","name":"eventIDforTicket","type":"uint64"},{"internalType":"uint256","name":"ticketFixPrice","type":"uint256"},{"internalType":"uint32[]","name":"validDates","type":"uint32[]"},{"internalType":"uint256","name":"totalCopies","type":"uint256"},{"internalType":"string","name":"ticketURI","type":"string"},{"internalType":"uint32","name":"copiesSold","type":"uint32"},{"internalType":"enum InsidersPassAuction.saleTypeChoice","name":"ticketSaleType","type":"uint8"}],"indexed":false,"internalType":"struct InsidersPassAuction.TicketType","name":"","type":"tuple"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TicketCreated","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":"bytes","name":"id","type":"bytes"}],"name":"URI","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"string","name":"","type":"string"}],"name":"availableForAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bidAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"bidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"packageID","type":"uint256"},{"components":[{"internalType":"uint256[]","name":"ticketIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"bidAmount","type":"uint256[]"},{"internalType":"uint256[]","name":"numOfCopies","type":"uint256[]"},{"internalType":"address","name":"packageOwner","type":"address"},{"internalType":"address[]","name":"bidderAddress","type":"address[]"},{"internalType":"uint32","name":"auctionStartTime","type":"uint32"},{"internalType":"uint32","name":"auctionEndTime","type":"uint32"},{"internalType":"bool","name":"Exists","type":"bool"},{"internalType":"uint256","name":"minimumPrice","type":"uint256"},{"internalType":"uint8","name":"bidIncrementPercentage","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"enum InsidersPassAuction.saleTypeChoice","name":"salestatus","type":"uint8"}],"indexed":false,"internalType":"struct InsidersPassAuction.ticketPackage","name":"","type":"tuple"}],"name":"packageCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"string","name":"","type":"string"}],"name":"removeFormSale","type":"event"},{"inputs":[{"internalType":"uint256","name":"packageID","type":"uint256"},{"internalType":"uint256","name":"_eventID","type":"uint256"}],"name":"AcceptYourHighestBid","outputs":[{"internalType":"bool","name":"accepted","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"CopiesOnBidOrSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CurrentStatus","outputs":[{"internalType":"enum InsidersPassAuction.saleTypeChoice","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"packageID","type":"uint256"},{"internalType":"uint256","name":"_bidAmount","type":"uint256"}],"name":"addAuctionBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint64","name":"eventID","type":"uint64"},{"components":[{"internalType":"uint64","name":"eventIDforTicket","type":"uint64"},{"internalType":"uint256","name":"ticketFixPrice","type":"uint256"},{"internalType":"uint32[]","name":"validDates","type":"uint32[]"},{"internalType":"uint256","name":"totalCopies","type":"uint256"},{"internalType":"string","name":"ticketURI","type":"string"},{"internalType":"uint32","name":"copiesSold","type":"uint32"},{"internalType":"enum InsidersPassAuction.saleTypeChoice","name":"ticketSaleType","type":"uint8"}],"internalType":"struct InsidersPassAuction.TicketType[]","name":"_ticketTypes","type":"tuple[]"}],"name":"addTicketType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"packageID","type":"uint256"},{"internalType":"uint256","name":"_eventID","type":"uint256"}],"name":"buyPackageForFixedPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_eventID","type":"uint16"},{"internalType":"bool","name":"state","type":"bool"}],"name":"changeEventState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"packageID","type":"uint256"}],"name":"deletePackage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"eventIsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"ticketIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"noOfCopies","type":"uint256[]"}],"name":"forceMintTickets","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"ticketID","type":"uint256"},{"internalType":"uint32","name":"noOfCopies","type":"uint32"}],"name":"mintTicketsWithFixPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"packagesCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eventID","type":"uint256"},{"internalType":"uint16[]","name":"_ticketIDs","type":"uint16[]"},{"internalType":"uint32[]","name":"ticketCopiesCount","type":"uint32[]"},{"internalType":"uint256","name":"packageFixPrice","type":"uint256"}],"name":"placePackageForFixedPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eventID","type":"uint256"},{"internalType":"uint16[]","name":"_ticketIDs","type":"uint16[]"},{"internalType":"uint32[]","name":"ticketCopiesCount","type":"uint32[]"},{"internalType":"uint32","name":"_auctionStartTime","type":"uint32"},{"internalType":"uint32","name":"_auctionEndTime","type":"uint32"},{"internalType":"uint256","name":"packageMinPrice","type":"uint256"},{"internalType":"uint8","name":"_incrementPercentage","type":"uint8"}],"name":"placePackageForTimedAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eventStartDate","type":"uint32"},{"internalType":"uint32","name":"_eventEndDate","type":"uint32"},{"components":[{"internalType":"uint64","name":"eventIDforTicket","type":"uint64"},{"internalType":"uint256","name":"ticketFixPrice","type":"uint256"},{"internalType":"uint32[]","name":"validDates","type":"uint32[]"},{"internalType":"uint256","name":"totalCopies","type":"uint256"},{"internalType":"string","name":"ticketURI","type":"string"},{"internalType":"uint32","name":"copiesSold","type":"uint32"},{"internalType":"enum InsidersPassAuction.saleTypeChoice","name":"ticketSaleType","type":"uint8"}],"internalType":"struct InsidersPassAuction.TicketType[]","name":"_TicketTypes","type":"tuple[]"},{"internalType":"uint8","name":"_royaltyPercentage","type":"uint8"},{"internalType":"uint8","name":"_servicePercentage","type":"uint8"}],"name":"registerEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ticketID","type":"uint256"}],"name":"scanTickets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_eventID","type":"uint16"},{"internalType":"uint32","name":"_eventStartDate","type":"uint32"},{"internalType":"uint32","name":"_eventEndDate","type":"uint32"},{"internalType":"uint8","name":"_royaltyPercentage","type":"uint8"},{"internalType":"uint8","name":"_servicePercentage","type":"uint8"}],"name":"updateEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_eventID","type":"uint64"},{"internalType":"uint256","name":"_ticketID","type":"uint256"},{"components":[{"internalType":"uint64","name":"eventIDforTicket","type":"uint64"},{"internalType":"uint256","name":"ticketFixPrice","type":"uint256"},{"internalType":"uint32[]","name":"validDates","type":"uint32[]"},{"internalType":"uint256","name":"totalCopies","type":"uint256"},{"internalType":"string","name":"ticketURI","type":"string"},{"internalType":"uint32","name":"copiesSold","type":"uint32"},{"internalType":"enum InsidersPassAuction.saleTypeChoice","name":"ticketSaleType","type":"uint8"}],"internalType":"struct InsidersPassAuction.TicketType","name":"_ticket","type":"tuple"}],"name":"updateTicket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"user_Balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"stateMutability":"payable","type":"function"}]

608034620001be576020908082016001600160401b03811182821017620001a857604090815260009182905281546001600160a01b031980821633908117855592516001600160a01b039591949193909286167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08385a3600354916001928381811c911680156200019d575b858210146200018957601f81116200015a575b508160035560ff19600454169185600654169633915416036200011a5750176004556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589190a16010805463ffffffff19169055339081169091171761ffff60a81b19166006556040516156ef9081620001c48239f35b6064908462461bcd60e51b825280600483015260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6003835283601f868520920160051c8201915b8281106200017d5750506200009e565b8481550184906200016d565b634e487b7160e01b83526022600452602483fd5b90607f16906200008b565b634e487b7160e01b600052604160045260246000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8062fdd58e14613b7b57806301ffc9a714613b0d5780630562b9f714613a4457806306fdde03146139f15780630e89341c146139a057806310e88faf146135745780631737988c14612ffc57806318e10bff14612fd75780631de6c24914612e735780631f7fdffa14612cfe5780632b2f7495146128525780632c47fc231461250b5780632eb2c2d61461223b5780633f4ba83a146121a757806340cedb98146121585780634e1273f41461201a57806355f804b314611eaf5780635934513a146119a75780635c975abb1461198457806361db66fe14611888578063715018a6146118295780637a0ede13146115595780638456cb59146114ff5780638985289d1461111e5780638d94cc3314610fac5780638da5cb5b14610f8357806395d89b4114610f385780639d8d721f1461097a578063a22cb46514610890578063ce606ee014610867578063d6c5faba14610828578063d71c1008146106a3578063e3306a6f14610678578063e985e9c514610622578063ef4142be146105e8578063f242432a14610324578063f2fde38b1461025c578063f65e8a3e146102155763f8071479146101c857600080fd5b34610210576040366003190112610210576001600160a01b036101e9613baa565b16600052600960205260406000206024356000526020526020604060002054604051908152f35b600080fd5b346102105760206102526102283661405a565b90806000526007845261024d600160ff60056040600020015460401c16151514614b96565b614e2e565b6040519015158152f35b3461021057602036600319011261021057610275613baa565b61027d61407d565b6001600160a01b039081169081156102d057600080546001600160a01b031981168417825560405191939192167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08484a3f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346102105760a03660031901126102105761033d613baa565b610345613bc0565b906064356044356084356001600160401b0381116102105761036b903690600401613d2d565b6001600160a01b039384169333851480156105bf575b61038a906141e1565b8516610397811515614244565b6103a083614576565b506103aa84614576565b506103b36145ae565b82600052602095600187526040600020866000528752846040600020546103dc8282101561429e565b85600052600189526040600020886000528952036040600020558360005260018752604060002082600052875260406000206104198682546142fd565b90558186604051868152878a8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a43b610456575b005b61049a93600087946040519687958694859363f23a6e6160e01b9b8c865233600487015260248601526044850152606484015260a0608484015260a4830190613bd6565b03925af160009181610590575b506105665750506001906104b96143f7565b6308c379a014610531575b506104cb57005b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608490fd5b0390fd5b610539614415565b908161054557506104c4565b61052d60405192839262461bcd60e51b845260048401526024830190613bd6565b6001600160e01b0319161490506104545760405162461bcd60e51b81528061052d600482016143ae565b6105b1919250843d86116105b8575b6105a98183613c58565b81019061438e565b90846104a7565b503d61059f565b5084600052600260205260406000203360005260205261038a60ff604060002054169050610381565b34610210576020366003190112610210576001600160a01b03610609613baa565b1660005260056020526020604060002054604051908152f35b346102105760403660031901126102105761063b613baa565b610643613bc0565b9060018060a01b03809116600052600260205260406000209116600052602052602060ff604060002054166040519015158152f35b3461021057600036600319011261021057602060ff60065460a01c166106a16040518092614070565bf35b346102105760208060031936011261021057600435908160005260079182825260016106e08160ff60056040600020015460401c16151514614b96565b8160005283835260018060a01b0360038181604060002001541633036107bd576000835b61072b575b5050505060005252600560406000200160ff60401b1981541690556000604051f35b8460005286865260406000205461ffff821610156107b857806107586107b2926002604060002001614bf8565b905490841b1c866000528888528484604060002001541660005260098852604060002087600052898952610790836040600020614bf8565b905490861b1c60005288526107ab6040600020918254614b35565b905561459b565b83610704565b610709565b60405162461bcd60e51b815260048101869052603960248201527f43616e6e6f742064656c657465205061636b61676520617320796f752061726560448201527f206e6f74206f776e6572206f662074686973205469636b6574000000000000006064820152608490fd5b34610210576020366003190112610210576001600160401b03610849613c27565b16600052600e602052602060ff604060002054166040519015158152f35b34610210576000366003190112610210576006546040516001600160a01b039091168152602090f35b34610210576040366003190112610210576108a9613baa565b6108b1613fa9565b6001600160a01b0390911690338214610923573360005260026020526040600020826000526020526108f38160406000209060ff801983541691151516179055565b60405190151581527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608490fd5b3461021057604036600319011261021057610993613c27565b6024356001600160401b038111610210576109b2903690600401613e31565b906109bb6145ae565b6109c361407d565b6001600160401b038116600052600a6020526109eb600160ff604060002054161515146145f2565b60005b825160ff821610156104545760105463ffff0000610a1261ffff8360101c1661459b565b60101b169063ffff0000191617928360105560005b6040610a3660ff851684614169565b51015151811015610b31576001600160401b038416600052600d8060205263ffffffff806040600020541681610a7d856040610a7560ff8b168a614169565b510151614169565b511610159182610af4575b505015610a9d57610a989061415a565b610a27565b60405162461bcd60e51b815260206004820152602960248201527f56616c6964697479206461746573206d7573742062652077697468696e204576604482015268656e7420446174657360b81b6064820152608490fd5b9091506001600160401b0386166000526020528060406000205460201c1690610b26836040610a7560ff891688614169565b511611158680610a88565b50929061ffff610b4460ff831686614169565b519260101c16600052600b6020526040600020916001600160401b038151166001600160401b03198454161783556020810151600184015560028301604082015190815191600160401b8311610e7e576020908254848455808510610ee8575b500190600052602060002090600080915b848310610e945750505050506060810151600384015560808101518051906001600160401b038211610e7e57610bee60048601546146d7565b90601f91828111610e41575b506020918311600114610dce5760c093929160009183610dc3575b50508160011b916000199060031b1c19161760048501555b63ffffffff60a08201511663ffffffff196005860154161760058501550151916004831015610dad57610da8926005610c669201614711565b61ffff60105460101c16600052600b60205260406000206001600160401b0384166001600160401b031982541617905561ffff60105460101c166020610caf60ff841687614169565b51015190610cbb61407d565b6006805460ff60a01b1916600160a11b17908190556000828152600b60205260409020610cf19160a01c60ff1690600501614711565b600052600b602052600160406000200155610d2761ffff60105460101c166080610d1e60ff851688614169565b510151906149cb565b61ffff60105460101c16600052600c6020526040600020600160ff198254161790557fcb3ac6bc0041b968fb472d167fa1c374afbb340bafff09e0711a3099b21a4574610d9a61ffff60105460101c1680600052600b6020526040600020906040519283926040845260408401906147cc565b9060208301520390a1614679565b6109ee565b634e487b7160e01b600052602160045260246000fd5b015190508880610c15565b906004860160005260206000209160005b601f1985168110610e29575091839160019360c09695601f19811610610e10575b505050811b016004850155610c2d565b015160001960f88460031b161c19169055888080610e00565b81830151845560019093019260209283019201610ddf565b610e6f90600488016000526020600020600585808801821c83019360208910610e75575b01901c01906146c0565b88610bfa565b93508293610e65565b634e487b7160e01b600052604160045260246000fd5b602060049163ffffffff9b989a999b80825116908754908660031b90811b9283911b1691191617865501910191601c8311610ed9575b60010191909896979598610bb5565b60019093019260009250610eca565b610f199084600052836000206007600390808901821c830193601c8a60021b1680610f1f575b5001901c01906146c0565b89610ba4565b60001990818701918254918b03861b1c1690558f610f0e565b3461021057600036600319011261021057610f7f604051610f5881613c3d565b600681526524a729a219a960d11b6020820152604051918291602083526020830190613bd6565b0390f35b34610210576000366003190112610210576000546040516001600160a01b039091168152602090f35b34610210576060366003190112610210576001600160401b0360043581811161021057610fdd903690600401613fb8565b6024803583811161021057610ff6903690600401613ed1565b6044358481116102105761100e903690600401613ed1565b9061101761407d565b60005b8451811015610454576001600160a01b036110358287614169565b51166110418284614169565b5161104c8386614169565b51906040519260208085018581108c8211176111095791806000611104989795936110ff97956040528187526110806145ae565b61108b831515614b40565b61109485614576565b5061109e86614576565b506110a76145ae565b84825260018152604082208383528152604082206110c68782546142fd565b905585604051918683528201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a433614483565b61415a565b61101a565b89634e487b7160e01b60005260416004526000fd5b6111273661405a565b81600052600760208181526001936111508560ff60056040600020015460401c16151514614b96565b8060005282825260ff600960406000200154166004811015610dad576114ae57806000528282526040600020805415611498576000528160002054600052600b82526001600160401b0360406000205416600052600d825263ffffffff6111c181604060002054851c164210614c53565b81600052838352600560406000200154831c16421161145f5783340361142457806000528282528460406000200154156000146112c05780600052828252600660406000200154841061129a575b806000528282528460406000200193845494600160401b9586811015610e7e5761123d918882018155614bf8565b819291549060031b600019811b9283911b16911916179055600052526004604060002001805491821015610e7e576112789282018155614bf8565b81546001600160a01b0360039290921b91821b80199091163390921b16179055005b6044846006604060002001546040519163cf47918160e01b835260048301526024820152fd5b84604060002001541561120f576040600020850180549086821061140e576112ee9060001980930190614bf8565b9054600084815286865260409020880180549092919089811061140e5761133e61132061134995876064940190614bf8565b9054886000528a8a5260ff8b60406000200154169160031b1c6146ad565b049160031b1c6142fd565b8510611355575061120f565b908592336000526005815260406000205493826000528582528060406000200181604060002001549082821061140e5785611391920190614bf8565b90549060031b1c92806000528683528160406000200160046040600020015492831061140e57876044986064956113d360ff946113f49a6113ed980190614bf8565b90549060031b1c94600052526040600020015416906146ad565b04906142fd565b6040519163cf47918160e01b835260048301526024820152fd5b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b8152600481018390526013602482015272125b9cdd59999a58da595b9d08105b5bdd5b9d606a1b6044820152606490fd5b60405162461bcd60e51b815260048101839052601160248201527020bab1ba34b7b7102a34b6b29027bb32b960791b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b60405162461bcd60e51b8152600481018390526024808201527f5469636b6574206973204e6f7420417661696c61626c6520666f722041756374604482015263696f6e7360e01b6064820152608490fd5b346102105760003660031901126102105761151861407d565b6115206145ae565b600160ff1960045416176004557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b34610210576080366003190112610210576001600160401b036004356024358281116102105761158d903690600401613f40565b90604435838111610210576115a6903690600401613cc7565b91816000526020600d815263ffffffff936115cb85604060002054841c164210614c53565b60005b835161ffff90818316908110156116ae5790816115fb826115f361168496958a614169565b5116336140d5565b913360005261162c600993848952604060002083611619868d614169565b5116600052895260406000205490614b35565b8a6116378489614169565b5116111580611689575b61164a90614c10565b896116558388614169565b51169233600052875261166d60406000209289614169565b511660005285526107ab60406000209182546142fd565b6115ce565b5080611695838a614169565b51166000908152600b885260409020548b168914611641565b6006548590858a8961ffff61ffff60a81b6116ce60a887901c831661459b565b60a81b1694818661ffff60a81b1983161760a81c1695600160a11b9162ffffff60a01b191617176006558460005260078652604060002090868351936117148585614c8e565b01916000528660002090876000935b858510611810575087878761174f60ff60065460a01c1684600052600786526009604060002001614cc4565b82600052600784526002604060002001908483519361176e8585614c8e565b019160005284600020906000925b8484106117f95760008681526007885260409081902060643560068201556003810180546001600160a01b0319163317905560058101805460ff60401b1916600160401b17905590517f9c5124c1ab0b68218e469f679fc86f10845de3efb82abf9ca29d5f29be2115a19181906117f4908a83614d19565b0390a1005b60018782848394511686550193019301929161177c565b6001918184849351168655019301930192918890611723565b346102105760003660031901126102105761184261407d565b600080546001600160a01b0319811682556040519082906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08284a3f35b346102105760a0366003190112610210576104546118a4613f2f565b6119656118af613c90565b6119466118ba613ca3565b6118c2613eb1565b9261ffff6118ce613ec1565b966118d76145ae565b6118df61407d565b1680600052600a6020526118ff600160ff604060002054161515146145f2565b600052600d60205263ffffffff6040600020911663ffffffff1982541617905560406000209067ffffffff0000000082549160201b169067ffffffff000000001916179055565b60406000209060ff60401b82549160401b169060ff60401b1916179055565b60406000209060ff60481b82549160481b169060ff60481b1916179055565b3461021057600036600319011261021057602060ff600454166040519015158152f35b6060366003190112610210576119bb613baa565b602490813560005260076020526119e4600160ff60056040600020015460401c16151514614b96565b604435600052600d60205263ffffffff60406000205460201c16421015611e5257813560005260076020526006604060002001543403611e0e576006805460ff60a01b1916600360a01b179055600090815b83356000526007602052604060002054831015611d9157611a7c60018060a01b0360036040600020015416611a6f856040600020614bf8565b90549060031b1c906140d5565b8435600081815260076020818152604080842060038101546001600160a01b03168552600983529084209490935252611ab6908690614bf8565b90549060031b1c600052602052604060002054111580611d51575b15611d0d5783356000526007602052611af1836002604060002001614bf8565b90549060031b1c8435600052600760205260018060a01b03600360406000200154166000526009602052604060002085356000526007602052611b38856040600020614bf8565b90549060031b1c600052602052611b556040600020918254614b35565b90558335600081815260076020818152604080842060058101805460ff60401b191690556001600160a01b0388168552600883529084209490935252611b9c908590614bf8565b90549060031b1c6000526020526001604060002001600160ff19825416179055604435600052600d60205260ff60406000205460401c169060ff60406000205460481c16918260ff038111611cf857611bf9920160ff16906142fd565b918335600052600760205260018060a01b036003604060002001541690611c24816040600020614bf8565b90549060031b1c9185356000526007602052611c47826002604060002001614bf8565b90549060031b1c303b1561021057604051637921219560e11b81526001600160a01b03928316600482015291851660248301526044820193909352606481019290925260a06084830152600060a483018190528260c48183305af18015611cec57611cbd575b611cb7915061415a565b91611a36565b6001600160401b038211611cd757611cb791604052611cad565b84634e487b7160e01b60005260416004526000fd5b6040513d6000823e3d90fd5b85634e487b7160e01b60005260116004526000fd5b60405162461bcd60e51b8152602060048201819052818601527f4572726f723a205061636b61676520686173206265656e206d6f6469666965646044820152606490fd5b5083356000526007602052611d6a836040600020614bf8565b90549060031b1c600052600b6020526001600160401b036040600020541660443514611ad1565b611e05848035600052600760205260066040600020015490604435600052600d60205260ff60406000205460401c169060018060a01b03600654169035600052600760205260018060a01b036003604060002001541691604435600052600d60205260ff60406000205460481c16936155d8565b6104543061417d565b60405162461bcd60e51b815260206004820152601a818401527f4e6f7420456e6f75676820616d6f756e742050726f76696465640000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526030818401527f54686973206576656e7420686173207061737365642e2e2e2043616e6e6f742060448201526f7075726368617365205061636b61676560801b6064820152608490fd5b3461021057602080600319360112610210576001600160401b039060043582811161021057611ee2903690600401613d2d565b91611eeb61407d565b8251908111610e7e57600391611f0183546146d7565b601f8111611fc2575b5080601f8311600114611f435750819293600092611f38575b50508160011b9160001990841b1c1916179055005b015190508380611f23565b90601f19831694846000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b926000905b878210611faa575050836001959610611f92575b505050811b019055005b015160001983861b60f8161c19169055838080611f88565b80600185968294968601518155019501930190611f74565b61200a90846000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f850160051c810191848610612010575b601f0160051c01906146c0565b84611f0a565b9091508190611ffd565b34610210576040366003190112610210576001600160401b036004358181116102105761204b903690600401613fb8565b9060243590811161021057612064903690600401613ed1565b9080518251036121015780519161207a83613c79565b926120886040519485613c58565b808452612097601f1991613c79565b0136602085013760005b82518110156120eb576120e6906120d66001600160a01b036120c38387614169565b51166120cf8386614169565b51906140d5565b6120e08287614169565b5261415a565b6120a1565b60405160208082528190610f7f90820187614026565b60405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608490fd5b3461021057604036600319011261021057610454612174613f2f565b61ffff61217f613fa9565b9161218861407d565b16600052600e60205260406000209060ff801983541691151516179055565b34610210576000366003190112610210576121c061407d565b60045460ff8116156121ff5760ff19166004557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b346102105760031960a03682011261021057612255613baa565b9061225e613bc0565b906001600160401b039060443582811161021057612280903690600401613ed1565b60643583811161021057612298903690600401613ed1565b92608435908111610210576122b1903690600401613d2d565b6001600160a01b039586169590929033871480156124e2575b6122d3906141e1565b6122e08351865114614309565b8516926122ee841515614244565b6122f66145ae565b60005b835181101561238e57806123106123899286614169565b5161231b8289614169565b519080600052600160209181835260406000208d6000528352838d604060002054906123498383101561429e565b836000528486526040600020906000528552036040600020556000528152604060002090886000525261238260406000209182546142fd565b905561415a565b6122f9565b5090949392919382876040517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb3391806123c98a8c83614366565b0390a43b6123d357005b60006020946124346124259761241594604051998a988997889663bc197c8160e01b9e8f89523360048a0152602489015260a0604489015260a4880190614026565b9084878303016064880152614026565b91848303016084850152613bd6565b03925af1600091816124c2575b5061249a57505060016124526143f7565b6308c379a014612463575b6104cb57005b61246b614415565b80612476575061245d565b60405162461bcd60e51b81526020600482015290819061052d906024830190613bd6565b6001600160e01b031916146104545760405162461bcd60e51b81528061052d600482016143ae565b6124db91925060203d81116105b8576105a98183613c58565b9083612441565b508660005260026020526040600020336000526020526122d360ff6040600020541690506122ca565b60603660031901126102105761251f613baa565b602480359161252c613ca3565b83600052602092600b84526001600160401b038060406000205416600052600e855260ff6040600020541661281c5785600052600b85528060406000205416600052600d855263ffffffff9283604060002054871c164210156127bf5786600052600b865283806005604060002001541691169384810382116127aa5787600052600b87528460036040600020015492011611612766576000546001600160a01b039190821633819003612702575b6000526005865260406000206125f23482546142fd565b905560405192868401918211848310176126ee5750866126a7939285926040526000845261261e6145ae565b86169561262c871515614b40565b61263582614576565b5061263f83614576565b506126486145ae565b81600052600188526040600020876000528852604060002061266b8482546142fd565b9055866000604051848152858b8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a433614483565b83600052601183526126bf60406000209182546142fd565b905560005260088152604060002091600052526001604060002001600160ff198254161790556104543061417d565b634e487b7160e01b60009081526041600452fd5b87600052600b875261271c856001604060002001546146ad565b34146125db5760405162461bcd60e51b815260048101889052601a818601527f4e6f7420656e6f75676820616d6f756e742070726f76696465640000000000006044820152606490fd5b60405162461bcd60e51b815260048101869052601b818401527f4e6f7420656e6f75676820436f7069657320617661696c61626c6500000000006044820152606490fd5b83634e487b7160e01b60005260116004526000fd5b60405162461bcd60e51b8152600481018790526030818501527f54686973206576656e7420686173207061737365642e2e2e2043616e6e6f742060448201526f7075726368617365205469636b65747360801b6064820152608490fd5b60405162461bcd60e51b815260048101869052600f818401526e115d995b9d081a5cc814185d5cd959608a1b6044820152606490fd5b346102105760e0366003190112610210576024356001600160401b03811161021057612882903690600401613f40565b6044356001600160401b038111610210576128a1903690600401613cc7565b6064359063ffffffff821682036102105763ffffffff60843516608435036102105760c43560ff8116810361021057600435600052600d60205263ffffffff60406000205460201c16421080612cdf575b15612c8f5760005b845161ffff821610156129fd578061295161292061ffff6115f3816129c196168a614169565b336000526009602052604060002061ffff61293d8186168b614169565b511660005260205260406000205490614b35565b63ffffffff61296461ffff841687614169565b51161115806129c6575b61297790614c10565b63ffffffff61298a61ffff831686614169565b5116336000526009602052604060002061ffff6129a98185168a614169565b51166000526020526107ab60406000209182546142fd565b6128fa565b5061ffff6129d681831688614169565b5116600052600b6020526129776001600160401b036040600020541660043514905061296e565b50916006549361ffff8060a81b612a18828860a81c1661459b565b60a81b16818161ffff60a81b1989161760a81c169663ffffffff6084351663ffffffff8616141580612c7e575b15612c455762ffffff60a01b1916176006558560005260076020526040600020906020835193612a758585614c8e565b01916000526020600020906000925b848410612c2d575050505050612ab260ff60065460a01c168560005260076020526009604060002001614cc4565b83600052600760205263ffffffff6005604060002001911663ffffffff1982541617905560026040600020016020825192612aed8484614c8e565b019060005260206000206000915b838310612c11577f7c1e0aae4c32fe0db38fe1f25ca6186179a1f65567e0f10264ecc4188729812360808787816000526007602052612b6060843560056040600020019067ffffffff0000000082549160201b169067ffffffff000000001916179055565b6040600081902060a435600682015560078101805460ff191660ff94909416939093179092556003820180546001600160a01b0319163317905560058201805460ff60401b1916600160401b179055517f9c5124c1ab0b68218e469f679fc86f10845de3efb82abf9ca29d5f29be2115a1918190612bdf908583614d19565b0390a160405190815260406020820152600f60408201526e20416363657074696e67204269647360881b6060820152a1005b600160208263ffffffff83945116855501920192019190612afb565b60016020828483945116865501930193019291612a84565b60405162461bcd60e51b815260206004820152601160248201527022b93937b910902a34b6b29022b93937b960791b6044820152606490fd5b5063ffffffff608435164210612a45565b60405162461bcd60e51b815260206004820152602260248201527f4576656e7420506173736564206f722041756374696f6e2074696d652045727260448201526137b960f11b6064820152608490fd5b5063ffffffff6084351663ffffffff60406000205460201c16116128f2565b346102105760031960803682011261021057612d18613baa565b6001600160401b039160243583811161021057612d39903690600401613ed1565b9260443581811161021057612d52903690600401613ed1565b9060643590811161021057612d6b903690600401613d2d565b91612d746145ae565b6001600160a01b03841692612d8a841515614b40565b612d978651845114614309565b612d9f6145ae565b60005b8651811015612dee5780612db9612de99286614169565b51612dc4828a614169565b51600052602060018152604060002090886000525261238260406000209182546142fd565b612da2565b50919290938160006040517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb339180612e288a8d83614366565b0390a43b612e3257005b61242560006020946124346040519788968795869461241563bc197c8160e01b9d8e885233600489015288602489015260a0604489015260a4880190614026565b34610210576020806003193601126102105760043580600052600c825260019060ff91612eaa818460406000205416151514614635565b612eb482336140d5565b15612f925790816000936000935b612ed3575b85856040519015158152f35b82600052600b808752600280604060002001548387161015612f8b5785809750612f058596978360406000200161468a565b91909263ffffffff809454600394851b1c164210159485612f49575b5050505050600014612f3e57612f378295614679565b9392612ec2565b612f37600095614679565b849750612f6493949550896000528b5260406000200161468a565b9054911b1c169163fffeae80831161140e576201517f849301164211158780878180612f21565b5050612ec7565b60405162461bcd60e51b815260048101859052601960248201527f596f7520646f6e7420686176652074686973207469636b6574000000000000006044820152606490fd5b3461021057600036600319011261021057602061ffff60065460a81c16604051908152f35b346102105760a03660031901126102105760043563ffffffff811680910361021057613026613c90565b906044356001600160401b03811161021057613046903690600401613e31565b9161304f613eb1565b90613058613ec1565b906130616145ae565b61306961407d565b6010549361ffff61307b81871661459b565b16809561ffff19161760105584600052600d60205260406000209063ffffffff1982541617905563fffeae7f63ffffffff82161161140e57613144926130f96201518063ffffffff6119659488600052600d602052160160406000209067ffffffff0000000082549160201b169067ffffffff000000001916179055565b600a6020526040600020600160ff19825416179055600e602052604060002060ff198154169055600d60205260406000209060ff60401b82549160401b169060ff60401b1916179055565b61314c6145ae565b61315461407d565b80600052600a602052613173600160ff604060002054161515146145f2565b60005b825160ff821610156135075760105463ffff000061319a61ffff8360101c1661459b565b60101b169063ffff0000191617928360105560005b60406131be60ff851684614169565b5101515181101561324d5783600052600d60205263ffffffff6040600020541663ffffffff6131f6836040610a7560ff891688614169565b5116101580613213575b15610a9d5761320e9061415a565b6131af565b5083600052600d60205263ffffffff60406000205460201c1663ffffffff613244836040610a7560ff891688614169565b51161115613200565b50929061ffff61326060ff831686614169565b519260101c16600052600b6020526040600020916001600160401b038151166001600160401b0319845416178355602081015160018401556040810151805190600160401b8211610e7e5760206002918287015484848901558085106134d0575b5001908501600052602060002090600080915b84831061347b5750505050506060810151600384015560808101518051906001600160401b038211610e7e5761330d60048601546146d7565b90601f91828111613448575b5060209183116001146133d55760c0939291600091836133ca575b50508160011b916000199060031b1c19161760048501555b63ffffffff60a08201511663ffffffff196005860154161760058501550151916004831015610dad576133c59260056133859201614711565b61ffff60105460101c16600052600b6020526040600020836001600160401b031982541617905561ffff60105460101c166020610caf60ff841687614169565b613176565b015190508880613334565b906004860160005260206000209160005b601f1985168110613430575091839160019360c09695601f19811610613417575b505050811b01600485015561334c565b015160001960f88460031b161c19169055888080613407565b818301518455600190930192602092830192016133e6565b61347590600488016000526020600020600585808801821c83019360208910610e755701901c01906146c0565b88613319565b60208163ffffffff6004939c999b9a9c511686548560031b63ffffffff811b9283911b1691191617865501910191601c83116134c1575b600101919098969795986132d4565b600190930192600092506134b2565b61350190848901600052836000206007600390808901821c830193601c8a8a1b1680610f1f575001901c01906146c0565b896132c1565b61ffff60105416600052600d6020527f198eebe05113df5df81bdbe4c9e683a02ddc6fba993f628be1134e14485d6f256080604060002060ff604051915463ffffffff8116835263ffffffff8160201c166020840152818160401c16604084015260481c166060820152a1005b346102105760603660031901126102105761358d613c27565b6044356001600160401b038111610210576135b46001600160401b03913690600401613d83565b916135bd6145ae565b6135c561407d565b602435600052600c6020526135e6600160ff60406000205416151514614635565b16600052600a602052613605600160ff604060002054161515146145f2565b6060810151602435600052600b60205263ffffffff600560406000200154161015613949576001600160401b03815116602435600052600b6020526001600160401b03604060002054160361391057602435600052600b60205260406000206001600160401b038251166001600160401b03198254161781556020820151600182015560028101604083015190815191600160401b8311610e7e5760209082548484558085106138c0575b500190600052602060002090600080915b848310613875578686606082015160038201556004810190608083019182518051906001600160401b038211610e7e576136fb83546146d7565b601f8111613843575b50602090601f83116001146137d55791806005949260c096946000926137ca575b50508160011b916000199060031b1c19161790555b019263ffffffff60a08201511663ffffffff198554161784550151916004831015610dad576137759261376c91614711565b516024356149cb565b602435600052600b6020527fcb3ac6bc0041b968fb472d167fa1c374afbb340bafff09e0711a3099b21a45746137bd60406000206040519182916040835260408301906147cc565b60243560208301520390a1005b015190508880613725565b90601f198316918460005260206000209260005b81811061382b575092600192859260c098966005989610613812575b505050811b01905561373a565b015160001960f88460031b161c19169055888080613805565b929360206001819287860151815501950193016137e9565b61386f90846000526020600020601f850160051c8101916020861061201057601f0160051c01906146c0565b86613704565b60208163ffffffff600493511686548560031b63ffffffff811b9283911b1691191617865501910191601c83116138b1575b60010191906136c1565b600190930192600092506138a7565b6138f0908460005283600020600780880160031c820192601c8960021b16806138f6575b500160031c01906146c0565b866136b0565b60001990818601918254918a0360031b1c1690558b6138e4565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964204576656e742049442160781b6044820152606490fd5b60405162461bcd60e51b815260206004820152602960248201527f5468657365206e6f206f6620636f70696573206861766520616c7265616479206044820152681899595b881cdbdb1960ba1b6064820152608490fd5b34610210576020366003190112610210576004356000526012602052610f7f6139d66139dd604060002060405192838092614736565b0382613c58565b604051918291602083526020830190613bd6565b3461021057600036600319011261021057610f7f604051613a1181613c3d565b60128152715765623320494e534944335253205061737360701b6020820152604051918291602083526020830190613bd6565b6020366003190112610210576004353360005260056020528060406000205410613aa257600080808093338252600560205260408220613a85828254614b35565b9055818115613a99575b3390f115611cec57005b506108fc613a8f565b60405162461bcd60e51b815260206004820152603d60248201527f596f75722042616c616e6365206d75737420626520477265617465722054686160448201527f6e206f7220457175616c20746f20776974686472617720416d6f756e740000006064820152608490fd5b346102105760203660031901126102105760043563ffffffff60e01b811680910361021057602090636cdb3d1360e11b8114908115613b6a575b8115613b59575b506040519015158152f35b6301ffc9a760e01b14905082613b4e565b6303a24d0760e21b81149150613b47565b34610210576040366003190112610210576020613ba2613b99613baa565b602435906140d5565b604051908152f35b600435906001600160a01b038216820361021057565b602435906001600160a01b038216820361021057565b91908251928382526000905b848210613c0f575092806020939411613c02575b601f01601f1916010190565b6000838284010152613bf6565b90602090818082850101519082860101520190613be2565b600435906001600160401b038216820361021057565b604081019081106001600160401b03821117610e7e57604052565b90601f801991011681019081106001600160401b03821117610e7e57604052565b6001600160401b038111610e7e5760051b60200190565b6024359063ffffffff8216820361021057565b6044359063ffffffff8216820361021057565b359063ffffffff8216820361021057565b81601f8201121561021057803591613cde83613c79565b92613cec6040519485613c58565b808452602092838086019260051b820101928311610210578301905b828210613d16575050505090565b838091613d2284613cb6565b815201910190613d08565b81601f82011215610210578035906001600160401b038211610e7e5760405192613d61601f8401601f191660200185613c58565b8284526020838301011161021057816000926020809301838601378301015290565b919060e083820312610210576040519060e08201936001600160401b039483811086821117610e7e576040528294813581811681036102105784526020820135602085015260408201358181116102105783613de0918401613cc7565b60408501526060820135606085015260808201359081116102105760c092613e09918301613d2d565b6080840152613e1a60a08201613cb6565b60a084015201359060048210156102105760c00152565b9080601f8301121561021057813590613e4982613c79565b92613e576040519485613c58565b828452602092838086019160051b8301019280841161021057848301915b848310613e855750505050505090565b82356001600160401b038111610210578691613ea684848094890101613d83565b815201920191613e75565b6064359060ff8216820361021057565b6084359060ff8216820361021057565b81601f8201121561021057803591613ee883613c79565b92613ef66040519485613c58565b808452602092838086019260051b820101928311610210578301905b828210613f20575050505090565b81358152908301908301613f12565b6004359061ffff8216820361021057565b81601f8201121561021057803591613f5783613c79565b92613f656040519485613c58565b808452602092838086019260051b820101928311610210578301905b828210613f8f575050505090565b813561ffff81168103610210578152908301908301613f81565b60243590811515820361021057565b81601f8201121561021057803591613fcf83613c79565b92613fdd6040519485613c58565b808452602092838086019260051b820101928311610210578301905b828210614007575050505090565b81356001600160a01b0381168103610210578152908301908301613ff9565b90815180825260208080930193019160005b828110614046575050505090565b835185529381019392810192600101614038565b6040906003190112610210576004359060243590565b906004821015610dad5752565b6000546001600160a01b0316330361409157565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6001600160a01b031690811561410257600052600160205260406000209060005260205260406000205490565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608490fd5b600019811461140e5760010190565b80518210156114985760209160051b010190565b6001600160a01b0316338114610923573360005260026020526040600020816000526020526040600020600160ff19825416179055604051600181527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3565b156141e857565b60405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201526d195c881bdc88185c1c1c9bdd995960921b6064820152608490fd5b1561424b57565b60405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b156142a557565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608490fd5b8119811161140e570190565b1561431057565b60405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608490fd5b909161437d61438b93604084526040840190614026565b916020818403910152614026565b90565b9081602091031261021057516001600160e01b0319811681036102105790565b60809060208152602860208201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b60608201520190565b60009060033d1161440457565b905060046000803e60005160e01c90565b600060443d1061438b57604051600319913d83016004833e81516001600160401b03918282113d6024840111176144725781840194855193841161447a573d85010160208487010111614472575061438b92910160200190613c58565b949350505050565b50949350505050565b919390803b614494575b5050505050565b6144e293600060209460405180978196829563f23a6e6160e01b9b8c855260018060a01b0380961660048601528660248601526044850152606484015260a0608484015260a4830190613bd6565b0393165af160009181614556575b5061452e57505060016145016143f7565b6308c379a01461451b575b6104cb575b388080808061448d565b614523614415565b80612476575061450c565b6001600160e01b031916146145115760405162461bcd60e51b81528061052d600482016143ae565b61456f91925060203d81116105b8576105a98183613c58565b90386144f0565b6040519061458382613c3d565b60018252602082016020368237825115611498575290565b61ffff80911690811461140e5760010190565b60ff600454166145ba57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b156145f957565b60405162461bcd60e51b8152602060048201526014602482015273115d995b9d08111bd95cc81b9bdd08195e1a5cdd60621b6044820152606490fd5b1561463c57565b60405162461bcd60e51b8152602060048201526015602482015274151a58dad95d08111bd95cc81b9bdd08195e1a5cdd605a1b6044820152606490fd5b60ff1660ff811461140e5760010190565b919091805483101561149857600052601c60206000208360031c019260021b1690565b806000190482118115151661140e570290565b8181106146cb575050565b600081556001016146c0565b90600182811c92168015614707575b60208310146146f157565b634e487b7160e01b600052602260045260246000fd5b91607f16916146e6565b906004811015610dad5764ff0000000082549160201b169064ff000000001916179055565b9060009291805491614747836146d7565b9182825260019384811690816000146147a95750600114614769575b50505050565b90919394506000526020928360002092846000945b838610614795575050505001019038808080614763565b80548587018301529401938590820161477e565b9294505050602093945060ff191683830152151560051b01019038808080614763565b9060e0908181016001600160401b03845416825260018085015493602094858501526002860192604092828487015284548092526101009081870195600052876000206000925b84600785011061496757509588979560c095600595614897958b9561438b9d60ff9c5495848410614951575b848410614939575b848410614920575b50838310614907575b8383106148ee575b8383106148d5575b8383106148bd575b5050106148b0575b5050905060038901546060860152848103608086015260048901614736565b9601549163ffffffff831660a082015201921c16614070565b1c81520186903880614878565b90919563ffffffff868c1c1681520194013886614870565b81929663ffffffff8760a01c1681520195019086614868565b81929663ffffffff8760801c1681520195019086614860565b81929663ffffffff8760601c1681520195019086614858565b9663ffffffff878495991c16815201950190863861484f565b86821c63ffffffff1688529681019692820192614847565b63ffffffff87168852968101969282019261483f565b815463ffffffff8082168a52818c1c81168c8b015281891c8116898b0152606082811c8216908b0152608082811c8216908b015260a082811c8216908b015260c082811c909116908a0152861c868901529687019660089093019290820190614813565b9190916000928184526020601281526040852082516001600160401b038111614b21576149f882546146d7565b601f8111614af3575b508296601f8211600114614a71577f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b95969782614a66575b508160011b916000199060031b1c19161790555b614a61604051928284938452830190613bd6565b0390a2565b905084015138614a39565b96601f198216838952848920985b818110614adc57509782916001937f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b98999a10614ac3575b5050811b019055614a4d565b86015160001960f88460031b161c191690553880614ab7565b868301518a55600190990198918501918501614a7f565b614b1b90838952848920601f840160051c81019186851061201057601f0160051c01906146c0565b38614a01565b634e487b7160e01b87526041600452602487fd5b81811061140e570390565b15614b4757565b60405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b15614b9d57565b60405162461bcd60e51b815260206004820152602d60248201527f4e6f74204f776e6572206f66205061636b616765206f72205061636b6167652060448201526c02237b2b993ba1022bc34b9ba1609d1b6064820152608490fd5b80548210156114985760005260206000200190600090565b15614c1757565b60405162461bcd60e51b8152602060048201526014602482015273436f70696573206e6f7420417661696c61626c6560601b6044820152606490fd5b15614c5a57565b60405162461bcd60e51b815260206004820152600c60248201526b115d995b9d0814185cdcd95960a21b6044820152606490fd5b90600160401b8111610e7e57815490808355818110614cac57505050565b614cc292600052602060002091820191016146c0565b565b906004811015610dad5760ff80198354169116179055565b90815480825260208092019260005281600020916000905b828210614d02575050505090565b835485529384019360019384019390910190614cf4565b908152602091604083830152610180806040840152614d3c6101c0840183614cdc565b93603f199485858203016060860152614d6f614d5c600192838701614cdc565b8787820301608088015260028601614cdc565b9060018060a01b03918260038701541660a088015260048601978782030160c088015283885491828152019760005283600020926000905b828210614e175750505050506009836101a09360ff8094600561438b99980154908163ffffffff9182821660e08c01521c1661010089015260401c161515610120870152600682015461014087015283600783015416610160870152600882015490860152015416910190614070565b845481168a52988501989383019390830190614da7565b9190600083815260079060209180835260018060a01b039260039660409433818a8888200154160361557657818552838352858520600190810180549192918381106155625798838686614e898f958d9e6000190190614bf8565b905490861b1c94600360a01b60ff60a01b1960065416176006558b8b859f82965b615490575b505050505050508915600014614ff15750508186818988878f85965b614f64575b5050505092509050905b614ef7575b505083525220600501805460ff60401b191690559150565b8286528484528686205461ffff82161015614f5f5780614f1f614f599260028a8a2001614bf8565b9054908c1b1c338852600986528888208589528787528c614f42848c8c20614bf8565b9054911b1c895286526107ab898920918254614b35565b81614eda565b614edf565b818652828b528a600480868920015461ffff8a161015614fea57879686889796614fac948d614f998e80978d9c8d2001614bf8565b905490891b1c1697895252862001614bf8565b9054911b1c90828215614fe1575bf115614fd757614fca839161459b565b90808988878f8c95614ecb565b87513d88823e3d90fd5b506108fc614fba565b5050614ed0565b939297969591909498999a8887905b615294575b50838752828a52878720600501805460ff60401b1916905586895b6151da575b50838752828a5287872060040180548a81106151c657898c856150776150ee9b9a99989796957fd14ea1fc9b217f16ea2aee708749b3f4ecaffb8eec1409e6e170b055b6fc3910956000190190614bf8565b905490861b1c168251918a8352820152a1838852828b5289898920018054898255806151ad575b5050838852600489892001805489825580615194575b5050848852600d8b5260ff898920548a1c169282600654169489528b52888820015416928652600d895260ff8787205460481c16936155d8565b30331461513e578190338152600285528181203082528552208260ff19825416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3130923392a390565b815162461bcd60e51b815260048101859052602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608490fd5b6151a6918a528c8a20908101906146c0565b38806150b4565b6151bf918a528c8a20908101906146c0565b388061509e565b634e487b7160e01b89526011600452602489fd5b848852838b526004808a8a2001548b8110615281578c8588868f958f968f978c976000190161ffff8b1610156152735788978897889761523b966152298e80988b8d52868652878d2001614bf8565b9054911b1c1696885252852001614bf8565b905490881b1c9082821561526a575bf1156152605761525a8a9161459b565b90615020565b88513d89823e3d90fd5b506108fc61524a565b505050505050505050615025565b634e487b7160e01b8a526011825260248afd5b848852838b528888205461ffff8216101561548b5760026152b982828c8c2001614bf8565b905490841b1c338a5260098d528c868c8c2091898d52526152dc848d8d20614bf8565b905490861b1c8b528d526152f48b8b20918254614b35565b9055858952848c52898920600490810180549192918d8110615478578691615320916000190190614bf8565b905490861b1c168a5260088d528c868c8c2091898d5252615343848d8d20614bf8565b905490861b1c8b528d528a8a208c01805460ff19168d179055868a52858d528a8a20820180548d811061547857848f94938e8e8b8b61538b8f986153b6986000190190614bf8565b9054908d1b1c16988783528181526153a586858520614bf8565b9054908d1b1c978352522001614bf8565b905490861b1c92303b15615474578c51637921219560e11b8152338482019081526001600160a01b0390921660208301526040820192909252606081019390935260a060808401819052600090840152918a908390819060c001038183305af1801561546a57908c939291615437575b50506154319061459b565b90615000565b909192506001600160401b03821161545757508952899061543138615426565b634e487b7160e01b8a5260419052602489fd5b8b513d8c823e3d90fd5b8b80fd5b634e487b7160e01b8c526011845260248cfd5b615005565b8483528186528083205461ffff8816101561555d578287926154ce8c87856154f098200154166154c286868620614bf8565b905490891b1c906140d5565b978783528181528c878585200154168352600981528383209783525220614bf8565b9054911b1c8b5288528a8a2054118061552a575b615520575b615513859161459b565b90868e8b8b8e8c95614eaa565b9799508997615509565b508589528787528c61553e828c8c20614bf8565b9054911b1c8952600b87526001600160401b038a8a2054168214615504565b614eaf565b634e487b7160e01b88526011600452602488fd5b855162461bcd60e51b815260048101849052603560248201527f43616e6e6f74206163636570742042696420617320796f7520617265206e6f74604482015274081bdddb995c881bd9881d1a1a5cc8151a58dad95d605a1b6064820152608490fd5b93606491826155ed60ff61562a9416886146ad565b04809660018060a01b036156558160065416928260009889988998899889988952600560205261562260408a209182546142fd565b9055846146ad565b04991684526005602052604084206156438a82546142fd565b905561564f898c6142fd565b90614b35565b978891839183156156af575b1690f1156156a35750916060917f0d458e9c8fba143aaee61251301adef6b137ef1cbd15c288bca321eeec6121da9360405192835260208301526040820152a1565b604051903d90823e3d90fd5b6108fc925061566156fea2646970667358221220c1ce1f0ddfe129db1e8e2b3e5dd064abecee086d3937d2424af3e0fc4b14078664736f6c634300080f0033

Loading