You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: tssignalreader.go
    path of file: ./repos/aether-app/aether-core/aether/frontend/festructs
    
    the code of the file until where you have to start completion: // Frontend > FEStructs > Truststate Signal Reader
// This library is tasked with reading the high level ts signals from the backend. For example, low level read is a truststate read from the backend, a high level read is read of a namemap.

package festructs

import (
	// "aether-core/aether/frontend/festructs"
	// pb "aether-core/aether/protos/beapi"
	"aether-core/aether/frontend/beapiconsumer"
	pbstructs "aether-core/aether/protos/mimapi"
	"aether-core/aether/services/globals"
	"aether-core/aether/services/logging"
	// "fmt"
	// "github.com/davecgh/go-spew/spew"
	// "
    
func GetF451s(targetfp, domainfp string, startts, nowts int64) []F451Signal {
	rawSignals := getTsBasedSignal(targetfp, domainfp, startts, nowts, 3, -1)
	sgns := []F451Signal{}
	for k, _ := range rawSignals {
		sgns = append(sgns, F451Signal{
			BaseTruststateSignal: BaseTruststateSignal{
				BaseSignal: BaseSignal{
					Fingerprint:       rawSignals[k].GetProvable().GetFingerprint(),
					Creation:          rawSignals[k].GetProvable().GetCreation(),
					LastUpdate:        rawSignals[k].GetUpdateable().GetLastUpdate(),
					TargetFingerprint: rawSignals[k].GetTarget(),
					SourceFingerprint: rawSignals[k].GetOwner(),
					TypeClass:         int(rawSignals[k].GetTypeClass()),
					Type:              int(rawSignals[k].GetType()),
					Self:              rawSignals[k].GetOwnerPublicKey() == globals.FrontendConfig.GetMarshaledUserPublicKey(),
					LastRefreshed:     nowts,
				},
				Expiry: rawSignals[k].GetExpiry(),
				Domain: rawSignals[k].GetDomain(),
			},
		})
	}
	return sgns
}