{
  "_format": "hh-sol-artifact-1",
  "contractName": "FinalProxy",
  "sourceName": "contracts/upgradable/FinalProxy.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementationAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "setupParams",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyDeployed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DeployFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EmptyBytecode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SetupFailed",
      "type": "error"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "bytecode",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "setupParams",
          "type": "bytes"
        }
      ],
      "name": "finalUpgrade",
      "outputs": [
        {
          "internalType": "address",
          "name": "finalImplementation_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "implementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "implementation_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isFinal",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "setup",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b506040516200122438038062001224833981016040819052620000349162000224565b828282604051806020016200004990620001bd565b601f1982820381018352601f909101166040528051602091909101206080526001600160a01b03821662000090576040516349e27cff60e01b815260040160405180910390fd5b6000837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0558151600014620001b0576000846001600160a01b0316639ded06df60e01b8460405160240162000109919062000304565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905162000149919062000339565b600060405180830381855af49150503d806000811462000186576040519150601f19603f3d011682016040523d82523d6000602084013e6200018b565b606091505b5050905080620001ae576040516397905dfb60e01b815260040160405180910390fd5b505b5050505050505062000357565b6101a0806200108483390190565b80516001600160a01b0381168114620001e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200021b57818101518382015260200162000201565b50506000910152565b6000806000606084860312156200023a57600080fd5b6200024584620001cb565b92506200025560208501620001cb565b60408501519092506001600160401b03808211156200027357600080fd5b818601915086601f8301126200028857600080fd5b8151818111156200029d576200029d620001e8565b604051601f8201601f19908116603f01168101908382118183101715620002c857620002c8620001e8565b81604052828152896020848701011115620002e257600080fd5b620002f5836020830160208801620001fe565b80955050505050509250925092565b602081526000825180602084015262000325816040850160208701620001fe565b601f01601f19169190910160400192915050565b600082516200034d818460208701620001fe565b9190910192915050565b608051610d0a6200037a600039600081816104b801526105eb0152610d0a6000f3fe6080604052600436106100435760003560e01c80635c60da1b1461007c5780638b4de469146100bb5780639ded06df146100db578063f3418781146100fa5761004a565b3661004a57005b600061005461011f565b90503660008037600080366000845af43d6000803e808015610075573d6000f35b3d6000fd5b005b34801561008857600080fd5b5061009161011f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100c757600080fd5b506100916100d6366004610902565b61016d565b3480156100e757600080fd5b5061007a6100f63660046109fb565b5050565b34801561010657600080fd5b5061010f61040c565b60405190151581526020016100b2565b6000610129610434565b905073ffffffffffffffffffffffffffffffffffffffff811661016a57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b90565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0546000903373ffffffffffffffffffffffffffffffffffffffff8216146101e1576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061020d867f80df4dfef2d6527a47431f6f203697684e26d83f81418443821420778d4c4e8c610586565b9250801580159061028c5750808373ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102899190610a3d565b14155b156102c3576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83156104035760008373ffffffffffffffffffffffffffffffffffffffff16639ded06df60e01b87876040516024016102fd929190610a56565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516103869190610ac7565b600060405180830381855af49150503d80600081146103c1576040519150601f19603f3d011682016040523d82523d6000602084013e6103c6565b606091505b5050905080610401576040517f97905dfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b50509392505050565b600080610417610434565b73ffffffffffffffffffffffffffffffffffffffff161415905090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000030606090811b821660218501527f80df4dfef2d6527a47431f6f203697684e26d83f81418443821420778d4c4e8c60358501527f0000000000000000000000000000000000000000000000000000000000000000605580860191909152855180860390910181526075850186528051908401207fd6940000000000000000000000000000000000000000000000000000000000006095860152901b1660978301527f010000000000000000000000000000000000000000000000000000000000000060ab8301528251808303608c01815260ac90920190925280519101208073ffffffffffffffffffffffffffffffffffffffff163b60000361016a5750600090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000030606090811b82166021850152603584018690527f0000000000000000000000000000000000000000000000000000000000000000605580860191909152855180860390910181526075850186528051908401207fd6940000000000000000000000000000000000000000000000000000000000006095860152901b1660978301527f010000000000000000000000000000000000000000000000000000000000000060ab8301528251808303608c01815260ac909201909252805191012082516000036106cf576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ee8173ffffffffffffffffffffffffffffffffffffffff1661082d565b15610725576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826040516107349061087d565b8190604051809103906000f5905080158015610754573d6000803e3d6000fd5b50905073ffffffffffffffffffffffffffffffffffffffff81166107a4576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e77436000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169062774360906107f4908790600401610ae3565b600060405180830381600087803b15801561080e57600080fd5b505af1158015610822573d6000803e3d6000fd5b505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82163f801580159061087657507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6101a080610b3583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083601f8401126108cb57600080fd5b50813567ffffffffffffffff8111156108e357600080fd5b6020830191508360208285010111156108fb57600080fd5b9250929050565b60008060006040848603121561091757600080fd5b833567ffffffffffffffff8082111561092f57600080fd5b818601915086601f83011261094357600080fd5b8135818111156109555761095561088a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561099b5761099b61088a565b816040528281528960208487010111156109b457600080fd5b8260208601602083013760006020848301015280975050505060208601359150808211156109e157600080fd5b506109ee868287016108b9565b9497909650939450505050565b60008060208385031215610a0e57600080fd5b823567ffffffffffffffff811115610a2557600080fd5b610a31858286016108b9565b90969095509350505050565b600060208284031215610a4f57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60005b83811015610abe578181015183820152602001610aa6565b50506000910152565b60008251610ad9818460208701610aa3565b9190910192915050565b6020815260008251806020840152610b02816040850160208701610aa3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe608060405234801561001057600080fd5b50610180806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156101115761011161004c565b8160405282815287602084870101111561012a57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea2646970667358221220a30aa0b079a504f6336b7e339659f909f468dcfe513766d3086e1efce2657d5164736f6c63430008130033a26469706673582212205b8dfba32bd857aa8e550fc6bc358151276cc346c3096edec046eb120db23f7f64736f6c63430008130033608060405234801561001057600080fd5b50610180806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156101115761011161004c565b8160405282815287602084870101111561012a57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea2646970667358221220a30aa0b079a504f6336b7e339659f909f468dcfe513766d3086e1efce2657d5164736f6c63430008130033",
  "deployedBytecode": "0x6080604052600436106100435760003560e01c80635c60da1b1461007c5780638b4de469146100bb5780639ded06df146100db578063f3418781146100fa5761004a565b3661004a57005b600061005461011f565b90503660008037600080366000845af43d6000803e808015610075573d6000f35b3d6000fd5b005b34801561008857600080fd5b5061009161011f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100c757600080fd5b506100916100d6366004610902565b61016d565b3480156100e757600080fd5b5061007a6100f63660046109fb565b5050565b34801561010657600080fd5b5061010f61040c565b60405190151581526020016100b2565b6000610129610434565b905073ffffffffffffffffffffffffffffffffffffffff811661016a57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b90565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0546000903373ffffffffffffffffffffffffffffffffffffffff8216146101e1576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061020d867f80df4dfef2d6527a47431f6f203697684e26d83f81418443821420778d4c4e8c610586565b9250801580159061028c5750808373ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102899190610a3d565b14155b156102c3576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83156104035760008373ffffffffffffffffffffffffffffffffffffffff16639ded06df60e01b87876040516024016102fd929190610a56565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516103869190610ac7565b600060405180830381855af49150503d80600081146103c1576040519150601f19603f3d011682016040523d82523d6000602084013e6103c6565b606091505b5050905080610401576040517f97905dfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b50509392505050565b600080610417610434565b73ffffffffffffffffffffffffffffffffffffffff161415905090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000030606090811b821660218501527f80df4dfef2d6527a47431f6f203697684e26d83f81418443821420778d4c4e8c60358501527f0000000000000000000000000000000000000000000000000000000000000000605580860191909152855180860390910181526075850186528051908401207fd6940000000000000000000000000000000000000000000000000000000000006095860152901b1660978301527f010000000000000000000000000000000000000000000000000000000000000060ab8301528251808303608c01815260ac90920190925280519101208073ffffffffffffffffffffffffffffffffffffffff163b60000361016a5750600090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000030606090811b82166021850152603584018690527f0000000000000000000000000000000000000000000000000000000000000000605580860191909152855180860390910181526075850186528051908401207fd6940000000000000000000000000000000000000000000000000000000000006095860152901b1660978301527f010000000000000000000000000000000000000000000000000000000000000060ab8301528251808303608c01815260ac909201909252805191012082516000036106cf576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ee8173ffffffffffffffffffffffffffffffffffffffff1661082d565b15610725576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826040516107349061087d565b8190604051809103906000f5905080158015610754573d6000803e3d6000fd5b50905073ffffffffffffffffffffffffffffffffffffffff81166107a4576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e77436000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169062774360906107f4908790600401610ae3565b600060405180830381600087803b15801561080e57600080fd5b505af1158015610822573d6000803e3d6000fd5b505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82163f801580159061087657507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6101a080610b3583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083601f8401126108cb57600080fd5b50813567ffffffffffffffff8111156108e357600080fd5b6020830191508360208285010111156108fb57600080fd5b9250929050565b60008060006040848603121561091757600080fd5b833567ffffffffffffffff8082111561092f57600080fd5b818601915086601f83011261094357600080fd5b8135818111156109555761095561088a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561099b5761099b61088a565b816040528281528960208487010111156109b457600080fd5b8260208601602083013760006020848301015280975050505060208601359150808211156109e157600080fd5b506109ee868287016108b9565b9497909650939450505050565b60008060208385031215610a0e57600080fd5b823567ffffffffffffffff811115610a2557600080fd5b610a31858286016108b9565b90969095509350505050565b600060208284031215610a4f57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60005b83811015610abe578181015183820152602001610aa6565b50506000910152565b60008251610ad9818460208701610aa3565b9190910192915050565b6020815260008251806020840152610b02816040850160208701610aa3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe608060405234801561001057600080fd5b50610180806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156101115761011161004c565b8160405282815287602084870101111561012a57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea2646970667358221220a30aa0b079a504f6336b7e339659f909f468dcfe513766d3086e1efce2657d5164736f6c63430008130033a26469706673582212205b8dfba32bd857aa8e550fc6bc358151276cc346c3096edec046eb120db23f7f64736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
