 [p] Properties to set
         */
        function TransactionGetRecordResponse(p) {
            this.duplicateTransactionRecords = [];
            if (p)
                for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                    if (p[ks[i]]!= null)
                        this[ks[i]] = p[ks[i]];
        }

        /**
         * TransactionGetRecordResponse header.
         * @member {proto.IResponseHeader|null|undefined} header
         * @memberof proto.TransactionGetRecordResponse
         * @instance
         */
        TransactionGetRecordResponse.prototype.header = null;

        /**
         * TransactionGetRecordResponse transactionRecord.
         * @member {proto.ITransactionRecord|null|undefined} transactionRecord
         * @memberof proto.TransactionGetRecordResponse
         * @instance
         */
        TransactionGetRecordResponse.prototype.transactionRecord = null;

        /**
         * TransactionGetRecordResponse duplicateTransactionRecords.
         * @member {Array.<proto.ITransactionRecord>} duplicateTransactionRecords
         * @memberof proto.TransactionGetRecordResponse
         * @instance
         */
        TransactionGetRecordResponse.prototype.duplicateTransactionRecords = $util.emptyArray;

        /**
         * Creates a new TransactionGetRecordResponse instance using the specified properties.
         * @function create
         * @memberof proto.TransactionGetRecordResponse
         * @static
         * @param {proto.ITransactionGetRecordResponse=} [properties] Properties to set
         * @returns {proto.TransactionGetRecordResponse} TransactionGetRecordResponse instance
         */
        TransactionGetRecordResponse.create = function create(properties) {
            return new TransactionGetRecordResponse(properties);
        };

        /**
         * Encodes the specified TransactionGetRecordResponse message. Does not implicitly {@link proto.TransactionGetRecordResponse.verify|verify} messages.
         * @function encode
         * @memberof proto.TransactionGetRecordResponse
         * @static
         * @param {proto.ITransactionGetRecordResponse} m TransactionGetRecordResponse message or plain object to encode
         * @param {$protobuf.Writer} [w] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TransactionGetRecordResponse.encode = function encode(m, w) {
            if (!w)
                w = $Writer.create();
            if (m.header!= null && Object.hasOwnProperty.call(m, "header"))
                $root.proto.ResponseHeader.encode(m.header, w.uint32(10).fork()).ldelim();
            if (m.transactionRecord!= null && Object.hasOwnProperty.call(m, "transactionRecord"))
                $root.proto.TransactionRecord.encode(m.transactionRecord, w.uint32(26).fork()).ldelim();
            if (m.duplicateTransactionRecords!= null && m.duplicateTransactionRecords.length) {
                for (var i = 0; i < m.duplicateTransactionRecords.length; ++i)
                    $root.proto.TransactionRecord.encode(m.duplicateTransactionRecords[i], w.uint32(34).fork()).ldelim();
            }
            return w;
        };

        /**
         * Decodes a TransactionGetRecordResponse message from the specified reader or buffer.
         * @function decode
         * @memberof proto.TransactionGetRecordResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
         * @param {number} [l] Message length if known beforehand
         * @returns {proto.TransactionGetRecordResponse} TransactionGetRecordResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TransactionGetRecordResponse.decode = function decode(r, l) {
            if (!(r instanceof $Reader))
                r = $Reader.create(r);
            var c = l === undefined? r.len : r.pos + l, m = new $root.proto.TransactionGetRecordResponse();
            while (r.pos < c) {
                var t = r.uint32();
                switch (t >>> 3) {
                case 1:
                    m.header = $root.proto.ResponseHeader.decode(r, r.uint32());
                    break;
                case 3:
                    m.transactionRecord = $root.proto.TransactionRecord.decode(r, r.uint32());
                    break;
                case 4:
                    if (!(m.duplicateTransactionRecords && m.duplicateTransactionRecords.length))
                        m.duplicateTransactionRecords = [];
                    m.duplicateTransactionRecords.push($root.proto.TransactionRecord.decode(r, r.uint32()));
                    break;
                default:
                    r.skipType(t & 7);
                    break;
                }
            }
            return m;
        };

        return TransactionGetRecordResponse;
    })();

    proto.TransactionGetFastRecordQuery = (function() {

        /**
         * Properties of a TransactionGetFastRecordQuery.
         * @memberof proto
         * @interface ITransactionGetFastRecordQuery
         * @property {proto.IQueryHeader|null} [header] TransactionGetFastRecordQuery header
         * @property {proto.ITransactionID|null} [transactionID] TransactionGetFastRecordQuery transactionID
         */

        /**
         * Constructs a new TransactionGetFastRecordQuery.
         * @memberof proto
         * @classdesc Represents a TransactionGetFastRecordQuery.
         * @implements ITransactionGetFastRecordQuery
         * @constructor
         * @param {proto.ITransactionGetFastRecordQuery=} [p] Properties to set
         */
        function TransactionGetFastRecordQuery(p) {
            if (p)
                for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                    if (p[ks[i]]!= null)
                        this[ks[i]] = p[ks[i]];
        }

        /**
         * TransactionGetFastRecordQuery header.
         * @member {proto.IQueryHeader|null|undefined} header
         * @memberof proto.TransactionGetFastRecordQuery
         * @instance
         */
        TransactionGetFastRecordQuery.prototype.header = null;

        /**
         * TransactionGetFastRecordQuery transactionID.
         * @member {proto.ITransactionID|null|undefined} transactionID
         * @memberof proto.TransactionGetFastRecordQuery
         * @instance
         */
        TransactionGetFastRecordQuery.prototype.transactionID = null;

        /**
         * Creates a new TransactionGetFastRecordQuery instance using the specified properties.
         * @function create
         * @memberof proto.TransactionGetFastRecordQuery
         * @static
         * @param {proto.ITransactionGetFastRecordQuery=} [properties] Properties to set
         * @returns {proto.TransactionGetFastRecordQuery} TransactionGetFastRecordQuery instance
         */
        TransactionGetFastRecordQuery.create = function create(properties) {
            return new TransactionGetFastRecordQuery(properties);
        };

        /**
         * Encodes the specified TransactionGetFastRecordQuery message. Does not implicitly {@link proto.TransactionGetFastRecordQuery.verify|verify} messages.
         * @function encode
         * @memberof proto.TransactionGetFastRecordQuery
         * @static
         * @param {proto.ITransactionGetFastRecordQuery} m TransactionGetFastRecordQuery message or plain object to encode
         * @param {$protobuf.Writer} [w] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TransactionGetFastRecordQuery.encode = function encode(m, w) {
            if (!w)
                w = $Writer.create();
            if (m.header!= null && Object.hasOwnProperty.call(m, "header"))
                $root.proto.QueryHeader.encode(m.header, w.uint32(10).fork()).ldelim();
            if (m.transactionID!= null && Object.hasOwnProperty.call(m, "transactionID"))
                $root.proto.TransactionID.encode(m.transactionID, w.uint32(18).fork()).ldelim();
            return w;
        };

        /**
         * Decodes a TransactionGetFastRecordQuery message from the specified reader or buffer.
         * @function decode
         * @memberof proto.TransactionGetFastRecordQuery
         * @static
         * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
         * @param {number} [l] Message length if known beforehand
         * @returns {proto.TransactionGetFastRecordQuery} TransactionGetFastRecordQuery
         