diff --git a/buf.gen.yaml b/buf.gen.yaml
new file mode 100644
index 0000000000..335e25241c
--- /dev/null
+++ b/buf.gen.yaml
@@ -0,0 +1,14 @@
+# The version of the generation template (required).
+# The only currently-valid value is v1beta1.
+version: v1beta1
+
+# The plugins to run.
+plugins:
+  # The name of the plugin.
+  - name: gogofaster
+    # The directory where the generated proto output will be written.
+    # The directory is relative to where the generation tool was run.
+    out: proto
+    # Set options to assign import paths to the well-known types
+    # and to enable service generation.
+    opt: Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration,plugins=grpc,paths=source_relative
diff --git a/mempool/clist_mempool.go b/mempool/clist_mempool.go
index 047e6d179f..9f8b46ffab 100644
--- a/mempool/clist_mempool.go
+++ b/mempool/clist_mempool.go
@@ -605,9 +605,9 @@ func (mem *CListMempool) Update(
 		// https://github.com/tendermint/tendermint/issues/3322.
 		if e, ok := mem.txsMap.Load(TxKey(tx)); ok {
 			mem.removeTx(tx, e.(*clist.CElement), false)
-			// see if the transaction is a child transaction of a some parent
+			// see if the transaction is a malleated transaction of a some parent
 			// transaction that exists in the mempool
-		} else if parentHash, _, isChild := types.DecodeChildTx(tx); isChild {
+		} else if parentHash, _, isMalleated := types.UnwrapMalleatedTx(tx); isMalleated {
 			var parentKey [TxKeySize]byte
 			copy(parentKey[:], parentHash)
 			mem.RemoveTxByKey(parentKey, false)
diff --git a/mempool/clist_mempool_test.go b/mempool/clist_mempool_test.go
index a37c40d37c..29152c64d3 100644
--- a/mempool/clist_mempool_test.go
+++ b/mempool/clist_mempool_test.go
@@ -215,22 +215,22 @@ func TestMempoolUpdate(t *testing.T) {
 		require.NoError(t, err)
 	}
 
-	// 4. Removes a parent transaction after receiving a child transaction in the update
+	// 4. Removes a original transaction after receiving a malleated transaction in the update
 	{
 		mempool.Flush()
-		parentTx := []byte{1, 2, 3, 4}
-		childTx := []byte{1, 2}
-		parentHash := sha256.Sum256(parentTx)
+		originalTx := []byte{1, 2, 3, 4}
+		malleated := []byte{1, 2}
+		originalHash := sha256.Sum256(originalTx)
 
-		// create the wrapped child transaction
-		wTx, err := types.WrapChildTx(parentHash[:], childTx)
+		// create the wrapped malleated transaction
+		wTx, err := types.WrapMalleatedTx(originalHash[:], malleated)
 		require.NoError(t, err)
 
-		// add the parent transaction to the mempool
-		err = mempool.CheckTx(parentTx, nil, TxInfo{})
+		// add the original transaction to the mempool
+		err = mempool.CheckTx(originalTx, nil, TxInfo{})
 		require.NoError(t, err)
 
-		// remove the parent from the mempool using the wrapped child tx
+		// remove the original from the mempool using the wrapped malleated tx
 		err = mempool.Update(1, []types.Tx{wTx}, abciResponses(1, abci.CodeTypeOK), nil, nil)
 		require.NoError(t, err)
 
diff --git a/proto/tendermint/types/types.pb.go b/proto/tendermint/types/types.pb.go
index 7f12c7bf96..1e27451526 100644
--- a/proto/tendermint/types/types.pb.go
+++ b/proto/tendermint/types/types.pb.go
@@ -1540,25 +1540,26 @@ func (m *TxProof) GetProof() *crypto.Proof {
 	return nil
 }
 
-// ChildTx wraps a transaction that was derived from a parent transaction. This
-// allows for removal of the parent transaction from the mempool.
-type ChildTx struct {
-	ParentTxHash []byte `protobuf:"bytes,1,opt,name=parent_tx_hash,json=parentTxHash,proto3" json:"parent_tx_hash,omitempty"`
-	Tx           []byte `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"`
-}
-
-func (m *ChildTx) Reset()         { *m = ChildTx{} }
-func (m *ChildTx) String() string { return proto.CompactTextString(m) }
-func (*ChildTx) ProtoMessage()    {}
-func (*ChildTx) Descriptor() ([]byte, []int) {
+// MalleatedTx wraps a transaction that was derived from a different original
+// transaction. This allows for tendermint to track malleated and original
+// transactions
+type MalleatedTx struct {
+	OriginalTxHash []byte `protobuf:"bytes,1,opt,name=original_tx_hash,json=originalTxHash,proto3" json:"original_tx_hash,omitempty"`
+	Tx             []byte `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"`
+}
+
+func (m *MalleatedTx) Reset()         { *m = MalleatedTx{} }
+func (m *MalleatedTx) String() string { return proto.CompactTextString(m) }
+func (*MalleatedTx) ProtoMessage()    {}
+func (*MalleatedTx) Descriptor() ([]byte, []int) {
 	return fileDescriptor_d3a6e55e2345de56, []int{21}
 }
-func (m *ChildTx) XXX_Unmarshal(b []byte) error {
+func (m *MalleatedTx) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
 }
-func (m *ChildTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+func (m *MalleatedTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	if deterministic {
-		return xxx_messageInfo_ChildTx.Marshal(b, m, deterministic)
+		return xxx_messageInfo_MalleatedTx.Marshal(b, m, deterministic)
 	} else {
 		b = b[:cap(b)]
 		n, err := m.MarshalToSizedBuffer(b)
@@ -1568,26 +1569,26 @@ func (m *ChildTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 		return b[:n], nil
 	}
 }
-func (m *ChildTx) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ChildTx.Merge(m, src)
+func (m *MalleatedTx) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MalleatedTx.Merge(m, src)
 }
-func (m *ChildTx) XXX_Size() int {
+func (m *MalleatedTx) XXX_Size() int {
 	return m.Size()
 }
-func (m *ChildTx) XXX_DiscardUnknown() {
-	xxx_messageInfo_ChildTx.DiscardUnknown(m)
+func (m *MalleatedTx) XXX_DiscardUnknown() {
+	xxx_messageInfo_MalleatedTx.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_ChildTx proto.InternalMessageInfo
+var xxx_messageInfo_MalleatedTx proto.InternalMessageInfo
 
-func (m *ChildTx) GetParentTxHash() []byte {
+func (m *MalleatedTx) GetOriginalTxHash() []byte {
 	if m != nil {
-		return m.ParentTxHash
+		return m.OriginalTxHash
 	}
 	return nil
 }
 
-func (m *ChildTx) GetTx() []byte {
+func (m *MalleatedTx) GetTx() []byte {
 	if m != nil {
 		return m.Tx
 	}
@@ -1618,127 +1619,127 @@ func init() {
 	proto.RegisterType((*LightBlock)(nil), "tendermint.types.LightBlock")
 	proto.RegisterType((*BlockMeta)(nil), "tendermint.types.BlockMeta")
 	proto.RegisterType((*TxProof)(nil), "tendermint.types.TxProof")
-	proto.RegisterType((*ChildTx)(nil), "tendermint.types.ChildTx")
+	proto.RegisterType((*MalleatedTx)(nil), "tendermint.types.MalleatedTx")
 }
 
 func init() { proto.RegisterFile("tendermint/types/types.proto", fileDescriptor_d3a6e55e2345de56) }
 
 var fileDescriptor_d3a6e55e2345de56 = []byte{
-	// 1816 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4b, 0x73, 0x1a, 0xd9,
-	0x15, 0x56, 0x03, 0x12, 0x70, 0x00, 0x09, 0x75, 0x64, 0x19, 0x61, 0x1b, 0x91, 0xce, 0x63, 0x34,
-	0x8f, 0x20, 0xc7, 0x93, 0xca, 0xa3, 0x2a, 0x99, 0x0c, 0x20, 0x8d, 0x45, 0x46, 0x42, 0xa4, 0x61,
-	0x9c, 0xc7, 0xa6, 0xeb, 0x42, 0x5f, 0x43, 0xc7, 0x4d, 0xdf, 0xae, 0xbe, 0x17, 0x19, 0x79, 0x99,
-	0x55, 0x4a, 0x2b, 0xaf, 0xb2, 0xd3, 0x2a, 0x59, 0x64, 0x9f, 0x3f, 0x90, 0xca, 0x6a, 0x36, 0xa9,
-	0x9a, 0x5d, 0xb2, 0xc9, 0x24, 0x65, 0xa7, 0x52, 0xf9, 0x19, 0xa9, 0xfb, 0xe8, 0xa6, 0x11, 0xe0,
-	0xb8, 0x5c, 0xae, 0x6c, 0xa8, 0xee, 0x73, 0xbe, 0x73, 0xef, 0x79, 0x9f, 0xd3, 0xc0, 0x5d, 0x86,
-	0x3d, 0x1b, 0x07, 0x63, 0xc7, 0x63, 0x87, 0xec, 0xd2, 0xc7, 0x54, 0xfe, 0xd6, 0xfc, 0x80, 0x30,
-	0xa2, 0x17, 0x67, 0xdc, 0x9a, 0xa0, 0x97, 0x77, 0x86, 0x64, 0x48, 0x04, 0xf3, 0x90, 0x3f, 0x49,
-	0x5c, 0x79, 0x7f, 0x48, 0xc8, 0xd0, 0xc5, 0x87, 0xe2, 0xad, 0x3f, 0x79, 0x7c, 0xc8, 0x9c, 0x31,
-	0xa6, 0x0c, 0x8d, 0x7d, 0x05, 0xb8, 0x17, 0xbb, 0x66, 0x10, 0x5c, 0xfa, 0x8c, 0x70, 0x2c, 0x79,
-	0xac, 0xd8, 0x95, 0x18, 0xfb, 0x02, 0x07, 0xd4, 0x21, 0x5e, 0x5c, 0x8f, 0x72, 0x75, 0x41, 0xcb,
-	0x0b, 0xe4, 0x3a, 0x36, 0x62, 0x24, 0x90, 0x08, 0xe3, 0x07, 0x50, 0xe8, 0xa0, 0x80, 0x75, 0x31,
-	0x3b, 0xc1, 0xc8, 0xc6, 0x81, 0xbe, 0x03, 0xeb, 0x8c, 0x30, 0xe4, 0x96, 0xb4, 0xaa, 0x76, 0x50,
-	0x30, 0xe5, 0x8b, 0xae, 0x43, 0x6a, 0x84, 0xe8, 0xa8, 0x94, 0xa8, 0x6a, 0x07, 0x79, 0x53, 0x3c,
-	0x1b, 0x23, 0x48, 0x71, 0x51, 0x2e, 0xe1, 0x78, 0x36, 0x9e, 0x86, 0x12, 0xe2, 0x85, 0x53, 0xfb,
-	0x97, 0x0c, 0x53, 0x25, 0x22, 0x5f, 0xf4, 0xef, 0xc0, 0xba, 0xd0, 0xbf, 0x94, 0xac, 0x6a, 0x07,
-	0xb9, 0x07, 0xa5, 0x5a, 0xcc, 0x51, 0xd2, 0xbe, 0x5a, 0x87, 0xf3, 0x1b, 0xa9, 0xcf, 0xbf, 0xdc,
-	0x5f, 0x33, 0x25, 0xd8, 0x70, 0x21, 0xdd, 0x70, 0xc9, 0xe0, 0x49, 0xeb, 0x28, 0x52, 0x44, 0x9b,
-	0x29, 0xa2, 0x9f, 0xc1, 0x96, 0x8f, 0x02, 0x66, 0x51, 0xcc, 0xac, 0x91, 0xb0, 0x42, 0x5c, 0x9a,
-	0x7b, 0xb0, 0x5f, 0xbb, 0x19, 0x87, 0xda, 0x9c, 0xb1, 0xea, 0x96, 0x82, 0x1f, 0x27, 0x1a, 0xff,
-	0x4e, 0xc1, 0x86, 0x72, 0xc6, 0x8f, 0x20, 0xad, 0xdc, 0x2a, 0x2e, 0xcc, 0x3d, 0xb8, 0x17, 0x3f,
-	0x51, 0xb1, 0x6a, 0x4d, 0xe2, 0x51, 0xec, 0xd1, 0x09, 0x55, 0xe7, 0x85, 0x32, 0xfa, 0x37, 0x21,
-	0x33, 0x18, 0x21, 0xc7, 0xb3, 0x1c, 0x5b, 0x68, 0x94, 0x6d, 0xe4, 0x5e, 0x7c, 0xb9, 0x9f, 0x6e,
-	0x72, 0x5a, 0xeb, 0xc8, 0x4c, 0x0b, 0x66, 0xcb, 0xd6, 0x77, 0x61, 0x63, 0x84, 0x9d, 0xe1, 0x88,
-	0x09, 0xb7, 0x24, 0x4d, 0xf5, 0xa6, 0x7f, 0x1f, 0x52, 0x3c, 0x21, 0x4a, 0x29, 0x71, 0x77, 0xb9,
-	0x26, 0xb3, 0xa5, 0x16, 0x66, 0x4b, 0xad, 0x17, 0x66, 0x4b, 0x23, 0xc3, 0x2f, 0x7e, 0xfe, 0x8f,
-	0x7d, 0xcd, 0x14, 0x12, 0x7a, 0x13, 0x0a, 0x2e, 0xa2, 0xcc, 0xea, 0x73, 0xb7, 0xf1, 0xeb, 0xd7,
-	0xc5, 0x11, 0x7b, 0x8b, 0x0e, 0x51, 0x8e, 0x55, 0xaa, 0xe7, 0xb8, 0x94, 0x24, 0xd9, 0xfa, 0x01,
-	0x14, 0xc5, 0x21, 0x03, 0x32, 0x1e, 0x3b, 0xcc, 0x12, 0x7e, 0xdf, 0x10, 0x7e, 0xdf, 0xe4, 0xf4,
-	0xa6, 0x20, 0x9f, 0xf0, 0x08, 0xdc, 0x81, 0xac, 0x8d, 0x18, 0x92, 0x90, 0xb4, 0x80, 0x64, 0x38,
-	0x41, 0x30, 0xdf, 0x81, 0xad, 0x28, 0xeb, 0xa8, 0x84, 0x64, 0xe4, 0x29, 0x33, 0xb2, 0x00, 0xde,
-	0x87, 0x1d, 0x0f, 0x4f, 0x99, 0x75, 0x13, 0x9d, 0x15, 0x68, 0x9d, 0xf3, 0x1e, 0xcd, 0x4b, 0x7c,
-	0x03, 0x36, 0x07, 0xa1, 0xf3, 0x25, 0x16, 0x04, 0xb6, 0x10, 0x51, 0x05, 0x6c, 0x0f, 0x32, 0xc8,
-	0xf7, 0x25, 0x20, 0x27, 0x00, 0x69, 0xe4, 0xfb, 0x82, 0xf5, 0x1e, 0x6c, 0x0b, 0x1b, 0x03, 0x4c,
-	0x27, 0x2e, 0x53, 0x87, 0xe4, 0x05, 0x66, 0x8b, 0x33, 0x4c, 0x49, 0x17, 0xd8, 0xaf, 0x41, 0x01,
-	0x5f, 0x38, 0x36, 0xf6, 0x06, 0x58, 0xe2, 0x0a, 0x02, 0x97, 0x0f, 0x89, 0x02, 0xf4, 0x2e, 0x14,
-	0xfd, 0x80, 0xf8, 0x84, 0xe2, 0xc0, 0x42, 0xb6, 0x1d, 0x60, 0x4a, 0x4b, 0x9b, 0xf2, 0xbc, 0x90,
-	0x5e, 0x97, 0x64, 0xe3, 0xd7, 0x09, 0x48, 0x1d, 0x21, 0x86, 0xf4, 0x22, 0x24, 0xd9, 0x94, 0x96,
-	0xb4, 0x6a, 0xf2, 0x20, 0x6f, 0xf2, 0x47, 0x7d, 0x04, 0x25, 0xc7, 0x63, 0x38, 0x18, 0x63, 0xdb,
-	0x41, 0x0c, 0x5b, 0x94, 0xf1, 0xdf, 0x80, 0x10, 0x46, 0x55, 0x6e, 0x1f, 0x2c, 0x86, 0xb2, 0x15,
-	0x93, 0xe8, 0x72, 0x01, 0x93, 0xe3, 0x55, 0x64, 0x77, 0x9d, 0xa5, 0x5c, 0xfd, 0x63, 0xc8, 0x84,
-	0xfa, 0xab, 0xa2, 0xac, 0x2c, 0x9e, 0x7c, 0xac, 0x10, 0xa7, 0x0e, 0x65, 0xea, 0xbc, 0x48, 0x4a,
-	0xff, 0x21, 0x64, 0xc6, 0x98, 0x52, 0x34, 0xc4, 0x34, 0xca, 0xd4, 0x85, 0x13, 0xce, 0x14, 0x22,
-	0x94, 0x0e, 0x25, 0x8c, 0xe7, 0x09, 0xb8, 0x75, 0x34, 0xf1, 0x5d, 0x67, 0x80, 0x18, 0x7e, 0x44,
-	0x18, 0x0e, 0xef, 0xd2, 0xbf, 0x05, 0x1b, 0x17, 0x84, 0x61, 0x0b, 0xa9, 0xda, 0xdb, 0x5d, 0x3c,
-	0x95, 0xe3, 0xcd, 0x75, 0x8e, 0xaa, 0x47, 0xf0, 0xbe, 0x72, 0xd0, 0x2b, 0xe1, 0x0d, 0xfd, 0x03,
-	0xd0, 0x45, 0x6b, 0xb3, 0x2e, 0x08, 0x73, 0xbc, 0xa1, 0xe5, 0x93, 0xa7, 0x38, 0x50, 0xf5, 0x57,
-	0x14, 0x9c, 0x47, 0x82, 0xd1, 0xe1, 0xf4, 0xb9, 0x1c, 0x56, 0xd0, 0x94, 0x80, 0xce, 0x72, 0x58,
-	0x02, 0x1b, 0x90, 0x8d, 0x7a, 0xb8, 0x2a, 0xba, 0xd7, 0xab, 0xdb, 0x99, 0x98, 0xf1, 0x97, 0x04,
-	0xec, 0x9d, 0xf2, 0x06, 0xd0, 0x74, 0x1d, 0xec, 0xb1, 0x3a, 0x63, 0x68, 0xf0, 0x24, 0x72, 0x4b,
-	0x0b, 0xb6, 0x07, 0xc4, 0x7b, 0xec, 0x3a, 0x03, 0xa1, 0xb7, 0xa8, 0x70, 0xe5, 0xa1, 0xbb, 0x8b,
-	0x26, 0x8b, 0x73, 0x44, 0x41, 0x9b, 0xc5, 0x98, 0x98, 0xa0, 0xf0, 0x84, 0xe6, 0xb5, 0x4d, 0x3c,
-	0x4b, 0xb5, 0x9f, 0x84, 0xb0, 0x29, 0x2f, 0x89, 0x27, 0xb2, 0x09, 0xb5, 0x61, 0xa7, 0x7f, 0xf9,
-	0x0c, 0x79, 0xcc, 0xf1, 0x70, 0xac, 0x34, 0x4b, 0xc9, 0x6a, 0xf2, 0x20, 0xf7, 0xe0, 0xce, 0x12,
-	0x2f, 0x87, 0x18, 0xf3, 0x2b, 0x91, 0xe0, 0xac, 0x6e, 0x57, 0x38, 0x3e, 0xb5, 0xc2, 0xf1, 0x6f,
-	0xc3, 0x9f, 0xff, 0xd2, 0x20, 0x13, 0xb9, 0x0f, 0xc1, 0x6d, 0x3b, 0x4c, 0x37, 0x4b, 0x24, 0x4c,
-	0x94, 0xfe, 0xd2, 0x89, 0xef, 0x2c, 0x5a, 0xb4, 0x34, 0x3f, 0x4f, 0xd6, 0xcc, 0x5b, 0xf6, 0xd2,
-	0xc4, 0xf5, 0xe0, 0xae, 0xcb, 0x5d, 0x67, 0x0d, 0x44, 0xfc, 0x2c, 0x24, 0x02, 0x38, 0xbb, 0x47,
-	0xe6, 0xe7, 0xfb, 0x2b, 0x82, 0xb5, 0x2c, 0xe8, 0x27, 0x6b, 0xe6, 0x9e, 0xbb, 0x8a, 0xd9, 0x58,
-	0x87, 0x24, 0x9d, 0x8c, 0x8d, 0x53, 0xc8, 0xc7, 0xeb, 0x94, 0xd7, 0x65, 0xcc, 0xb4, 0xe4, 0xf2,
-	0xba, 0x8c, 0x0e, 0xb9, 0x51, 0xd5, 0xc6, 0x47, 0xb0, 0xbb, 0xbc, 0x9f, 0xe8, 0x5f, 0x87, 0xcd,
-	0x00, 0x3d, 0x95, 0xcd, 0xc8, 0x72, 0x1d, 0xca, 0x54, 0xe3, 0xca, 0x07, 0xe8, 0xa9, 0x40, 0xf0,
-	0xdb, 0x8d, 0x9f, 0x40, 0x26, 0xac, 0x79, 0xfd, 0x23, 0x28, 0x84, 0xf5, 0x3e, 0x13, 0x58, 0x3a,
-	0x8d, 0x94, 0x88, 0x99, 0x0f, 0xf1, 0xe2, 0xac, 0x8f, 0x21, 0xad, 0x18, 0xfa, 0x57, 0x21, 0xef,
-	0xa1, 0x31, 0xa6, 0x3e, 0x1a, 0x60, 0x3e, 0xd7, 0xe4, 0x1e, 0x90, 0x8b, 0x68, 0x2d, 0x9b, 0xaf,
-	0x08, 0x7c, 0xf6, 0x84, 0xbb, 0x0a, 0x7f, 0x36, 0x7e, 0x0e, 0xbb, 0xbc, 0xd3, 0xd6, 0x2f, 0x90,
-	0xe3, 0xa2, 0xbe, 0xe3, 0x3a, 0xec, 0x52, 0x8d, 0xf8, 0x3b, 0x90, 0x0d, 0x88, 0xb2, 0x46, 0x19,
-	0x92, 0x09, 0x88, 0x34, 0x84, 0xdf, 0x36, 0x20, 0xee, 0x64, 0xec, 0x45, 0xad, 0x97, 0xf3, 0x73,
-	0x92, 0x26, 0x20, 0xc6, 0x7f, 0x12, 0x90, 0xe2, 0xd1, 0xd7, 0x3f, 0x84, 0x14, 0xb7, 0x41, 0x68,
-	0xb4, 0xb9, 0x6c, 0xf5, 0xe8, 0x3a, 0x43, 0x0f, 0xdb, 0x67, 0x74, 0xd8, 0xbb, 0xf4, 0xb1, 0x29,
-	0xc0, 0xb1, 0xc9, 0x9f, 0x98, 0x9b, 0xfc, 0x3b, 0xb0, 0x1e, 0x90, 0x89, 0x67, 0x8b, 0x86, 0xb4,
-	0x6e, 0xca, 0x17, 0xfd, 0x18, 0x32, 0xd1, 0x40, 0x4f, 0xfd, 0xaf, 0x81, 0xbe, 0xc5, 0x03, 0xca,
-	0xd7, 0x0d, 0x45, 0x30, 0xd3, 0x7d, 0x35, 0xd7, 0xdf, 0x42, 0x4d, 0xe9, 0xef, 0xc3, 0xf6, 0xac,
-	0x21, 0x86, 0x73, 0x4e, 0x2e, 0x07, 0xc5, 0x88, 0xa1, 0x06, 0xdd, 0x7c, 0xf7, 0x94, 0xbb, 0x62,
-	0x5a, 0xd8, 0x35, 0xeb, 0x9e, 0x2d, 0xb1, 0x34, 0xde, 0x85, 0x2c, 0x75, 0x86, 0x1e, 0x62, 0x93,
-	0x00, 0xab, 0x25, 0x61, 0x46, 0x30, 0xfe, 0xa4, 0xc1, 0x86, 0x5c, 0x3a, 0x62, 0x7e, 0xd3, 0x96,
-	0xfb, 0x2d, 0xb1, 0xca, 0x6f, 0xc9, 0x37, 0xf7, 0x5b, 0x1d, 0x20, 0x52, 0x86, 0x8f, 0xba, 0x15,
-	0xfd, 0x4f, 0xaa, 0xd8, 0x75, 0x86, 0xaa, 0xa6, 0x62, 0x42, 0xc6, 0xdf, 0x35, 0xc8, 0x46, 0x7c,
-	0xbd, 0x0e, 0x85, 0x50, 0x2f, 0xeb, 0xb1, 0x8b, 0x86, 0x2a, 0x77, 0xee, 0xad, 0x54, 0xee, 0x13,
-	0x17, 0x0d, 0xcd, 0x9c, 0xd2, 0x87, 0xbf, 0x2c, 0x8f, 0x43, 0x62, 0x45, 0x1c, 0xe6, 0x02, 0x9f,
-	0x7c, 0xb3, 0xc0, 0xcf, 0x85, 0x28, 0x75, 0x33, 0x44, 0x7f, 0x4c, 0x40, 0xa6, 0x23, 0xd6, 0x1c,
-	0xe4, 0xfe, 0x3f, 0x2a, 0xe2, 0x0e, 0x64, 0x7d, 0xe2, 0x5a, 0x92, 0x93, 0x12, 0x9c, 0x8c, 0x4f,
-	0x5c, 0x73, 0x21, 0xec, 0xeb, 0x6f, 0xa9, 0x5c, 0x36, 0xde, 0x82, 0xd7, 0xd2, 0x37, 0xbd, 0x16,
-	0x40, 0x5e, 0xba, 0x42, 0xf5, 0xa4, 0xfb, 0xdc, 0x07, 0xe2, 0x3b, 0x46, 0x5b, 0xfc, 0x4c, 0x92,
-	0x6a, 0x4b, 0xa4, 0xa9, 0x70, 0x5c, 0x42, 0x6e, 0xe9, 0x6a, 0xb8, 0x94, 0x56, 0xa5, 0xa5, 0xa9,
-	0x70, 0xc6, 0x6f, 0x35, 0x80, 0xd9, 0x72, 0xc0, 0x3f, 0x18, 0xa8, 0x50, 0xc1, 0x9a, 0xbb, 0xb9,
-	0xb2, 0x2a, 0x68, 0xea, 0xfe, 0x3c, 0x8d, 0xeb, 0xdd, 0x84, 0xc2, 0x2c, 0x19, 0x29, 0x0e, 0x95,
-	0xa9, 0xbc, 0x62, 0x47, 0xe8, 0x62, 0x66, 0xe6, 0x2f, 0x62, 0x6f, 0xc6, 0x9f, 0x35, 0xc8, 0x0a,
-	0x9d, 0xce, 0x30, 0x43, 0x73, 0x31, 0xd4, 0xde, 0x3c, 0x86, 0xf7, 0x00, 0xe4, 0x31, 0xd4, 0x79,
-	0x86, 0x55, 0x66, 0x65, 0x05, 0xa5, 0xeb, 0x3c, 0xc3, 0xfa, 0x77, 0x23, 0x87, 0x27, 0x5f, 0xed,
-	0x70, 0x55, 0xd2, 0xa1, 0xdb, 0x6f, 0x43, 0xda, 0x9b, 0x8c, 0x2d, 0xbe, 0xbc, 0xcb, 0x05, 0x66,
-	0xc3, 0x9b, 0x8c, 0x7b, 0x53, 0x6a, 0xfc, 0x0a, 0xd2, 0xbd, 0xa9, 0xf8, 0x92, 0x95, 0x03, 0x86,
-	0xa8, 0xcf, 0x27, 0x39, 0xae, 0x32, 0x9c, 0x20, 0xbe, 0x16, 0x96, 0xcc, 0x2a, 0xbd, 0xf6, 0x9a,
-	0xdf, 0xc8, 0xe1, 0xd7, 0xf1, 0x8f, 0x21, 0xdd, 0x1c, 0x39, 0xae, 0xdd, 0x9b, 0xf2, 0xd1, 0xec,
-	0xa3, 0x80, 0xef, 0x1c, 0x6c, 0x1a, 0xbf, 0x30, 0x2f, 0xa9, 0xbd, 0xa9, 0xb8, 0x74, 0x13, 0x12,
-	0x6c, 0xaa, 0xae, 0x4c, 0xb0, 0xe9, 0x7b, 0x7f, 0xd5, 0x20, 0x17, 0x6b, 0x30, 0xfa, 0xb7, 0xe1,
-	0x56, 0xe3, 0xf4, 0xbc, 0xf9, 0xa9, 0xd5, 0x3a, 0xb2, 0x3e, 0x39, 0xad, 0x3f, 0xb4, 0x3e, 0x6b,
-	0x7f, 0xda, 0x3e, 0xff, 0x59, 0xbb, 0xb8, 0x56, 0xde, 0xbd, 0xba, 0xae, 0xea, 0x31, 0xec, 0x67,
-	0xde, 0x13, 0x8f, 0x3c, 0xf5, 0xf4, 0x43, 0xd8, 0x99, 0x17, 0xa9, 0x37, 0xba, 0xc7, 0xed, 0x5e,
-	0x51, 0x2b, 0xdf, 0xba, 0xba, 0xae, 0x6e, 0xc7, 0x24, 0xea, 0x7d, 0x8a, 0x3d, 0xb6, 0x28, 0xd0,
-	0x3c, 0x3f, 0x3b, 0x6b, 0xf5, 0x8a, 0x89, 0x05, 0x01, 0xd5, 0xf1, 0xdf, 0x85, 0xed, 0x79, 0x81,
-	0x76, 0xeb, 0xb4, 0x98, 0x2c, 0xeb, 0x57, 0xd7, 0xd5, 0xcd, 0x18, 0xba, 0xed, 0xb8, 0xe5, 0xcc,
-	0x6f, 0x7e, 0x57, 0x59, 0xfb, 0xc3, 0xef, 0x2b, 0x1a, 0xb7, 0xac, 0x30, 0xd7, 0x64, 0xf4, 0x0f,
-	0xe0, 0x76, 0xb7, 0xf5, 0xb0, 0x7d, 0x7c, 0x64, 0x9d, 0x75, 0x1f, 0x5a, 0xbd, 0x5f, 0x74, 0x8e,
-	0x63, 0xd6, 0x6d, 0x5d, 0x5d, 0x57, 0x73, 0xca, 0xa4, 0x55, 0xe8, 0x8e, 0x79, 0xfc, 0xe8, 0xbc,
-	0x77, 0x5c, 0xd4, 0x24, 0xba, 0x13, 0x60, 0xbe, 0x44, 0x0a, 0xf4, 0x7d, 0xd8, 0x5b, 0x82, 0x8e,
-	0x0c, 0xdb, 0xbe, 0xba, 0xae, 0x16, 0x3a, 0x01, 0x96, 0x05, 0x28, 0x24, 0x6a, 0x50, 0x5a, 0x94,
-	0x38, 0xef, 0x9c, 0x77, 0xeb, 0xa7, 0xc5, 0x6a, 0xb9, 0x78, 0x75, 0x5d, 0xcd, 0x87, 0xdd, 0x94,
-	0xe3, 0x67, 0x96, 0x35, 0x7e, 0xfa, 0xf9, 0x8b, 0x8a, 0xf6, 0xc5, 0x8b, 0x8a, 0xf6, 0xcf, 0x17,
-	0x15, 0xed, 0xf9, 0xcb, 0xca, 0xda, 0x17, 0x2f, 0x2b, 0x6b, 0x7f, 0x7b, 0x59, 0x59, 0xfb, 0xe5,
-	0xf7, 0x86, 0x0e, 0x1b, 0x4d, 0xfa, 0xb5, 0x01, 0x19, 0x1f, 0xc6, 0xff, 0xfe, 0x99, 0x3d, 0xca,
-	0xbf, 0xa1, 0x6e, 0xfe, 0x35, 0xd4, 0xdf, 0x10, 0xf4, 0x0f, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff,
-	0x7d, 0x96, 0x1d, 0xd6, 0xdb, 0x12, 0x00, 0x00,
+	// 1821 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcb, 0x73, 0x1a, 0xc9,
+	0x19, 0xd7, 0x00, 0x12, 0xf0, 0x01, 0x12, 0xea, 0xc8, 0x32, 0xc2, 0x36, 0x22, 0xe4, 0xb1, 0xda,
+	0x47, 0x90, 0xe3, 0x4d, 0xe5, 0x51, 0x95, 0x6c, 0x2d, 0x48, 0x5a, 0x8b, 0xac, 0x1e, 0x64, 0x60,
+	0x9d, 0xc7, 0x65, 0xaa, 0x61, 0xda, 0x30, 0xf1, 0x30, 0x3d, 0x35, 0xdd, 0xc8, 0xc8, 0xc7, 0x9c,
+	0x52, 0x3a, 0xf9, 0x94, 0x9b, 0x4e, 0xc9, 0x21, 0xf7, 0xfc, 0x03, 0xa9, 0x9c, 0xf6, 0x92, 0xaa,
+	0xbd, 0x25, 0x97, 0x6c, 0x52, 0x76, 0x2a, 0x95, 0x3f, 0x23, 0xd5, 0x8f, 0x19, 0x06, 0x01, 0x8e,
+	0xcb, 0xe5, 0xda, 0x0b, 0x35, 0xfd, 0x7d, 0xbf, 0xaf, 0xfb, 0x7b, 0xf7, 0xd7, 0xc0, 0x5d, 0x4e,
+	0x3c, 0x9b, 0x04, 0x23, 0xc7, 0xe3, 0xfb, 0xfc, 0xd2, 0x27, 0x4c, 0xfd, 0xd6, 0xfd, 0x80, 0x72,
+	0x8a, 0x8a, 0x53, 0x6e, 0x5d, 0xd2, 0xcb, 0x5b, 0x03, 0x3a, 0xa0, 0x92, 0xb9, 0x2f, 0xbe, 0x14,
+	0xae, 0xbc, 0x3b, 0xa0, 0x74, 0xe0, 0x92, 0x7d, 0xb9, 0xea, 0x8d, 0x1f, 0xef, 0x73, 0x67, 0x44,
+	0x18, 0xc7, 0x23, 0x5f, 0x03, 0xee, 0xc5, 0x8e, 0xe9, 0x07, 0x97, 0x3e, 0xa7, 0x02, 0x4b, 0x1f,
+	0x6b, 0x76, 0x25, 0xc6, 0xbe, 0x20, 0x01, 0x73, 0xa8, 0x17, 0xd7, 0xa3, 0x5c, 0x9d, 0xd3, 0xf2,
+	0x02, 0xbb, 0x8e, 0x8d, 0x39, 0x0d, 0x14, 0xa2, 0xf6, 0x23, 0x28, 0xb4, 0x71, 0xc0, 0x3b, 0x84,
+	0x1f, 0x13, 0x6c, 0x93, 0x00, 0x6d, 0xc1, 0x2a, 0xa7, 0x1c, 0xbb, 0x25, 0xa3, 0x6a, 0xec, 0x15,
+	0x4c, 0xb5, 0x40, 0x08, 0x52, 0x43, 0xcc, 0x86, 0xa5, 0x44, 0xd5, 0xd8, 0xcb, 0x9b, 0xf2, 0xbb,
+	0x36, 0x84, 0x94, 0x10, 0x15, 0x12, 0x8e, 0x67, 0x93, 0x49, 0x28, 0x21, 0x17, 0x82, 0xda, 0xbb,
+	0xe4, 0x84, 0x69, 0x11, 0xb5, 0x40, 0xdf, 0x83, 0x55, 0xa9, 0x7f, 0x29, 0x59, 0x35, 0xf6, 0x72,
+	0x0f, 0x4a, 0xf5, 0x98, 0xa3, 0x94, 0x7d, 0xf5, 0xb6, 0xe0, 0x37, 0x53, 0x9f, 0x7f, 0xb9, 0xbb,
+	0x62, 0x2a, 0x70, 0xcd, 0x85, 0x74, 0xd3, 0xa5, 0xfd, 0x27, 0xad, 0xc3, 0x48, 0x11, 0x63, 0xaa,
+	0x08, 0x3a, 0x85, 0x0d, 0x1f, 0x07, 0xdc, 0x62, 0x84, 0x5b, 0x43, 0x69, 0x85, 0x3c, 0x34, 0xf7,
+	0x60, 0xb7, 0x7e, 0x33, 0x0e, 0xf5, 0x19, 0x63, 0xf5, 0x29, 0x05, 0x3f, 0x4e, 0xac, 0xfd, 0x27,
+	0x05, 0x6b, 0xda, 0x19, 0x3f, 0x81, 0xb4, 0x76, 0xab, 0x3c, 0x30, 0xf7, 0xe0, 0x5e, 0x7c, 0x47,
+	0xcd, 0xaa, 0x1f, 0x50, 0x8f, 0x11, 0x8f, 0x8d, 0x99, 0xde, 0x2f, 0x94, 0x41, 0xdf, 0x86, 0x4c,
+	0x7f, 0x88, 0x1d, 0xcf, 0x72, 0x6c, 0xa9, 0x51, 0xb6, 0x99, 0x7b, 0xf1, 0xe5, 0x6e, 0xfa, 0x40,
+	0xd0, 0x5a, 0x87, 0x66, 0x5a, 0x32, 0x5b, 0x36, 0xda, 0x86, 0xb5, 0x21, 0x71, 0x06, 0x43, 0x2e,
+	0xdd, 0x92, 0x34, 0xf5, 0x0a, 0xfd, 0x10, 0x52, 0x22, 0x21, 0x4a, 0x29, 0x79, 0x76, 0xb9, 0xae,
+	0xb2, 0xa5, 0x1e, 0x66, 0x4b, 0xbd, 0x1b, 0x66, 0x4b, 0x33, 0x23, 0x0e, 0x7e, 0xfe, 0xcf, 0x5d,
+	0xc3, 0x94, 0x12, 0xe8, 0x00, 0x0a, 0x2e, 0x66, 0xdc, 0xea, 0x09, 0xb7, 0x89, 0xe3, 0x57, 0xe5,
+	0x16, 0x3b, 0xf3, 0x0e, 0xd1, 0x8e, 0xd5, 0xaa, 0xe7, 0x84, 0x94, 0x22, 0xd9, 0x68, 0x0f, 0x8a,
+	0x72, 0x93, 0x3e, 0x1d, 0x8d, 0x1c, 0x6e, 0x49, 0xbf, 0xaf, 0x49, 0xbf, 0xaf, 0x0b, 0xfa, 0x81,
+	0x24, 0x1f, 0x8b, 0x08, 0xdc, 0x81, 0xac, 0x8d, 0x39, 0x56, 0x90, 0xb4, 0x84, 0x64, 0x04, 0x41,
+	0x32, 0xdf, 0x81, 0x8d, 0x28, 0xeb, 0x98, 0x82, 0x64, 0xd4, 0x2e, 0x53, 0xb2, 0x04, 0xde, 0x87,
+	0x2d, 0x8f, 0x4c, 0xb8, 0x75, 0x13, 0x9d, 0x95, 0x68, 0x24, 0x78, 0x8f, 0x66, 0x25, 0xbe, 0x05,
+	0xeb, 0xfd, 0xd0, 0xf9, 0x0a, 0x0b, 0x12, 0x5b, 0x88, 0xa8, 0x12, 0xb6, 0x03, 0x19, 0xec, 0xfb,
+	0x0a, 0x90, 0x93, 0x80, 0x34, 0xf6, 0x7d, 0xc9, 0x7a, 0x0f, 0x36, 0xa5, 0x8d, 0x01, 0x61, 0x63,
+	0x97, 0xeb, 0x4d, 0xf2, 0x12, 0xb3, 0x21, 0x18, 0xa6, 0xa2, 0x4b, 0xec, 0x37, 0xa0, 0x40, 0x2e,
+	0x1c, 0x9b, 0x78, 0x7d, 0xa2, 0x70, 0x05, 0x89, 0xcb, 0x87, 0x44, 0x09, 0x7a, 0x17, 0x8a, 0x7e,
+	0x40, 0x7d, 0xca, 0x48, 0x60, 0x61, 0xdb, 0x0e, 0x08, 0x63, 0xa5, 0x75, 0xb5, 0x5f, 0x48, 0x6f,
+	0x28, 0x72, 0xed, 0x37, 0x09, 0x48, 0x1d, 0x62, 0x8e, 0x51, 0x11, 0x92, 0x7c, 0xc2, 0x4a, 0x46,
+	0x35, 0xb9, 0x97, 0x37, 0xc5, 0x27, 0x1a, 0x42, 0xc9, 0xf1, 0x38, 0x09, 0x46, 0xc4, 0x76, 0x30,
+	0x27, 0x16, 0xe3, 0xe2, 0x37, 0xa0, 0x94, 0x33, 0x9d, 0xdb, 0x7b, 0xf3, 0xa1, 0x6c, 0xc5, 0x24,
+	0x3a, 0x42, 0xc0, 0x14, 0x78, 0x1d, 0xd9, 0x6d, 0x67, 0x21, 0x17, 0x7d, 0x0c, 0x99, 0x50, 0x7f,
+	0x5d, 0x94, 0x95, 0xf9, 0x9d, 0x8f, 0x34, 0xe2, 0xc4, 0x61, 0x5c, 0xef, 0x17, 0x49, 0xa1, 0x1f,
+	0x43, 0x66, 0x44, 0x18, 0xc3, 0x03, 0xc2, 0xa2, 0x4c, 0x9d, 0xdb, 0xe1, 0x54, 0x23, 0x42, 0xe9,
+	0x50, 0xa2, 0xf6, 0x3c, 0x01, 0xb7, 0x0e, 0xc7, 0xbe, 0xeb, 0xf4, 0x31, 0x27, 0x8f, 0x28, 0x27,
+	0xe1, 0x59, 0xe8, 0x3b, 0xb0, 0x76, 0x41, 0x39, 0xb1, 0xb0, 0xae, 0xbd, 0xed, 0xf9, 0x5d, 0x05,
+	0xde, 0x5c, 0x15, 0xa8, 0x46, 0x04, 0xef, 0x69, 0x07, 0xbd, 0x12, 0xde, 0x44, 0x1f, 0x00, 0x92,
+	0xad, 0xcd, 0xba, 0xa0, 0xdc, 0xf1, 0x06, 0x96, 0x4f, 0x9f, 0x92, 0x40, 0xd7, 0x5f, 0x51, 0x72,
+	0x1e, 0x49, 0x46, 0x5b, 0xd0, 0x67, 0x72, 0x58, 0x43, 0x53, 0x12, 0x3a, 0xcd, 0x61, 0x05, 0x6c,
+	0x42, 0x36, 0xea, 0xe1, 0xba, 0xe8, 0x5e, 0xaf, 0x6e, 0xa7, 0x62, 0xb5, 0xbf, 0x26, 0x60, 0xe7,
+	0x44, 0x34, 0x80, 0x03, 0xd7, 0x21, 0x1e, 0x6f, 0x70, 0x8e, 0xfb, 0x4f, 0x22, 0xb7, 0xb4, 0x60,
+	0xb3, 0x4f, 0xbd, 0xc7, 0xae, 0xd3, 0x97, 0x7a, 0xcb, 0x0a, 0xd7, 0x1e, 0xba, 0x3b, 0x6f, 0xb2,
+	0xdc, 0x47, 0x16, 0xb4, 0x59, 0x8c, 0x89, 0x49, 0x8a, 0x48, 0x68, 0x51, 0xdb, 0xd4, 0xb3, 0x74,
+	0xfb, 0x49, 0x48, 0x9b, 0xf2, 0x8a, 0x78, 0xac, 0x9a, 0xd0, 0x19, 0x6c, 0xf5, 0x2e, 0x9f, 0x61,
+	0x8f, 0x3b, 0x1e, 0x89, 0x95, 0x66, 0x29, 0x59, 0x4d, 0xee, 0xe5, 0x1e, 0xdc, 0x59, 0xe0, 0xe5,
+	0x10, 0x63, 0x7e, 0x2d, 0x12, 0x9c, 0xd6, 0xed, 0x12, 0xc7, 0xa7, 0x96, 0x38, 0xfe, 0x6d, 0xf8,
+	0xf3, 0xdf, 0x06, 0x64, 0x22, 0xf7, 0x61, 0xb8, 0x6d, 0x87, 0xe9, 0x66, 0xc9, 0x84, 0x89, 0xd2,
+	0x5f, 0x39, 0xf1, 0x9d, 0x79, 0x8b, 0x16, 0xe6, 0xe7, 0xf1, 0x8a, 0x79, 0xcb, 0x5e, 0x98, 0xb8,
+	0x1e, 0xdc, 0x75, 0x85, 0xeb, 0xac, 0xbe, 0x8c, 0x9f, 0x85, 0x65, 0x00, 0xa7, 0xe7, 0xa8, 0xfc,
+	0x7c, 0x7f, 0x49, 0xb0, 0x16, 0x05, 0xfd, 0x78, 0xc5, 0xdc, 0x71, 0x97, 0x31, 0x9b, 0xab, 0x90,
+	0x64, 0xe3, 0x51, 0xed, 0x04, 0xf2, 0xf1, 0x3a, 0x15, 0x75, 0x19, 0x33, 0x2d, 0xb9, 0xb8, 0x2e,
+	0xa3, 0x4d, 0x6e, 0x54, 0x75, 0xed, 0x23, 0xd8, 0x5e, 0xdc, 0x4f, 0xd0, 0x37, 0x61, 0x3d, 0xc0,
+	0x4f, 0x55, 0x33, 0xb2, 0x5c, 0x87, 0x71, 0xdd, 0xb8, 0xf2, 0x01, 0x7e, 0x2a, 0x11, 0xe2, 0xf4,
+	0xda, 0x4f, 0x21, 0x13, 0xd6, 0x3c, 0xfa, 0x08, 0x0a, 0x61, 0xbd, 0x4f, 0x05, 0x16, 0xde, 0x46,
+	0x5a, 0xc4, 0xcc, 0x87, 0x78, 0xb9, 0xd7, 0xc7, 0x90, 0xd6, 0x0c, 0xf4, 0x75, 0xc8, 0x7b, 0x78,
+	0x44, 0x98, 0x8f, 0xfb, 0x44, 0xdc, 0x6b, 0x6a, 0x0e, 0xc8, 0x45, 0xb4, 0x96, 0x2d, 0x46, 0x04,
+	0x71, 0xf7, 0x84, 0xb3, 0x8a, 0xf8, 0xae, 0xfd, 0x02, 0xb6, 0x45, 0xa7, 0x6d, 0x5c, 0x60, 0xc7,
+	0xc5, 0x3d, 0xc7, 0x75, 0xf8, 0xa5, 0xbe, 0xe2, 0xef, 0x40, 0x36, 0xa0, 0xda, 0x1a, 0x6d, 0x48,
+	0x26, 0xa0, 0xca, 0x10, 0x71, 0x5a, 0x9f, 0xba, 0xe3, 0x91, 0x17, 0xb5, 0x5e, 0xc1, 0xcf, 0x29,
+	0x9a, 0x84, 0xd4, 0xfe, 0x9b, 0x80, 0x94, 0x88, 0x3e, 0xfa, 0x10, 0x52, 0xc2, 0x06, 0xa9, 0xd1,
+	0xfa, 0xa2, 0xd1, 0xa3, 0xe3, 0x0c, 0x3c, 0x62, 0x9f, 0xb2, 0x41, 0xf7, 0xd2, 0x27, 0xa6, 0x04,
+	0xc7, 0x6e, 0xfe, 0xc4, 0xcc, 0xcd, 0xbf, 0x05, 0xab, 0x01, 0x1d, 0x7b, 0xb6, 0x6c, 0x48, 0xab,
+	0xa6, 0x5a, 0xa0, 0x23, 0xc8, 0x44, 0x17, 0x7a, 0xea, 0xff, 0x5d, 0xe8, 0x1b, 0x22, 0xa0, 0x62,
+	0xdc, 0xd0, 0x04, 0x33, 0xdd, 0xd3, 0xf7, 0xfa, 0x5b, 0xa8, 0x29, 0xf4, 0x3e, 0x6c, 0x4e, 0x1b,
+	0x62, 0x78, 0xcf, 0xa9, 0xe1, 0xa0, 0x18, 0x31, 0xf4, 0x45, 0x37, 0xdb, 0x3d, 0xd5, 0xac, 0x98,
+	0x96, 0x76, 0x4d, 0xbb, 0x67, 0x4b, 0x0e, 0x8d, 0x77, 0x21, 0xcb, 0x9c, 0x81, 0x87, 0xf9, 0x38,
+	0x20, 0x7a, 0x48, 0x98, 0x12, 0x6a, 0x7f, 0x36, 0x60, 0x4d, 0x0d, 0x1d, 0x31, 0xbf, 0x19, 0x8b,
+	0xfd, 0x96, 0x58, 0xe6, 0xb7, 0xe4, 0x9b, 0xfb, 0xad, 0x01, 0x10, 0x29, 0x23, 0xae, 0xba, 0x25,
+	0xfd, 0x4f, 0xa9, 0xd8, 0x71, 0x06, 0xba, 0xa6, 0x62, 0x42, 0xb5, 0x7f, 0x18, 0x90, 0x8d, 0xf8,
+	0xa8, 0x01, 0x85, 0x50, 0x2f, 0xeb, 0xb1, 0x8b, 0x07, 0x3a, 0x77, 0xee, 0x2d, 0x55, 0xee, 0x13,
+	0x17, 0x0f, 0xcc, 0x9c, 0xd6, 0x47, 0x2c, 0x16, 0xc7, 0x21, 0xb1, 0x24, 0x0e, 0x33, 0x81, 0x4f,
+	0xbe, 0x59, 0xe0, 0x67, 0x42, 0x94, 0xba, 0x19, 0xa2, 0x3f, 0x25, 0x20, 0xd3, 0x96, 0x63, 0x0e,
+	0x76, 0xbf, 0x8a, 0x8a, 0xb8, 0x03, 0x59, 0x9f, 0xba, 0x96, 0xe2, 0xa4, 0x24, 0x27, 0xe3, 0x53,
+	0xd7, 0x9c, 0x0b, 0xfb, 0xea, 0x5b, 0x2a, 0x97, 0xb5, 0xb7, 0xe0, 0xb5, 0xf4, 0x4d, 0xaf, 0x05,
+	0x90, 0x57, 0xae, 0xd0, 0x3d, 0xe9, 0xbe, 0xf0, 0x81, 0x7c, 0xc7, 0x18, 0xf3, 0xcf, 0x24, 0xa5,
+	0xb6, 0x42, 0x9a, 0x1a, 0x27, 0x24, 0xd4, 0x94, 0xae, 0x2f, 0x97, 0xd2, 0xb2, 0xb4, 0x34, 0x35,
+	0xae, 0xf6, 0x3b, 0x03, 0x60, 0x3a, 0x1c, 0x88, 0x07, 0x03, 0x93, 0x2a, 0x58, 0x33, 0x27, 0x57,
+	0x96, 0x05, 0x4d, 0x9f, 0x9f, 0x67, 0x71, 0xbd, 0x0f, 0xa0, 0x30, 0x4d, 0x46, 0x46, 0x42, 0x65,
+	0x2a, 0xaf, 0x98, 0x11, 0x3a, 0x84, 0x9b, 0xf9, 0x8b, 0xd8, 0xaa, 0xf6, 0x17, 0x03, 0xb2, 0x52,
+	0xa7, 0x53, 0xc2, 0xf1, 0x4c, 0x0c, 0x8d, 0x37, 0x8f, 0xe1, 0x3d, 0x00, 0xb5, 0x0d, 0x73, 0x9e,
+	0x11, 0x9d, 0x59, 0x59, 0x49, 0xe9, 0x38, 0xcf, 0x08, 0xfa, 0x7e, 0xe4, 0xf0, 0xe4, 0xab, 0x1d,
+	0xae, 0x4b, 0x3a, 0x74, 0xfb, 0x6d, 0x48, 0x7b, 0xe3, 0x91, 0x25, 0x86, 0x77, 0x35, 0xc0, 0xac,
+	0x79, 0xe3, 0x51, 0x77, 0xc2, 0x6a, 0xbf, 0x86, 0x74, 0x77, 0x22, 0x5f, 0xb2, 0xea, 0x82, 0xa1,
+	0xfa, 0xf9, 0xa4, 0xae, 0xab, 0x8c, 0x20, 0xc8, 0xd7, 0xc2, 0x82, 0xbb, 0x0a, 0xd5, 0x5f, 0xf3,
+	0x8d, 0x1c, 0xbe, 0x8e, 0x1f, 0x42, 0xee, 0x14, 0xbb, 0x2e, 0xc1, 0x9c, 0xd8, 0xdd, 0x89, 0x78,
+	0xb5, 0xd1, 0xc0, 0x19, 0x38, 0x1e, 0x76, 0x2d, 0x3e, 0x89, 0x1f, 0xbb, 0x1e, 0xd2, 0xbb, 0x13,
+	0x79, 0xf8, 0x3a, 0x24, 0xf8, 0x44, 0x1f, 0x9d, 0xe0, 0x93, 0xf7, 0xfe, 0x66, 0x40, 0x2e, 0xd6,
+	0x68, 0xd0, 0x77, 0xe1, 0x56, 0xf3, 0xe4, 0xfc, 0xe0, 0x53, 0xab, 0x75, 0x68, 0x7d, 0x72, 0xd2,
+	0x78, 0x68, 0x7d, 0x76, 0xf6, 0xe9, 0xd9, 0xf9, 0xcf, 0xcf, 0x8a, 0x2b, 0xe5, 0xed, 0xab, 0xeb,
+	0x2a, 0x8a, 0x61, 0x3f, 0xf3, 0x9e, 0x78, 0xf4, 0xa9, 0x87, 0xf6, 0x61, 0x6b, 0x56, 0xa4, 0xd1,
+	0xec, 0x1c, 0x9d, 0x75, 0x8b, 0x46, 0xf9, 0xd6, 0xd5, 0x75, 0x75, 0x33, 0x26, 0xd1, 0xe8, 0x31,
+	0xe2, 0xf1, 0x79, 0x81, 0x83, 0xf3, 0xd3, 0xd3, 0x56, 0xb7, 0x98, 0x98, 0x13, 0xd0, 0x9d, 0xff,
+	0x5d, 0xd8, 0x9c, 0x15, 0x38, 0x6b, 0x9d, 0x14, 0x93, 0x65, 0x74, 0x75, 0x5d, 0x5d, 0x8f, 0xa1,
+	0xcf, 0x1c, 0xb7, 0x9c, 0xf9, 0xed, 0xef, 0x2b, 0x2b, 0x7f, 0xfc, 0x43, 0xc5, 0x10, 0x96, 0x15,
+	0x66, 0x9a, 0x0d, 0xfa, 0x00, 0x6e, 0x77, 0x5a, 0x0f, 0xcf, 0x8e, 0x0e, 0xad, 0xd3, 0xce, 0x43,
+	0xab, 0xfb, 0xcb, 0xf6, 0x51, 0xcc, 0xba, 0x8d, 0xab, 0xeb, 0x6a, 0x4e, 0x9b, 0xb4, 0x0c, 0xdd,
+	0x36, 0x8f, 0x1e, 0x9d, 0x77, 0x8f, 0x8a, 0x86, 0x42, 0xb7, 0x03, 0x22, 0x86, 0x49, 0x89, 0xbe,
+	0x0f, 0x3b, 0x0b, 0xd0, 0x91, 0x61, 0x9b, 0x57, 0xd7, 0xd5, 0x42, 0x3b, 0x20, 0xaa, 0x10, 0xa5,
+	0x44, 0x1d, 0x4a, 0xf3, 0x12, 0xe7, 0xed, 0xf3, 0x4e, 0xe3, 0xa4, 0x58, 0x2d, 0x17, 0xaf, 0xae,
+	0xab, 0xf9, 0xb0, 0xab, 0x0a, 0xfc, 0xd4, 0xb2, 0xe6, 0xcf, 0x3e, 0x7f, 0x51, 0x31, 0xbe, 0x78,
+	0x51, 0x31, 0xfe, 0xf5, 0xa2, 0x62, 0x3c, 0x7f, 0x59, 0x59, 0xf9, 0xe2, 0x65, 0x65, 0xe5, 0xef,
+	0x2f, 0x2b, 0x2b, 0xbf, 0xfa, 0xc1, 0xc0, 0xe1, 0xc3, 0x71, 0xaf, 0xde, 0xa7, 0xa3, 0xfd, 0xf8,
+	0xdf, 0x40, 0xd3, 0x4f, 0xf5, 0x77, 0xd4, 0xcd, 0xbf, 0x88, 0x7a, 0x6b, 0x92, 0xfe, 0xe1, 0xff,
+	0x02, 0x00, 0x00, 0xff, 0xff, 0x89, 0x52, 0xf9, 0xf7, 0xe3, 0x12, 0x00, 0x00,
 }
 
 func (m *PartSetHeader) Marshal() (dAtA []byte, err error) {
@@ -2885,7 +2886,7 @@ func (m *TxProof) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
-func (m *ChildTx) Marshal() (dAtA []byte, err error) {
+func (m *MalleatedTx) Marshal() (dAtA []byte, err error) {
 	size := m.Size()
 	dAtA = make([]byte, size)
 	n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -2895,12 +2896,12 @@ func (m *ChildTx) Marshal() (dAtA []byte, err error) {
 	return dAtA[:n], nil
 }
 
-func (m *ChildTx) MarshalTo(dAtA []byte) (int, error) {
+func (m *MalleatedTx) MarshalTo(dAtA []byte) (int, error) {
 	size := m.Size()
 	return m.MarshalToSizedBuffer(dAtA[:size])
 }
 
-func (m *ChildTx) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *MalleatedTx) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	i := len(dAtA)
 	_ = i
 	var l int
@@ -2912,10 +2913,10 @@ func (m *ChildTx) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i--
 		dAtA[i] = 0x12
 	}
-	if len(m.ParentTxHash) > 0 {
-		i -= len(m.ParentTxHash)
-		copy(dAtA[i:], m.ParentTxHash)
-		i = encodeVarintTypes(dAtA, i, uint64(len(m.ParentTxHash)))
+	if len(m.OriginalTxHash) > 0 {
+		i -= len(m.OriginalTxHash)
+		copy(dAtA[i:], m.OriginalTxHash)
+		i = encodeVarintTypes(dAtA, i, uint64(len(m.OriginalTxHash)))
 		i--
 		dAtA[i] = 0xa
 	}
@@ -3413,13 +3414,13 @@ func (m *TxProof) Size() (n int) {
 	return n
 }
 
-func (m *ChildTx) Size() (n int) {
+func (m *MalleatedTx) Size() (n int) {
 	if m == nil {
 		return 0
 	}
 	var l int
 	_ = l
-	l = len(m.ParentTxHash)
+	l = len(m.OriginalTxHash)
 	if l > 0 {
 		n += 1 + l + sovTypes(uint64(l))
 	}
@@ -6828,7 +6829,7 @@ func (m *TxProof) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
-func (m *ChildTx) Unmarshal(dAtA []byte) error {
+func (m *MalleatedTx) Unmarshal(dAtA []byte) error {
 	l := len(dAtA)
 	iNdEx := 0
 	for iNdEx < l {
@@ -6851,15 +6852,15 @@ func (m *ChildTx) Unmarshal(dAtA []byte) error {
 		fieldNum := int32(wire >> 3)
 		wireType := int(wire & 0x7)
 		if wireType == 4 {
-			return fmt.Errorf("proto: ChildTx: wiretype end group for non-group")
+			return fmt.Errorf("proto: MalleatedTx: wiretype end group for non-group")
 		}
 		if fieldNum <= 0 {
-			return fmt.Errorf("proto: ChildTx: illegal tag %d (wire type %d)", fieldNum, wire)
+			return fmt.Errorf("proto: MalleatedTx: illegal tag %d (wire type %d)", fieldNum, wire)
 		}
 		switch fieldNum {
 		case 1:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field ParentTxHash", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field OriginalTxHash", wireType)
 			}
 			var byteLen int
 			for shift := uint(0); ; shift += 7 {
@@ -6886,9 +6887,9 @@ func (m *ChildTx) Unmarshal(dAtA []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.ParentTxHash = append(m.ParentTxHash[:0], dAtA[iNdEx:postIndex]...)
-			if m.ParentTxHash == nil {
-				m.ParentTxHash = []byte{}
+			m.OriginalTxHash = append(m.OriginalTxHash[:0], dAtA[iNdEx:postIndex]...)
+			if m.OriginalTxHash == nil {
+				m.OriginalTxHash = []byte{}
 			}
 			iNdEx = postIndex
 		case 2:
diff --git a/proto/tendermint/types/types.proto b/proto/tendermint/types/types.proto
index 635641af7f..332389a192 100644
--- a/proto/tendermint/types/types.proto
+++ b/proto/tendermint/types/types.proto
@@ -220,9 +220,10 @@ message TxProof {
   tendermint.crypto.Proof proof     = 3;
 }
 
-// ChildTx wraps a transaction that was derived from a parent transaction. This
-// allows for removal of the parent transaction from the mempool.
-message ChildTx {
-  bytes parent_tx_hash = 1;
+// MalleatedTx wraps a transaction that was derived from a different original
+// transaction. This allows for tendermint to track malleated and original
+// transactions
+message MalleatedTx {
+  bytes original_tx_hash = 1;
   bytes tx = 2;
 }
diff --git a/types/event_bus.go b/types/event_bus.go
index 72ba5e3d67..31a9332111 100644
--- a/types/event_bus.go
+++ b/types/event_bus.go
@@ -177,11 +177,19 @@ func (b *EventBus) PublishEventTx(data EventDataTx) error {
 	// no explicit deadline for publishing events
 	ctx := context.Background()
 
+	var txHash []byte
+	if originalHash, malleated, ismalleated := UnwrapMalleatedTx(data.Tx); ismalleated {
+		txHash = originalHash
+		data.Tx = malleated
+	} else {
+		txHash = Tx(data.Tx).Hash()
+	}
+
 	events := b.validateAndStringifyEvents(data.Result.Events, b.Logger.With("tx", data.Tx))
 
 	// add predefined compositeKeys
 	events[EventTypeKey] = append(events[EventTypeKey], EventTx)
-	events[TxHashKey] = append(events[TxHashKey], fmt.Sprintf("%X", Tx(data.Tx).Hash()))
+	events[TxHashKey] = append(events[TxHashKey], fmt.Sprintf("%X", txHash))
 	events[TxHeightKey] = append(events[TxHeightKey], fmt.Sprintf("%d", data.Height))
 
 	return b.pubsub.PublishWithEvents(ctx, data, events)
diff --git a/types/event_bus_test.go b/types/event_bus_test.go
index 51229beed4..14feb471c8 100644
--- a/types/event_bus_test.go
+++ b/types/event_bus_test.go
@@ -65,6 +65,59 @@ func TestEventBusPublishEventTx(t *testing.T) {
 	}
 }
 
+func TestEventBusPublishEventMalleatedTx(t *testing.T) {
+	eventBus := NewEventBus()
+	err := eventBus.Start()
+	require.NoError(t, err)
+	t.Cleanup(func() {
+		if err := eventBus.Stop(); err != nil {
+			t.Error(err)
+		}
+	})
+
+	tx := Tx("foo")
+	malleatedTx := Tx("foo-malleated")
+	wrappedMalleatedTx, err := WrapMalleatedTx(tx.Hash(), malleatedTx)
+	require.NoError(t, err)
+
+	result := abci.ResponseDeliverTx{
+		Data: []byte("bar"),
+		Events: []abci.Event{
+			{Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}},
+		},
+	}
+
+	// PublishEventTx adds 3 composite keys, so the query below should work
+	query := fmt.Sprintf("tm.event='Tx' AND tx.height=1 AND tx.hash='%X' AND testType.baz=1", tx.Hash())
+	txsSub, err := eventBus.Subscribe(context.Background(), "test", tmquery.MustParse(query))
+	require.NoError(t, err)
+
+	done := make(chan struct{})
+	go func() {
+		msg := <-txsSub.Out()
+		edt := msg.Data().(EventDataTx)
+		assert.Equal(t, int64(1), edt.Height)
+		assert.Equal(t, uint32(0), edt.Index)
+		assert.EqualValues(t, malleatedTx, edt.Tx)
+		assert.Equal(t, result, edt.Result)
+		close(done)
+	}()
+
+	err = eventBus.PublishEventTx(EventDataTx{abci.TxResult{
+		Height: 1,
+		Index:  0,
+		Tx:     wrappedMalleatedTx,
+		Result: result,
+	}})
+	assert.NoError(t, err)
+
+	select {
+	case <-done:
+	case <-time.After(1 * time.Second):
+		t.Fatal("did not receive a transaction after 1 sec.")
+	}
+}
+
 func TestEventBusPublishEventNewBlock(t *testing.T) {
 	eventBus := NewEventBus()
 	err := eventBus.Start()
@@ -93,28 +146,21 @@ func TestEventBusPublishEventNewBlock(t *testing.T) {
 	blocksSub, err := eventBus.Subscribe(context.Background(), "test", tmquery.MustParse(query))
 	require.NoError(t, err)
 
-	done := make(chan struct{})
-	go func() {
-		msg := <-blocksSub.Out()
-		edt := msg.Data().(EventDataNewBlock)
-		assert.Equal(t, block, edt.Block)
-		assert.Equal(t, resultBeginBlock, edt.ResultBeginBlock)
-		assert.Equal(t, resultEndBlock, edt.ResultEndBlock)
-		close(done)
-	}()
-
 	err = eventBus.PublishEventNewBlock(EventDataNewBlock{
 		Block:            block,
 		ResultBeginBlock: resultBeginBlock,
 		ResultEndBlock:   resultEndBlock,
 	})
-	assert.NoError(t, err)
 
-	select {
-	case <-done:
-	case <-time.After(1 * time.Second):
-		t.Fatal("did not receive a block after 1 sec.")
-	}
+	done := make(chan struct{})
+	// go func() {
+	msg := <-blocksSub.Out()
+	edt := msg.Data().(EventDataNewBlock)
+	assert.Equal(t, block, edt.Block)
+	assert.Equal(t, resultBeginBlock, edt.ResultBeginBlock)
+	assert.Equal(t, resultEndBlock, edt.ResultEndBlock)
+	close(done)
+	assert.NoError(t, err)
 }
 
 func TestEventBusPublishEventTxDuplicateKeys(t *testing.T) {
diff --git a/types/tx.go b/types/tx.go
index 98cd17bdbf..2bbfb5e5ad 100644
--- a/types/tx.go
+++ b/types/tx.go
@@ -161,38 +161,39 @@ func ComputeProtoSizeForTxs(txs []Tx) int64 {
 	return int64(pdData.Size())
 }
 
-// DecodeChildTx attempts to unmarshal the provided transaction into a child
-// transaction wrapper, if this an be done, then it returns true. A child
-// transaction is a normal transaction that has been derived from a different
-// parent transaction. The returned hash is that of the parent transaction,
-// which allows us to remove the parent transaction from the mempool. NOTE:
-// protobuf sometimes does not throw an error if the transaction passed is not
-// a tmproto.ChildTx, since the schema for PayForMessage is kept in the app, we
-// cannot perform further checks without creating an import cycle.
-func DecodeChildTx(tx Tx) (hash []byte, unwrapped Tx, has bool) {
-	// attempt to unmarshal into a a child transaction
-	var childTx tmproto.ChildTx
-	err := proto.Unmarshal(tx, &childTx)
+// UnwrapMalleatedTx attempts to unmarshal the provided transaction into a malleated
+// transaction wrapper, if this an be done, then it returns true. A malleated
+// transaction is a normal transaction that has been derived (malleated) from a
+// different original transaction. The returned hash is that of the original
+// transaction, which allows us to remove the original transaction from the
+// mempool. NOTE: protobuf sometimes does not throw an error if the transaction
+// passed is not a tmproto.MalleatedTx, since the schema for PayForMessage is kept
+// in the app, we cannot perform further checks without creating an import
+// cycle.
+func UnwrapMalleatedTx(tx Tx) (originalHash []byte, unwrapped Tx, isMalleated bool) {
+	// attempt to unmarshal into a a malleated transaction
+	var malleatedTx tmproto.MalleatedTx
+	err := proto.Unmarshal(tx, &malleatedTx)
 	if err != nil {
 		return nil, nil, false
 	}
 	// this check will fail to catch unwanted types should those unmarshalled
 	// types happen to have a hash sized slice of bytes in the same field number
-	// as ParentTxHash. TODO(evan): either fix this, or better yet use a different
+	// as originalTxHash. TODO(evan): either fix this, or better yet use a different
 	// mechanism
-	if len(childTx.ParentTxHash) != tmhash.Size {
+	if len(malleatedTx.OriginalTxHash) != tmhash.Size {
 		return nil, nil, false
 	}
-	return childTx.ParentTxHash, childTx.Tx, true
+	return malleatedTx.OriginalTxHash, malleatedTx.Tx, true
 }
 
-// WrapChildTx creates a wrapped Tx that includes the parent transaction's hash
+// WrapMalleatedTx creates a wrapped Tx that includes the original transaction's hash
 // so that it can be easily removed from the mempool. note: must be unwrapped to
 // be a viable sdk.Tx
-func WrapChildTx(parentHash []byte, child Tx) (Tx, error) {
-	wTx := tmproto.ChildTx{
-		ParentTxHash: parentHash,
-		Tx:           child,
+func WrapMalleatedTx(originalHash []byte, malleated Tx) (Tx, error) {
+	wTx := tmproto.MalleatedTx{
+		OriginalTxHash: originalHash,
+		Tx:             malleated,
 	}
 	return proto.Marshal(&wTx)
 }
diff --git a/types/tx_test.go b/types/tx_test.go
index dde2eee2d4..21e10eddea 100644
--- a/types/tx_test.go
+++ b/types/tx_test.go
@@ -151,11 +151,11 @@ func assertBadProof(t *testing.T, root []byte, bad []byte, good TxProof) {
 	}
 }
 
-func TestDecodeChildTx(t *testing.T) {
+func TestUnwrapMalleatedTx(t *testing.T) {
 	// perform a simple test for being unable to decode a non
-	// child transaction
+	// malleated transaction
 	tx := Tx{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
-	_, _, ok := DecodeChildTx(tx)
+	_, _, ok := UnwrapMalleatedTx(tx)
 	require.False(t, ok)
 
 	// create a proto message that used to be decoded when it shouldn't have
@@ -181,15 +181,15 @@ func TestDecodeChildTx(t *testing.T) {
 
 	// due to protobuf not actually requiring type compatibility
 	// we need to make sure that there is some check
-	_, _, ok = DecodeChildTx(rawBlock)
+	_, _, ok = UnwrapMalleatedTx(rawBlock)
 	require.False(t, ok)
 
 	pHash := sha256.Sum256(rawBlock)
-	childTx, err := WrapChildTx(pHash[:], rawBlock)
+	MalleatedTx, err := WrapMalleatedTx(pHash[:], rawBlock)
 	require.NoError(t, err)
 
 	// finally, ensure that the unwrapped bytes are identical to the input
-	unwrappedHash, unwrapped, ok := DecodeChildTx(childTx)
+	unwrappedHash, unwrapped, ok := UnwrapMalleatedTx(MalleatedTx)
 	require.True(t, ok)
 	assert.Equal(t, 32, len(unwrappedHash))
 	require.Equal(t, rawBlock, []byte(unwrapped))