/* 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 { Beacon, BeaconInterface } from "../Beacon";

const _abi = [
  {
    type: "constructor",
    inputs: [
      {
        name: "_owner",
        type: "address",
        internalType: "address",
      },
      {
        name: "_implementation",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "impl",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "implementation",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "owner",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "renounceOwnership",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "transferOwnership",
    inputs: [
      {
        name: "newOwner",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "upgradeImplementation",
    inputs: [
      {
        name: "_newImplementation",
        type: "address",
        internalType: "address",
      },
    ],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    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: "UpdateLogic",
    inputs: [
      {
        name: "newLogic",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
] as const;

const _bytecode =
  "0x608060405234801561001057600080fd5b506040516104a43803806104a483398101604081905261002f916101a9565b61003833610063565b600180546001600160a01b0319166001600160a01b03831617905561005c826100b3565b50506101dc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100bb610131565b6001600160a01b0381166101255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61012e81610063565b50565b6000546001600160a01b0316331461018b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161011c565b565b80516001600160a01b03811681146101a457600080fd5b919050565b600080604083850312156101bc57600080fd5b6101c58361018d565b91506101d36020840161018d565b90509250929050565b6102b9806101eb6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80635c60da1b14610067578063715018a61461009057806383f94db71461009a5780638abf6077146100ad5780638da5cb5b146100c0578063f2fde38b146100d1575b600080fd5b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6100986100e4565b005b6100986100a836600461027c565b6100f8565b600154610074906001600160a01b031681565b6000546001600160a01b0316610074565b6100986100df36600461027c565b610154565b6100ec6101d2565b6100f6600061022c565b565b6101006101d2565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f0c65c15069eef1867f8f7c89529adb4082e479e1cbd4027d34d94d5f7ba2bc0d9060200160405180910390a150565b61015c6101d2565b6001600160a01b0381166101c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101cf8161022c565b50565b6000546001600160a01b031633146100f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101bd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028e57600080fd5b81356001600160a01b03811681146102a557600080fd5b939250505056fea164736f6c6343000807000a";

type BeaconConstructorParams =
  | [signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: BeaconConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;

export class Beacon__factory extends ContractFactory {
  constructor(...args: BeaconConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      super(_abi, _bytecode, args[0]);
    }
  }

  override deploy(
    _owner: string,
    _implementation: string,
    overrides?: Overrides & { from?: string }
  ): Promise<Beacon> {
    return super.deploy(
      _owner,
      _implementation,
      overrides || {}
    ) as Promise<Beacon>;
  }
  override getDeployTransaction(
    _owner: string,
    _implementation: string,
    overrides?: Overrides & { from?: string }
  ): TransactionRequest {
    return super.getDeployTransaction(_owner, _implementation, overrides || {});
  }
  override attach(address: string): Beacon {
    return super.attach(address) as Beacon;
  }
  override connect(signer: Signer): Beacon__factory {
    return super.connect(signer) as Beacon__factory;
  }

  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): BeaconInterface {
    return new utils.Interface(_abi) as BeaconInterface;
  }
  static connect(address: string, signerOrProvider: Signer | Provider): Beacon {
    return new Contract(address, _abi, signerOrProvider) as Beacon;
  }
}
