/* 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 { SuperGalatic, SuperGalaticInterface } from "../SuperGalatic";

const _abi = [
  {
    type: "constructor",
    inputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "approve",
    inputs: [
      {
        name: "to",
        type: "address",
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "balanceOf",
    inputs: [
      {
        name: "owner",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "categoryId",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "createGenesis",
    inputs: [
      {
        name: "minter",
        type: "address",
        internalType: "address",
      },
      {
        name: "priceUnit",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "createRandomGenesis",
    inputs: [
      {
        name: "minter",
        type: "address",
        internalType: "address",
      },
      {
        name: "priceUnit",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "price",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "factory",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getApproved",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "getBodyInfo",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "bodyType",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "level",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "rarity",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "initialize",
    inputs: [
      {
        name: "_admin",
        type: "address",
        internalType: "address",
      },
      {
        name: "_factory",
        type: "address",
        internalType: "address",
      },
      {
        name: "_categoryId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "isApprovedForAll",
    inputs: [
      {
        name: "owner",
        type: "address",
        internalType: "address",
      },
      {
        name: "operator",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "name",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "string",
        internalType: "string",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "nftInfos",
    inputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "level",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "rarity",
        type: "uint8",
        internalType: "enum IBaseType.Rarity",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "onERC721Received",
    inputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
      {
        name: "",
        type: "address",
        internalType: "address",
      },
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    outputs: [
      {
        name: "",
        type: "bytes4",
        internalType: "bytes4",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "owner",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "ownerOf",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "renounceOwnership",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "safeTransferFrom",
    inputs: [
      {
        name: "from",
        type: "address",
        internalType: "address",
      },
      {
        name: "to",
        type: "address",
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "safeTransferFrom",
    inputs: [
      {
        name: "from",
        type: "address",
        internalType: "address",
      },
      {
        name: "to",
        type: "address",
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "data",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setApprovalForAll",
    inputs: [
      {
        name: "operator",
        type: "address",
        internalType: "address",
      },
      {
        name: "approved",
        type: "bool",
        internalType: "bool",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "supportsInterface",
    inputs: [
      {
        name: "interfaceId",
        type: "bytes4",
        internalType: "bytes4",
      },
    ],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "symbol",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "string",
        internalType: "string",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "tokenByIndex",
    inputs: [
      {
        name: "index",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "tokenOfOwnerByIndex",
    inputs: [
      {
        name: "owner",
        type: "address",
        internalType: "address",
      },
      {
        name: "index",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "tokenURI",
    inputs: [
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [
      {
        name: "",
        type: "string",
        internalType: "string",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "totalSupply",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "transferFrom",
    inputs: [
      {
        name: "from",
        type: "address",
        internalType: "address",
      },
      {
        name: "to",
        type: "address",
        internalType: "address",
      },
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "transferOwnership",
    inputs: [
      {
        name: "newOwner",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "updateBody",
    inputs: [
      {
        name: "bodyType",
        type: "uint256",
        internalType: "uint256",
      },
      {
        name: "tokenId",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    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: "Initialized",
    inputs: [
      {
        name: "version",
        type: "uint8",
        indexed: false,
        internalType: "uint8",
      },
    ],
    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: "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: "mintGensisNFT",
    inputs: [
      {
        name: "nftId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "owner",
        type: "address",
        indexed: false,
        internalType: "address",
      },
      {
        name: "categoryId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "priceUnit",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "mintRandomGensisNFT",
    inputs: [
      {
        name: "nftId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "owner",
        type: "address",
        indexed: false,
        internalType: "address",
      },
      {
        name: "categoryId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "bodyTypes",
        type: "uint256[]",
        indexed: false,
        internalType: "uint256[]",
      },
      {
        name: "priceUnit",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "price",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "updateBodyPart",
    inputs: [
      {
        name: "nftContract",
        type: "address",
        indexed: false,
        internalType: "address",
      },
      {
        name: "nftId",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "bodyType",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "bodyLevel",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "bodyRarity",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "error",
    name: "AddressNotNull",
    inputs: [],
  },
] as const;

const _bytecode =
  "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612ae680620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063b88d4fde11610097578063c70fbf7411610071578063c70fbf7414610400578063c87b56dd14610413578063e985e9c514610426578063f2fde38b1461046257600080fd5b8063b88d4fde146103c6578063c45a0155146103d9578063c529b32f146103ed57600080fd5b806395d89b41116100d357806395d89b411461035d578063a01e7b2814610365578063a22cb465146103a9578063b503a2b9146103bc57600080fd5b8063715018a61461033157806380002091146103395780638da5cb5b1461034c57600080fd5b806323b872dd1161016657806342842e0e1161014057806342842e0e146102e55780634f6ccce7146102f85780636352211e1461030b57806370a082311461031e57600080fd5b806323b872dd146102975780632f745c59146102aa5780633bebf086146102bd57600080fd5b8063095ea7b3116101a2578063095ea7b314610231578063150b7a02146102465780631794bb3c1461027257806318160ddd1461028557600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063081812fc14610206575b600080fd5b6101dc6101d7366004612693565b610475565b60405190151581526020015b60405180910390f35b6101f96104a0565b6040516101e891906127a0565b6102196102143660046126cd565b610532565b6040516001600160a01b0390911681526020016101e8565b61024461023f366004612636565b610559565b005b61025961025436600461251e565b610674565b6040516001600160e01b031990911681526020016101e8565b6102446102803660046124e2565b610685565b60cb545b6040519081526020016101e8565b6102446102a53660046124e2565b610859565b6102896102b8366004612636565b61088a565b6102d06102cb3660046126e6565b610920565b604080519283526020830191909152016101e8565b6102446102f33660046124e2565b610965565b6102896103063660046126cd565b610980565b6102196103193660046126cd565b610a13565b61028961032c366004612494565b610a73565b610244610af9565b6102446103473660046126e6565b610b0d565b6033546001600160a01b0316610219565b6101f9610bf9565b61039b6103733660046126e6565b6101616020908152600092835260408084209091529082529020805460019091015460ff1682565b6040516101e8929190612950565b6102446103b73660046125fa565b610c08565b61028961015f5481565b6102446103d436600461251e565b610c17565b61016054610219906001600160a01b031681565b6102446103fb366004612660565b610c49565b61024461040e366004612636565b6111b4565b6101f96104213660046126cd565b611555565b6101dc6104343660046124af565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205460ff1690565b610244610470366004612494565b6115c9565b60006001600160e01b0319821663780e9d6360e01b148061049a575061049a82611642565b92915050565b6060609780546104af906129dd565b80601f01602080910402602001604051908101604052809291908181526020018280546104db906129dd565b80156105285780601f106104fd57610100808354040283529160200191610528565b820191906000526020600020905b81548152906001019060200180831161050b57829003601f168201915b5050505050905090565b600061053d82611692565b506000908152609b60205260409020546001600160a01b031690565b600061056482610a13565b9050806001600160a01b0316836001600160a01b031614156105d75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105f357506105f38133610434565b6106655760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105ce565b61066f83836116f1565b505050565b630a85bd0160e11b5b949350505050565b600054610100900460ff16158080156106a55750600054600160ff909116105b806106bf5750303b1580156106bf575060005460ff166001145b6107225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ce565b6000805460ff191660011790558015610745576000805461ff0019166101001790555b6001600160a01b038416158061076257506001600160a01b038316155b156107805760405163f8b7150760e01b815260040160405180910390fd5b6107d26040518060400160405280600c81526020016b537570657247616c6174696360a01b8152506040518060400160405280600c81526020016b537570657247616c6174696360a01b81525061175f565b6107da611790565b6107e26117b7565b6107eb846115c9565b61015f82905561016080546001600160a01b0319166001600160a01b0385161790558015610853576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b61086333826117e6565b61087f5760405162461bcd60e51b81526004016105ce906127b3565b61066f838383611864565b600061089583610a73565b82106108f75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105ce565b506001600160a01b0391909116600090815260c960209081526040808320938352929052205490565b6000828152610161602090815260408083208484529091528120805460018201548392919060ff16600381111561095957610959612a6b565b92509250509250929050565b61066f83838360405180602001604052806000815250610c17565b600061098b60cb5490565b82106109ee5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105ce565b60cb8281548110610a0157610a01612a97565b90600052602060002001549050919050565b6000818152609960205260408120546001600160a01b03168061049a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105ce565b60006001600160a01b038216610add5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105ce565b506001600160a01b03166000908152609a602052604090205490565b610b016119d5565b610b0b6000611a2f565b565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b03163314610b525760405162461bcd60e51b81526004016105ce91906127a0565b5060008181526101616020908152604080832085845290915290208054610b7a906001612982565b80825560018201547f05152de66c9e6670759e073203a749937a7427a65ba4ececb8b23e4e05c4f9e79130918591879160ff166003811115610bbe57610bbe612a6b565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0015b60405180910390a1505050565b6060609880546104af906129dd565b610c13338383611a81565b5050565b610c2133836117e6565b610c3d5760405162461bcd60e51b81526004016105ce906127b3565b61085384848484611b50565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b03163314610c8e5760405162461bcd60e51b81526004016105ce91906127a0565b506000610c9a60cb5490565b610ca5906001612982565b90506127118110604051806040016040528060028152602001610c8d60f21b81525090610ce55760405162461bcd60e51b81526004016105ce91906127a0565b50610d0384610cf360cb5490565b610cfe906001612982565b611b83565b6000610d10826000611b9d565b90506000610d1f836001611b9d565b90506000610d2e846002611b9d565b90506000610d3d856003611b9d565b90506000610d4c866004611b9d565b90506000610d5b876005611b9d565b9050604051806040016040528060008152602001876003811115610d8157610d81612a6b565b9052600088815261016160209081526040808320600180855290835292208351815590830151818301805492939192909160ff1990911690836003811115610dcb57610dcb612a6b565b0217905550905050604051806040016040528060008152602001866003811115610df757610df7612a6b565b90526000888152610161602052604081209060038152602080820192909252604001600020825181559082015160018083018054909160ff1990911690836003811115610e4657610e46612a6b565b0217905550905050604051806040016040528060008152602001856003811115610e7257610e72612a6b565b9052600088815261016160209081526040808320600684528252909120825181559082015160018083018054909160ff1990911690836003811115610eb957610eb9612a6b565b0217905550905050604051806040016040528060008152602001846003811115610ee557610ee5612a6b565b9052600088815261016160209081526040808320600284528252909120825181559082015160018083018054909160ff1990911690836003811115610f2c57610f2c612a6b565b0217905550905050604051806040016040528060008152602001836003811115610f5857610f58612a6b565b9052600088815261016160209081526040808320600584528252909120825181559082015160018083018054909160ff1990911690836003811115610f9f57610f9f612a6b565b0217905550905050604051806040016040528060008152602001826003811115610fcb57610fcb612a6b565b9052600088815261016160209081526040808320600484528252909120825181559082015160018083018054909160ff199091169083600381111561101257611012612a6b565b02179055505060408051600680825260e0820190925260009250906020820160c08036833701905050905086600381111561104f5761104f612a6b565b8160008151811061106257611062612a97565b60200260200101818152505085600381111561108057611080612a6b565b8160018151811061109357611093612a97565b6020026020010181815250508460038111156110b1576110b1612a6b565b816002815181106110c4576110c4612a97565b6020026020010181815250508360038111156110e2576110e2612a6b565b816003815181106110f5576110f5612a97565b60200260200101818152505082600381111561111357611113612a6b565b8160048151811061112657611126612a97565b60200260200101818152505081600381111561114457611144612a6b565b8160058151811061115757611157612a97565b6020026020010181815250507f7c2d5f79f87d2ebb0923347996bb8931b1e01cf9ff71b3e74175f9e8a068c683888c61015f54848e8e60405161119f969594939291906128e2565b60405180910390a15050505050505050505050565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b031633146111f95760405162461bcd60e51b81526004016105ce91906127a0565b50600061120560cb5490565b611210906001612982565b90506127118110604051806040016040528060028152602001610c8d60f21b815250906112505760405162461bcd60e51b81526004016105ce91906127a0565b5061125b8382611b83565b604080518082018252600080825260208083018281528583526101618252848320600180855292529390912082518155925183820180549394939192909160ff1916908360038111156112b0576112b0612a6b565b0217905550905050604051806040016040528060008152602001600060038111156112dd576112dd612a6b565b90526000828152610161602052604081209060038152602080820192909252604001600020825181559082015160018083018054909160ff199091169083600381111561132c5761132c612a6b565b02179055509050506040518060400160405280600081526020016000600381111561135957611359612a6b565b9052600082815261016160209081526040808320600684528252909120825181559082015160018083018054909160ff19909116908360038111156113a0576113a0612a6b565b0217905550905050604051806040016040528060008152602001600060038111156113cd576113cd612a6b565b9052600082815261016160209081526040808320600284528252909120825181559082015160018083018054909160ff199091169083600381111561141457611414612a6b565b02179055509050506040518060400160405280600081526020016000600381111561144157611441612a6b565b9052600082815261016160209081526040808320600584528252909120825181559082015160018083018054909160ff199091169083600381111561148857611488612a6b565b0217905550905050604051806040016040528060008152602001600060038111156114b5576114b5612a6b565b9052600082815261016160209081526040808320600484528252909120825181559082015160018083018054909160ff19909116908360038111156114fc576114fc612a6b565b02179055505061015f54604080518481526001600160a01b038716602082015290810191909152606081018490527f96a35b632e852ba2203cd789f452e1772166012885d056fef2ef736112b0fdb69150608001610bec565b606061156082611692565b600061157760408051602081019091526000815290565b9050600081511161159757604051806020016040528060008152506115c2565b806115a184611c52565b6040516020016115b2929190612734565b6040516020818303038152906040525b9392505050565b6115d16119d5565b6001600160a01b0381166116365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ce565b61163f81611a2f565b50565b60006001600160e01b031982166380ac58cd60e01b148061167357506001600160e01b03198216635b5e139f60e01b145b8061049a57506301ffc9a760e01b6001600160e01b031983161461049a565b6000818152609960205260409020546001600160a01b031661163f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105ce565b6000818152609b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061172682610a13565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054610100900460ff166117865760405162461bcd60e51b81526004016105ce90612897565b610c138282611cef565b600054610100900460ff16610b0b5760405162461bcd60e51b81526004016105ce90612897565b600054610100900460ff166117de5760405162461bcd60e51b81526004016105ce90612897565b610b0b611d3d565b6000806117f283610a13565b9050806001600160a01b0316846001600160a01b0316148061183957506001600160a01b038082166000908152609c602090815260408083209388168352929052205460ff165b8061067d5750836001600160a01b031661185284610532565b6001600160a01b031614949350505050565b826001600160a01b031661187782610a13565b6001600160a01b03161461189d5760405162461bcd60e51b81526004016105ce90612852565b6001600160a01b0382166118ff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ce565b61190c8383836001611d6d565b826001600160a01b031661191f82610a13565b6001600160a01b0316146119455760405162461bcd60e51b81526004016105ce90612852565b6000818152609b6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609a8552838620805460001901905590871680865283862080546001019055868652609990945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6033546001600160a01b03163314610b0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ce565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611ae35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105ce565b6001600160a01b038381166000818152609c6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b5b848484611864565b611b6784848484611ea1565b6108535760405162461bcd60e51b81526004016105ce90612800565b610c13828260405180602001604052806000815250611fab565b610162805460009182611baf83612a18565b90915550600090506103e8611bc560014361299a565b610162546040805192406020840152820187905260608201869052608082015260a0016040516020818303038152906040528051906020012060001c611c0b9190612a33565b905061030c811015611c205760009150611c4b565b6103d4811015611c335760019150611c4b565b6103e6811015611c465760029150611c4b565b600391505b5092915050565b60606000611c5f83611fde565b600101905060008167ffffffffffffffff811115611c7f57611c7f612aad565b6040519080825280601f01601f191660200182016040528015611ca9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611ce257611ce7565b611cb3565b509392505050565b600054610100900460ff16611d165760405162461bcd60e51b81526004016105ce90612897565b8151611d299060979060208501906123df565b50805161066f9060989060208401906123df565b600054610100900460ff16611d645760405162461bcd60e51b81526004016105ce90612897565b610b0b33611a2f565b6001811115611ddc5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016105ce565b816001600160a01b038516611e3857611e338160cb8054600083815260cc60205260408120829055600182018355919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0155565b611e5b565b836001600160a01b0316856001600160a01b031614611e5b57611e5b85826120b6565b6001600160a01b038416611e7757611e7281612153565b611e9a565b846001600160a01b0316846001600160a01b031614611e9a57611e9a8482612202565b5050505050565b60006001600160a01b0384163b15611fa357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ee5903390899088908890600401612763565b602060405180830381600087803b158015611eff57600080fd5b505af1925050508015611f2f575060408051601f3d908101601f19168201909252611f2c918101906126b0565b60015b611f89573d808015611f5d576040519150601f19603f3d011682016040523d82523d6000602084013e611f62565b606091505b508051611f815760405162461bcd60e51b81526004016105ce90612800565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061067d565b50600161067d565b611fb58383612246565b611fc26000848484611ea1565b61066f5760405162461bcd60e51b81526004016105ce90612800565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061201d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612049576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061206757662386f26fc10000830492506010015b6305f5e100831061207f576305f5e100830492506008015b612710831061209357612710830492506004015b606483106120a5576064830492506002015b600a831061049a5760010192915050565b600060016120c384610a73565b6120cd919061299a565b600083815260ca6020526040902054909150808214612120576001600160a01b038416600090815260c960209081526040808320858452825280832054848452818420819055835260ca90915290208190555b50600091825260ca602090815260408084208490556001600160a01b03909416835260c981528383209183525290812055565b60cb546000906121659060019061299a565b600083815260cc602052604081205460cb805493945090928490811061218d5761218d612a97565b906000526020600020015490508060cb83815481106121ae576121ae612a97565b600091825260208083209091019290925582815260cc909152604080822084905585825281205560cb8054806121e6576121e6612a81565b6001900381819060005260206000200160009055905550505050565b600061220d83610a73565b6001600160a01b03909316600090815260c960209081526040808320868452825280832085905593825260ca9052919091209190915550565b6001600160a01b03821661229c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ce565b6000818152609960205260409020546001600160a01b0316156123015760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ce565b61230f600083836001611d6d565b6000818152609960205260409020546001600160a01b0316156123745760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ce565b6001600160a01b0382166000818152609a6020908152604080832080546001019055848352609990915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546123eb906129dd565b90600052602060002090601f01602090048101928261240d5760008555612453565b82601f1061242657805160ff1916838001178555612453565b82800160010185558215612453579182015b82811115612453578251825591602001919060010190612438565b5061245f929150612463565b5090565b5b8082111561245f5760008155600101612464565b80356001600160a01b038116811461248f57600080fd5b919050565b6000602082840312156124a657600080fd5b6115c282612478565b600080604083850312156124c257600080fd5b6124cb83612478565b91506124d960208401612478565b90509250929050565b6000806000606084860312156124f757600080fd5b61250084612478565b925061250e60208501612478565b9150604084013590509250925092565b6000806000806080858703121561253457600080fd5b61253d85612478565b935061254b60208601612478565b925060408501359150606085013567ffffffffffffffff8082111561256f57600080fd5b818701915087601f83011261258357600080fd5b81358181111561259557612595612aad565b604051601f8201601f19908116603f011681019083821181831017156125bd576125bd612aad565b816040528281528a60208487010111156125d657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561260d57600080fd5b61261683612478565b91506020830135801515811461262b57600080fd5b809150509250929050565b6000806040838503121561264957600080fd5b61265283612478565b946020939093013593505050565b60008060006060848603121561267557600080fd5b61267e84612478565b95602085013595506040909401359392505050565b6000602082840312156126a557600080fd5b81356115c281612ac3565b6000602082840312156126c257600080fd5b81516115c281612ac3565b6000602082840312156126df57600080fd5b5035919050565b600080604083850312156126f957600080fd5b50508035926020909101359150565b600081518084526127208160208601602086016129b1565b601f01601f19169290920160200192915050565b600083516127468184602088016129b1565b83519083019061275a8183602088016129b1565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279690830184612708565b9695505050505050565b6020815260006115c26020830184612708565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060c08201888352602060018060a01b0389168185015287604085015260c0606085015281875180845260e086019150828901935060005b818110156129375784518352938301939183019160010161291b565b5050608085019690965250505060a00152949350505050565b828152604081016004831061297557634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b6000821982111561299557612995612a55565b500190565b6000828210156129ac576129ac612a55565b500390565b60005b838110156129cc5781810151838201526020016129b4565b838111156108535750506000910152565b600181811c908216806129f157607f821691505b60208210811415612a1257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a2c57612a2c612a55565b5060010190565b600082612a5057634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461163f57600080fdfea164736f6c6343000807000a";

type SuperGalaticConstructorParams =
  | [signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: SuperGalaticConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;

export class SuperGalatic__factory extends ContractFactory {
  constructor(...args: SuperGalaticConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      super(_abi, _bytecode, args[0]);
    }
  }

  override deploy(
    overrides?: Overrides & { from?: string }
  ): Promise<SuperGalatic> {
    return super.deploy(overrides || {}) as Promise<SuperGalatic>;
  }
  override getDeployTransaction(
    overrides?: Overrides & { from?: string }
  ): TransactionRequest {
    return super.getDeployTransaction(overrides || {});
  }
  override attach(address: string): SuperGalatic {
    return super.attach(address) as SuperGalatic;
  }
  override connect(signer: Signer): SuperGalatic__factory {
    return super.connect(signer) as SuperGalatic__factory;
  }

  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): SuperGalaticInterface {
    return new utils.Interface(_abi) as SuperGalaticInterface;
  }
  static connect(
    address: string,
    signerOrProvider: Signer | Provider
  ): SuperGalatic {
    return new Contract(address, _abi, signerOrProvider) as SuperGalatic;
  }
}
