class OkexAccountService extends OkexAccountServiceRaw implements AccountService {

  public OkexAccountService(OkexExchange exchange, ResilienceRegistries resilienceRegistries) {
    super(exchange, resilienceRegistries);
  }

  public AccountInfo getAccountInfo() throws IOException {<FILL_FUNCTION_BODY>}

  @Override
  public String withdrawFunds(WithdrawFundsParams params) throws IOException {
    if (params instanceof DefaultWithdrawFundsParams) {
      DefaultWithdrawFundsParams defaultParams = (DefaultWithdrawFundsParams) params;
      String address =
          defaultParams.getAddressTag() != null
              ? defaultParams.getAddress() + ":" + defaultParams.getAddressTag()
              : defaultParams.getAddress();
      OkexResponse<List<OkexWithdrawalResponse>> okexResponse =
          assetWithdrawal(
              defaultParams.getCurrency().getCurrencyCode(),
              defaultParams.getAmount().toPlainString(),
              ON_CHAIN_METHOD,
              address,
              defaultParams.getCommission() != null
                  ? defaultParams.getCommission().toPlainString()
                  : null,
              null,
              null);
      if (!okexResponse.isSuccess())
        throw new OkexException(okexResponse.getMsg(), Integer.parseInt(okexResponse.getCode()));

      return okexResponse.getData().get(0).getWithdrawalId();
    }
    throw new IllegalStateException("Don't know how to withdraw: " + params);
  }
}

    // null to get assets (with non-zero balance), remaining balance, and available amount in the
    // account.
    OkexResponse<List<OkexWalletBalance>> tradingBalances = getWalletBalances(null);
    OkexResponse<List<OkexAssetBalance>> assetBalances = getAssetBalances(null);
    OkexResponse<List<OkexAccountPositionRisk>> positionRis = getAccountPositionRisk();
    return new AccountInfo(
        OkexAdapters.adaptOkexBalances(tradingBalances.getData()),
        OkexAdapters.adaptOkexAssetBalances(assetBalances.getData()),
        OkexAdapters.adaptOkexAccountPositionRisk(positionRis.getData()));
  
<methods>public void <init>(org.knowm.xchange.okex.OkexExchange, org.knowm.xchange.client.ResilienceRegistries) ,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexWithdrawalResponse>> assetWithdrawal(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexChangeMarginResponse>> changeMargin(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean, boolean) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexAccountPositionRisk>> getAccountPositionRisk() throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexAssetBalance>> getAssetBalances(List<org.knowm.xchange.currency.Currency>) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexBillDetails>> getBills(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexDepositAddress>> getDepositAddress(java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexAccountConfig>> getOkexAccountConfiguration() throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.PiggyBalance>> getPiggyBalance(java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexWalletBalance>> getSubAccountBalance(java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.subaccount.OkexSubAccountDetails>> getSubAccounts(java.lang.Boolean, java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexTradeFee>> getTradeFee(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexWalletBalance>> getWalletBalances(List<org.knowm.xchange.currency.Currency>) throws java.io.IOException,public OkexResponse<List<org.knowm.xchange.okex.dto.account.OkexSetLeverageResponse>> setLeverage(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException<variables>public static final java.lang.String INTERNAL_METHOD,public static final java.lang.String ON_CHAIN_METHOD