/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import type { Provider, TransactionRequest } from "@ethersproject/providers";
import type { PromiseOrValue } from "../common";
import type {
  MembershipFacet,
  MembershipFacetInterface,
} from "../MembershipFacet";

const _abi = [
  {
    type: "function",
    name: "expiresAt",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipCurrency",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipDuration",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint64",
        internalType: "uint64",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipFreeAllocation",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipImage",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "string",
        internalType: "string",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipLimit",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipPrice",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipPricingModule",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getMembershipRenewalPrice",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getProtocolFee",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getSpaceFactory",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "joinSpace",
    inputs: [
      {
        name: "receiver",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "payable",
  },
  {
    type: "function",
    name: "joinSpaceWithReferral",
    inputs: [
      {
        name: "receiver",
        type: "address",
        internalType: "address",
      },
      {
        name: "referral",
        type: "tuple",
        internalType: "struct IMembershipBase.ReferralTypes",
        components: [
          {
            name: "partner",
            type: "address",
            internalType: "address",
          },
          {
            name: "userReferral",
            type: "address",
            internalType: "address",
          },
          {
            name: "referralCode",
            type: "string",
            internalType: "string",
          },
        ],
      },
    ],
    outputs: [],
    stateMutability: "payable",
  },
  {
    type: "function",
    name: "renewMembership",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "payable",
  },
  {
    type: "function",
    name: "revenue",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "setMembershipDuration",
    inputs: [
      {
        name: "duration",
        type: "uint64",
        internalType: "uint64",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setMembershipFreeAllocation",
    inputs: [
      {
        name: "newAllocation",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setMembershipImage",
    inputs: [
      {
        name: "newImage",
        type: "string",
        internalType: "string",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setMembershipLimit",
    inputs: [
      {
        name: "newLimit",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setMembershipPrice",
    inputs: [
      {
        name: "newPrice",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setMembershipPricingModule",
    inputs: [
      {
        name: "pricingModule",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "event",
    name: "Approval",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "approved",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ApprovalForAll",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "operator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "approved",
        type: "bool",
        indexed: false,
        internalType: "bool",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Banned",
    inputs: [
      {
        name: "moderator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ConsecutiveTransfer",
    inputs: [
      {
        name: "fromTokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "toTokenId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "from",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "to",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "DefaultBpsFeeUpdated",
    inputs: [
      {
        name: "defaultBpsFee",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "EntitlementCheckResultPosted",
    inputs: [
      {
        name: "transactionId",
        type: "bytes32",
        indexed: true,
        internalType: "bytes32",
      },
      {
        name: "result",
        type: "uint8",
        indexed: false,
        internalType: "enum IEntitlementGatedBase.NodeVoteStatus",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Initialized",
    inputs: [
      {
        name: "version",
        type: "uint32",
        indexed: false,
        internalType: "uint32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "InterfaceAdded",
    inputs: [
      {
        name: "interfaceId",
        type: "bytes4",
        indexed: true,
        internalType: "bytes4",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "InterfaceRemoved",
    inputs: [
      {
        name: "interfaceId",
        type: "bytes4",
        indexed: true,
        internalType: "bytes4",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MaxBpsFeeUpdated",
    inputs: [
      {
        name: "maxBpsFee",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MaxPartnerFeeSet",
    inputs: [
      {
        name: "fee",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipCurrencyUpdated",
    inputs: [
      {
        name: "currency",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipFeeRecipientUpdated",
    inputs: [
      {
        name: "recipient",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipFreeAllocationUpdated",
    inputs: [
      {
        name: "allocation",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipLimitUpdated",
    inputs: [
      {
        name: "limit",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipPriceUpdated",
    inputs: [
      {
        name: "price",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipTokenIssued",
    inputs: [
      {
        name: "recipient",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipTokenRejected",
    inputs: [
      {
        name: "recipient",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "MembershipWithdrawal",
    inputs: [
      {
        name: "recipient",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "amount",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "OwnershipTransferred",
    inputs: [
      {
        name: "previousOwner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "newOwner",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PartnerRegistered",
    inputs: [
      {
        name: "account",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PartnerRemoved",
    inputs: [
      {
        name: "account",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PartnerUpdated",
    inputs: [
      {
        name: "account",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Paused",
    inputs: [
      {
        name: "account",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PermissionsAddedToChannelRole",
    inputs: [
      {
        name: "updater",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "roleId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "channelId",
        type: "bytes32",
        indexed: true,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PermissionsRemovedFromChannelRole",
    inputs: [
      {
        name: "updater",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "roleId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "channelId",
        type: "bytes32",
        indexed: true,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "PermissionsUpdatedForChannelRole",
    inputs: [
      {
        name: "updater",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "roleId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "channelId",
        type: "bytes32",
        indexed: true,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Prepay__Prepaid",
    inputs: [
      {
        name: "supply",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ReferralRegistered",
    inputs: [
      {
        name: "referralCode",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
      {
        name: "basisPoints",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "recipient",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ReferralRemoved",
    inputs: [
      {
        name: "referralCode",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "ReferralUpdated",
    inputs: [
      {
        name: "referralCode",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
      {
        name: "basisPoints",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "recipient",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "RegistryFeeSet",
    inputs: [
      {
        name: "fee",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "RoleCreated",
    inputs: [
      {
        name: "creator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "roleId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "RoleRemoved",
    inputs: [
      {
        name: "remover",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "roleId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "RoleUpdated",
    inputs: [
      {
        name: "updater",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "roleId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "SubscriptionUpdate",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "expiration",
        type: "uint64",
        indexed: false,
        internalType: "uint64",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      {
        name: "from",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "to",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Unbanned",
    inputs: [
      {
        name: "moderator",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "Unpaused",
    inputs: [
      {
        name: "account",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "error",
    name: "ApprovalCallerNotOwnerNorApproved",
    inputs: [],
  },
  {
    type: "error",
    name: "ApprovalQueryForNonexistentToken",
    inputs: [],
  },
  {
    type: "error",
    name: "BalanceQueryForZeroAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "Banning__AlreadyBanned",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "Banning__CannotBanOwner",
    inputs: [],
  },
  {
    type: "error",
    name: "Banning__CannotBanSelf",
    inputs: [],
  },
  {
    type: "error",
    name: "Banning__InvalidTokenId",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "Banning__NotBanned",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "Dispatcher__TransactionAlreadyExists",
    inputs: [],
  },
  {
    type: "error",
    name: "ERC5643__DurationZero",
    inputs: [],
  },
  {
    type: "error",
    name: "ERC5643__InvalidTokenId",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "ERC5643__NotApprovedOrOwner",
    inputs: [],
  },
  {
    type: "error",
    name: "ERC5643__SubscriptionNotRenewable",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "EntitlementGated_InvalidAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_InvalidEntitlement",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_InvalidValue",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_NodeAlreadyVoted",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_NodeNotFound",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_OnlyEntitlementChecker",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_RequestIdNotFound",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_TransactionCheckAlreadyCompleted",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_TransactionCheckAlreadyRegistered",
    inputs: [],
  },
  {
    type: "error",
    name: "EntitlementGated_TransactionNotRegistered",
    inputs: [],
  },
  {
    type: "error",
    name: "Entitlement__InvalidValue",
    inputs: [],
  },
  {
    type: "error",
    name: "Entitlement__NotAllowed",
    inputs: [],
  },
  {
    type: "error",
    name: "Entitlement__NotMember",
    inputs: [],
  },
  {
    type: "error",
    name: "Entitlement__ValueAlreadyExists",
    inputs: [],
  },
  {
    type: "error",
    name: "Initializable_InInitializingState",
    inputs: [],
  },
  {
    type: "error",
    name: "Introspection_AlreadySupported",
    inputs: [],
  },
  {
    type: "error",
    name: "Introspection_NotSupported",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__AlreadyMember",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__Banned",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InsufficientAllowance",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InsufficientPayment",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidCurrency",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidDuration",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidFeeRecipient",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidFreeAllocation",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidLimit",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidMaxSupply",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidPayment",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidPrice",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidPricingModule",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidTokenId",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__InvalidTransactionType",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__MaxSupplyReached",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__NotExpired",
    inputs: [],
  },
  {
    type: "error",
    name: "Membership__PriceTooLow",
    inputs: [],
  },
  {
    type: "error",
    name: "MintERC2309QuantityExceedsLimit",
    inputs: [],
  },
  {
    type: "error",
    name: "MintToZeroAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "MintZeroQuantity",
    inputs: [],
  },
  {
    type: "error",
    name: "Ownable__NotOwner",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "Ownable__ZeroAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "OwnerQueryForNonexistentToken",
    inputs: [],
  },
  {
    type: "error",
    name: "OwnershipNotInitializedForExtraData",
    inputs: [],
  },
  {
    type: "error",
    name: "PartnerRegistry__InvalidPartnerFee",
    inputs: [
      {
        name: "fee",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "PartnerRegistry__InvalidRecipient",
    inputs: [],
  },
  {
    type: "error",
    name: "PartnerRegistry__NotPartnerAccount",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "PartnerRegistry__PartnerAlreadyRegistered",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "PartnerRegistry__PartnerNotActive",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "PartnerRegistry__PartnerNotRegistered",
    inputs: [
      {
        name: "account",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "PartnerRegistry__RegistryFeeNotPaid",
    inputs: [
      {
        name: "fee",
        type: "uint256",
        internalType: "uint256",
      },
    ],
  },
  {
    type: "error",
    name: "Pausable__NotPaused",
    inputs: [],
  },
  {
    type: "error",
    name: "Pausable__Paused",
    inputs: [],
  },
  {
    type: "error",
    name: "Prepay__InvalidAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "Prepay__InvalidAmount",
    inputs: [],
  },
  {
    type: "error",
    name: "Prepay__InvalidMembership",
    inputs: [],
  },
  {
    type: "error",
    name: "Prepay__InvalidSupplyAmount",
    inputs: [],
  },
  {
    type: "error",
    name: "Reentrancy",
    inputs: [],
  },
  {
    type: "error",
    name: "Referrals__InvalidBasisPoints",
    inputs: [],
  },
  {
    type: "error",
    name: "Referrals__InvalidBpsFee",
    inputs: [],
  },
  {
    type: "error",
    name: "Referrals__InvalidRecipient",
    inputs: [],
  },
  {
    type: "error",
    name: "Referrals__InvalidReferralCode",
    inputs: [],
  },
  {
    type: "error",
    name: "Referrals__ReferralAlreadyExists",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__EntitlementAlreadyExists",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__EntitlementDoesNotExist",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__InvalidEntitlementAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__InvalidPermission",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__PermissionAlreadyExists",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__PermissionDoesNotExist",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__RoleDoesNotExist",
    inputs: [],
  },
  {
    type: "error",
    name: "Roles__RoleIsImmutable",
    inputs: [],
  },
  {
    type: "error",
    name: "TransferCallerNotOwnerNorApproved",
    inputs: [],
  },
  {
    type: "error",
    name: "TransferFromIncorrectOwner",
    inputs: [],
  },
  {
    type: "error",
    name: "TransferToNonERC721ReceiverImplementer",
    inputs: [],
  },
  {
    type: "error",
    name: "TransferToZeroAddress",
    inputs: [],
  },
  {
    type: "error",
    name: "URIQueryForNonexistentToken",
    inputs: [],
  },
] as const;

const _bytecode =
  "0x6080604052348015600e575f5ffd5b5060156019565b60bd565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156064576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560ba57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b6152d5806100ca5f395ff3fe608060405260043610610162575f3560e01c806379dda585116100c657806393b13cb71161007c578063a5a4103111610057578063a5a41031146103ab578063df9a9fe6146103bf578063e847abdd146103de575f5ffd5b806393b13cb71461035757806395d600c81461037857806397fb7c1e1461038c575f5ffd5b80638120f0ba116100ac5780638120f0ba146102f857806383f3f0dc146103255780638c625b0614610344575f5ffd5b806379dda585146102d15780637c9669ac146102e5575f5ffd5b80635becd24a1161011b578063686f768411610101578063686f76841461028b57806369d5f38a1461029e578063706b8e09146102bd575f5ffd5b80635becd24a14610233578063657e45e814610252575f5ffd5b806317c957091161014b57806317c95709146101ae5780633e9491a2146102025780635803909f14610214575f5ffd5b80630ef1be5f146101665780631278076a14610187575b5f5ffd5b348015610171575f5ffd5b5061018561018036600461470d565b6103f2565b005b348015610192575f5ffd5b5061019b6104a7565b6040519081526020015b60405180910390f35b3480156101b9575f5ffd5b5061019b6101c836600461477b565b5f9081527f4775a23600034fdd9f073b224f794d51a58b35ba663a9602623ba7a5c09cce00602052604090205467ffffffffffffffff1690565b34801561020d575f5ffd5b504761019b565b34801561021f575f5ffd5b5061019b61022e36600461477b565b610500565b34801561023e575f5ffd5b5061018561024d36600461477b565b61055b565b34801561025d575f5ffd5b50610266610642565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a5565b61018561029936600461489d565b610681565b3480156102a9575f5ffd5b506101856102b836600461477b565b6106c5565b3480156102c8575f5ffd5b5061019b6107dd565b3480156102dc575f5ffd5b506102666107e6565b6101856102f336600461477b565b610825565b348015610303575f5ffd5b5061030c610868565b60405167ffffffffffffffff90911681526020016101a5565b348015610330575f5ffd5b5061018561033f36600461499c565b610871565b6101856103523660046149b7565b6108eb565b348015610362575f5ffd5b5061036b61091e565b6040516101a59190614a1e565b348015610383575f5ffd5b5061019b610928565b348015610397575f5ffd5b506101856103a636600461477b565b610951565b3480156103b6575f5ffd5b5061019b610a3b565b3480156103ca575f5ffd5b506101856103d93660046149b7565b610a92565b3480156103e9575f5ffd5b50610266610b6b565b6103fa610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610465576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6104a382828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c6a92505050565b5050565b5f6104fb6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b610c95565b905090565b5f610555826105507f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b610f0c565b92915050565b610563610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105c9576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b5f6105f27fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6035490565b9050801580159061060257508082115b15610630576106307fc3983b9100000000000000000000000000000000000000000000000000000000611066565b6106398261106e565b6104a382611112565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b3068929eee149b4bd21268540361069f5763ab143c065f526004601cfd5b3068929eee149b4bd21268556106b582826111d0565b3868929eee149b4bd21268555050565b6106cd610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610733576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b61073c816112d4565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb608546040517f91b7f5ed0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906391b7f5ed906024015f604051808303815f87803b1580156107c4575f5ffd5b505af11580156107d6573d5f5f3e3d5ffd5b5050505050565b5f6104fb61137c565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065473ffffffffffffffffffffffffffffffffffffffff1690565b3068929eee149b4bd2126854036108435763ab143c065f526004601cfd5b3068929eee149b4bd21268556108593382611447565b3868929eee149b4bd212685550565b5f6104fb6115cb565b610879610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108df576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b6108e88161168e565b50565b3068929eee149b4bd2126854036109095763ab143c065f526004601cfd5b3068929eee149b4bd212685561085981611709565b60606104fb6117b2565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6035490565b610959610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bf576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b610a1381610a0e7f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b611864565b6108e8817fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60355565b5f6104fb610a8d6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b611895565b610a9a610baa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f65f4906500000000000000000000000000000000000000000000000000000000815233600482015260240161045c565b610b0981611a08565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905550565b5f6104fb7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6085473ffffffffffffffffffffffffffffffffffffffff1690565b5f807fd2f24d4f172e4e84e48e7c4125b6e904c29e5eba33ad4938fee51dd5dbd4b600805460018201546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481019190915291925073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401602060405180830381865afa158015610c40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c649190614a30565b91505090565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60c6104a38282614ada565b5f5f610c9f61137c565b90505f610ce07fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6085473ffffffffffffffffffffffffffffffffffffffff1690565b90505f610ceb6107e6565b905073ffffffffffffffffffffffffffffffffffffffff8216610d7e578073ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d759190614bf1565b95945050505050565b6040517f5cf4ee91000000000000000000000000000000000000000000000000000000008152600481018490526024810186905273ffffffffffffffffffffffffffffffffffffffff831690635cf4ee9190604401602060405180830381865afa158015610dee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e129190614bf1565b93505f8173ffffffffffffffffffffffffffffffffffffffff16631b159e2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e829190614bf1565b905080851015610f03578173ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef99190614bf1565b9695505050505050565b50505050919050565b5f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60081610f376107e6565b90505f8173ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa79190614bf1565b5f8781526009850160205260409020549091508015610fd457818110828218028118945050505050610555565b5f8373ffffffffffffffffffffffffffffffffffffffff16631b159e2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561101e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110429190614bf1565b90505f61104e88610c95565b90508181108282180281189998505050505050505050565b805f5260045ffd5b6110766107e6565b73ffffffffffffffffffffffffffffffffffffffff16632cbb9d136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e29190614bf1565b8111156108e8576108e87fc3983b9100000000000000000000000000000000000000000000000000000000611066565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6078190557fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6009082907fab14a23e88fb272313490d4f20d63098e64fd38304c0e07a377db98c2b39b92f905f90a25050565b6111d982611b41565b5f6111e2611c37565b90505f81156111f6576111f3611cd0565b90505b6112008484611d62565b5f836040516020016112129190614c08565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290507f686f7684000000000000000000000000000000000000000000000000000000005f6112798761127484338388611e07565b611e39565b90505f5f61128989338589611f74565b91509150806112c95781156112bf5786156112a7576112a783611fef565b6112b1838a612168565b6112ba896121f3565b6112c9565b6112c9838a6122e2565b505050505050505050565b5f6112dd6107e6565b73ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611325573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113499190614bf1565b9050808210156104a3576104a37f3447ac8e00000000000000000000000000000000000000000000000000000000611066565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb60d545f907fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6009060ff16156113d35760070154919050565b6113db6107e6565b73ffffffffffffffffffffffffffffffffffffffff16632cbb9d136040518163ffffffff1660e01b8152600401602060405180830381865afa158015611423573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c649190614bf1565b5f61145182612348565b905073ffffffffffffffffffffffffffffffffffffffff8116611497576114977f5fbd571700000000000000000000000000000000000000000000000000000000611066565b5f6114a06115cb565b67ffffffffffffffff1690505f6114fc846105507f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90503481111561152f5761152f7f34a7a93d00000000000000000000000000000000000000000000000000000000611066565b5f61153a8683612352565b90505f6115478284614c8f565b9050801561155b57611559878261241a565b505b5f6115668434614c8f565b905080156115b7576115b76115af7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b308a84612590565b6115c187866125e8565b5050505050505050565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065474010000000000000000000000000000000000000000900467ffffffffffffffff165f81900361168b5761161f6107e6565b73ffffffffffffffffffffffffffffffffffffffff16638120f0ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611667573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb9190614ca2565b90565b61169781612716565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb606805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61171281611b41565b5f61171b611c37565b90505f811561172f5761172c611cd0565b90505b5f638c625b0660e01b90505f6117598561127484338960405180602001604052805f815250611e07565b90505f5f61176987338588611f74565b91509150806117a957811561179f578515611787576117878361280c565b6117918388612168565b61179a876121f3565b6117a9565b6117a983886122e2565b50505050505050565b60607fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb600600c0180546117e390614a4b565b80601f016020809104026020016040519081016040528092919081815260200182805461180f90614a4b565b801561185a5780601f106118315761010080835404028352916020019161185a565b820191905f5260205f20905b81548152906001019060200180831161183d57829003601f168201915b5050505050905090565b808210156104a3576104a37fccc9aa2e00000000000000000000000000000000000000000000000000000000611066565b5f5f61189f6107e6565b90505f8173ffffffffffffffffffffffffffffffffffffffff16631b159e2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190f9190614bf1565b90508084101561198e578173ffffffffffffffffffffffffffffffffffffffff16630eac306d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611962573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119869190614bf1565b949350505050565b611986848373ffffffffffffffffffffffffffffffffffffffff16639f6542aa6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190614cbd565b61ffff1661292a565b73ffffffffffffffffffffffffffffffffffffffff8116611a4c57611a4c7f0e88bf4b00000000000000000000000000000000000000000000000000000000611066565b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065473ffffffffffffffffffffffffffffffffffffffff166040517f8df80bd600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529190911690638df80bd690602401602060405180830381865afa158015611af0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b149190614cf2565b6108e8576108e87f0e88bf4b00000000000000000000000000000000000000000000000000000000611066565b73ffffffffffffffffffffffffffffffffffffffff8116611b8557611b857f5fbd571700000000000000000000000000000000000000000000000000000000611066565b5f611bae7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6035490565b90508015801590611c09575080611c067f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b10155b156104a3576104a37f7efcdb4900000000000000000000000000000000000000000000000000000000611066565b5f5f611c847f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90505f611c8f61137c565b90505f611c9a61297d565b905082821115611cad575f935050505090565b8015611cc657611cbd60016129a6565b5f935050505090565b6001935050505090565b5f5f611d206104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b9050611d2b816129e3565b915081341015611d5e57611d5e7fb1296a8a00000000000000000000000000000000000000000000000000000000611066565b5090565b602081015173ffffffffffffffffffffffffffffffffffffffff16156104a3578173ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161480611dd95750602081015173ffffffffffffffffffffffffffffffffffffffff1633145b156104a3576104a37f5fbd571700000000000000000000000000000000000000000000000000000000611066565b606084848484604051602001611e209493929190614d0b565b6040516020818303038152906040529050949350505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b1660208201524360348201525f908190605401604051602081830303815290604052805190602001209050611f1881611eec8387611e9f86612a13565b6040805160208082019590955273ffffffffffffffffffffffffffffffffffffffff9390931683820152606080840192909252805180840390920182526080909201909152805191012090565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b91505f611f2483612a59565b511115611f5457611f547ff82e65c300000000000000000000000000000000000000000000000000000000611066565b611f5e8284612b39565b3415611f6d57611f6d82612b91565b5092915050565b5f5f5f611fb56040518060400160405280600981526020017f4a6f696e53706163650000000000000000000000000000000000000000000000815250612bef565b9050611fc18188612d87565b15611fd35760015f9250925050611fe6565b611fe08188888888612fa2565b92509250505b94509492505050565b5f61203e6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90505f61204a826129e3565b90505f5f5f5f61205987612a59565b80602001905181019061206c9190614de2565b929650909450925090507fffffffff0000000000000000000000000000000000000000000000000000000084167f686f768400000000000000000000000000000000000000000000000000000000146120e8576120e87fda6153bd00000000000000000000000000000000000000000000000000000000611066565b5f818060200190518101906120fd9190614e66565b90505f5f61210b868a612352565b90505f61211c87855f01518c61312f565b90505f61213388866020015187604001518e61329c565b90508082612141858d614c8f565b61214b9190614c8f565b6121559190614c8f565b93505050506112c98986868a858d61341e565b5f8281527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e01602052604090205480156121ee576121a583826134a9565b6121ee6121e67fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b308484612590565b505050565b5f6121fc613511565b9050612280816122506104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b5f9182527fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb609602052604090912055565b61228b826001613538565b61229c816122976115cb565b6125e8565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907f2f40b0474996b72a4251e00fb9170cdd960deea1dc749772cbbab61395b9b576905f90a35050565b6122fa8260405180602001604052805f815250612b39565b6123048282612168565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f86fd446d5c04e892d58b448a924dcd9c3ece3a5e0d2960b8c35cd475a5595a1f905f90a25050565b5f61055582613551565b5f61235c82611895565b905061055561239f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b846123a86107e6565b73ffffffffffffffffffffffffffffffffffffffff16634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124149190614a30565b84612590565b5f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6008161247b7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b90507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016124dd578382600a015f8282546124cd9190614f0e565b9091555084935061055592505050565b5f6124fe73ffffffffffffffffffffffffffffffffffffffff831630613682565b905061250c82873088612590565b5f61252d73ffffffffffffffffffffffffffffffffffffffff841630613682565b90505f61253a8383614c8f565b905086811461256c5761256c7fb1296a8a00000000000000000000000000000000000000000000000000000000611066565b8085600a015f82825461257f9190614f0e565b909155509098975050505050505050565b80156125e25773ffffffffffffffffffffffffffffffffffffffff841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146125d8576125d3848484846136b5565b6125e2565b6125e28282613749565b50505050565b5f8281527f4775a23600034fdd9f073b224f794d51a58b35ba663a9602623ba7a5c09cce00602081905260409091205467ffffffffffffffff16801580159061262e57505f5b15612668576040517ff7d2131a0000000000000000000000000000000000000000000000000000000081526004810185905260240161045c565b5f428267ffffffffffffffff16111561268c576126858483614f21565b9050612699565b6126968442614f21565b90505b5f858152602084815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516908117909155915191825286917f2ec2be2c4b90c2cf13ecb6751a24daed6bb741ae5ed3f7371aabf9402f6d62e8910160405180910390a25050505050565b5f61271f6107e6565b73ffffffffffffffffffffffffffffffffffffffff16638120f0ba6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b9190614ca2565b67ffffffffffffffff1690508167ffffffffffffffff165f036127d1576127d17f82323d2e00000000000000000000000000000000000000000000000000000000611066565b808267ffffffffffffffff1611156104a3576104a37f82323d2e00000000000000000000000000000000000000000000000000000000611066565b5f61285b6104f67f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df01547f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00540390565b90505f612867826129e3565b90505f5f5f61287586612a59565b8060200190518101906128889190614de2565b50919450925090507fffffffff0000000000000000000000000000000000000000000000000000000083167f8c625b060000000000000000000000000000000000000000000000000000000014612902576129027fda6153bd00000000000000000000000000000000000000000000000000000000611066565b5f61290d8387612352565b90505f61291a8287614c8f565b90506115c188858589858c61341e565b5f61271082111561295f5761295f7f197f19620000000000000000000000000000000000000000000000000000000083613769565b61271061296c8385614f41565b6129769190614f58565b9392505050565b5f7f097b4f25b64e012d0cf55f67e9b34fe5d57f15b11b95baa4ddd136b424967c005b54919050565b7f097b4f25b64e012d0cf55f67e9b34fe5d57f15b11b95baa4ddd136b424967c008054829082905f906129da908490614c8f565b90915550505050565b5f5f6129ed61297d565b905080156129fd57505f92915050565b825f03612a0c57505f92915050565b5090919050565b5f8181527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e0060208190526040822080549083612a4e83614f90565b909155509392505050565b5f8181527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e026020526040902080546060917f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e0091612ab590614a4b565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae190614a4b565b8015612b2c5780601f10612b0357610100808354040283529160200191612b2c565b820191905f5260205f20905b815481529060010190602001808311612b0f57829003601f168201915b5050505050915050919050565b5f8281527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e02602052604090207f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e00906125e28382614ada565b5f8181527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e016020526040812080547f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e00923492916129da908490614f0e565b60605f612bfa613775565b80519091505f8167ffffffffffffffff811115612c1957612c196147b3565b604051908082528060200260200182016040528015612c7c57816020015b612c696040518060a001604052805f8152602001606081526020015f1515815260200160608152602001606081525090565b815260200190600190039081612c375790505b50855160208701209091505f90815b84811015612d7b575f5f5f5f612cb98a8681518110612cac57612cac614fc7565b60200260200101516137a0565b93509350935093505f5b8251811015612d6b5786838281518110612cdf57612cdf614fc7565b60200260200101518051906020012003612d63576040518060a001604052808c8881518110612d1057612d10614fc7565b60200260200101518152602001868152602001851515815260200184815260200183815250898981518110612d4757612d47614fc7565b602002602001018190525087612d5c90614f90565b9750612d6b565b600101612cc3565b5050505050806001019050612c8b565b50508152949350505050565b5f5f612d928361388c565b90505f5b8451811015612f9857848181518110612db157612db1614fc7565b602002602001015160400151612f90575f5b858281518110612dd557612dd5614fc7565b60200260200101516080015151811015612f8e575f868381518110612dfc57612dfc614fc7565b6020026020010151608001518281518110612e1957612e19614fc7565b602002602001015190508073ffffffffffffffffffffffffffffffffffffffff16632e1b61e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e909190614cf2565b158015612f7357508073ffffffffffffffffffffffffffffffffffffffff16630cf0b5335f5f1b866040518060400160405280600981526020017f4a6f696e53706163650000000000000000000000000000000000000000000000815250604051602001612efe9190614ff4565b604051602081830303815290604052612f169061500a565b6040518463ffffffff1660e01b8152600401612f349392919061504c565b602060405180830381865afa158015612f4f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f739190614cf2565b15612f85576001945050505050610555565b50600101612dc3565b505b600101612d96565b505f949350505050565b5f8080805b885181101561312057888181518110612fc257612fc2614fc7565b602002602001015160400151613118575f5b898281518110612fe657612fe6614fc7565b60200260200101516080015151811015613116575f8a838151811061300d5761300d614fc7565b602002602001015160800151828151811061302a5761302a614fc7565b602002602001015190508073ffffffffffffffffffffffffffffffffffffffff16632e1b61e46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561307d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a19190614cf2565b1561310d57836130de576130d58a8a8a848f88815181106130c4576130c4614fc7565b60200260200101515f01518c613bd0565b60019350613108565b6131088a8a8a848f88815181106130f7576130f7614fc7565b60200260200101515f01515f613bd0565b600194505b50600101612fd4565b505b600101612fa7565b505f9250509550959350505050565b5f73ffffffffffffffffffffffffffffffffffffffff831661315257505f612976565b5f6131917fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6065473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f5cb4f54800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529190911690635cb4f54890602401608060405180830381865afa1580156131fd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322191906150b7565b905080604001515f03613237575f915050612976565b61324583826040015161292a565b91506132946132887fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b86836020015185612590565b509392505050565b5f82515f1461334c575f6132af84613cc0565b604081015190915073ffffffffffffffffffffffffffffffffffffffff1615806132db57506020810151155b156132e9575f915050611986565b6132f783826020015161292a565b915061334661333a7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b87836040015185612590565b50611986565b73ffffffffffffffffffffffffffffffffffffffff841615611986578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036133a257505f611986565b6133d3826133ce7faca21cc4d2a125f3e0ae03aa135d42b2b9177631aca87599d42a68b47e9008015490565b61292a565b90506119866134167fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb6045473ffffffffffffffffffffffffffffffffffffffff1690565b868684612590565b81156134305761342e858361241a565b505b61343a86846134a9565b6134528660405180602001604052805f815250612b39565b5f61345b613d68565b90505f61348a825f8560405160200161347691815260200190565b604051602081830303815290604052613e3b565b9050613497828783613eac565b6115c1826134a3610baa565b83613eac565b5f8281527f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e016020526040812080547f34516f6fe09a043d57f1ff579a303a7ae85314751c77b4eb1a55837604a86e0092849291613507908490614c8f565b9091555050505050565b5f7f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df006129a0565b6104a3828260405180602001604052805f815250613f2b565b5f8181527f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df046020526040812054907f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00907c01000000000000000000000000000000000000000000000000000000008316900361364f57815f036136495780548310613608576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092015f81815260048401602052604090205490929091508115613609575b50919050565b506040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816014526f70a082310000000000000000000000005f5260208060246010865afa601f3d111660205102905092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603156125e25773ffffffffffffffffffffffffffffffffffffffff83163014613728576125d373ffffffffffffffffffffffffffffffffffffffff8516848484613ff3565b6125e273ffffffffffffffffffffffffffffffffffffffff85168383614055565b6104a373ffffffffffffffffffffffffffffffffffffffff8316826140a8565b815f528060045260245ffd5b60606104fb7f672ef851d5f92307da037116e23aa9e31af7e1f7e3ca62c4e6d540631df3fd016140c1565b5f8181527f672ef851d5f92307da037116e23aa9e31af7e1f7e3ca62c4e6d540631df3fd0360205260408120805460609291839182919081906137e290614a4b565b80601f016020809104026020016040519081016040528092919081815260200182805461380e90614a4b565b80156138595780601f1061383057610100808354040283529160200191613859565b820191905f5260205f20905b81548152906001019060200180831161383c57829003601f168201915b5050505060018301549196505060ff169350613877600282016140cd565b9250613882816141a4565b9150509193509193565b60605f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb600600601546040517f02345b9800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911691505f9082906302345b98906024015f60405180830381865afa158015613923573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526139689190810190615131565b905080515f03613ad9576040517ff821039800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301525f919084169063f821039890602401602060405180830381865afa1580156139df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a039190614a30565b905073ffffffffffffffffffffffffffffffffffffffff811615613ad7576040517f02345b9800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015291955085918416906302345b98906024015f60405180830381865afa158015613a8f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613ad49190810190615131565b91505b505b80515f613ae7826001614f0e565b67ffffffffffffffff811115613aff57613aff6147b3565b604051908082528060200260200182016040528015613b28578160200160208202803683370190505b5090505f5b82811015613b8e57838181518110613b4757613b47614fc7565b6020026020010151828281518110613b6157613b61614fc7565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101613b2d565b5085818381518110613ba257613ba2614fc7565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015295945050505050565b613bdb8684836141b3565b5f7f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e005f8681526001828101602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117815560030180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055905080546040805173ffffffffffffffffffffffffffffffffffffffff89811660208301526117a99316918a918991889188910160405160208183030381529060405261426c565b613cf86040518060600160405280606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5080516020808301919091205f9081527faca21cc4d2a125f3e0ae03aa135d42b2b9177631aca87599d42a68b47e9008028252604090819020815160608101835293845280549284019290925260019091015473ffffffffffffffffffffffffffffffffffffffff169082015290565b5f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb600600601546040517f44ab66800000000000000000000000000000000000000000000000000000000081527f526976657241697264726f700000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116906344ab668090602401602060405180830381865afa158015613e17573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb9190614a30565b6040517fdc69fdde0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063dc69fdde90613e9190869086906004016151e5565b602060405180830381865afa158015611962573d5f5f3e3d5ffd5b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390528416906340c10f19906044015f604051808303815f87803b158015613f19575f5ffd5b505af11580156117a9573d5f5f3e3d5ffd5b613f35838361438d565b73ffffffffffffffffffffffffffffffffffffffff83163b156121ee577f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00548281035b613f8a5f868380600101945086614542565b613fc0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110613f7857817f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df0054146107d6575f5ffd5b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af18060015f51141661404757803d873b15171061404757637939f4245f526004601cfd5b505f60605260405250505050565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661409e57803d853b15171061409e576390b8ec185f526004601cfd5b505f603452505050565b5f385f3884865af16104a35763b12d13eb5f526004601cfd5b60605f612976836146b4565b6060815f01805480602002602001604051908101604052809291908181526020015f905b82821015614199578382905f5260205f2001805461410e90614a4b565b80601f016020809104026020016040519081016040528092919081815260200182805461413a90614a4b565b80156141855780601f1061415c57610100808354040283529160200191614185565b820191905f5260205f20905b81548152906001019060200180831161416857829003601f168201915b5050505050815260200190600101906140f1565b505050509050919050565b60605f612976836004016140c1565b348111156141e4576141e47ff4e95a4100000000000000000000000000000000000000000000000000000000611066565b73ffffffffffffffffffffffffffffffffffffffff8316614228576142287f99ef038800000000000000000000000000000000000000000000000000000000611066565b73ffffffffffffffffffffffffffffffffffffffff82166121ee576121ee7f4bb7c20500000000000000000000000000000000000000000000000000000000611066565b81156142ff576040517f21be050a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906321be050a9084906142cc908990899089908890600401615232565b5f604051808303818588803b1580156142e3575f5ffd5b505af11580156142f5573d5f5f3e3d5ffd5b5050505050614385565b6040517f21be050a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906321be050a90614357908890889088908790600401615232565b5f604051808303815f87803b15801561436e575f5ffd5b505af1158015614380573d5f5f3e3d5ffd5b505050505b505050505050565b7f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df00545f8290036143e9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f8181527f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df056020908152604080832080546801000000000000000188020190558483527f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df0490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146144e05780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f5fa46001016144aa565b50815f0361451a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f6569bde4a160c636ea8b8d11acb83a60d7fec0b8f2e09389306cba0e1340df005550505050565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061459c90339089908890889060040161526c565b6020604051808303815f875af19250505080156145f4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526145f1918101906152bc565b60015b614669573d808015614621576040519150601f19603f3d011682016040523d82523d5f602084013e614626565b606091505b5080515f03614661576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611986565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561470157602002820191905f5260205f20905b8154815260200190600101908083116146ed575b50505050509050919050565b5f5f6020838503121561471e575f5ffd5b823567ffffffffffffffff811115614734575f5ffd5b8301601f81018513614744575f5ffd5b803567ffffffffffffffff81111561475a575f5ffd5b85602082840101111561476b575f5ffd5b6020919091019590945092505050565b5f6020828403121561478b575f5ffd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146108e8575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715614803576148036147b3565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614850576148506147b3565b604052919050565b5f67ffffffffffffffff821115614871576148716147b3565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f5f604083850312156148ae575f5ffd5b82356148b981614792565b9150602083013567ffffffffffffffff8111156148d4575f5ffd5b8301606081860312156148e5575f5ffd5b6148ed6147e0565b81356148f881614792565b8152602082013561490881614792565b6020820152604082013567ffffffffffffffff811115614926575f5ffd5b80830192505085601f83011261493a575f5ffd5b813561494d61494882614858565b614809565b818152876020838601011115614961575f5ffd5b816020850160208301375f60208383010152806040840152505080925050509250929050565b67ffffffffffffffff811681146108e8575f5ffd5b5f602082840312156149ac575f5ffd5b813561297681614987565b5f602082840312156149c7575f5ffd5b813561297681614792565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61297660208301846149d2565b5f60208284031215614a40575f5ffd5b815161297681614792565b600181811c90821680614a5f57607f821691505b602082108103613649577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b601f8211156121ee57805f5260205f20601f840160051c81016020851015614abb5750805b601f840160051c820191505b818110156107d6575f8155600101614ac7565b815167ffffffffffffffff811115614af457614af46147b3565b614b0881614b028454614a4b565b84614a96565b6020601f821160018114614b59575f8315614b235750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1784556107d6565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015614ba65787850151825560209485019460019092019101614b86565b5084821015614be257868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215614c01575f5ffd5b5051919050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201525f604083015160608084015261198660808401826149d2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561055557610555614c62565b5f60208284031215614cb2575f5ffd5b815161297681614987565b5f60208284031215614ccd575f5ffd5b815161ffff81168114612976575f5ffd5b80518015158114614ced575f5ffd5b919050565b5f60208284031215614d02575f5ffd5b61297682614cde565b7fffffffff000000000000000000000000000000000000000000000000000000008516815273ffffffffffffffffffffffffffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f610ef960808301846149d2565b80517fffffffff0000000000000000000000000000000000000000000000000000000081168114614ced575f5ffd5b5f614db961494884614858565b9050828152838383011115614dcc575f5ffd5b8282602083015e5f602084830101529392505050565b5f5f5f5f60808587031215614df5575f5ffd5b614dfe85614d7d565b93506020850151614e0e81614792565b6040860151909350614e1f81614792565b606086015190925067ffffffffffffffff811115614e3b575f5ffd5b8501601f81018713614e4b575f5ffd5b614e5a87825160208401614dac565b91505092959194509250565b5f60208284031215614e76575f5ffd5b815167ffffffffffffffff811115614e8c575f5ffd5b820160608185031215614e9d575f5ffd5b614ea56147e0565b8151614eb081614792565b81526020820151614ec081614792565b6020820152604082015167ffffffffffffffff811115614ede575f5ffd5b80830192505084601f830112614ef2575f5ffd5b614f0185835160208501614dac565b6040820152949350505050565b8082018082111561055557610555614c62565b67ffffffffffffffff818116838216019081111561055557610555614c62565b808202811582820484141761055557610555614c62565b5f82614f8b577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fc057614fc0614c62565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b80516020808301519190811015613649577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b5f60608201858352606060208401528085518083526080850191506020870192505f5b818110156150a357835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161506f565b505060409390930193909352509392505050565b5f60808284031280156150c8575f5ffd5b506040516080810167ffffffffffffffff811182821017156150ec576150ec6147b3565b60405282516150fa81614792565b8152602083015161510a81614792565b60208201526040838101519082015261512560608401614cde565b60608201529392505050565b5f60208284031215615141575f5ffd5b815167ffffffffffffffff811115615157575f5ffd5b8201601f81018413615167575f5ffd5b805167ffffffffffffffff811115615181576151816147b3565b8060051b61519160208201614809565b918252602081840181019290810190878411156151ac575f5ffd5b6020850194505b838510156151da57845192506151c883614792565b828252602094850194909101906151b3565b979650505050505050565b5f6004841061521b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8382526040602083015261198660408301846149d2565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152826040820152608060608201525f610ef960808301846149d2565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f610ef960808301846149d2565b5f602082840312156152cc575f5ffd5b61297682614d7d56";

type MembershipFacetConstructorParams =
  | [signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: MembershipFacetConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;

export class MembershipFacet__factory extends ContractFactory {
  constructor(...args: MembershipFacetConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      super(_abi, _bytecode, args[0]);
    }
  }

  override deploy(
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<MembershipFacet> {
    return super.deploy(overrides || {}) as Promise<MembershipFacet>;
  }
  override getDeployTransaction(
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): TransactionRequest {
    return super.getDeployTransaction(overrides || {});
  }
  override attach(address: string): MembershipFacet {
    return super.attach(address) as MembershipFacet;
  }
  override connect(signer: Signer): MembershipFacet__factory {
    return super.connect(signer) as MembershipFacet__factory;
  }

  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): MembershipFacetInterface {
    return new utils.Interface(_abi) as MembershipFacetInterface;
  }
  static connect(
    address: string,
    signerOrProvider: Signer | Provider
  ): MembershipFacet {
    return new Contract(address, _abi, signerOrProvider) as MembershipFacet;
  }
}
