[
  {
    "type": "constructor",
    "inputs": [
      {
        "name": "baseToken_",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "controller_",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "quoteToken_",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "router_",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "taxRecipient_",
        "type": "address",
        "internalType": "address payable"
      },
      {
        "name": "payoutMode_",
        "type": "uint8",
        "internalType": "enum BigShortTaxPayoutMode"
      },
      {
        "name": "quoteScale_",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "expectedOutputAmount_",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "receive",
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "PROTOCOL_TAX_SHARE_BPS",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "baseToken",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IERC20"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "claimRejectedQuote",
    "inputs": [],
    "outputs": [
      {
        "name": "amountNative",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "controller",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "expectedOutputAmount",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "lifetimeProtocolTaxPaidNative",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "lifetimeTaxRecipientPaidNative",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "payoutMode",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint8",
        "internalType": "enum BigShortTaxPayoutMode"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "pendingNative",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "processBondingCurveTax",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "processExternalTax",
    "inputs": [],
    "outputs": [
      {
        "name": "thresholdDirection",
        "type": "int8",
        "internalType": "int8"
      },
      {
        "name": "quoteReceived",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "expectedOutputAmountUsed",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "quoteScale",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteToken",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IERC20"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "retryWrappedNativeConversion",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "router",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IUniswapV2Router"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "setExpectedOutputAmount",
    "inputs": [
      {
        "name": "newAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "admin",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "taxRecipient",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address payable"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "BondingCurveTaxProcessed",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amountNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "protocolAmountNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "protocolPaidNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "taxRecipientAmountNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "taxRecipientPaidNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "rejectedNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "lifetimeTaxRecipientPaidNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "lifetimeProtocolTaxPaidNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pendingNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ExpectedOutputAmountUpdated",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "oldAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "newAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "admin",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ExternalTaxSwapFailed",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "baseAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "reason",
        "type": "bytes",
        "indexed": false,
        "internalType": "bytes"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ExternalTaxSwapSucceeded",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "quoteToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "baseAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "quoteAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "payoutMode",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum BigShortTaxPayoutMode"
      },
      {
        "name": "expectedOutputAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "thresholdDirection",
        "type": "int8",
        "indexed": false,
        "internalType": "int8"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "NativePayoutAttempted",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "source",
        "type": "uint8",
        "indexed": true,
        "internalType": "enum BigShortTaxPayoutSource"
      },
      {
        "name": "leg",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum BigShortTaxPayoutLeg"
      },
      {
        "name": "requestedNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "attemptedNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "paidNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "rejectedNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "success",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      },
      {
        "name": "lifetimeTaxRecipientPaidNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "lifetimeProtocolTaxPaidNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pendingNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RejectedQuoteAccrued",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "intendedRecipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "source",
        "type": "uint8",
        "indexed": true,
        "internalType": "enum BigShortTaxPayoutSource"
      },
      {
        "name": "leg",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum BigShortTaxPayoutLeg"
      },
      {
        "name": "requestedNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "paidNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "rejectedNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pendingNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RejectedQuoteClaimed",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "systemRecipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amountNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pendingNativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RouterApprovalFailed",
    "inputs": [
      {
        "name": "baseToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "baseAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "WrappedNativeUnwrapFailed",
    "inputs": [
      {
        "name": "quoteToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "quoteAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "reason",
        "type": "bytes",
        "indexed": false,
        "internalType": "bytes"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "WrappedNativeUnwrapSucceeded",
    "inputs": [
      {
        "name": "quoteToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "quoteAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "nativeAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "InvalidAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidConfiguration",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NativeTransferFailed",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NoRejectedQuote",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotController",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotSystemRecipient",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotToken",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ReentrantCall",
    "inputs": []
  }
]
