Running master 4d661ba:
```
src/bitcoin-cli combinepsbt [""] or src/bitcoin-cli combinepsbt []
```

```
  * frame #0: 0x000000010016054a bitcoind`PartiallySignedTransaction::PartiallySignedTransaction(PartiallySignedTransaction const&) [inlined] boost::optional_detail::optional_base<CMutableTransaction>::is_initialized(this=0x0000000000000000) const at optional.hpp:394 [opt]
    frame #1: 0x000000010016054a bitcoind`PartiallySignedTransaction::PartiallySignedTransaction(PartiallySignedTransaction const&) [inlined] boost::optional_detail::optional_base<CMutableTransaction>::optional_base(this=<unavailable>, rhs=0x0000000000000000) at optional.hpp:196 [opt]
    frame #2: 0x0000000100160542 bitcoind`PartiallySignedTransaction::PartiallySignedTransaction(PartiallySignedTransaction const&) [inlined] boost::optional<CMutableTransaction>::optional(this=0x000070000b9fe7c0, (null)=0x0000000000000000) at optional.hpp:958 [opt]
    frame #3: 0x0000000100160542 bitcoind`PartiallySignedTransaction::PartiallySignedTransaction(PartiallySignedTransaction const&) [inlined] boost::optional<CMutableTransaction>::optional(this=0x000070000b9fe7c0, (null)=0x0000000000000000) at optional.hpp:958 [opt]
    frame #4: 0x0000000100160542 bitcoind`PartiallySignedTransaction::PartiallySignedTransaction(this=0x000070000b9fe7c0, psbt_in=0x0000000000000000) at sign.h:576 [opt]
    frame #5: 0x0000000100142ae5 bitcoind`combinepsbt(JSONRPCRequest const&) [inlined] PartiallySignedTransaction::PartiallySignedTransaction(this=0x000070000b9fe700, psbt_in=<unavailable>) at sign.h:576 [opt]
    frame #6: 0x0000000100142ae0 bitcoind`combinepsbt(request=<unavailable>) at rawtransaction.cpp:1526 [opt]
    frame #7: 0x0000000100170f0a bitcoind`CRPCTable::execute(this=<unavailable>, request=0x000070000b9fead0) const at server.cpp:557 [opt]
```
{
    if (inputs_in.isNull() || outputs_in.isNull())
        throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, arguments 1 and 2 must be non-null");
    UniValue inputs = inputs_in.get_array();
    const bool outputs_is_obj = outputs_in.isObject();
    UniValue outputs = outputs_is_obj ? outputs_in.get_obj() : outputs_in.get_array();
    CMutableTransaction rawTx;
    if (!locktime.isNull()) {
        int64_t nLockTime = locktime.get_int64();
        if (nLockTime < 0 || nLockTime > LOCKTIME_MAX)
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, locktime out of range");
        rawTx.nLockTime = nLockTime;
    }
    bool rbfOptIn = rbf.isTrue();
    for (unsigned int idx = 0; idx < inputs.size(); idx++) {
        const UniValue& input = inputs[idx];
        const UniValue& o = input.get_obj();
        uint256 txid = ParseHashO(o, "txid");
        const UniValue& vout_v = find_value(o, "vout");
        if (!vout_v.isNum())
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, missing vout key");
        int nOutput = vout_v.get_int();
        if (nOutput < 0)
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout must be positive");
        uint32_t nSequence;
        if (rbfOptIn) {
            nSequence = MAX_BIP125_RBF_SEQUENCE; 
        } else if (rawTx.nLockTime) {
            nSequence = CTxIn::SEQUENCE_FINAL - 1;