diff --git a/lnrpc/README.md b/lnrpc/README.md index 95044f4ad..b92f4f1ef 100644 --- a/lnrpc/README.md +++ b/lnrpc/README.md @@ -39,6 +39,8 @@ description): nested-pay-to-witness-key-hash (np2wkh). * ConnectPeer * Connects to a peer identified by a public key and host. + * DisconnectPeer + * Disconnects a peer identified by a public key. * ListPeers * Lists all available connected peers. * GetInfo diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index f567c1d1d..209b31e9b 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -25,6 +25,8 @@ It has these top-level messages: NewAddressResponse ConnectPeerRequest ConnectPeerResponse + DisconnectPeerRequest + DisconnectPeerResponse HTLC ActiveChannel ListChannelsRequest @@ -512,6 +514,30 @@ func (m *ConnectPeerResponse) GetPeerId() int32 { return 0 } +type DisconnectPeerRequest struct { + PubKey string `protobuf:"bytes,1,opt,name=pub_key" json:"pub_key,omitempty"` +} + +func (m *DisconnectPeerRequest) Reset() { *m = DisconnectPeerRequest{} } +func (m *DisconnectPeerRequest) String() string { return proto.CompactTextString(m) } +func (*DisconnectPeerRequest) ProtoMessage() {} +func (*DisconnectPeerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *DisconnectPeerRequest) GetPubKey() string { + if m != nil { + return m.PubKey + } + return "" +} + +type DisconnectPeerResponse struct { +} + +func (m *DisconnectPeerResponse) Reset() { *m = DisconnectPeerResponse{} } +func (m *DisconnectPeerResponse) String() string { return proto.CompactTextString(m) } +func (*DisconnectPeerResponse) ProtoMessage() {} +func (*DisconnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + type HTLC struct { Incoming bool `protobuf:"varint,1,opt,name=incoming" json:"incoming,omitempty"` Amount int64 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"` @@ -523,7 +549,7 @@ type HTLC struct { func (m *HTLC) Reset() { *m = HTLC{} } func (m *HTLC) String() string { return proto.CompactTextString(m) } func (*HTLC) ProtoMessage() {} -func (*HTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*HTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *HTLC) GetIncoming() bool { if m != nil { @@ -578,7 +604,7 @@ type ActiveChannel struct { func (m *ActiveChannel) Reset() { *m = ActiveChannel{} } func (m *ActiveChannel) String() string { return proto.CompactTextString(m) } func (*ActiveChannel) ProtoMessage() {} -func (*ActiveChannel) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*ActiveChannel) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *ActiveChannel) GetActive() bool { if m != nil { @@ -670,7 +696,7 @@ type ListChannelsRequest struct { func (m *ListChannelsRequest) Reset() { *m = ListChannelsRequest{} } func (m *ListChannelsRequest) String() string { return proto.CompactTextString(m) } func (*ListChannelsRequest) ProtoMessage() {} -func (*ListChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*ListChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } type ListChannelsResponse struct { Channels []*ActiveChannel `protobuf:"bytes,11,rep,name=channels" json:"channels,omitempty"` @@ -679,7 +705,7 @@ type ListChannelsResponse struct { func (m *ListChannelsResponse) Reset() { *m = ListChannelsResponse{} } func (m *ListChannelsResponse) String() string { return proto.CompactTextString(m) } func (*ListChannelsResponse) ProtoMessage() {} -func (*ListChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*ListChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *ListChannelsResponse) GetChannels() []*ActiveChannel { if m != nil { @@ -703,7 +729,7 @@ type Peer struct { func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *Peer) GetPubKey() string { if m != nil { @@ -774,7 +800,7 @@ type ListPeersRequest struct { func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} } func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) } func (*ListPeersRequest) ProtoMessage() {} -func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } type ListPeersResponse struct { Peers []*Peer `protobuf:"bytes,1,rep,name=peers" json:"peers,omitempty"` @@ -783,7 +809,7 @@ type ListPeersResponse struct { func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} } func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) } func (*ListPeersResponse) ProtoMessage() {} -func (*ListPeersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*ListPeersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *ListPeersResponse) GetPeers() []*Peer { if m != nil { @@ -798,7 +824,7 @@ type GetInfoRequest struct { func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} } func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetInfoRequest) ProtoMessage() {} -func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } type GetInfoResponse struct { IdentityPubkey string `protobuf:"bytes,1,opt,name=identity_pubkey" json:"identity_pubkey,omitempty"` @@ -816,7 +842,7 @@ type GetInfoResponse struct { func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} } func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetInfoResponse) ProtoMessage() {} -func (*GetInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*GetInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *GetInfoResponse) GetIdentityPubkey() string { if m != nil { @@ -897,7 +923,7 @@ type ConfirmationUpdate struct { func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} } func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) } func (*ConfirmationUpdate) ProtoMessage() {} -func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *ConfirmationUpdate) GetBlockSha() []byte { if m != nil { @@ -927,7 +953,7 @@ type ChannelOpenUpdate struct { func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} } func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) } func (*ChannelOpenUpdate) ProtoMessage() {} -func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *ChannelOpenUpdate) GetChannelPoint() *ChannelPoint { if m != nil { @@ -944,7 +970,7 @@ type ChannelCloseUpdate struct { func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} } func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) } func (*ChannelCloseUpdate) ProtoMessage() {} -func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *ChannelCloseUpdate) GetClosingTxid() []byte { if m != nil { @@ -969,7 +995,7 @@ type CloseChannelRequest struct { func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} } func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) } func (*CloseChannelRequest) ProtoMessage() {} -func (*CloseChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*CloseChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (m *CloseChannelRequest) GetChannelPoint() *ChannelPoint { if m != nil { @@ -1003,7 +1029,7 @@ type CloseStatusUpdate struct { func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} } func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) } func (*CloseStatusUpdate) ProtoMessage() {} -func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } type isCloseStatusUpdate_Update interface { isCloseStatusUpdate_Update() @@ -1152,7 +1178,7 @@ type PendingUpdate struct { func (m *PendingUpdate) Reset() { *m = PendingUpdate{} } func (m *PendingUpdate) String() string { return proto.CompactTextString(m) } func (*PendingUpdate) ProtoMessage() {} -func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } func (m *PendingUpdate) GetTxid() []byte { if m != nil { @@ -1180,7 +1206,7 @@ type OpenChannelRequest struct { func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} } func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) } func (*OpenChannelRequest) ProtoMessage() {} -func (*OpenChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*OpenChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (m *OpenChannelRequest) GetTargetPeerId() int32 { if m != nil { @@ -1235,7 +1261,7 @@ type OpenStatusUpdate struct { func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} } func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) } func (*OpenStatusUpdate) ProtoMessage() {} -func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } type isOpenStatusUpdate_Update interface { isOpenStatusUpdate_Update() @@ -1382,7 +1408,7 @@ type PendingChannelRequest struct { func (m *PendingChannelRequest) Reset() { *m = PendingChannelRequest{} } func (m *PendingChannelRequest) String() string { return proto.CompactTextString(m) } func (*PendingChannelRequest) ProtoMessage() {} -func (*PendingChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*PendingChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } type PendingChannelResponse struct { TotalLimboBalance int64 `protobuf:"varint,1,opt,name=total_limbo_balance" json:"total_limbo_balance,omitempty"` @@ -1394,7 +1420,7 @@ type PendingChannelResponse struct { func (m *PendingChannelResponse) Reset() { *m = PendingChannelResponse{} } func (m *PendingChannelResponse) String() string { return proto.CompactTextString(m) } func (*PendingChannelResponse) ProtoMessage() {} -func (*PendingChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (*PendingChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } func (m *PendingChannelResponse) GetTotalLimboBalance() int64 { if m != nil { @@ -1436,7 +1462,7 @@ func (m *PendingChannelResponse_PendingChannel) Reset() { *m = PendingCh func (m *PendingChannelResponse_PendingChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelResponse_PendingChannel) ProtoMessage() {} func (*PendingChannelResponse_PendingChannel) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{34, 0} + return fileDescriptor0, []int{36, 0} } func (m *PendingChannelResponse_PendingChannel) GetRemoteNodePub() string { @@ -1486,7 +1512,7 @@ func (m *PendingChannelResponse_PendingOpenChannel) Reset() { func (m *PendingChannelResponse_PendingOpenChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelResponse_PendingOpenChannel) ProtoMessage() {} func (*PendingChannelResponse_PendingOpenChannel) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{34, 1} + return fileDescriptor0, []int{36, 1} } func (m *PendingChannelResponse_PendingOpenChannel) GetChannel() *PendingChannelResponse_PendingChannel { @@ -1519,7 +1545,7 @@ func (m *PendingChannelResponse_ClosedChannel) Reset() { *m = PendingCha func (m *PendingChannelResponse_ClosedChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelResponse_ClosedChannel) ProtoMessage() {} func (*PendingChannelResponse_ClosedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{34, 2} + return fileDescriptor0, []int{36, 2} } func (m *PendingChannelResponse_ClosedChannel) GetChannel() *PendingChannelResponse_PendingChannel { @@ -1550,7 +1576,7 @@ func (m *PendingChannelResponse_ForceClosedChannel) Reset() { func (m *PendingChannelResponse_ForceClosedChannel) String() string { return proto.CompactTextString(m) } func (*PendingChannelResponse_ForceClosedChannel) ProtoMessage() {} func (*PendingChannelResponse_ForceClosedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{34, 3} + return fileDescriptor0, []int{36, 3} } func (m *PendingChannelResponse_ForceClosedChannel) GetChannel() *PendingChannelResponse_PendingChannel { @@ -1595,7 +1621,7 @@ type WalletBalanceRequest struct { func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} } func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) } func (*WalletBalanceRequest) ProtoMessage() {} -func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } func (m *WalletBalanceRequest) GetWitnessOnly() bool { if m != nil { @@ -1611,7 +1637,7 @@ type WalletBalanceResponse struct { func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} } func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) } func (*WalletBalanceResponse) ProtoMessage() {} -func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } func (m *WalletBalanceResponse) GetBalance() float64 { if m != nil { @@ -1626,7 +1652,7 @@ type ChannelBalanceRequest struct { func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} } func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) } func (*ChannelBalanceRequest) ProtoMessage() {} -func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } +func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } type ChannelBalanceResponse struct { Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"` @@ -1635,7 +1661,7 @@ type ChannelBalanceResponse struct { func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{} } func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) } func (*ChannelBalanceResponse) ProtoMessage() {} -func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } +func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } func (m *ChannelBalanceResponse) GetBalance() int64 { if m != nil { @@ -1652,7 +1678,7 @@ type QueryRoutesRequest struct { func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} } func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) } func (*QueryRoutesRequest) ProtoMessage() {} -func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } +func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } func (m *QueryRoutesRequest) GetPubKey() string { if m != nil { @@ -1675,7 +1701,7 @@ type QueryRoutesResponse struct { func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} } func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) } func (*QueryRoutesResponse) ProtoMessage() {} -func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } +func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } func (m *QueryRoutesResponse) GetRoutes() []*Route { if m != nil { @@ -1694,7 +1720,7 @@ type Hop struct { func (m *Hop) Reset() { *m = Hop{} } func (m *Hop) String() string { return proto.CompactTextString(m) } func (*Hop) ProtoMessage() {} -func (*Hop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } +func (*Hop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } func (m *Hop) GetChanId() uint64 { if m != nil { @@ -1734,7 +1760,7 @@ type Route struct { func (m *Route) Reset() { *m = Route{} } func (m *Route) String() string { return proto.CompactTextString(m) } func (*Route) ProtoMessage() {} -func (*Route) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } +func (*Route) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } func (m *Route) GetTotalTimeLock() uint32 { if m != nil { @@ -1771,7 +1797,7 @@ type NodeInfoRequest struct { func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} } func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) } func (*NodeInfoRequest) ProtoMessage() {} -func (*NodeInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } +func (*NodeInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } func (m *NodeInfoRequest) GetPubKey() string { if m != nil { @@ -1789,7 +1815,7 @@ type NodeInfo struct { func (m *NodeInfo) Reset() { *m = NodeInfo{} } func (m *NodeInfo) String() string { return proto.CompactTextString(m) } func (*NodeInfo) ProtoMessage() {} -func (*NodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } +func (*NodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } func (m *NodeInfo) GetNode() *LightningNode { if m != nil { @@ -1822,7 +1848,7 @@ type LightningNode struct { func (m *LightningNode) Reset() { *m = LightningNode{} } func (m *LightningNode) String() string { return proto.CompactTextString(m) } func (*LightningNode) ProtoMessage() {} -func (*LightningNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } +func (*LightningNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } func (m *LightningNode) GetLastUpdate() uint32 { if m != nil { @@ -1860,7 +1886,7 @@ type NodeAddress struct { func (m *NodeAddress) Reset() { *m = NodeAddress{} } func (m *NodeAddress) String() string { return proto.CompactTextString(m) } func (*NodeAddress) ProtoMessage() {} -func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } +func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } func (m *NodeAddress) GetNetwork() string { if m != nil { @@ -1886,7 +1912,7 @@ type RoutingPolicy struct { func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} } func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) } func (*RoutingPolicy) ProtoMessage() {} -func (*RoutingPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } +func (*RoutingPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } func (m *RoutingPolicy) GetTimeLockDelta() uint32 { if m != nil { @@ -1930,7 +1956,7 @@ type ChannelEdge struct { func (m *ChannelEdge) Reset() { *m = ChannelEdge{} } func (m *ChannelEdge) String() string { return proto.CompactTextString(m) } func (*ChannelEdge) ProtoMessage() {} -func (*ChannelEdge) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } +func (*ChannelEdge) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } func (m *ChannelEdge) GetChannelId() uint64 { if m != nil { @@ -1994,7 +2020,7 @@ type ChannelGraphRequest struct { func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} } func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) } func (*ChannelGraphRequest) ProtoMessage() {} -func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } +func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } type ChannelGraph struct { Nodes []*LightningNode `protobuf:"bytes,1,rep,name=nodes" json:"nodes,omitempty"` @@ -2004,7 +2030,7 @@ type ChannelGraph struct { func (m *ChannelGraph) Reset() { *m = ChannelGraph{} } func (m *ChannelGraph) String() string { return proto.CompactTextString(m) } func (*ChannelGraph) ProtoMessage() {} -func (*ChannelGraph) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } +func (*ChannelGraph) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } func (m *ChannelGraph) GetNodes() []*LightningNode { if m != nil { @@ -2027,7 +2053,7 @@ type ChanInfoRequest struct { func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} } func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) } func (*ChanInfoRequest) ProtoMessage() {} -func (*ChanInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } +func (*ChanInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } func (m *ChanInfoRequest) GetChanId() uint64 { if m != nil { @@ -2042,7 +2068,7 @@ type NetworkInfoRequest struct { func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} } func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) } func (*NetworkInfoRequest) ProtoMessage() {} -func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } +func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } type NetworkInfo struct { GraphDiameter uint32 `protobuf:"varint,1,opt,name=graph_diameter" json:"graph_diameter,omitempty"` @@ -2059,7 +2085,7 @@ type NetworkInfo struct { func (m *NetworkInfo) Reset() { *m = NetworkInfo{} } func (m *NetworkInfo) String() string { return proto.CompactTextString(m) } func (*NetworkInfo) ProtoMessage() {} -func (*NetworkInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } +func (*NetworkInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } func (m *NetworkInfo) GetGraphDiameter() uint32 { if m != nil { @@ -2130,7 +2156,7 @@ type GraphTopologySubscription struct { func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscription{} } func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) } func (*GraphTopologySubscription) ProtoMessage() {} -func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } +func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } type GraphTopologyUpdate struct { NodeUpdates []*NodeUpdate `protobuf:"bytes,1,rep,name=node_updates,json=nodeUpdates" json:"node_updates,omitempty"` @@ -2141,7 +2167,7 @@ type GraphTopologyUpdate struct { func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} } func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) } func (*GraphTopologyUpdate) ProtoMessage() {} -func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } +func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } func (m *GraphTopologyUpdate) GetNodeUpdates() []*NodeUpdate { if m != nil { @@ -2174,7 +2200,7 @@ type NodeUpdate struct { func (m *NodeUpdate) Reset() { *m = NodeUpdate{} } func (m *NodeUpdate) String() string { return proto.CompactTextString(m) } func (*NodeUpdate) ProtoMessage() {} -func (*NodeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } +func (*NodeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } func (m *NodeUpdate) GetAddresses() []string { if m != nil { @@ -2216,7 +2242,7 @@ type ChannelEdgeUpdate struct { func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} } func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) } func (*ChannelEdgeUpdate) ProtoMessage() {} -func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } +func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} } func (m *ChannelEdgeUpdate) GetChanId() uint64 { if m != nil { @@ -2270,7 +2296,7 @@ type ClosedChannelUpdate struct { func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} } func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) } func (*ClosedChannelUpdate) ProtoMessage() {} -func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } +func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} } func (m *ClosedChannelUpdate) GetChanId() uint64 { if m != nil { @@ -2307,7 +2333,7 @@ type SetAliasRequest struct { func (m *SetAliasRequest) Reset() { *m = SetAliasRequest{} } func (m *SetAliasRequest) String() string { return proto.CompactTextString(m) } func (*SetAliasRequest) ProtoMessage() {} -func (*SetAliasRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} } +func (*SetAliasRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} } func (m *SetAliasRequest) GetNewAlias() string { if m != nil { @@ -2322,7 +2348,7 @@ type SetAliasResponse struct { func (m *SetAliasResponse) Reset() { *m = SetAliasResponse{} } func (m *SetAliasResponse) String() string { return proto.CompactTextString(m) } func (*SetAliasResponse) ProtoMessage() {} -func (*SetAliasResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} } +func (*SetAliasResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} } type Invoice struct { Memo string `protobuf:"bytes,1,opt,name=memo" json:"memo,omitempty"` @@ -2339,7 +2365,7 @@ type Invoice struct { func (m *Invoice) Reset() { *m = Invoice{} } func (m *Invoice) String() string { return proto.CompactTextString(m) } func (*Invoice) ProtoMessage() {} -func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} } +func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} } func (m *Invoice) GetMemo() string { if m != nil { @@ -2412,7 +2438,7 @@ type AddInvoiceResponse struct { func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} } func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) } func (*AddInvoiceResponse) ProtoMessage() {} -func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} } +func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} } func (m *AddInvoiceResponse) GetRHash() []byte { if m != nil { @@ -2436,7 +2462,7 @@ type PaymentHash struct { func (m *PaymentHash) Reset() { *m = PaymentHash{} } func (m *PaymentHash) String() string { return proto.CompactTextString(m) } func (*PaymentHash) ProtoMessage() {} -func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} } +func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} } func (m *PaymentHash) GetRHashStr() string { if m != nil { @@ -2459,7 +2485,7 @@ type ListInvoiceRequest struct { func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} } func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) } func (*ListInvoiceRequest) ProtoMessage() {} -func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} } +func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} } func (m *ListInvoiceRequest) GetPendingOnly() bool { if m != nil { @@ -2475,7 +2501,7 @@ type ListInvoiceResponse struct { func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} } func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) } func (*ListInvoiceResponse) ProtoMessage() {} -func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} } +func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } func (m *ListInvoiceResponse) GetInvoices() []*Invoice { if m != nil { @@ -2490,7 +2516,7 @@ type InvoiceSubscription struct { func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} } func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) } func (*InvoiceSubscription) ProtoMessage() {} -func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} } +func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } type Payment struct { PaymentHash string `protobuf:"bytes,1,opt,name=payment_hash" json:"payment_hash,omitempty"` @@ -2503,7 +2529,7 @@ type Payment struct { func (m *Payment) Reset() { *m = Payment{} } func (m *Payment) String() string { return proto.CompactTextString(m) } func (*Payment) ProtoMessage() {} -func (*Payment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } +func (*Payment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } func (m *Payment) GetPaymentHash() string { if m != nil { @@ -2546,7 +2572,7 @@ type ListPaymentsRequest struct { func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} } func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) } func (*ListPaymentsRequest) ProtoMessage() {} -func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } +func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } type ListPaymentsResponse struct { Payments []*Payment `protobuf:"bytes,1,rep,name=payments" json:"payments,omitempty"` @@ -2555,7 +2581,7 @@ type ListPaymentsResponse struct { func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} } func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) } func (*ListPaymentsResponse) ProtoMessage() {} -func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } +func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } func (m *ListPaymentsResponse) GetPayments() []*Payment { if m != nil { @@ -2570,7 +2596,7 @@ type DeleteAllPaymentsRequest struct { func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsRequest{} } func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteAllPaymentsRequest) ProtoMessage() {} -func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } +func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } type DeleteAllPaymentsResponse struct { } @@ -2578,7 +2604,7 @@ type DeleteAllPaymentsResponse struct { func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResponse{} } func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteAllPaymentsResponse) ProtoMessage() {} -func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } +func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } type DebugLevelRequest struct { Show bool `protobuf:"varint,1,opt,name=show" json:"show,omitempty"` @@ -2588,7 +2614,7 @@ type DebugLevelRequest struct { func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (*DebugLevelRequest) ProtoMessage() {} -func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } +func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } func (m *DebugLevelRequest) GetShow() bool { if m != nil { @@ -2611,7 +2637,7 @@ type DebugLevelResponse struct { func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (*DebugLevelResponse) ProtoMessage() {} -func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } +func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } func (m *DebugLevelResponse) GetSubSystems() string { if m != nil { @@ -2627,7 +2653,7 @@ type PayReqString struct { func (m *PayReqString) Reset() { *m = PayReqString{} } func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (*PayReqString) ProtoMessage() {} -func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } +func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } func (m *PayReqString) GetPayReq() string { if m != nil { @@ -2645,7 +2671,7 @@ type PayReq struct { func (m *PayReq) Reset() { *m = PayReq{} } func (m *PayReq) String() string { return proto.CompactTextString(m) } func (*PayReq) ProtoMessage() {} -func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } +func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } func (m *PayReq) GetDestination() string { if m != nil { @@ -2685,6 +2711,8 @@ func init() { proto.RegisterType((*NewAddressResponse)(nil), "lnrpc.NewAddressResponse") proto.RegisterType((*ConnectPeerRequest)(nil), "lnrpc.ConnectPeerRequest") proto.RegisterType((*ConnectPeerResponse)(nil), "lnrpc.ConnectPeerResponse") + proto.RegisterType((*DisconnectPeerRequest)(nil), "lnrpc.DisconnectPeerRequest") + proto.RegisterType((*DisconnectPeerResponse)(nil), "lnrpc.DisconnectPeerResponse") proto.RegisterType((*HTLC)(nil), "lnrpc.HTLC") proto.RegisterType((*ActiveChannel)(nil), "lnrpc.ActiveChannel") proto.RegisterType((*ListChannelsRequest)(nil), "lnrpc.ListChannelsRequest") @@ -2772,6 +2800,7 @@ type LightningClient interface { NewAddress(ctx context.Context, in *NewAddressRequest, opts ...grpc.CallOption) (*NewAddressResponse, error) NewWitnessAddress(ctx context.Context, in *NewWitnessAddressRequest, opts ...grpc.CallOption) (*NewAddressResponse, error) ConnectPeer(ctx context.Context, in *ConnectPeerRequest, opts ...grpc.CallOption) (*ConnectPeerResponse, error) + DisconnectPeer(ctx context.Context, in *DisconnectPeerRequest, opts ...grpc.CallOption) (*DisconnectPeerResponse, error) ListPeers(ctx context.Context, in *ListPeersRequest, opts ...grpc.CallOption) (*ListPeersResponse, error) GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error) // TODO(roasbeef): merge with below with bool? @@ -2911,6 +2940,15 @@ func (c *lightningClient) ConnectPeer(ctx context.Context, in *ConnectPeerReques return out, nil } +func (c *lightningClient) DisconnectPeer(ctx context.Context, in *DisconnectPeerRequest, opts ...grpc.CallOption) (*DisconnectPeerResponse, error) { + out := new(DisconnectPeerResponse) + err := grpc.Invoke(ctx, "/lnrpc.Lightning/DisconnectPeer", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *lightningClient) ListPeers(ctx context.Context, in *ListPeersRequest, opts ...grpc.CallOption) (*ListPeersResponse, error) { out := new(ListPeersResponse) err := grpc.Invoke(ctx, "/lnrpc.Lightning/ListPeers", in, out, c.cc, opts...) @@ -3253,6 +3291,7 @@ type LightningServer interface { NewAddress(context.Context, *NewAddressRequest) (*NewAddressResponse, error) NewWitnessAddress(context.Context, *NewWitnessAddressRequest) (*NewAddressResponse, error) ConnectPeer(context.Context, *ConnectPeerRequest) (*ConnectPeerResponse, error) + DisconnectPeer(context.Context, *DisconnectPeerRequest) (*DisconnectPeerResponse, error) ListPeers(context.Context, *ListPeersRequest) (*ListPeersResponse, error) GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error) // TODO(roasbeef): merge with below with bool? @@ -3449,6 +3488,24 @@ func _Lightning_ConnectPeer_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Lightning_DisconnectPeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisconnectPeerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LightningServer).DisconnectPeer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lnrpc.Lightning/DisconnectPeer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LightningServer).DisconnectPeer(ctx, req.(*DisconnectPeerRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Lightning_ListPeers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListPeersRequest) if err := dec(in); err != nil { @@ -3937,6 +3994,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{ MethodName: "ConnectPeer", Handler: _Lightning_ConnectPeer_Handler, }, + { + MethodName: "DisconnectPeer", + Handler: _Lightning_DisconnectPeer_Handler, + }, { MethodName: "ListPeers", Handler: _Lightning_ListPeers_Handler, @@ -4053,262 +4114,264 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 4098 bytes of a gzipped FileDescriptorProto + // 4140 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7b, 0xcf, 0x6f, 0x1c, 0xc9, - 0x75, 0xbf, 0x7a, 0x38, 0x24, 0x67, 0xde, 0xcc, 0xf0, 0x47, 0x91, 0x22, 0x47, 0x43, 0xad, 0xac, - 0x2d, 0x0b, 0x2b, 0x7e, 0x65, 0x83, 0xe4, 0xf2, 0x1b, 0x6c, 0xe4, 0x55, 0x92, 0x05, 0x57, 0xd2, - 0x8a, 0x0b, 0xd3, 0x5a, 0xba, 0xa9, 0x5d, 0x25, 0x36, 0x82, 0x49, 0x73, 0xba, 0x38, 0x6c, 0xab, - 0xa7, 0xbb, 0xb7, 0xbb, 0x86, 0xd4, 0x58, 0x20, 0x12, 0x6c, 0x7c, 0x4c, 0x60, 0x04, 0xbe, 0x1b, - 0x09, 0x72, 0xce, 0x25, 0xc7, 0xe4, 0x3f, 0x08, 0x10, 0xc0, 0x80, 0x4f, 0xb9, 0x07, 0xb9, 0xe7, - 0x90, 0x5b, 0x0e, 0xc1, 0xab, 0x1f, 0xdd, 0x55, 0xdd, 0x4d, 0xad, 0x82, 0x04, 0x39, 0x71, 0xea, - 0x53, 0xaf, 0x5f, 0x55, 0xbd, 0x7a, 0xbf, 0xea, 0x55, 0x11, 0xda, 0x69, 0x32, 0xda, 0x49, 0xd2, - 0x98, 0xc7, 0x64, 0x3e, 0x8c, 0xd2, 0x64, 0x34, 0xb8, 0x3d, 0x8e, 0xe3, 0x71, 0xc8, 0x76, 0xbd, - 0x24, 0xd8, 0xf5, 0xa2, 0x28, 0xe6, 0x1e, 0x0f, 0xe2, 0x28, 0x93, 0x44, 0xf4, 0xdf, 0x1d, 0xe8, - 0xbc, 0x48, 0xbd, 0x28, 0xf3, 0x46, 0x08, 0x93, 0x3e, 0x2c, 0xf2, 0xd7, 0xc3, 0x73, 0x2f, 0x3b, - 0xef, 0x3b, 0x77, 0x9d, 0xed, 0xb6, 0xab, 0x9b, 0x64, 0x03, 0x16, 0xbc, 0x49, 0x3c, 0x8d, 0x78, - 0xbf, 0x71, 0xd7, 0xd9, 0x9e, 0x73, 0x55, 0x8b, 0x7c, 0x1f, 0x56, 0xa3, 0xe9, 0x64, 0x38, 0x8a, - 0xa3, 0xb3, 0x20, 0x9d, 0x48, 0xe6, 0xfd, 0xb9, 0xbb, 0xce, 0xf6, 0xbc, 0x5b, 0xed, 0x20, 0x77, - 0x00, 0x4e, 0xc3, 0x78, 0xf4, 0x4a, 0x0e, 0xd1, 0x14, 0x43, 0x18, 0x08, 0xa1, 0xd0, 0x55, 0x2d, - 0x16, 0x8c, 0xcf, 0x79, 0x7f, 0x5e, 0x30, 0xb2, 0x30, 0xe4, 0xc1, 0x83, 0x09, 0x1b, 0x66, 0xdc, - 0x9b, 0x24, 0xfd, 0x05, 0x31, 0x1b, 0x03, 0x11, 0xfd, 0x31, 0xf7, 0xc2, 0xe1, 0x19, 0x63, 0x59, - 0x7f, 0x51, 0xf5, 0xe7, 0x08, 0xed, 0xc3, 0xc6, 0x33, 0xc6, 0x8d, 0x55, 0x67, 0x2e, 0xfb, 0x7a, - 0xca, 0x32, 0x4e, 0x8f, 0x80, 0x18, 0xf0, 0x13, 0xc6, 0xbd, 0x20, 0xcc, 0xc8, 0x47, 0xd0, 0xe5, - 0x06, 0x71, 0xdf, 0xb9, 0x3b, 0xb7, 0xdd, 0xd9, 0x27, 0x3b, 0x42, 0xbe, 0x3b, 0xc6, 0x07, 0xae, - 0x45, 0x47, 0x7f, 0xe3, 0x40, 0xe7, 0x84, 0x45, 0xbe, 0xe2, 0x4e, 0x08, 0x34, 0x7d, 0x96, 0x71, - 0x21, 0xd8, 0xae, 0x2b, 0x7e, 0x93, 0xef, 0x40, 0x07, 0xff, 0x0e, 0x33, 0x9e, 0x06, 0xd1, 0x58, - 0x88, 0xb6, 0xed, 0x02, 0x42, 0x27, 0x02, 0x21, 0x2b, 0x30, 0xe7, 0x4d, 0xb8, 0x10, 0xe8, 0x9c, - 0x8b, 0x3f, 0xc9, 0xfb, 0xd0, 0x4d, 0xbc, 0xd9, 0x84, 0x45, 0xbc, 0x10, 0x62, 0xd7, 0xed, 0x28, - 0xec, 0x10, 0xa5, 0xb8, 0x03, 0x6b, 0x26, 0x89, 0xe6, 0x3e, 0x2f, 0xb8, 0xaf, 0x1a, 0x94, 0x6a, - 0x90, 0xfb, 0xb0, 0xac, 0xe9, 0x53, 0x39, 0x59, 0x21, 0xd6, 0xb6, 0xbb, 0xa4, 0x60, 0x2d, 0xa0, - 0x08, 0xba, 0x72, 0x45, 0x59, 0x12, 0x47, 0x19, 0x23, 0x0f, 0x60, 0x45, 0x7f, 0x98, 0xa4, 0x2c, - 0x98, 0x78, 0x63, 0xa6, 0x96, 0x57, 0xc1, 0xc9, 0x3e, 0xf4, 0xf2, 0x41, 0xe2, 0x29, 0x67, 0x62, - 0xb1, 0x9d, 0xfd, 0xae, 0x92, 0xa3, 0x8b, 0x98, 0x6b, 0x93, 0xd0, 0x6f, 0x1c, 0xe8, 0x3e, 0x3e, - 0xf7, 0xa2, 0x88, 0x85, 0xc7, 0x71, 0x10, 0x71, 0xd4, 0x8f, 0xb3, 0x69, 0xe4, 0x07, 0xd1, 0x78, - 0xc8, 0x5f, 0x07, 0xbe, 0x1a, 0xcc, 0xc2, 0x70, 0x52, 0x66, 0x1b, 0x57, 0xaf, 0x04, 0x5b, 0xc1, - 0x91, 0x5f, 0x3c, 0xe5, 0xc9, 0x94, 0x0f, 0x83, 0xc8, 0x67, 0xaf, 0x85, 0x9c, 0x7b, 0xae, 0x85, - 0xd1, 0x3f, 0x80, 0x95, 0x23, 0x54, 0xbc, 0x28, 0x88, 0xc6, 0x07, 0xbe, 0x9f, 0xb2, 0x2c, 0x43, - 0x6b, 0x48, 0xa6, 0xa7, 0xaf, 0xd8, 0x4c, 0x99, 0x89, 0x6a, 0xe1, 0x1e, 0x9f, 0xc7, 0x19, 0x57, - 0xe3, 0x89, 0xdf, 0xf4, 0xaf, 0x1d, 0x58, 0x46, 0xa9, 0xfd, 0xc8, 0x8b, 0x66, 0x5a, 0x17, 0x8e, - 0xa0, 0x8b, 0xac, 0x5e, 0xc4, 0x07, 0xd2, 0xa6, 0xa4, 0x4e, 0x6d, 0x2b, 0x59, 0x94, 0xa8, 0x77, - 0x4c, 0xd2, 0xa7, 0x11, 0x4f, 0x67, 0xae, 0xf5, 0xf5, 0xe0, 0x13, 0x58, 0xad, 0x90, 0xa0, 0xe6, - 0x14, 0xf3, 0xc3, 0x9f, 0x64, 0x1d, 0xe6, 0x2f, 0xbc, 0x70, 0xca, 0x94, 0x05, 0xcb, 0xc6, 0xc7, - 0x8d, 0x87, 0x0e, 0xfd, 0x00, 0x56, 0x8a, 0x31, 0xd5, 0xde, 0x12, 0x68, 0xe6, 0x22, 0x6e, 0xbb, - 0xe2, 0x37, 0x8a, 0x02, 0xe9, 0x1e, 0xc7, 0x41, 0x6e, 0x34, 0x48, 0xe7, 0xf9, 0x7e, 0xaa, 0xe9, - 0xf0, 0xf7, 0x75, 0xce, 0x82, 0xde, 0x87, 0x55, 0xe3, 0xfb, 0xb7, 0x0c, 0xf4, 0x6b, 0x07, 0x56, - 0x9f, 0xb3, 0x4b, 0x25, 0x6e, 0x3d, 0xd4, 0x43, 0x68, 0xf2, 0x59, 0x22, 0x55, 0x6c, 0x69, 0xff, - 0x9e, 0x92, 0x56, 0x85, 0x6e, 0x47, 0x35, 0x5f, 0xcc, 0x12, 0xe6, 0x8a, 0x2f, 0xe8, 0x17, 0xd0, - 0x31, 0x40, 0xb2, 0x09, 0x6b, 0x2f, 0x3f, 0x7f, 0xf1, 0xfc, 0xe9, 0xc9, 0xc9, 0xf0, 0xf8, 0xcb, - 0x4f, 0x7f, 0xf8, 0xf4, 0x8f, 0x86, 0x87, 0x07, 0x27, 0x87, 0x2b, 0x37, 0xc8, 0x06, 0x90, 0xe7, - 0x4f, 0x4f, 0x5e, 0x3c, 0x7d, 0x62, 0xe1, 0x0e, 0x59, 0x86, 0x8e, 0x09, 0x34, 0xe8, 0x00, 0xfa, - 0xcf, 0xd9, 0xe5, 0xcb, 0x80, 0x47, 0x2c, 0xcb, 0xec, 0xe1, 0xe9, 0x0e, 0x10, 0x73, 0x4e, 0x6a, - 0x99, 0x7d, 0x58, 0xf4, 0x24, 0xa4, 0x5d, 0xab, 0x6a, 0xd2, 0x2f, 0x81, 0x3c, 0x8e, 0xa3, 0x88, - 0x8d, 0xf8, 0x31, 0x63, 0xa9, 0x5e, 0xec, 0xf7, 0x0c, 0xb9, 0x76, 0xf6, 0x37, 0xd5, 0x62, 0xcb, - 0x9a, 0xa8, 0x04, 0x4e, 0xa0, 0x99, 0xb0, 0x74, 0x22, 0xc4, 0xdd, 0x72, 0xc5, 0x6f, 0xba, 0x0b, - 0x6b, 0x16, 0xdb, 0x62, 0x1e, 0x09, 0x63, 0xe9, 0x50, 0x49, 0x7c, 0xde, 0xd5, 0x4d, 0xfa, 0xf7, - 0x0e, 0x34, 0x0f, 0x5f, 0x1c, 0x3d, 0x26, 0x03, 0x68, 0x05, 0xd1, 0x28, 0x9e, 0xa0, 0xd3, 0x70, - 0x04, 0xc7, 0xbc, 0x7d, 0x6d, 0x1c, 0xb8, 0x0d, 0x6d, 0xe1, 0x6b, 0xd0, 0x53, 0x0b, 0x33, 0xea, - 0xba, 0x05, 0x80, 0x51, 0x82, 0xbd, 0x4e, 0x82, 0x54, 0x84, 0x01, 0xed, 0xdc, 0x9b, 0xc2, 0xd8, - 0xaa, 0x1d, 0x68, 0xc1, 0x29, 0xbb, 0x88, 0x47, 0x12, 0xf4, 0x59, 0xe8, 0xcd, 0x84, 0xf3, 0xea, - 0xb9, 0x15, 0x9c, 0xfe, 0xdb, 0x1c, 0xf4, 0x0e, 0x46, 0x3c, 0xb8, 0x60, 0xca, 0x51, 0x88, 0x19, - 0x0a, 0x40, 0xcd, 0x5d, 0xb5, 0xc8, 0x3d, 0xe8, 0xa5, 0x6c, 0x12, 0x73, 0x36, 0x54, 0xa6, 0x2b, - 0x8d, 0xd4, 0x06, 0x91, 0x6a, 0x24, 0x19, 0x0d, 0x13, 0x74, 0x39, 0x62, 0x2d, 0x6d, 0xd7, 0x06, - 0x51, 0x88, 0x08, 0xa0, 0x10, 0x71, 0x15, 0x4d, 0x57, 0x37, 0x51, 0x76, 0x23, 0x2f, 0xf1, 0x46, - 0x01, 0x97, 0x73, 0x9e, 0x73, 0xf3, 0x36, 0xf2, 0x0e, 0xe3, 0x91, 0x17, 0x0e, 0x4f, 0xbd, 0xd0, - 0x8b, 0x46, 0x4c, 0x05, 0x2f, 0x1b, 0x24, 0x1f, 0xc0, 0x92, 0x9a, 0x92, 0x26, 0x93, 0x31, 0xac, - 0x84, 0xa2, 0x4c, 0xa7, 0x51, 0xc6, 0x38, 0x0f, 0x99, 0x9f, 0x93, 0xb6, 0x04, 0x69, 0xb5, 0x83, - 0xec, 0xc1, 0x9a, 0x8c, 0x81, 0x99, 0xc7, 0xe3, 0xec, 0x3c, 0xc8, 0x86, 0x19, 0x8b, 0x78, 0xbf, - 0x2d, 0xe8, 0xeb, 0xba, 0xc8, 0x43, 0xd8, 0x2c, 0xc1, 0x29, 0x1b, 0xb1, 0xe0, 0x82, 0xf9, 0x7d, - 0x10, 0x5f, 0x5d, 0xd7, 0x4d, 0xee, 0x42, 0x07, 0x43, 0xff, 0x34, 0xf1, 0x3d, 0xce, 0xb2, 0x7e, - 0x47, 0x48, 0xc8, 0x84, 0xc8, 0x87, 0xd0, 0x4b, 0x98, 0xf4, 0xc5, 0xe7, 0x3c, 0x1c, 0x65, 0xfd, - 0xae, 0x70, 0x80, 0x1d, 0xa5, 0xe5, 0xa8, 0x85, 0xae, 0x4d, 0x41, 0x6f, 0xc2, 0xda, 0x51, 0x90, - 0x71, 0xb5, 0xcb, 0xb9, 0xb1, 0x1d, 0xc2, 0xba, 0x0d, 0x2b, 0x35, 0xdf, 0x83, 0x96, 0xda, 0x32, - 0x9c, 0x00, 0x32, 0x5f, 0x57, 0xcc, 0x2d, 0x6d, 0x71, 0x73, 0x2a, 0xfa, 0x8b, 0x06, 0x34, 0xd1, - 0x52, 0x84, 0x85, 0x4c, 0x4f, 0x87, 0x85, 0xf7, 0xd4, 0x4d, 0xd3, 0x76, 0x1a, 0x96, 0xed, 0x98, - 0xd6, 0x3d, 0x67, 0x59, 0xb7, 0x48, 0x79, 0x66, 0x9c, 0x29, 0x79, 0x4b, 0x6d, 0x31, 0x90, 0xa2, - 0x3f, 0x65, 0xa3, 0x0b, 0xa1, 0x32, 0x79, 0x3f, 0x22, 0xa8, 0x50, 0x99, 0xc7, 0xe5, 0xd7, 0x52, - 0x5f, 0xf2, 0xb6, 0xee, 0x13, 0x5f, 0x2e, 0x16, 0x7d, 0xe2, 0xbb, 0x3e, 0x2c, 0x06, 0xd1, 0x69, - 0x3c, 0x8d, 0x7c, 0xa1, 0x14, 0x2d, 0x57, 0x37, 0xd1, 0x54, 0x13, 0x11, 0x05, 0x83, 0x09, 0x53, - 0x0a, 0x50, 0x00, 0x94, 0x60, 0xb8, 0xcb, 0x84, 0xcf, 0xc8, 0x85, 0xfc, 0x11, 0xac, 0x1a, 0x98, - 0x92, 0xf0, 0xfb, 0x30, 0x8f, 0xab, 0xd7, 0x09, 0x91, 0xde, 0x3b, 0xe1, 0x6c, 0x64, 0x0f, 0x5d, - 0x81, 0xa5, 0x67, 0x8c, 0x7f, 0x1e, 0x9d, 0xc5, 0x9a, 0xd3, 0x7f, 0x34, 0x60, 0x39, 0x87, 0x14, - 0xa3, 0x6d, 0x58, 0x0e, 0x7c, 0x16, 0xf1, 0x80, 0xcf, 0x86, 0x56, 0x54, 0x2d, 0xc3, 0x18, 0xc1, - 0xbc, 0x30, 0xf0, 0x32, 0x65, 0xba, 0xb2, 0x41, 0xf6, 0x61, 0x1d, 0x75, 0x4b, 0xab, 0x4b, 0xbe, - 0xed, 0x32, 0x98, 0xd7, 0xf6, 0xa1, 0x39, 0x20, 0x2e, 0x5d, 0x43, 0xf1, 0x89, 0x74, 0x49, 0x75, - 0x5d, 0x28, 0x35, 0xc9, 0x09, 0x97, 0x2c, 0xbd, 0x51, 0x01, 0x54, 0x12, 0xd7, 0x05, 0x99, 0x48, - 0x94, 0x13, 0x57, 0x23, 0xf9, 0x6d, 0x55, 0x92, 0xdf, 0x6d, 0x58, 0xce, 0x66, 0xd1, 0x88, 0xf9, - 0x43, 0x1e, 0xe3, 0xb8, 0x41, 0x24, 0x76, 0xa7, 0xe5, 0x96, 0x61, 0x91, 0xa6, 0xb3, 0x8c, 0x47, - 0x8c, 0x0b, 0x53, 0x6c, 0xb9, 0xba, 0x89, 0xce, 0x4f, 0x90, 0x48, 0xa5, 0x6f, 0xbb, 0xaa, 0x45, - 0x7f, 0x2e, 0x62, 0x4c, 0x9e, 0x89, 0x7f, 0x29, 0xec, 0x90, 0x6c, 0x41, 0x5b, 0x8e, 0x9f, 0x9d, - 0x7b, 0x2a, 0x97, 0x6a, 0x09, 0xe0, 0xe4, 0xdc, 0xc3, 0x44, 0xd3, 0x5a, 0x92, 0xd4, 0xf8, 0x8e, - 0xc0, 0x0e, 0xe5, 0x8a, 0xee, 0xc1, 0x92, 0xce, 0xf1, 0xb3, 0x61, 0xc8, 0xce, 0xb8, 0x4e, 0xa0, - 0xa2, 0xe9, 0x04, 0x87, 0xcb, 0x8e, 0xd8, 0x19, 0xa7, 0xcf, 0x61, 0x55, 0x59, 0xdb, 0x17, 0x09, - 0xd3, 0x43, 0xff, 0xa0, 0xec, 0x67, 0x65, 0x9c, 0x5b, 0x53, 0x5a, 0x64, 0x66, 0x7d, 0x25, 0xe7, - 0x4b, 0x5d, 0x20, 0xaa, 0xfb, 0x71, 0x18, 0x67, 0x4c, 0x31, 0xa4, 0xd0, 0x1d, 0x85, 0x71, 0x56, - 0x4e, 0x0d, 0x4d, 0x0c, 0xe5, 0x96, 0x4d, 0x47, 0x23, 0xb4, 0x52, 0x19, 0x29, 0x75, 0x93, 0xfe, - 0xc2, 0x81, 0x35, 0xc1, 0x4d, 0xfb, 0x85, 0x3c, 0xe5, 0x78, 0xf7, 0x69, 0x76, 0x47, 0x66, 0xaa, - 0xfa, 0x9e, 0x3a, 0xa6, 0x84, 0xc1, 0x24, 0xd0, 0xc1, 0xb2, 0x8d, 0xc8, 0x11, 0x02, 0xa8, 0xca, - 0x67, 0x71, 0x3a, 0x62, 0x42, 0x62, 0x2d, 0x57, 0x36, 0xe8, 0xbf, 0x38, 0xb0, 0x2a, 0xa6, 0x71, - 0xc2, 0x3d, 0x3e, 0xcd, 0xd4, 0xd2, 0x7e, 0x0f, 0x7a, 0xb8, 0x0c, 0xa6, 0xd5, 0x58, 0x4d, 0x62, - 0x3d, 0xb7, 0x38, 0x81, 0x4a, 0xe2, 0xc3, 0x1b, 0xae, 0x4d, 0x4c, 0x3e, 0x81, 0xae, 0x79, 0x08, - 0x53, 0x79, 0xf7, 0x2d, 0xbd, 0x82, 0x8a, 0x56, 0x1c, 0xde, 0x70, 0xad, 0x0f, 0xc8, 0x23, 0x00, - 0x11, 0xdd, 0x04, 0x5b, 0x31, 0x5f, 0xe3, 0xf3, 0xca, 0x46, 0x1c, 0xde, 0x70, 0x0d, 0xf2, 0x4f, - 0x5b, 0xb0, 0x20, 0x9d, 0x3e, 0x7d, 0x06, 0x3d, 0x6b, 0xa6, 0x56, 0xe2, 0xd7, 0x95, 0x89, 0x5f, - 0x25, 0x21, 0x6f, 0xd4, 0x24, 0xe4, 0xff, 0xe9, 0x00, 0x41, 0x4d, 0x2a, 0x6d, 0xd5, 0x07, 0xb0, - 0xc4, 0xbd, 0x74, 0xcc, 0xf8, 0xd0, 0xce, 0x6f, 0x4a, 0xa8, 0x88, 0x4e, 0xb1, 0x6f, 0x65, 0x01, - 0x5d, 0xd7, 0x84, 0xc8, 0x0e, 0x10, 0xa3, 0xa9, 0x8f, 0x4f, 0xd2, 0xaf, 0xd7, 0xf4, 0xa0, 0x03, - 0x92, 0x21, 0x5c, 0x9f, 0x2f, 0x54, 0x86, 0xd4, 0x14, 0x9b, 0x5e, 0xdb, 0x87, 0xae, 0x3b, 0x99, - 0xe2, 0xd9, 0xcc, 0xe3, 0x3a, 0x4f, 0xd0, 0x6d, 0xed, 0x6a, 0x84, 0x59, 0x29, 0x4f, 0x52, 0x00, - 0xf4, 0xb7, 0x0e, 0xac, 0xe0, 0xf2, 0x2d, 0x15, 0xf9, 0x18, 0x84, 0xf6, 0xbd, 0xa3, 0x86, 0x58, - 0xb4, 0xff, 0x73, 0x05, 0x79, 0x08, 0x6d, 0xc1, 0x30, 0x4e, 0x58, 0xa4, 0xf4, 0xa3, 0x6f, 0xeb, - 0x47, 0x61, 0xf8, 0x87, 0x37, 0xdc, 0x82, 0xd8, 0xd0, 0x8e, 0x4d, 0xb8, 0xa9, 0x66, 0x69, 0x6f, - 0x2b, 0xfd, 0x9b, 0x36, 0x6c, 0x94, 0x7b, 0xf2, 0x18, 0xaf, 0x12, 0x97, 0x30, 0x98, 0x9c, 0xc6, - 0x79, 0x0e, 0xe4, 0x98, 0x39, 0x8d, 0xd5, 0x45, 0xce, 0xe0, 0xa6, 0x0e, 0x05, 0x38, 0x7e, 0xe1, - 0xf8, 0x1b, 0x22, 0x86, 0xed, 0xd9, 0xf2, 0x2a, 0x8d, 0xa7, 0x61, 0x53, 0xf7, 0xea, 0xd9, 0x91, - 0x31, 0xf4, 0xf3, 0x90, 0xa3, 0x1c, 0x90, 0x11, 0x96, 0x70, 0xa8, 0xef, 0xbd, 0x7d, 0x28, 0x61, - 0x50, 0xbe, 0x46, 0xaf, 0x65, 0x46, 0x5e, 0xc3, 0x1d, 0xdd, 0x27, 0x3c, 0x48, 0x75, 0xb8, 0xe6, - 0xbb, 0xac, 0xec, 0x33, 0xfc, 0xd6, 0x1e, 0xf3, 0x5b, 0xf8, 0x0e, 0xfe, 0xc9, 0x81, 0x25, 0x9b, - 0x1b, 0x06, 0x30, 0x95, 0xa3, 0x6a, 0x23, 0xd1, 0x81, 0xbc, 0x04, 0x57, 0xb3, 0xec, 0x46, 0x5d, - 0x96, 0x6d, 0xe6, 0xd2, 0x73, 0xdf, 0x96, 0x4b, 0x37, 0xdf, 0x2d, 0x97, 0x9e, 0xaf, 0xcb, 0xa5, - 0x07, 0xff, 0xe0, 0x00, 0xa9, 0xee, 0x2e, 0xf9, 0x4c, 0xa6, 0xf9, 0x11, 0x0b, 0x95, 0x41, 0x7d, - 0xff, 0x9d, 0x14, 0x44, 0xc3, 0xfa, 0x63, 0x54, 0x54, 0xd3, 0x60, 0xcc, 0x88, 0xda, 0x73, 0xeb, - 0xba, 0xf0, 0x08, 0x24, 0x02, 0x6d, 0x36, 0xe4, 0x41, 0x18, 0x16, 0x96, 0xd5, 0x73, 0x2b, 0xf8, - 0xe0, 0x0d, 0xf4, 0xac, 0xad, 0xfb, 0x5f, 0x9b, 0x76, 0x39, 0xa4, 0xca, 0x4d, 0xb2, 0xb0, 0xc1, - 0x37, 0x0d, 0x20, 0x55, 0xed, 0xf9, 0xbf, 0x9c, 0x82, 0x50, 0x05, 0xcb, 0x01, 0xcc, 0x29, 0x55, - 0xb0, 0x4c, 0x7f, 0x1b, 0x96, 0x27, 0x1e, 0x9f, 0xa6, 0x98, 0x4e, 0x5a, 0x07, 0xd0, 0x32, 0x8c, - 0xbb, 0x55, 0xc8, 0x78, 0xa8, 0x7b, 0x55, 0xce, 0x57, 0xd7, 0x45, 0x7f, 0x00, 0xeb, 0x2f, 0xbd, - 0x30, 0x64, 0xfc, 0x53, 0x39, 0x98, 0x0e, 0x49, 0xef, 0x43, 0xf7, 0x52, 0x96, 0x08, 0x86, 0x71, - 0x14, 0xce, 0xd4, 0x81, 0xb4, 0xa3, 0xb0, 0x2f, 0xa2, 0x70, 0x46, 0x3f, 0x84, 0x9b, 0xa5, 0x4f, - 0x8b, 0x73, 0xba, 0xe9, 0xd0, 0x1c, 0x57, 0x37, 0xd1, 0x55, 0x2a, 0x39, 0xd9, 0xc3, 0xd1, 0x7d, - 0xd8, 0x28, 0x77, 0xd4, 0x33, 0x9b, 0x2b, 0x98, 0x7d, 0x02, 0xe4, 0xc7, 0x53, 0x96, 0xce, 0x44, - 0xfd, 0x2d, 0xaf, 0xb4, 0x6c, 0x96, 0x8f, 0x40, 0x0b, 0xc9, 0xf4, 0xf4, 0x87, 0x6c, 0xa6, 0xeb, - 0x91, 0x8d, 0xbc, 0x1e, 0x49, 0x1f, 0xc1, 0x9a, 0xc5, 0x40, 0x8d, 0x78, 0x0f, 0x16, 0x44, 0x0d, - 0x4f, 0x1f, 0x0f, 0xec, 0x3a, 0x9f, 0xea, 0xa3, 0x7f, 0x0a, 0x73, 0x87, 0x71, 0x62, 0x1e, 0xa7, - 0x1d, 0xfb, 0x38, 0xad, 0x1c, 0xc5, 0x30, 0xf7, 0x03, 0x72, 0x64, 0x1b, 0x44, 0x33, 0xf7, 0x26, - 0x1c, 0xf3, 0xe3, 0xb3, 0x38, 0xbd, 0xf4, 0x52, 0x5f, 0xa9, 0x40, 0x09, 0xc5, 0xd9, 0x9f, 0x31, - 0xed, 0x2a, 0xf0, 0x27, 0xfd, 0xa5, 0x03, 0xf3, 0x62, 0x4a, 0xa8, 0x1f, 0x32, 0x62, 0xc8, 0xac, - 0x2d, 0x1e, 0xbd, 0x12, 0x73, 0xe9, 0xb9, 0x65, 0xb8, 0x54, 0x60, 0x6e, 0x94, 0x0b, 0xcc, 0x18, - 0xbe, 0x65, 0xab, 0xa8, 0xdc, 0x16, 0x00, 0xb9, 0x03, 0xcd, 0xf3, 0x38, 0xd1, 0x7e, 0x19, 0xf4, - 0x89, 0x37, 0x4e, 0x5c, 0x81, 0xd3, 0x07, 0xb0, 0xfc, 0x3c, 0xf6, 0x99, 0x71, 0x68, 0xba, 0x76, - 0x37, 0xe8, 0x9f, 0x39, 0xd0, 0xd2, 0xc4, 0x64, 0x1b, 0x9a, 0xe8, 0x5f, 0x4b, 0xa1, 0x3f, 0x2f, - 0x18, 0x21, 0x9d, 0x2b, 0x28, 0xd0, 0xa8, 0x44, 0x3a, 0x51, 0x04, 0x3f, 0x9d, 0xb4, 0x17, 0x81, - 0x05, 0xb3, 0x29, 0x31, 0xe7, 0x92, 0x07, 0x2e, 0xa1, 0xf4, 0x57, 0x0e, 0xf4, 0xac, 0x31, 0x30, - 0xbf, 0x0a, 0xbd, 0x8c, 0xab, 0xb3, 0xbe, 0x12, 0xa2, 0x09, 0x99, 0x07, 0xec, 0x86, 0x7d, 0xc0, - 0xce, 0x0f, 0x78, 0x73, 0xe6, 0x01, 0x6f, 0x0f, 0xda, 0xea, 0x34, 0xcd, 0xb4, 0xdc, 0x74, 0xf9, - 0x1d, 0x47, 0xd4, 0xa5, 0xb0, 0x82, 0x88, 0x3e, 0x82, 0x8e, 0xd1, 0x83, 0x03, 0x46, 0x8c, 0x5f, - 0xc6, 0xe9, 0x2b, 0x7d, 0xa2, 0x57, 0xcd, 0xbc, 0x7a, 0xd9, 0x28, 0xaa, 0x97, 0xf4, 0xef, 0x1c, - 0xe8, 0xa1, 0x4e, 0x04, 0xd1, 0xf8, 0x38, 0x0e, 0x83, 0xd1, 0x4c, 0xe8, 0x86, 0xde, 0xfe, 0xa1, - 0xcf, 0x42, 0xee, 0xe5, 0xba, 0x61, 0xc3, 0x18, 0xb2, 0x26, 0x41, 0x24, 0x4a, 0x16, 0x4a, 0x33, - 0xf2, 0x36, 0xea, 0xf2, 0x19, 0xc3, 0x98, 0x93, 0xb1, 0xe1, 0x04, 0xf3, 0x3e, 0xe5, 0xa7, 0x2c, - 0x10, 0xbd, 0x0f, 0x02, 0xa9, 0xc7, 0xd9, 0x70, 0x12, 0x84, 0x61, 0x20, 0x69, 0xa5, 0xce, 0xd6, - 0x75, 0xd1, 0x7f, 0x6c, 0x40, 0x47, 0xd9, 0xfd, 0x53, 0x7f, 0xcc, 0x50, 0x3f, 0x75, 0x1c, 0xcd, - 0x0d, 0xca, 0x40, 0x74, 0xbf, 0x15, 0x79, 0x0d, 0xa4, 0xbc, 0x81, 0x73, 0xd5, 0x0d, 0xc4, 0x04, - 0x35, 0xf6, 0xd9, 0x87, 0x22, 0xc4, 0xcb, 0x5b, 0x9c, 0x02, 0xd0, 0xbd, 0xfb, 0xa2, 0x77, 0xbe, - 0xe8, 0x15, 0x80, 0x15, 0xd4, 0x17, 0x4a, 0x41, 0xfd, 0x21, 0x74, 0x15, 0x1b, 0x21, 0x77, 0x51, - 0xd3, 0x28, 0x54, 0xd9, 0xda, 0x13, 0xd7, 0xa2, 0xd4, 0x5f, 0xee, 0xeb, 0x2f, 0x5b, 0xdf, 0xf6, - 0xa5, 0xa6, 0xa4, 0x37, 0x61, 0x4d, 0x09, 0xef, 0x59, 0xea, 0x25, 0xe7, 0xda, 0x97, 0xfa, 0xf9, - 0xcd, 0x83, 0x80, 0xc9, 0x03, 0x98, 0xc7, 0xcf, 0xb4, 0x3b, 0xab, 0x37, 0x2f, 0x49, 0x42, 0xb6, - 0x61, 0x9e, 0xf9, 0x63, 0xa6, 0xb3, 0x4a, 0x62, 0xe7, 0xc2, 0xb8, 0x47, 0xae, 0x24, 0x40, 0x63, - 0x47, 0xb4, 0x64, 0xec, 0xb6, 0x2f, 0xc4, 0x23, 0x7c, 0xf4, 0xb9, 0x4f, 0xd7, 0x81, 0x3c, 0x97, - 0x5a, 0x6b, 0x16, 0x54, 0xfe, 0x7c, 0x0e, 0x3a, 0x06, 0x8c, 0x76, 0x3b, 0xc6, 0x09, 0x0f, 0xfd, - 0xc0, 0x9b, 0x30, 0xce, 0x52, 0xa5, 0xa9, 0x25, 0x54, 0xb8, 0xcc, 0x8b, 0xf1, 0x30, 0x9e, 0xf2, - 0xa1, 0xcf, 0xc6, 0x29, 0x93, 0xb7, 0x02, 0x8e, 0x5b, 0x42, 0x91, 0x6e, 0xe2, 0xbd, 0x36, 0xe9, - 0xa4, 0x3e, 0x94, 0x50, 0x7d, 0x66, 0x91, 0x32, 0x6a, 0x16, 0x67, 0x16, 0x29, 0x91, 0xb2, 0xc7, - 0x99, 0xaf, 0xf1, 0x38, 0x1f, 0xc1, 0x86, 0xf4, 0x2d, 0xca, 0x36, 0x87, 0x25, 0x35, 0xb9, 0xa6, - 0x17, 0x53, 0x25, 0x9c, 0xb3, 0x56, 0xf0, 0x2c, 0xf8, 0xb9, 0xac, 0x98, 0x3a, 0x6e, 0x05, 0x47, - 0x5a, 0x34, 0x47, 0x8b, 0x56, 0x96, 0x4c, 0x2b, 0xb8, 0xa0, 0xf5, 0x5e, 0xdb, 0xb4, 0x6d, 0x45, - 0x5b, 0xc2, 0xe9, 0x16, 0xdc, 0x12, 0x6a, 0xf2, 0x22, 0x4e, 0xe2, 0x30, 0x1e, 0xcf, 0x4e, 0xa6, - 0xa7, 0xd9, 0x28, 0x0d, 0x12, 0x4c, 0xe9, 0xe8, 0x3f, 0x3b, 0xb0, 0x66, 0xf5, 0xaa, 0x33, 0xdb, - 0xef, 0x48, 0x9d, 0xcd, 0xeb, 0xa4, 0x52, 0xb3, 0x56, 0x0d, 0xcf, 0x26, 0x09, 0xe5, 0xe1, 0xf4, - 0x4b, 0x55, 0x3a, 0x3d, 0x80, 0x65, 0x3d, 0xb4, 0xfe, 0x50, 0xaa, 0x59, 0xbf, 0xaa, 0x66, 0xea, - 0xfb, 0x25, 0xf5, 0x81, 0x66, 0xf1, 0xfb, 0x32, 0xa9, 0x62, 0xbe, 0x58, 0x84, 0x3e, 0x91, 0x0c, - 0xf4, 0xf7, 0x66, 0x22, 0xa7, 0x67, 0x30, 0xca, 0xc1, 0x8c, 0xfe, 0x85, 0x03, 0x50, 0xcc, 0x0e, - 0x77, 0xbe, 0xf0, 0xce, 0x8e, 0xa8, 0x3a, 0x15, 0x00, 0xa6, 0x40, 0x79, 0x15, 0xaf, 0x70, 0xf8, - 0x1d, 0x8d, 0x61, 0x4e, 0x71, 0x1f, 0x96, 0xc7, 0x61, 0x7c, 0x2a, 0xc2, 0x27, 0x66, 0x54, 0x2c, - 0x53, 0x17, 0x08, 0x4b, 0x12, 0xfe, 0x4c, 0xa1, 0x45, 0x74, 0x68, 0x1a, 0xd1, 0x81, 0xfe, 0x65, - 0x23, 0xaf, 0x2f, 0x15, 0x6b, 0xbe, 0xd6, 0x8c, 0xc8, 0x7e, 0xc5, 0xfb, 0x5d, 0x53, 0xce, 0x11, - 0xc7, 0xd4, 0xe3, 0x6f, 0x3d, 0x88, 0x3c, 0x82, 0xa5, 0x54, 0xba, 0x17, 0xed, 0x7b, 0x9a, 0x6f, - 0xf1, 0x3d, 0xbd, 0xd4, 0x0a, 0x2c, 0xff, 0x0f, 0x56, 0x3c, 0xff, 0x82, 0xa5, 0x3c, 0x10, 0xe9, - 0xac, 0x88, 0xdf, 0xd2, 0x63, 0x2e, 0x1b, 0xb8, 0x08, 0xab, 0xf7, 0x61, 0x79, 0x24, 0xaf, 0x73, - 0x72, 0x4a, 0x75, 0x49, 0x5b, 0xc0, 0x48, 0x48, 0xff, 0x56, 0x97, 0xb2, 0xec, 0x3d, 0xbc, 0x5e, - 0x22, 0xe6, 0xea, 0x1a, 0xa5, 0xd5, 0x7d, 0x57, 0x95, 0x9e, 0x7c, 0x9d, 0x33, 0xab, 0x02, 0x9f, - 0x04, 0x55, 0x19, 0xd0, 0x16, 0x69, 0xf3, 0x5d, 0x44, 0x4a, 0x77, 0x60, 0xf9, 0x84, 0xf1, 0x03, - 0xdc, 0x41, 0xed, 0xf9, 0xb6, 0xa0, 0x1d, 0xb1, 0xcb, 0xa1, 0xdc, 0x62, 0x19, 0xa7, 0x5b, 0x11, - 0xbb, 0x14, 0x34, 0x94, 0xc0, 0x4a, 0x41, 0x2f, 0x73, 0x4c, 0xfa, 0x57, 0x0d, 0x58, 0xfc, 0x3c, - 0xba, 0x88, 0x83, 0x91, 0x28, 0x26, 0x4d, 0xd8, 0x24, 0xd6, 0xb7, 0x88, 0xf8, 0x1b, 0xc3, 0xbe, - 0xb8, 0x93, 0x48, 0xb8, 0xaa, 0xf2, 0xe8, 0x26, 0x86, 0xc0, 0xb4, 0xb8, 0xb2, 0x96, 0xda, 0x66, - 0x20, 0x64, 0x03, 0x16, 0x52, 0xf3, 0x7a, 0x5d, 0xb5, 0x8a, 0x2b, 0xd4, 0x79, 0xe3, 0x0a, 0x55, - 0x94, 0x15, 0xe5, 0x75, 0x8b, 0xd8, 0x92, 0x96, 0xab, 0x9b, 0x22, 0x7d, 0x4d, 0x99, 0xba, 0xaf, - 0xc2, 0x60, 0xba, 0xa8, 0xd2, 0x57, 0x13, 0xc4, 0x80, 0x2b, 0x3f, 0x90, 0x34, 0xd2, 0x21, 0x99, - 0x10, 0x26, 0x20, 0xe5, 0x1b, 0xfa, 0xb6, 0x54, 0x93, 0x12, 0x4c, 0xbf, 0x02, 0x72, 0xe0, 0xfb, - 0x4a, 0x2a, 0x79, 0x36, 0x5e, 0xac, 0xc7, 0xb1, 0xd6, 0x53, 0xc3, 0xb7, 0x51, 0xcf, 0xf7, 0x29, - 0x74, 0x8e, 0x8d, 0x27, 0x06, 0x42, 0x80, 0xfa, 0x71, 0x81, 0x12, 0xba, 0x81, 0x18, 0x03, 0x36, - 0xcc, 0x01, 0xe9, 0xef, 0x02, 0x39, 0x0a, 0x32, 0x9e, 0xcf, 0x2f, 0x3f, 0x27, 0xe5, 0x75, 0x14, - 0xe3, 0x9c, 0xa4, 0x30, 0x71, 0x4e, 0x3a, 0x90, 0xd7, 0x3f, 0xe5, 0x85, 0x3d, 0x80, 0x56, 0x20, - 0x21, 0xed, 0x3f, 0x97, 0x94, 0xe2, 0x69, 0xca, 0xbc, 0x1f, 0x23, 0xbd, 0x02, 0x2d, 0xf7, 0xfc, - 0x4b, 0x07, 0x16, 0xd5, 0xd2, 0x30, 0x4e, 0x59, 0x8f, 0x2b, 0xe4, 0xc2, 0x2c, 0xac, 0xfe, 0x1a, - 0xbd, 0xba, 0xd3, 0x73, 0x75, 0x3b, 0x4d, 0xa0, 0x99, 0x78, 0xfc, 0x5c, 0x24, 0xb1, 0x6d, 0x57, - 0xfc, 0xd6, 0x87, 0x92, 0xf9, 0xe2, 0x50, 0xa2, 0xae, 0xba, 0xd4, 0xa4, 0xf2, 0x5b, 0x98, 0x4f, - 0xe5, 0x55, 0x57, 0x01, 0x17, 0x32, 0x50, 0x13, 0x2c, 0xcb, 0x40, 0x91, 0xba, 0x79, 0x3f, 0x1d, - 0x40, 0xff, 0x09, 0x0b, 0x19, 0x67, 0x07, 0x61, 0x58, 0xe6, 0xbf, 0x05, 0xb7, 0x6a, 0xfa, 0x94, - 0xad, 0x7d, 0x06, 0xab, 0x4f, 0xd8, 0xe9, 0x74, 0x7c, 0xc4, 0x2e, 0x8a, 0x92, 0x2b, 0x81, 0x66, - 0x76, 0x1e, 0x5f, 0xaa, 0xfd, 0x12, 0xbf, 0xc9, 0x7b, 0x00, 0x21, 0xd2, 0x0c, 0xb3, 0x84, 0x8d, - 0x94, 0x36, 0xb5, 0x05, 0x72, 0x92, 0xb0, 0x11, 0xfd, 0x08, 0x88, 0xc9, 0x47, 0x2d, 0x01, 0x2d, - 0x60, 0x7a, 0x3a, 0xcc, 0x66, 0x19, 0x67, 0x13, 0x6d, 0xfc, 0x26, 0x44, 0xef, 0x43, 0xf7, 0xd8, - 0x9b, 0xb9, 0xec, 0x6b, 0xf5, 0x66, 0x05, 0xcf, 0x44, 0xde, 0x0c, 0xd5, 0x33, 0x3f, 0x13, 0x89, - 0x6e, 0x9a, 0xc2, 0x82, 0x24, 0x44, 0xa6, 0x3e, 0xcb, 0x78, 0x10, 0xc9, 0xb2, 0xa6, 0x62, 0x6a, - 0x40, 0x95, 0xed, 0x6e, 0xd4, 0x6c, 0xb7, 0x4a, 0x5d, 0xf4, 0x2d, 0xa7, 0xda, 0x57, 0x0b, 0xdb, - 0xff, 0xcd, 0x26, 0xb4, 0xf3, 0x4c, 0x90, 0xfc, 0x0c, 0x7a, 0xd6, 0x91, 0x9e, 0x6c, 0xa9, 0xed, - 0xa8, 0xab, 0x11, 0x0c, 0x6e, 0xd7, 0x77, 0x2a, 0xb1, 0xdf, 0xf9, 0xe6, 0xb7, 0xff, 0xfa, 0xab, - 0x46, 0x9f, 0x6c, 0xec, 0x5e, 0x7c, 0xb8, 0xab, 0xce, 0xec, 0xbb, 0xa2, 0x04, 0x21, 0x6f, 0x82, - 0x5e, 0xc1, 0x92, 0x7d, 0xe4, 0x27, 0xb7, 0x6d, 0xc7, 0x5b, 0x1a, 0xed, 0xbd, 0x6b, 0x7a, 0xd5, - 0x70, 0xb7, 0xc5, 0x70, 0x1b, 0x64, 0xdd, 0x1c, 0x2e, 0xcf, 0xd0, 0x98, 0xb8, 0xbb, 0x33, 0x5f, - 0x4e, 0x11, 0xcd, 0xaf, 0xfe, 0x45, 0xd5, 0xe0, 0x56, 0xf5, 0x95, 0x94, 0x7a, 0x56, 0x45, 0xfb, - 0x62, 0x28, 0x42, 0x56, 0x70, 0x28, 0xf3, 0xe1, 0x14, 0xf9, 0x29, 0xb4, 0xf3, 0x57, 0x22, 0x64, - 0xd3, 0x78, 0x13, 0x63, 0xbe, 0x3b, 0x19, 0xf4, 0xab, 0x1d, 0x6a, 0x11, 0x5b, 0x82, 0xf3, 0x4d, - 0x5a, 0xe1, 0xfc, 0xb1, 0xf3, 0x80, 0x1c, 0xc1, 0x4d, 0x65, 0xfd, 0xa7, 0xec, 0xbf, 0xb3, 0x92, - 0x9a, 0xf7, 0x5e, 0x7b, 0x0e, 0x79, 0x04, 0x2d, 0xfd, 0x70, 0x86, 0x6c, 0xd4, 0xbf, 0xde, 0x19, - 0x6c, 0x56, 0x70, 0xa5, 0xf4, 0x07, 0x00, 0xc5, 0x3b, 0x11, 0xd2, 0xbf, 0xee, 0x39, 0x4b, 0x2e, - 0xc4, 0x9a, 0x47, 0x25, 0x63, 0xf1, 0x4c, 0xc6, 0x7e, 0x86, 0x42, 0xbe, 0x53, 0xd0, 0xd7, 0x3e, - 0x50, 0x79, 0x0b, 0x43, 0xba, 0x21, 0x64, 0xb7, 0x42, 0x96, 0x50, 0x76, 0x11, 0xbb, 0xd4, 0xb7, - 0xd8, 0x3f, 0x81, 0x8e, 0xf1, 0x98, 0x84, 0x18, 0x97, 0x03, 0xa5, 0x77, 0x2b, 0x83, 0x41, 0x5d, - 0x97, 0xe2, 0xbe, 0x2e, 0xb8, 0x2f, 0xd1, 0x36, 0x72, 0x17, 0x17, 0xa7, 0xb8, 0x25, 0x3f, 0x46, - 0xe3, 0x51, 0xb7, 0xcb, 0xa4, 0x78, 0xe8, 0x62, 0xdf, 0x41, 0xe7, 0xfb, 0x5d, 0xb9, 0x88, 0xa6, - 0xab, 0x82, 0x6b, 0x87, 0x14, 0x5c, 0xc9, 0x8f, 0x60, 0x51, 0xdd, 0x32, 0x93, 0x9b, 0xc5, 0xbe, - 0x1a, 0xe7, 0xa6, 0xc1, 0x46, 0x19, 0x56, 0xcc, 0xd6, 0x04, 0xb3, 0x1e, 0xe9, 0x20, 0xb3, 0x31, - 0xe3, 0x01, 0xf2, 0x08, 0x61, 0xd9, 0x2e, 0x50, 0x66, 0xb9, 0x99, 0xd5, 0x5e, 0x5a, 0xe4, 0x66, - 0x56, 0x5f, 0xed, 0xb4, 0xcd, 0x4c, 0x9b, 0xd7, 0xae, 0xbe, 0x8f, 0xf9, 0x63, 0xe8, 0x9a, 0x4f, - 0x1a, 0xc8, 0xc0, 0x58, 0x79, 0xe9, 0xf9, 0xc3, 0x60, 0xab, 0xb6, 0xcf, 0x16, 0x37, 0xe9, 0x9a, - 0xc3, 0x90, 0x9f, 0xc0, 0xb2, 0x51, 0xe3, 0x3e, 0x99, 0x45, 0xa3, 0x7c, 0x3b, 0xab, 0xb7, 0x6a, - 0x83, 0xba, 0x3c, 0x8e, 0x6e, 0x0a, 0xc6, 0xab, 0xd4, 0x62, 0x8c, 0x5b, 0xf9, 0x18, 0x3a, 0x66, - 0xfd, 0xfc, 0x2d, 0x7c, 0x37, 0x8d, 0x2e, 0xf3, 0x26, 0x6b, 0xcf, 0x21, 0xbf, 0x76, 0xa0, 0x6b, - 0xde, 0xc5, 0x12, 0xeb, 0x64, 0x52, 0xe2, 0xd3, 0x37, 0xfb, 0x4c, 0x46, 0xf4, 0x2b, 0x31, 0xc9, - 0xe3, 0x07, 0xcf, 0x2d, 0x21, 0xbf, 0xb1, 0xae, 0x18, 0x76, 0xcc, 0x17, 0x81, 0x57, 0xe5, 0x4e, - 0xf3, 0xd6, 0xf1, 0x6a, 0xf7, 0x8d, 0xb8, 0x08, 0xb9, 0xda, 0x73, 0xc8, 0xc7, 0xf2, 0x61, 0xa7, - 0x4e, 0x1a, 0x88, 0x61, 0xe0, 0x65, 0xb1, 0x99, 0xcf, 0x25, 0xb7, 0x9d, 0x3d, 0x87, 0xfc, 0x89, - 0x7c, 0x0c, 0xa8, 0xbe, 0x15, 0xd2, 0x7f, 0xd7, 0xef, 0xe9, 0x3d, 0xb1, 0xa2, 0x3b, 0xf4, 0x96, - 0xb5, 0xa2, 0xb2, 0x87, 0x3b, 0x06, 0x28, 0x32, 0x40, 0x52, 0x4a, 0x87, 0x72, 0xdb, 0xaf, 0x26, - 0x89, 0xf6, 0xae, 0xea, 0xac, 0x09, 0x39, 0xfe, 0x4c, 0x2a, 0xa4, 0xa2, 0xcf, 0xf2, 0x6d, 0xad, - 0x66, 0x72, 0x83, 0x41, 0x5d, 0x97, 0xe2, 0xff, 0x5d, 0xc1, 0xff, 0x3d, 0xb2, 0x65, 0xf2, 0xdf, - 0x7d, 0x63, 0x66, 0x7e, 0x57, 0xe4, 0x2b, 0xe8, 0x1d, 0xc5, 0xf1, 0xab, 0x69, 0x92, 0x27, 0xf6, - 0x76, 0x2e, 0x83, 0xd9, 0xe7, 0xa0, 0xb4, 0x28, 0xfa, 0xbe, 0xe0, 0xbc, 0x45, 0x6e, 0xd9, 0x9c, - 0x8b, 0x7c, 0xf4, 0x8a, 0x78, 0xb0, 0x9a, 0xfb, 0xfd, 0x7c, 0x21, 0x03, 0x9b, 0x8f, 0x99, 0x16, - 0x56, 0xc6, 0xb0, 0x22, 0x71, 0x3e, 0x46, 0xa6, 0x79, 0xee, 0x39, 0xe4, 0x18, 0xba, 0x4f, 0xd8, - 0x28, 0xf6, 0x99, 0xca, 0x3f, 0xd6, 0x8a, 0x99, 0xe7, 0x79, 0xcb, 0xa0, 0x67, 0x81, 0xb6, 0x27, - 0x48, 0xbc, 0x59, 0xca, 0xbe, 0xde, 0x7d, 0xa3, 0x12, 0x9b, 0x2b, 0xed, 0x09, 0x74, 0x32, 0x66, - 0x79, 0x82, 0x52, 0xf6, 0x66, 0x79, 0x82, 0x4a, 0xf6, 0x66, 0x79, 0x02, 0x9d, 0x0c, 0x92, 0x10, - 0x73, 0xba, 0x52, 0xc2, 0x97, 0x47, 0x8f, 0xeb, 0xd2, 0xc4, 0xc1, 0xdd, 0xeb, 0x09, 0xec, 0xd1, - 0x1e, 0xd8, 0xa3, 0x9d, 0x40, 0xef, 0x09, 0x93, 0xc2, 0x92, 0x25, 0xb5, 0x81, 0xed, 0x5a, 0xcc, - 0xf2, 0x5b, 0xd9, 0xed, 0x88, 0x3e, 0xdb, 0xd1, 0x8b, 0x7a, 0x16, 0xf9, 0x29, 0x74, 0x9e, 0x31, - 0xae, 0x6b, 0x68, 0x79, 0x0c, 0x2e, 0x15, 0xd5, 0x06, 0x35, 0x25, 0x38, 0x7a, 0x57, 0x70, 0x1b, - 0x90, 0x7e, 0xce, 0x6d, 0x97, 0xf9, 0x63, 0x26, 0x9d, 0xc0, 0x30, 0xf0, 0xaf, 0xc8, 0x1f, 0x0a, - 0xe6, 0x79, 0x81, 0x7d, 0xc3, 0xa8, 0xcc, 0x98, 0xcc, 0x97, 0x4b, 0x78, 0x1d, 0x67, 0x3c, 0xaf, - 0xef, 0xbe, 0x51, 0x65, 0xee, 0x2b, 0x12, 0x41, 0xc7, 0xb8, 0x34, 0xc9, 0x0d, 0xaa, 0x7a, 0x13, - 0x93, 0x1b, 0x54, 0xcd, 0x1d, 0x0b, 0xdd, 0x16, 0xe3, 0x50, 0x72, 0xb7, 0x18, 0x47, 0xde, 0xab, - 0x14, 0x23, 0xed, 0xbe, 0xf1, 0x26, 0xfc, 0x8a, 0xbc, 0x14, 0x0f, 0xb1, 0xcc, 0x3a, 0x61, 0x91, - 0x03, 0x94, 0x4b, 0x8a, 0xb9, 0xb0, 0x8c, 0x2e, 0x3b, 0x2f, 0x90, 0x43, 0x89, 0xc8, 0xf8, 0xd2, - 0x48, 0xa7, 0xac, 0x7a, 0xa9, 0xd6, 0x92, 0x6b, 0xcb, 0x62, 0xf9, 0xca, 0x6a, 0x4a, 0x63, 0x3a, - 0xb3, 0x92, 0xe7, 0x7d, 0x23, 0xb3, 0xb2, 0x0a, 0x06, 0x46, 0x66, 0x65, 0x17, 0x06, 0x30, 0xb3, - 0x2a, 0x0e, 0x19, 0x79, 0x66, 0x55, 0x39, 0xbf, 0xe4, 0xce, 0xb0, 0x7a, 0x22, 0x39, 0x5d, 0x10, - 0xff, 0x20, 0xf1, 0xff, 0xff, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x47, 0x72, 0xc7, 0x52, 0x31, - 0x00, 0x00, + 0x75, 0xbf, 0x7a, 0x38, 0xa4, 0x38, 0x6f, 0x66, 0xf8, 0xa3, 0x28, 0x51, 0xa3, 0x91, 0x56, 0xd6, + 0x96, 0x85, 0x15, 0xbf, 0xb2, 0x41, 0x6a, 0xf9, 0x0d, 0x36, 0xf2, 0x2a, 0xc9, 0x82, 0x2b, 0x69, + 0xc5, 0x85, 0x69, 0x2d, 0xdd, 0xd4, 0xae, 0x12, 0x1b, 0xc1, 0xa4, 0x39, 0x5d, 0x1c, 0xb6, 0xd5, + 0xd3, 0xdd, 0xdb, 0x5d, 0x43, 0x69, 0x2c, 0x10, 0x09, 0x36, 0x3e, 0x26, 0x30, 0x02, 0xdf, 0x8d, + 0x04, 0x39, 0xe7, 0x92, 0x63, 0x92, 0xbf, 0x20, 0x40, 0x80, 0x00, 0x3e, 0xe5, 0x1e, 0xe4, 0x9e, + 0x43, 0x6e, 0x39, 0x04, 0xaf, 0x7e, 0x75, 0x55, 0x77, 0x53, 0xab, 0x20, 0x41, 0x4e, 0x9c, 0xfa, + 0xd4, 0xeb, 0x57, 0x55, 0xaf, 0xde, 0xaf, 0x7a, 0x55, 0x84, 0x4e, 0x9e, 0x8d, 0xb7, 0xb3, 0x3c, + 0xe5, 0x29, 0x59, 0x8c, 0x93, 0x3c, 0x1b, 0x0f, 0x6f, 0x4e, 0xd2, 0x74, 0x12, 0xb3, 0x9d, 0x20, + 0x8b, 0x76, 0x82, 0x24, 0x49, 0x79, 0xc0, 0xa3, 0x34, 0x29, 0x24, 0x11, 0xfd, 0x77, 0x0f, 0xba, + 0xcf, 0xf3, 0x20, 0x29, 0x82, 0x31, 0xc2, 0x64, 0x00, 0x97, 0xf9, 0xeb, 0xd1, 0x69, 0x50, 0x9c, + 0x0e, 0xbc, 0xdb, 0xde, 0x56, 0xc7, 0xd7, 0x4d, 0xb2, 0x09, 0x4b, 0xc1, 0x34, 0x9d, 0x25, 0x7c, + 0xd0, 0xba, 0xed, 0x6d, 0x2d, 0xf8, 0xaa, 0x45, 0xbe, 0x0f, 0xeb, 0xc9, 0x6c, 0x3a, 0x1a, 0xa7, + 0xc9, 0x49, 0x94, 0x4f, 0x25, 0xf3, 0xc1, 0xc2, 0x6d, 0x6f, 0x6b, 0xd1, 0xaf, 0x77, 0x90, 0x5b, + 0x00, 0xc7, 0x71, 0x3a, 0x7e, 0x29, 0x87, 0x68, 0x8b, 0x21, 0x2c, 0x84, 0x50, 0xe8, 0xa9, 0x16, + 0x8b, 0x26, 0xa7, 0x7c, 0xb0, 0x28, 0x18, 0x39, 0x18, 0xf2, 0xe0, 0xd1, 0x94, 0x8d, 0x0a, 0x1e, + 0x4c, 0xb3, 0xc1, 0x92, 0x98, 0x8d, 0x85, 0x88, 0xfe, 0x94, 0x07, 0xf1, 0xe8, 0x84, 0xb1, 0x62, + 0x70, 0x59, 0xf5, 0x1b, 0x84, 0x0e, 0x60, 0xf3, 0x29, 0xe3, 0xd6, 0xaa, 0x0b, 0x9f, 0x7d, 0x3d, + 0x63, 0x05, 0xa7, 0x07, 0x40, 0x2c, 0xf8, 0x31, 0xe3, 0x41, 0x14, 0x17, 0xe4, 0x23, 0xe8, 0x71, + 0x8b, 0x78, 0xe0, 0xdd, 0x5e, 0xd8, 0xea, 0xee, 0x92, 0x6d, 0x21, 0xdf, 0x6d, 0xeb, 0x03, 0xdf, + 0xa1, 0xa3, 0xff, 0xec, 0x41, 0xf7, 0x88, 0x25, 0xa1, 0xe2, 0x4e, 0x08, 0xb4, 0x43, 0x56, 0x70, + 0x21, 0xd8, 0x9e, 0x2f, 0x7e, 0x93, 0xef, 0x40, 0x17, 0xff, 0x8e, 0x0a, 0x9e, 0x47, 0xc9, 0x44, + 0x88, 0xb6, 0xe3, 0x03, 0x42, 0x47, 0x02, 0x21, 0x6b, 0xb0, 0x10, 0x4c, 0xb9, 0x10, 0xe8, 0x82, + 0x8f, 0x3f, 0xc9, 0xfb, 0xd0, 0xcb, 0x82, 0xf9, 0x94, 0x25, 0xbc, 0x14, 0x62, 0xcf, 0xef, 0x2a, + 0x6c, 0x1f, 0xa5, 0xb8, 0x0d, 0x1b, 0x36, 0x89, 0xe6, 0xbe, 0x28, 0xb8, 0xaf, 0x5b, 0x94, 0x6a, + 0x90, 0xbb, 0xb0, 0xaa, 0xe9, 0x73, 0x39, 0x59, 0x21, 0xd6, 0x8e, 0xbf, 0xa2, 0x60, 0x2d, 0xa0, + 0x04, 0x7a, 0x72, 0x45, 0x45, 0x96, 0x26, 0x05, 0x23, 0xf7, 0x60, 0x4d, 0x7f, 0x98, 0xe5, 0x2c, + 0x9a, 0x06, 0x13, 0xa6, 0x96, 0x57, 0xc3, 0xc9, 0x2e, 0xf4, 0xcd, 0x20, 0xe9, 0x8c, 0x33, 0xb1, + 0xd8, 0xee, 0x6e, 0x4f, 0xc9, 0xd1, 0x47, 0xcc, 0x77, 0x49, 0xe8, 0x37, 0x1e, 0xf4, 0x1e, 0x9d, + 0x06, 0x49, 0xc2, 0xe2, 0xc3, 0x34, 0x4a, 0x38, 0xea, 0xc7, 0xc9, 0x2c, 0x09, 0xa3, 0x64, 0x32, + 0xe2, 0xaf, 0xa3, 0x50, 0x0d, 0xe6, 0x60, 0x38, 0x29, 0xbb, 0x8d, 0xab, 0x57, 0x82, 0xad, 0xe1, + 0xc8, 0x2f, 0x9d, 0xf1, 0x6c, 0xc6, 0x47, 0x51, 0x12, 0xb2, 0xd7, 0x42, 0xce, 0x7d, 0xdf, 0xc1, + 0xe8, 0xef, 0xc1, 0xda, 0x01, 0x2a, 0x5e, 0x12, 0x25, 0x93, 0xbd, 0x30, 0xcc, 0x59, 0x51, 0xa0, + 0x35, 0x64, 0xb3, 0xe3, 0x97, 0x6c, 0xae, 0xcc, 0x44, 0xb5, 0x70, 0x8f, 0x4f, 0xd3, 0x82, 0xab, + 0xf1, 0xc4, 0x6f, 0xfa, 0x97, 0x1e, 0xac, 0xa2, 0xd4, 0x7e, 0x14, 0x24, 0x73, 0xad, 0x0b, 0x07, + 0xd0, 0x43, 0x56, 0xcf, 0xd3, 0x3d, 0x69, 0x53, 0x52, 0xa7, 0xb6, 0x94, 0x2c, 0x2a, 0xd4, 0xdb, + 0x36, 0xe9, 0x93, 0x84, 0xe7, 0x73, 0xdf, 0xf9, 0x7a, 0xf8, 0x09, 0xac, 0xd7, 0x48, 0x50, 0x73, + 0xca, 0xf9, 0xe1, 0x4f, 0x72, 0x05, 0x16, 0xcf, 0x82, 0x78, 0xc6, 0x94, 0x05, 0xcb, 0xc6, 0xc7, + 0xad, 0x07, 0x1e, 0xfd, 0x00, 0xd6, 0xca, 0x31, 0xd5, 0xde, 0x12, 0x68, 0x1b, 0x11, 0x77, 0x7c, + 0xf1, 0x1b, 0x45, 0x81, 0x74, 0x8f, 0xd2, 0xc8, 0x18, 0x0d, 0xd2, 0x05, 0x61, 0x98, 0x6b, 0x3a, + 0xfc, 0x7d, 0x91, 0xb3, 0xa0, 0x77, 0x61, 0xdd, 0xfa, 0xfe, 0x2d, 0x03, 0xfd, 0xda, 0x83, 0xf5, + 0x67, 0xec, 0x95, 0x12, 0xb7, 0x1e, 0xea, 0x01, 0xb4, 0xf9, 0x3c, 0x93, 0x2a, 0xb6, 0xb2, 0x7b, + 0x47, 0x49, 0xab, 0x46, 0xb7, 0xad, 0x9a, 0xcf, 0xe7, 0x19, 0xf3, 0xc5, 0x17, 0xf4, 0x0b, 0xe8, + 0x5a, 0x20, 0xb9, 0x06, 0x1b, 0x2f, 0x3e, 0x7f, 0xfe, 0xec, 0xc9, 0xd1, 0xd1, 0xe8, 0xf0, 0xcb, + 0x4f, 0x7f, 0xf8, 0xe4, 0x0f, 0x46, 0xfb, 0x7b, 0x47, 0xfb, 0x6b, 0x97, 0xc8, 0x26, 0x90, 0x67, + 0x4f, 0x8e, 0x9e, 0x3f, 0x79, 0xec, 0xe0, 0x1e, 0x59, 0x85, 0xae, 0x0d, 0xb4, 0xe8, 0x10, 0x06, + 0xcf, 0xd8, 0xab, 0x17, 0x11, 0x4f, 0x58, 0x51, 0xb8, 0xc3, 0xd3, 0x6d, 0x20, 0xf6, 0x9c, 0xd4, + 0x32, 0x07, 0x70, 0x39, 0x90, 0x90, 0x76, 0xad, 0xaa, 0x49, 0xbf, 0x04, 0xf2, 0x28, 0x4d, 0x12, + 0x36, 0xe6, 0x87, 0x8c, 0xe5, 0x7a, 0xb1, 0xdf, 0xb3, 0xe4, 0xda, 0xdd, 0xbd, 0xa6, 0x16, 0x5b, + 0xd5, 0x44, 0x25, 0x70, 0x02, 0xed, 0x8c, 0xe5, 0x53, 0x21, 0xee, 0x65, 0x5f, 0xfc, 0xa6, 0x3b, + 0xb0, 0xe1, 0xb0, 0x2d, 0xe7, 0x91, 0x31, 0x96, 0x8f, 0x94, 0xc4, 0x17, 0x7d, 0xdd, 0xa4, 0x1f, + 0xc2, 0xd5, 0xc7, 0x51, 0x31, 0xae, 0x4f, 0x05, 0x3f, 0x99, 0x1d, 0x8f, 0x4a, 0x75, 0xd2, 0x4d, + 0xf4, 0xa5, 0xd5, 0x4f, 0xe4, 0x30, 0xf4, 0x6f, 0x3d, 0x68, 0xef, 0x3f, 0x3f, 0x78, 0x44, 0x86, + 0xb0, 0x1c, 0x25, 0xe3, 0x74, 0x8a, 0x1e, 0xc8, 0x13, 0xd3, 0x33, 0xed, 0x0b, 0x83, 0xca, 0x4d, + 0xe8, 0x08, 0xc7, 0x85, 0x6e, 0x5f, 0xd8, 0x64, 0xcf, 0x2f, 0x01, 0x0c, 0x39, 0xec, 0x75, 0x16, + 0xe5, 0x22, 0xa6, 0xe8, 0x48, 0xd1, 0x16, 0x96, 0x5b, 0xef, 0x40, 0x77, 0x90, 0xb3, 0xb3, 0x74, + 0x2c, 0xc1, 0x90, 0xc5, 0xc1, 0x5c, 0x78, 0xc2, 0xbe, 0x5f, 0xc3, 0xe9, 0xbf, 0x2d, 0x40, 0x7f, + 0x6f, 0xcc, 0xa3, 0x33, 0xa6, 0xbc, 0x8e, 0x98, 0xa1, 0x00, 0xd4, 0xdc, 0x55, 0x8b, 0xdc, 0x81, + 0x7e, 0xce, 0xa6, 0x29, 0x67, 0x23, 0xe5, 0x07, 0xa4, 0xc5, 0xbb, 0x20, 0x52, 0x8d, 0x25, 0xa3, + 0x51, 0x86, 0xfe, 0x4b, 0xac, 0xa5, 0xe3, 0xbb, 0x20, 0x8a, 0x17, 0x01, 0xdc, 0x11, 0x5c, 0x45, + 0xdb, 0xd7, 0x4d, 0x94, 0xdd, 0x38, 0xc8, 0x82, 0x71, 0xc4, 0xe5, 0x9c, 0x17, 0x7c, 0xd3, 0x46, + 0xde, 0x71, 0x3a, 0x0e, 0xe2, 0xd1, 0x71, 0x10, 0x07, 0xc9, 0x98, 0xa9, 0x48, 0xe8, 0x82, 0xe4, + 0x03, 0x58, 0x51, 0x53, 0xd2, 0x64, 0x32, 0x20, 0x56, 0x50, 0x94, 0xe9, 0x2c, 0x29, 0x18, 0xe7, + 0x31, 0x0b, 0x0d, 0xe9, 0xb2, 0x20, 0xad, 0x77, 0x90, 0xfb, 0xb0, 0x21, 0x03, 0x6a, 0x11, 0xf0, + 0xb4, 0x38, 0x8d, 0x8a, 0x51, 0xc1, 0x12, 0x3e, 0xe8, 0x08, 0xfa, 0xa6, 0x2e, 0xf2, 0x00, 0xae, + 0x55, 0xe0, 0x9c, 0x8d, 0x59, 0x74, 0xc6, 0xc2, 0x01, 0x88, 0xaf, 0x2e, 0xea, 0x26, 0xb7, 0xa1, + 0x8b, 0x79, 0xc4, 0x2c, 0x0b, 0x03, 0xce, 0x8a, 0x41, 0x57, 0x48, 0xc8, 0x86, 0xc8, 0x87, 0xd0, + 0xcf, 0x98, 0x74, 0xec, 0xa7, 0x3c, 0x1e, 0x17, 0x83, 0x9e, 0xf0, 0xa6, 0x5d, 0x65, 0x32, 0xa8, + 0x85, 0xbe, 0x4b, 0x41, 0xaf, 0xc2, 0xc6, 0x41, 0x54, 0x70, 0xb5, 0xcb, 0xc6, 0x72, 0xf7, 0xe1, + 0x8a, 0x0b, 0x2b, 0x9b, 0xb9, 0x0f, 0xcb, 0x6a, 0xcb, 0x70, 0x02, 0xc8, 0xfc, 0x8a, 0x62, 0xee, + 0x68, 0x8b, 0x6f, 0xa8, 0xe8, 0x2f, 0x5a, 0xd0, 0x46, 0x7b, 0xb8, 0xd8, 0x76, 0x6c, 0x43, 0x6c, + 0x39, 0x86, 0x68, 0xbb, 0x8a, 0x05, 0xc7, 0x55, 0x88, 0xfc, 0x69, 0xce, 0x99, 0x92, 0xb7, 0xd4, + 0x16, 0x0b, 0x29, 0xfb, 0x73, 0x36, 0x3e, 0x13, 0x2a, 0x63, 0xfa, 0x11, 0x41, 0x85, 0x2a, 0x02, + 0x2e, 0xbf, 0x96, 0xfa, 0x62, 0xda, 0xba, 0x4f, 0x7c, 0x79, 0xb9, 0xec, 0x13, 0xdf, 0x0d, 0xe0, + 0x72, 0x94, 0x1c, 0xa7, 0xb3, 0x24, 0x14, 0x4a, 0xb1, 0xec, 0xeb, 0x26, 0x9a, 0x6a, 0x26, 0x42, + 0x6a, 0x34, 0x65, 0x4a, 0x01, 0x4a, 0x80, 0x12, 0x8c, 0x9d, 0x85, 0xf0, 0x0c, 0x46, 0xc8, 0x1f, + 0xc1, 0xba, 0x85, 0x29, 0x09, 0xbf, 0x0f, 0x8b, 0xb8, 0x7a, 0x9d, 0x5d, 0xe9, 0xbd, 0x13, 0x2e, + 0x45, 0xf6, 0xd0, 0x35, 0x58, 0x79, 0xca, 0xf8, 0xe7, 0xc9, 0x49, 0xaa, 0x39, 0xfd, 0x47, 0x0b, + 0x56, 0x0d, 0xa4, 0x18, 0x6d, 0xc1, 0x6a, 0x14, 0xb2, 0x84, 0x47, 0x7c, 0x3e, 0x72, 0x42, 0x74, + 0x15, 0xc6, 0x70, 0x18, 0xc4, 0x51, 0x50, 0x28, 0xd3, 0x95, 0x0d, 0xb2, 0x0b, 0x57, 0x50, 0xb7, + 0xb4, 0xba, 0x98, 0x6d, 0x97, 0x99, 0x41, 0x63, 0x1f, 0x9a, 0x03, 0xe2, 0xd2, 0x35, 0x94, 0x9f, + 0x48, 0x97, 0xd4, 0xd4, 0x85, 0x52, 0x93, 0x9c, 0x70, 0xc9, 0xd2, 0x1b, 0x95, 0x40, 0x2d, 0x0b, + 0x5e, 0x92, 0x59, 0x49, 0x35, 0x0b, 0xb6, 0x32, 0xe9, 0xe5, 0x5a, 0x26, 0xbd, 0x05, 0xab, 0xc5, + 0x3c, 0x19, 0xb3, 0x70, 0xc4, 0x53, 0x1c, 0x37, 0x4a, 0xc4, 0xee, 0x2c, 0xfb, 0x55, 0x58, 0xe4, + 0xfc, 0xac, 0xe0, 0x09, 0xe3, 0xc2, 0x14, 0x97, 0x7d, 0xdd, 0x44, 0xe7, 0x27, 0x48, 0xa4, 0xd2, + 0x77, 0x7c, 0xd5, 0xa2, 0x3f, 0x17, 0x01, 0xcb, 0xa4, 0xf5, 0x5f, 0x0a, 0x3b, 0x24, 0x37, 0xa0, + 0x23, 0xc7, 0x2f, 0x4e, 0x03, 0x95, 0x98, 0x2d, 0x0b, 0xe0, 0xe8, 0x34, 0xc0, 0xac, 0xd5, 0x59, + 0x92, 0xd4, 0xf8, 0xae, 0xc0, 0xf6, 0xe5, 0x8a, 0xee, 0xc0, 0x8a, 0x3e, 0x30, 0x14, 0xa3, 0x98, + 0x9d, 0x70, 0x9d, 0x8d, 0x25, 0xb3, 0x29, 0x0e, 0x57, 0x1c, 0xb0, 0x13, 0x4e, 0x9f, 0xc1, 0xba, + 0xb2, 0xb6, 0x2f, 0x32, 0xa6, 0x87, 0xfe, 0x41, 0xd5, 0xcf, 0xca, 0xa0, 0xb9, 0xa1, 0xb4, 0xc8, + 0x4e, 0x21, 0x2b, 0xce, 0x97, 0xfa, 0x40, 0x54, 0xf7, 0xa3, 0x38, 0x2d, 0x98, 0x62, 0x48, 0xa1, + 0x37, 0x8e, 0xd3, 0xa2, 0x9a, 0x67, 0xda, 0x18, 0xca, 0xad, 0x98, 0x8d, 0xc7, 0x68, 0xa5, 0x32, + 0xec, 0xea, 0x26, 0xfd, 0x85, 0x07, 0x1b, 0x82, 0x9b, 0xf6, 0x0b, 0x26, 0x7f, 0x79, 0xf7, 0x69, + 0xf6, 0xc6, 0x76, 0xde, 0xfb, 0x9e, 0x3a, 0xf3, 0xc4, 0xd1, 0x34, 0xd2, 0xc1, 0xb2, 0x83, 0xc8, + 0x01, 0x02, 0xa8, 0xca, 0x27, 0x69, 0x3e, 0x66, 0x42, 0x62, 0xcb, 0xbe, 0x6c, 0xd0, 0x7f, 0xf1, + 0x60, 0x5d, 0x4c, 0xe3, 0x88, 0x07, 0x7c, 0x56, 0xa8, 0xa5, 0xfd, 0x0e, 0xf4, 0x71, 0x19, 0x4c, + 0xab, 0xb1, 0x9a, 0xc4, 0x15, 0x63, 0x71, 0x02, 0x95, 0xc4, 0xfb, 0x97, 0x7c, 0x97, 0x98, 0x7c, + 0x02, 0x3d, 0xfb, 0x44, 0xa7, 0x92, 0xf8, 0xeb, 0x7a, 0x05, 0x35, 0xad, 0xd8, 0xbf, 0xe4, 0x3b, + 0x1f, 0x90, 0x87, 0x00, 0x22, 0xba, 0x09, 0xb6, 0x62, 0xbe, 0xd6, 0xe7, 0xb5, 0x8d, 0xd8, 0xbf, + 0xe4, 0x5b, 0xe4, 0x9f, 0x2e, 0xc3, 0x92, 0x74, 0xfa, 0xf4, 0x29, 0xf4, 0x9d, 0x99, 0x3a, 0x59, + 0x64, 0x4f, 0x66, 0x91, 0xb5, 0xec, 0xbe, 0xd5, 0x90, 0xdd, 0xff, 0xa7, 0x07, 0x04, 0x35, 0xa9, + 0xb2, 0x55, 0x1f, 0xc0, 0x0a, 0x0f, 0xf2, 0x09, 0xe3, 0x23, 0x37, 0x59, 0xaa, 0xa0, 0x22, 0x3a, + 0xa5, 0xa1, 0x93, 0x05, 0xf4, 0x7c, 0x1b, 0x22, 0xdb, 0x40, 0xac, 0xa6, 0x3e, 0x8b, 0x49, 0xbf, + 0xde, 0xd0, 0x83, 0x0e, 0x48, 0x86, 0x70, 0x7d, 0x58, 0x51, 0x19, 0x52, 0x5b, 0x6c, 0x7a, 0x63, + 0x1f, 0xba, 0xee, 0x6c, 0x86, 0x07, 0xbd, 0x80, 0xeb, 0x3c, 0x41, 0xb7, 0xb5, 0xab, 0x11, 0x66, + 0xa5, 0x3c, 0x49, 0x09, 0xd0, 0xdf, 0x78, 0xb0, 0x86, 0xcb, 0x77, 0x54, 0xe4, 0x63, 0x10, 0xda, + 0xf7, 0x8e, 0x1a, 0xe2, 0xd0, 0xfe, 0xcf, 0x15, 0xe4, 0x01, 0x74, 0x04, 0xc3, 0x34, 0x63, 0x89, + 0xd2, 0x8f, 0x81, 0xab, 0x1f, 0xa5, 0xe1, 0xef, 0x5f, 0xf2, 0x4b, 0x62, 0x4b, 0x3b, 0xae, 0xc1, + 0x55, 0x35, 0x4b, 0x77, 0x5b, 0xe9, 0x5f, 0x75, 0x60, 0xb3, 0xda, 0x63, 0x62, 0xbc, 0x4a, 0x5c, + 0xe2, 0x68, 0x7a, 0x9c, 0x9a, 0x1c, 0xc8, 0xb3, 0x73, 0x1a, 0xa7, 0x8b, 0x9c, 0xc0, 0x55, 0x1d, + 0x0a, 0x70, 0xfc, 0xd2, 0xf1, 0xb7, 0x44, 0x0c, 0xbb, 0xef, 0xca, 0xab, 0x32, 0x9e, 0x86, 0x6d, + 0xdd, 0x6b, 0x66, 0x47, 0x26, 0x30, 0x30, 0x21, 0x47, 0x39, 0x20, 0x2b, 0x2c, 0xe1, 0x50, 0xdf, + 0x7b, 0xfb, 0x50, 0xc2, 0xa0, 0x42, 0x8d, 0x5e, 0xc8, 0x8c, 0xbc, 0x86, 0x5b, 0xba, 0x4f, 0x78, + 0x90, 0xfa, 0x70, 0xed, 0x77, 0x59, 0xd9, 0x67, 0xf8, 0xad, 0x3b, 0xe6, 0xb7, 0xf0, 0x1d, 0xfe, + 0xa3, 0x07, 0x2b, 0x2e, 0x37, 0x0c, 0x60, 0x2a, 0x47, 0xd5, 0x46, 0xa2, 0x03, 0x79, 0x05, 0xae, + 0x67, 0xd9, 0xad, 0xa6, 0x2c, 0xdb, 0xce, 0xa5, 0x17, 0xbe, 0x2d, 0x97, 0x6e, 0xbf, 0x5b, 0x2e, + 0xbd, 0xd8, 0x94, 0x4b, 0x0f, 0xff, 0xce, 0x03, 0x52, 0xdf, 0x5d, 0xf2, 0x99, 0x4c, 0xf3, 0x13, + 0x16, 0x2b, 0x83, 0xfa, 0xfe, 0x3b, 0x29, 0x88, 0x86, 0xf5, 0xc7, 0xa8, 0xa8, 0xb6, 0xc1, 0xd8, + 0x11, 0xb5, 0xef, 0x37, 0x75, 0xe1, 0x11, 0x48, 0x04, 0xda, 0x62, 0xc4, 0xa3, 0x38, 0x2e, 0x2d, + 0xab, 0xef, 0xd7, 0xf0, 0xe1, 0x1b, 0xe8, 0x3b, 0x5b, 0xf7, 0xbf, 0x36, 0xed, 0x6a, 0x48, 0x95, + 0x9b, 0xe4, 0x60, 0xc3, 0x6f, 0x5a, 0x40, 0xea, 0xda, 0xf3, 0x7f, 0x39, 0x05, 0xa1, 0x0a, 0x8e, + 0x03, 0x58, 0x50, 0xaa, 0xe0, 0x98, 0xfe, 0x16, 0xac, 0x4e, 0x03, 0x3e, 0xcb, 0x31, 0x9d, 0x74, + 0x0e, 0xa0, 0x55, 0x18, 0x77, 0xab, 0x94, 0xf1, 0x48, 0xf7, 0xaa, 0x9c, 0xaf, 0xa9, 0x8b, 0xfe, + 0x00, 0xae, 0xbc, 0x08, 0xe2, 0x98, 0xf1, 0x4f, 0xe5, 0x60, 0x3a, 0x24, 0xbd, 0x0f, 0xbd, 0x57, + 0xb2, 0xde, 0x30, 0x4a, 0x93, 0x78, 0xae, 0x0e, 0xa4, 0x5d, 0x85, 0x7d, 0x91, 0xc4, 0x73, 0x3c, + 0xc1, 0x57, 0x3e, 0x2d, 0x0f, 0xfd, 0xb6, 0x43, 0xf3, 0x7c, 0xdd, 0x44, 0x57, 0xa9, 0xe4, 0xe4, + 0x0e, 0x47, 0x77, 0x61, 0xb3, 0xda, 0xd1, 0xcc, 0x6c, 0xa1, 0x64, 0xf6, 0x09, 0x90, 0x1f, 0xcf, + 0x58, 0x3e, 0x17, 0xc5, 0x3c, 0x53, 0xb6, 0xb9, 0x56, 0x3d, 0x02, 0x2d, 0x65, 0xb3, 0xe3, 0x1f, + 0xb2, 0xb9, 0x2e, 0x6e, 0xb6, 0x4c, 0x71, 0x93, 0x3e, 0x84, 0x0d, 0x87, 0x81, 0x1a, 0xf1, 0x0e, + 0x2c, 0x89, 0x82, 0xa0, 0x3e, 0x1e, 0xb8, 0x45, 0x43, 0xd5, 0x47, 0xff, 0x18, 0x16, 0xf6, 0xd3, + 0xcc, 0x3e, 0x4e, 0x7b, 0xee, 0x71, 0x5a, 0x39, 0x8a, 0x91, 0xf1, 0x03, 0x72, 0x64, 0x17, 0x44, + 0x33, 0x0f, 0xa6, 0x1c, 0xf3, 0xe3, 0x93, 0x34, 0x7f, 0x15, 0xe4, 0xa1, 0x52, 0x81, 0x0a, 0x8a, + 0xb3, 0x3f, 0x61, 0xda, 0x55, 0xe0, 0x4f, 0xfa, 0x4b, 0x0f, 0x16, 0xc5, 0x94, 0x50, 0x3f, 0x64, + 0xc4, 0x90, 0x59, 0x5b, 0x3a, 0x7e, 0x29, 0xe6, 0xd2, 0xf7, 0xab, 0x70, 0xa5, 0x5a, 0xdd, 0xaa, + 0x56, 0xab, 0x31, 0x7c, 0xcb, 0x56, 0x59, 0x06, 0x2e, 0x01, 0x72, 0x0b, 0xda, 0xa7, 0x69, 0xa6, + 0xfd, 0x32, 0xe8, 0x13, 0x6f, 0x9a, 0xf9, 0x02, 0xa7, 0xf7, 0x60, 0xf5, 0x59, 0x1a, 0x32, 0xeb, + 0xd0, 0x74, 0xe1, 0x6e, 0xd0, 0x3f, 0xf1, 0x60, 0x59, 0x13, 0x93, 0x2d, 0x68, 0xa3, 0x7f, 0xad, + 0x84, 0x7e, 0x53, 0x7d, 0x42, 0x3a, 0x5f, 0x50, 0xa0, 0x51, 0x89, 0x74, 0xa2, 0x0c, 0x7e, 0x3a, + 0x69, 0x2f, 0x03, 0x0b, 0x66, 0x53, 0x62, 0xce, 0x15, 0x0f, 0x5c, 0x41, 0xe9, 0xaf, 0x3c, 0xe8, + 0x3b, 0x63, 0x60, 0x7e, 0x15, 0x07, 0x05, 0x57, 0x67, 0x7d, 0x25, 0x44, 0x1b, 0xb2, 0x0f, 0xd8, + 0x2d, 0xf7, 0x80, 0x6d, 0x0e, 0x78, 0x0b, 0xf6, 0x01, 0xef, 0x3e, 0x74, 0xd4, 0x69, 0x9a, 0x69, + 0xb9, 0xe9, 0x5a, 0x3e, 0x8e, 0xa8, 0xeb, 0x6a, 0x25, 0x11, 0x7d, 0x08, 0x5d, 0xab, 0x07, 0x07, + 0x4c, 0x18, 0x7f, 0x95, 0xe6, 0x2f, 0xf5, 0x89, 0x5e, 0x35, 0x4d, 0x29, 0xb4, 0x55, 0x96, 0x42, + 0xe9, 0xdf, 0x78, 0xd0, 0x47, 0x9d, 0x88, 0x92, 0xc9, 0x61, 0x1a, 0x47, 0xe3, 0xb9, 0xd0, 0x0d, + 0xbd, 0xfd, 0xa3, 0x90, 0xc5, 0x3c, 0x30, 0xba, 0xe1, 0xc2, 0x18, 0xb2, 0xa6, 0x51, 0x22, 0x4a, + 0x16, 0x4a, 0x33, 0x4c, 0x1b, 0x75, 0xf9, 0x84, 0x61, 0xcc, 0x29, 0xd8, 0x68, 0x8a, 0x79, 0x9f, + 0xf2, 0x53, 0x0e, 0x88, 0xde, 0x07, 0x81, 0x3c, 0xe0, 0x6c, 0x34, 0x8d, 0xe2, 0x38, 0x92, 0xb4, + 0x52, 0x67, 0x9b, 0xba, 0xe8, 0xdf, 0xb7, 0xa0, 0xab, 0xec, 0xfe, 0x49, 0x38, 0x61, 0xa8, 0x9f, + 0x3a, 0x8e, 0x1a, 0x83, 0xb2, 0x10, 0xdd, 0xef, 0x44, 0x5e, 0x0b, 0xa9, 0x6e, 0xe0, 0x42, 0x7d, + 0x03, 0x31, 0x41, 0x4d, 0x43, 0xf6, 0xa1, 0x08, 0xf1, 0xf2, 0x4a, 0xa8, 0x04, 0x74, 0xef, 0xae, + 0xe8, 0x5d, 0x2c, 0x7b, 0x05, 0xe0, 0x04, 0xf5, 0xa5, 0x4a, 0x50, 0x7f, 0x00, 0x3d, 0xc5, 0x46, + 0xc8, 0x5d, 0xd4, 0x34, 0x4a, 0x55, 0x76, 0xf6, 0xc4, 0x77, 0x28, 0xf5, 0x97, 0xbb, 0xfa, 0xcb, + 0xe5, 0x6f, 0xfb, 0x52, 0x53, 0xd2, 0xab, 0xb0, 0xa1, 0x84, 0xf7, 0x34, 0x0f, 0xb2, 0x53, 0xed, + 0x4b, 0x43, 0x73, 0x8d, 0x21, 0x60, 0x72, 0x0f, 0x16, 0xf1, 0x33, 0xed, 0xce, 0x9a, 0xcd, 0x4b, + 0x92, 0x90, 0x2d, 0x58, 0x64, 0xe1, 0x84, 0xe9, 0xac, 0x92, 0xb8, 0xb9, 0x30, 0xee, 0x91, 0x2f, + 0x09, 0xd0, 0xd8, 0x11, 0xad, 0x18, 0xbb, 0xeb, 0x0b, 0xf1, 0x08, 0x9f, 0x7c, 0x1e, 0xd2, 0x2b, + 0x40, 0x9e, 0x49, 0xad, 0xb5, 0x0b, 0x2a, 0x7f, 0xba, 0x00, 0x5d, 0x0b, 0x46, 0xbb, 0x9d, 0xe0, + 0x84, 0x47, 0x61, 0x14, 0x4c, 0x19, 0x67, 0xb9, 0xd2, 0xd4, 0x0a, 0x2a, 0x5c, 0xe6, 0xd9, 0x64, + 0x94, 0xce, 0xf8, 0x28, 0x64, 0x93, 0x9c, 0xc9, 0x2b, 0x06, 0xcf, 0xaf, 0xa0, 0x48, 0x37, 0x0d, + 0x5e, 0xdb, 0x74, 0x52, 0x1f, 0x2a, 0xa8, 0x3e, 0xb3, 0x48, 0x19, 0xb5, 0xcb, 0x33, 0x8b, 0x94, + 0x48, 0xd5, 0xe3, 0x2c, 0x36, 0x78, 0x9c, 0x8f, 0x60, 0x53, 0xfa, 0x16, 0x65, 0x9b, 0xa3, 0x8a, + 0x9a, 0x5c, 0xd0, 0x8b, 0xa9, 0x12, 0xce, 0x59, 0x2b, 0x78, 0x11, 0xfd, 0x5c, 0x56, 0x4c, 0x3d, + 0xbf, 0x86, 0x23, 0x2d, 0x9a, 0xa3, 0x43, 0x2b, 0x4b, 0xa6, 0x35, 0x5c, 0xd0, 0x06, 0xaf, 0x5d, + 0xda, 0x8e, 0xa2, 0xad, 0xe0, 0xf4, 0x06, 0x5c, 0x17, 0x6a, 0xf2, 0x3c, 0xcd, 0xd2, 0x38, 0x9d, + 0xcc, 0x8f, 0x66, 0xc7, 0xc5, 0x38, 0x8f, 0x32, 0x4c, 0xe9, 0xe8, 0x3f, 0x79, 0xb0, 0xe1, 0xf4, + 0xaa, 0x33, 0xdb, 0x6f, 0x49, 0x9d, 0x35, 0x75, 0x52, 0xa9, 0x59, 0xeb, 0x96, 0x67, 0x93, 0x84, + 0xf2, 0x70, 0xfa, 0xa5, 0x2a, 0x9d, 0xee, 0xc1, 0xaa, 0x1e, 0x5a, 0x7f, 0x28, 0xd5, 0x6c, 0x50, + 0x57, 0x33, 0xf5, 0xfd, 0x8a, 0xfa, 0x40, 0xb3, 0xf8, 0x5d, 0x99, 0x54, 0xb1, 0x50, 0x2c, 0x42, + 0x9f, 0x48, 0x86, 0xfa, 0x7b, 0x3b, 0x91, 0xd3, 0x33, 0x18, 0x1b, 0xb0, 0xa0, 0x7f, 0xe6, 0x01, + 0x94, 0xb3, 0xc3, 0x9d, 0x2f, 0xbd, 0xb3, 0x27, 0xaa, 0x4e, 0x25, 0x80, 0x29, 0x90, 0xa9, 0xe2, + 0x95, 0x0e, 0xbf, 0xab, 0x31, 0xcc, 0x29, 0xee, 0xc2, 0xea, 0x24, 0x4e, 0x8f, 0x45, 0xf8, 0xc4, + 0x8c, 0x8a, 0x15, 0xea, 0x02, 0x61, 0x45, 0xc2, 0x9f, 0x29, 0xb4, 0x8c, 0x0e, 0x6d, 0x2b, 0x3a, + 0xd0, 0x3f, 0x6f, 0x99, 0xfa, 0x52, 0xb9, 0xe6, 0x0b, 0xcd, 0x88, 0xec, 0xd6, 0xbc, 0xdf, 0x05, + 0xe5, 0x1c, 0x71, 0x4c, 0x3d, 0xfc, 0xd6, 0x83, 0xc8, 0x43, 0x58, 0xc9, 0xa5, 0x7b, 0xd1, 0xbe, + 0xa7, 0xfd, 0x16, 0xdf, 0xd3, 0xcf, 0x9d, 0xc0, 0xf2, 0xff, 0x60, 0x2d, 0x08, 0xcf, 0x58, 0xce, + 0x23, 0x91, 0xce, 0x8a, 0xf8, 0x2d, 0x3d, 0xe6, 0xaa, 0x85, 0x8b, 0xb0, 0x7a, 0x17, 0x56, 0xd5, + 0xa5, 0x8d, 0xa1, 0x54, 0x37, 0xbe, 0x25, 0x8c, 0x84, 0xf4, 0xaf, 0x75, 0x29, 0xcb, 0xdd, 0xc3, + 0x8b, 0x25, 0x62, 0xaf, 0xae, 0x55, 0x59, 0xdd, 0x77, 0x55, 0xe9, 0x29, 0xd4, 0x39, 0xb3, 0x2a, + 0xf0, 0x49, 0x50, 0x95, 0x01, 0x5d, 0x91, 0xb6, 0xdf, 0x45, 0xa4, 0x74, 0x1b, 0x56, 0x8f, 0x18, + 0xdf, 0xc3, 0x1d, 0xd4, 0x9e, 0xef, 0x06, 0x74, 0x12, 0xf6, 0x6a, 0x24, 0xb7, 0x58, 0xc6, 0xe9, + 0xe5, 0x84, 0xbd, 0x12, 0x34, 0x94, 0xc0, 0x5a, 0x49, 0xaf, 0x2e, 0xac, 0xfe, 0xa2, 0x05, 0x97, + 0x3f, 0x4f, 0xce, 0xd2, 0x68, 0x2c, 0x8a, 0x49, 0x53, 0x36, 0x4d, 0xf5, 0x95, 0x24, 0xfe, 0xc6, + 0xb0, 0x2f, 0xee, 0x24, 0x32, 0xae, 0xaa, 0x3c, 0xba, 0x89, 0x21, 0x30, 0x2f, 0xef, 0xbf, 0xa5, + 0xb6, 0x59, 0x08, 0xd9, 0x84, 0xa5, 0xdc, 0xbe, 0xab, 0x57, 0xad, 0xf2, 0x3e, 0x76, 0xd1, 0xba, + 0x8f, 0x15, 0x65, 0x45, 0x79, 0xdd, 0x22, 0xb6, 0x64, 0xd9, 0xd7, 0x4d, 0x91, 0xbe, 0xe6, 0x4c, + 0xdd, 0x57, 0x61, 0x30, 0xbd, 0xac, 0xd2, 0x57, 0x1b, 0xc4, 0x80, 0x2b, 0x3f, 0x90, 0x34, 0xd2, + 0x21, 0xd9, 0x10, 0x26, 0x20, 0xd5, 0xeb, 0xfe, 0x8e, 0x54, 0x93, 0x0a, 0x4c, 0xbf, 0x02, 0xb2, + 0x17, 0x86, 0x4a, 0x2a, 0x26, 0x1b, 0x2f, 0xd7, 0xe3, 0x39, 0xeb, 0x69, 0xe0, 0xdb, 0x6a, 0xe6, + 0xfb, 0x04, 0xba, 0x87, 0xd6, 0x7b, 0x05, 0x21, 0x40, 0xfd, 0x52, 0x41, 0x09, 0xdd, 0x42, 0xac, + 0x01, 0x5b, 0xf6, 0x80, 0xf4, 0xb7, 0x81, 0x1c, 0x44, 0x05, 0x37, 0xf3, 0x33, 0xe7, 0x24, 0x53, + 0x47, 0xb1, 0xce, 0x49, 0x0a, 0x13, 0xe7, 0xa4, 0x3d, 0x79, 0xfd, 0x53, 0x5d, 0xd8, 0x3d, 0x58, + 0x8e, 0x24, 0xa4, 0xfd, 0xe7, 0x8a, 0x52, 0x3c, 0x4d, 0x69, 0xfa, 0x31, 0xd2, 0x2b, 0xd0, 0x71, + 0xcf, 0xbf, 0xf4, 0xe0, 0xb2, 0x5a, 0x1a, 0xc6, 0x29, 0xe7, 0xa5, 0x86, 0x5c, 0x98, 0x83, 0x35, + 0xdf, 0xc9, 0xd7, 0x77, 0x7a, 0xa1, 0x69, 0xa7, 0x09, 0xb4, 0xb3, 0x80, 0x9f, 0x8a, 0x24, 0xb6, + 0xe3, 0x8b, 0xdf, 0xfa, 0x50, 0xb2, 0x58, 0x1e, 0x4a, 0xd4, 0x55, 0x97, 0x9a, 0x94, 0xb9, 0x85, + 0xf9, 0x54, 0x5e, 0x75, 0x95, 0x70, 0x29, 0x03, 0x35, 0xc1, 0xaa, 0x0c, 0x14, 0xa9, 0x6f, 0xfa, + 0xe9, 0x10, 0x06, 0x8f, 0x59, 0xcc, 0x38, 0xdb, 0x8b, 0xe3, 0x2a, 0xff, 0x1b, 0x70, 0xbd, 0xa1, + 0x4f, 0xd9, 0xda, 0x67, 0xb0, 0xfe, 0x98, 0x1d, 0xcf, 0x26, 0x07, 0xec, 0xac, 0x2c, 0xb9, 0x12, + 0x68, 0x17, 0xa7, 0xe9, 0x2b, 0xb5, 0x5f, 0xe2, 0x37, 0x79, 0x0f, 0x20, 0x46, 0x9a, 0x51, 0x91, + 0xb1, 0xb1, 0xd2, 0xa6, 0x8e, 0x40, 0x8e, 0x32, 0x36, 0xa6, 0x1f, 0x01, 0xb1, 0xf9, 0xa8, 0x25, + 0xa0, 0x05, 0xcc, 0x8e, 0x47, 0xc5, 0xbc, 0xe0, 0x6c, 0xaa, 0x8d, 0xdf, 0x86, 0xe8, 0x5d, 0xe8, + 0x1d, 0x06, 0x73, 0x9f, 0x7d, 0xad, 0x1e, 0xc0, 0xe0, 0x99, 0x28, 0x98, 0xa3, 0x7a, 0x9a, 0x33, + 0x91, 0xe8, 0xa6, 0x39, 0x2c, 0x49, 0x42, 0x64, 0x1a, 0xb2, 0x82, 0x47, 0x89, 0x2c, 0x6b, 0x2a, + 0xa6, 0x16, 0x54, 0xdb, 0xee, 0x56, 0xc3, 0x76, 0xab, 0xd4, 0x45, 0xdf, 0x72, 0xaa, 0x7d, 0x75, + 0xb0, 0xdd, 0x7f, 0x18, 0x40, 0xc7, 0x64, 0x82, 0xe4, 0x67, 0xd0, 0x77, 0x8e, 0xf4, 0xe4, 0x86, + 0xda, 0x8e, 0xa6, 0x1a, 0xc1, 0xf0, 0x66, 0x73, 0xa7, 0x12, 0xfb, 0xad, 0x6f, 0x7e, 0xf3, 0xaf, + 0xbf, 0x6a, 0x0d, 0xc8, 0xe6, 0xce, 0xd9, 0x87, 0x3b, 0xea, 0xcc, 0xbe, 0x23, 0x4a, 0x10, 0xf2, + 0x26, 0xe8, 0x25, 0xac, 0xb8, 0x47, 0x7e, 0x72, 0xd3, 0x75, 0xbc, 0x95, 0xd1, 0xde, 0xbb, 0xa0, + 0x57, 0x0d, 0x77, 0x53, 0x0c, 0xb7, 0x49, 0xae, 0xd8, 0xc3, 0x99, 0x0c, 0x8d, 0x89, 0xbb, 0x3b, + 0xfb, 0x19, 0x16, 0xd1, 0xfc, 0x9a, 0x9f, 0x67, 0x0d, 0xaf, 0xd7, 0x9f, 0x5c, 0xa9, 0x37, 0x5a, + 0x74, 0x20, 0x86, 0x22, 0x64, 0x0d, 0x87, 0xb2, 0x5f, 0x61, 0x91, 0x9f, 0x42, 0xc7, 0x3c, 0x39, + 0x21, 0xd7, 0xac, 0x07, 0x36, 0xf6, 0x23, 0x96, 0xe1, 0xa0, 0xde, 0xa1, 0x16, 0x71, 0x43, 0x70, + 0xbe, 0x4a, 0x6b, 0x9c, 0x3f, 0xf6, 0xee, 0x91, 0x03, 0xb8, 0xaa, 0xac, 0xff, 0x98, 0xfd, 0x77, + 0x56, 0xd2, 0xf0, 0x78, 0xec, 0xbe, 0x47, 0x1e, 0xc2, 0xb2, 0x7e, 0x85, 0x43, 0x36, 0x9b, 0x9f, + 0x02, 0x0d, 0xaf, 0xd5, 0x70, 0xa5, 0xf4, 0x7b, 0x00, 0xe5, 0xa3, 0x13, 0x32, 0xb8, 0xe8, 0x6d, + 0x8c, 0x11, 0x62, 0xc3, 0x0b, 0x95, 0x89, 0x78, 0x73, 0xe3, 0xbe, 0x69, 0x21, 0xdf, 0x29, 0xe9, + 0x1b, 0x5f, 0xbb, 0xbc, 0x85, 0x21, 0xdd, 0x14, 0xb2, 0x5b, 0x23, 0x2b, 0x28, 0xbb, 0x84, 0xbd, + 0xd2, 0xb7, 0xd8, 0x3f, 0x81, 0xae, 0xf5, 0x32, 0x85, 0x58, 0x97, 0x03, 0x95, 0x97, 0x27, 0xc3, + 0x61, 0x53, 0x97, 0xe2, 0x7e, 0x45, 0x70, 0x5f, 0xa1, 0x1d, 0xe4, 0x2e, 0x2e, 0x4e, 0x71, 0x4b, + 0x7e, 0x06, 0x2b, 0xee, 0x8b, 0x14, 0xa3, 0xc3, 0x8d, 0x6f, 0x5b, 0x8c, 0x0e, 0x5f, 0xf0, 0x8c, + 0x45, 0x6d, 0xff, 0xbd, 0x0d, 0x33, 0xc8, 0xce, 0x1b, 0x55, 0x5f, 0x38, 0x27, 0x3f, 0x46, 0x43, + 0x55, 0x37, 0xd9, 0xa4, 0x7c, 0xa1, 0xe3, 0xde, 0x77, 0x1b, 0xdd, 0xaa, 0x5d, 0x7a, 0xd3, 0x75, + 0xc1, 0xbc, 0x4b, 0xca, 0x15, 0x90, 0x1f, 0xc1, 0x65, 0x75, 0xa3, 0x4d, 0xae, 0x96, 0x3a, 0x64, + 0x9d, 0xd1, 0x86, 0x9b, 0x55, 0x58, 0x31, 0xdb, 0x10, 0xcc, 0xfa, 0xa4, 0x8b, 0xcc, 0x26, 0x8c, + 0x47, 0xc8, 0x23, 0x86, 0x55, 0xb7, 0x18, 0x5a, 0x18, 0x71, 0x34, 0x5e, 0x90, 0x18, 0x71, 0x34, + 0x57, 0x56, 0x5d, 0x93, 0xd6, 0xa6, 0xbc, 0xa3, 0xef, 0x7e, 0xfe, 0x10, 0x7a, 0xf6, 0xf3, 0x09, + 0x32, 0xb4, 0x56, 0x5e, 0x79, 0x6a, 0x31, 0xbc, 0xd1, 0xd8, 0xe7, 0x6e, 0x2d, 0xe9, 0xd9, 0xc3, + 0x90, 0x9f, 0xc0, 0xaa, 0x55, 0x4f, 0x3f, 0x9a, 0x27, 0x63, 0xa3, 0x3a, 0xf5, 0x1b, 0xbc, 0x61, + 0x53, 0xce, 0x48, 0xaf, 0x09, 0xc6, 0xeb, 0xd4, 0x61, 0x8c, 0x6a, 0xf3, 0x08, 0xba, 0x76, 0xad, + 0xfe, 0x2d, 0x7c, 0xaf, 0x59, 0x5d, 0xf6, 0xad, 0xd9, 0x7d, 0x8f, 0xfc, 0xda, 0x83, 0x9e, 0x7d, + 0xef, 0x4b, 0x9c, 0x53, 0x50, 0x85, 0xcf, 0xc0, 0xee, 0xb3, 0x19, 0xd1, 0xaf, 0xc4, 0x24, 0x0f, + 0xef, 0x3d, 0x73, 0x84, 0xfc, 0xc6, 0xb9, 0xce, 0xd8, 0xb6, 0x9f, 0x32, 0x9e, 0x57, 0x3b, 0xed, + 0x1b, 0xce, 0xf3, 0x9d, 0x37, 0xe2, 0xd2, 0xe5, 0xfc, 0xbe, 0x47, 0x3e, 0x96, 0x2f, 0x52, 0x75, + 0x82, 0x42, 0x2c, 0x67, 0x52, 0x15, 0x9b, 0xfd, 0xce, 0x73, 0xcb, 0xbb, 0xef, 0x91, 0x3f, 0x92, + 0xaf, 0x18, 0xd5, 0xb7, 0x42, 0xfa, 0xef, 0xfa, 0x3d, 0xbd, 0x23, 0x56, 0x74, 0x8b, 0x5e, 0x77, + 0x56, 0x54, 0xf5, 0xa6, 0x87, 0x00, 0x65, 0xb6, 0x49, 0x2a, 0xa9, 0x97, 0xf1, 0x33, 0xf5, 0x84, + 0xd4, 0xdd, 0x55, 0x9d, 0xa1, 0x49, 0x67, 0xd0, 0xb3, 0xf2, 0xbc, 0xc2, 0x6c, 0x6b, 0x3d, 0x6b, + 0x1c, 0x0e, 0x9b, 0xba, 0x14, 0xff, 0xef, 0x0a, 0xfe, 0xef, 0x91, 0x1b, 0x36, 0xff, 0x9d, 0x37, + 0x76, 0x96, 0x79, 0x4e, 0xbe, 0x82, 0xfe, 0x41, 0x9a, 0xbe, 0x9c, 0x65, 0xe6, 0x10, 0xe1, 0xe6, + 0x4d, 0x98, 0xe9, 0x0e, 0x2b, 0x8b, 0xa2, 0xef, 0x0b, 0xce, 0x37, 0xc8, 0x75, 0x97, 0x73, 0x99, + 0xfb, 0x9e, 0x93, 0x00, 0xd6, 0x4d, 0x8c, 0x31, 0x0b, 0x19, 0xba, 0x7c, 0xec, 0x14, 0xb4, 0x36, + 0x86, 0x13, 0xf5, 0xcd, 0x18, 0x85, 0xe6, 0x79, 0xdf, 0x23, 0x87, 0xd0, 0x7b, 0xcc, 0xc6, 0x69, + 0xc8, 0x54, 0xae, 0xb3, 0x51, 0xce, 0xdc, 0xe4, 0x48, 0xc3, 0xbe, 0x03, 0xba, 0x9e, 0x20, 0x0b, + 0xe6, 0x39, 0xfb, 0x7a, 0xe7, 0x8d, 0x4a, 0xa2, 0xce, 0xb5, 0x27, 0xd0, 0x89, 0x9f, 0xe3, 0x09, + 0x2a, 0x99, 0xa2, 0xe3, 0x09, 0x6a, 0x99, 0xa2, 0xe3, 0x09, 0x74, 0xe2, 0x49, 0x62, 0xcc, 0x1f, + 0x2b, 0xc9, 0xa5, 0x89, 0x54, 0x17, 0xa5, 0xa4, 0xc3, 0xdb, 0x17, 0x13, 0xb8, 0xa3, 0xdd, 0x73, + 0x47, 0x3b, 0x82, 0xfe, 0x63, 0x26, 0x85, 0x25, 0xcb, 0x77, 0x43, 0xd7, 0xb5, 0xd8, 0xa5, 0xbe, + 0xaa, 0xdb, 0x11, 0x7d, 0xae, 0xa3, 0x17, 0xb5, 0x33, 0xf2, 0x53, 0xe8, 0x3e, 0x65, 0x5c, 0xd7, + 0xeb, 0x4c, 0xbc, 0xaf, 0x14, 0xf0, 0x86, 0x0d, 0xe5, 0x3e, 0x7a, 0x5b, 0x70, 0x1b, 0x92, 0x81, + 0xe1, 0xb6, 0xc3, 0xc2, 0x09, 0x93, 0x4e, 0x60, 0x14, 0x85, 0xe7, 0xe4, 0xf7, 0x05, 0x73, 0x53, + 0xcc, 0xdf, 0xb4, 0xaa, 0x40, 0x36, 0xf3, 0xd5, 0x0a, 0xde, 0xc4, 0x39, 0x49, 0x43, 0x66, 0x85, + 0xbc, 0x04, 0xba, 0xd6, 0x05, 0x8d, 0x31, 0xa8, 0xfa, 0xad, 0x8f, 0x31, 0xa8, 0x86, 0xfb, 0x1c, + 0xba, 0x25, 0xc6, 0xa1, 0xe4, 0x76, 0x39, 0x8e, 0xbc, 0xc3, 0x29, 0x47, 0xda, 0x79, 0x13, 0x4c, + 0xf9, 0x39, 0x79, 0x21, 0x1e, 0x7d, 0xd9, 0x35, 0xc9, 0x32, 0xdf, 0xa8, 0x96, 0x2f, 0x8d, 0xb0, + 0xac, 0x2e, 0x37, 0x07, 0x91, 0x43, 0x89, 0xc8, 0xf8, 0xc2, 0x4a, 0xdd, 0x9c, 0xda, 0xac, 0xd6, + 0x92, 0x0b, 0x4b, 0x70, 0x66, 0x65, 0x0d, 0x65, 0x38, 0x9d, 0xc5, 0xc9, 0xda, 0x82, 0x95, 0xc5, + 0x39, 0xc5, 0x09, 0x2b, 0x8b, 0x73, 0x8b, 0x10, 0x98, 0xc5, 0x95, 0x07, 0x1a, 0x93, 0xc5, 0xd5, + 0xce, 0x4a, 0xc6, 0x19, 0xd6, 0x4f, 0x3f, 0xc7, 0x4b, 0xe2, 0x3f, 0x3b, 0xfe, 0xff, 0x7f, 0x05, + 0x00, 0x00, 0xff, 0xff, 0x23, 0xe3, 0x4a, 0xbc, 0x0b, 0x32, 0x00, 0x00, } diff --git a/lnrpc/rpc.pb.gw.go b/lnrpc/rpc.pb.gw.go index 394d5c87b..d68307a1a 100644 --- a/lnrpc/rpc.pb.gw.go +++ b/lnrpc/rpc.pb.gw.go @@ -97,6 +97,33 @@ func request_Lightning_ConnectPeer_0(ctx context.Context, marshaler runtime.Mars } +func request_Lightning_DisconnectPeer_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DisconnectPeerRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pub_key"] + if !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key") + } + + protoReq.PubKey, err = runtime.String(val) + + if err != nil { + return nil, metadata, err + } + + msg, err := client.DisconnectPeer(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_Lightning_ListPeers_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListPeersRequest var metadata runtime.ServerMetadata @@ -669,6 +696,34 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn * }) + mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Lightning_DisconnectPeer_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Lightning_DisconnectPeer_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -1217,6 +1272,8 @@ var ( pattern_Lightning_ConnectPeer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "peers"}, "")) + pattern_Lightning_DisconnectPeer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "peers", "pub_key"}, "")) + pattern_Lightning_ListPeers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "peers"}, "")) pattern_Lightning_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getinfo"}, "")) @@ -1269,6 +1326,8 @@ var ( forward_Lightning_ConnectPeer_0 = runtime.ForwardResponseMessage + forward_Lightning_DisconnectPeer_0 = runtime.ForwardResponseMessage + forward_Lightning_ListPeers_0 = runtime.ForwardResponseMessage forward_Lightning_GetInfo_0 = runtime.ForwardResponseMessage diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index e11a72beb..72cf0b2c0 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -5,143 +5,150 @@ import "google/api/annotations.proto"; package lnrpc; service Lightning { - rpc WalletBalance(WalletBalanceRequest) returns (WalletBalanceResponse) { + rpc WalletBalance (WalletBalanceRequest) returns (WalletBalanceResponse) { option (google.api.http) = { get: "/v1/balance/blockchain" }; } - rpc ChannelBalance(ChannelBalanceRequest) returns (ChannelBalanceResponse) { + rpc ChannelBalance (ChannelBalanceRequest) returns (ChannelBalanceResponse) { option (google.api.http) = { get: "/v1/balance/channels" }; } - rpc GetTransactions(GetTransactionsRequest) returns (TransactionDetails) { + rpc GetTransactions (GetTransactionsRequest) returns (TransactionDetails) { option (google.api.http) = { get: "/v1/transactions" }; } - rpc SendCoins(SendCoinsRequest) returns (SendCoinsResponse) { + rpc SendCoins (SendCoinsRequest) returns (SendCoinsResponse) { option (google.api.http) = { post: "/v1/transactions" body: "*" }; } - rpc SubscribeTransactions(GetTransactionsRequest) returns (stream Transaction); + rpc SubscribeTransactions (GetTransactionsRequest) returns (stream Transaction); - rpc SendMany(SendManyRequest) returns (SendManyResponse); + rpc SendMany (SendManyRequest) returns (SendManyResponse); - rpc NewAddress(NewAddressRequest) returns (NewAddressResponse); - rpc NewWitnessAddress(NewWitnessAddressRequest) returns (NewAddressResponse) { + rpc NewAddress (NewAddressRequest) returns (NewAddressResponse); + rpc NewWitnessAddress (NewWitnessAddressRequest) returns (NewAddressResponse) { option (google.api.http) = { get: "/v1/newaddress" }; } - rpc ConnectPeer(ConnectPeerRequest) returns (ConnectPeerResponse) { + rpc ConnectPeer (ConnectPeerRequest) returns (ConnectPeerResponse) { option (google.api.http) = { post: "/v1/peers" body: "*" }; } - rpc ListPeers(ListPeersRequest) returns (ListPeersResponse) { + + rpc DisconnectPeer (DisconnectPeerRequest) returns (DisconnectPeerResponse) { + option (google.api.http) = { + delete: "/v1/peers/{pub_key}" + }; + } + + rpc ListPeers (ListPeersRequest) returns (ListPeersResponse) { option (google.api.http) = { get: "/v1/peers" }; } - rpc GetInfo(GetInfoRequest) returns (GetInfoResponse) { + rpc GetInfo (GetInfoRequest) returns (GetInfoResponse) { option (google.api.http) = { get: "/v1/getinfo" }; } // TODO(roasbeef): merge with below with bool? - rpc PendingChannels(PendingChannelRequest) returns (PendingChannelResponse) { + rpc PendingChannels (PendingChannelRequest) returns (PendingChannelResponse) { option (google.api.http) = { get: "/v1/channels/pending" }; } - rpc ListChannels(ListChannelsRequest) returns (ListChannelsResponse) { + rpc ListChannels (ListChannelsRequest) returns (ListChannelsResponse) { option (google.api.http) = { get: "/v1/channels" }; } - rpc OpenChannelSync(OpenChannelRequest) returns (ChannelPoint) { + rpc OpenChannelSync (OpenChannelRequest) returns (ChannelPoint) { option (google.api.http) = { post: "/v1/channels" body: "*" }; } - rpc OpenChannel(OpenChannelRequest) returns (stream OpenStatusUpdate); + rpc OpenChannel (OpenChannelRequest) returns (stream OpenStatusUpdate); - rpc CloseChannel(CloseChannelRequest) returns (stream CloseStatusUpdate) { + rpc CloseChannel (CloseChannelRequest) returns (stream CloseStatusUpdate) { option (google.api.http) = { delete: "/v1/channels/{channel_point.funding_txid}/{channel_point.output_index}/{force}" }; } - rpc SendPayment(stream SendRequest) returns (stream SendResponse); + rpc SendPayment (stream SendRequest) returns (stream SendResponse); - rpc SendPaymentSync(SendRequest) returns (SendResponse) { + rpc SendPaymentSync (SendRequest) returns (SendResponse) { option (google.api.http) = { post: "/v1/channels/transactions" body: "*" }; } - rpc AddInvoice(Invoice) returns (AddInvoiceResponse) { + rpc AddInvoice (Invoice) returns (AddInvoiceResponse) { option (google.api.http) = { post: "/v1/invoices" body: "*" }; } - rpc ListInvoices(ListInvoiceRequest) returns (ListInvoiceResponse) { + rpc ListInvoices (ListInvoiceRequest) returns (ListInvoiceResponse) { option (google.api.http) = { get: "/v1/invoices/{pending_only}" }; } - rpc LookupInvoice(PaymentHash) returns (Invoice) { + rpc LookupInvoice (PaymentHash) returns (Invoice) { option (google.api.http) = { get: "/v1/invoices/{r_hash_str}" }; } - rpc SubscribeInvoices(InvoiceSubscription) returns (stream Invoice) { + rpc SubscribeInvoices (InvoiceSubscription) returns (stream Invoice) { option (google.api.http) = { get: "/v1/invoices/subscribe" }; } - rpc DecodePayReq(PayReqString) returns (PayReq) { + rpc DecodePayReq (PayReqString) returns (PayReq) { option (google.api.http) = { get: "/v1/payreq/{pay_req}" }; } - rpc ListPayments(ListPaymentsRequest) returns (ListPaymentsResponse){ + rpc ListPayments (ListPaymentsRequest) returns (ListPaymentsResponse) { option (google.api.http) = { get: "/v1/payments" }; }; - rpc DeleteAllPayments(DeleteAllPaymentsRequest) returns (DeleteAllPaymentsResponse) { + rpc DeleteAllPayments (DeleteAllPaymentsRequest) returns (DeleteAllPaymentsResponse) { option (google.api.http) = { delete: "/v1/payments" }; }; - rpc DescribeGraph(ChannelGraphRequest) returns (ChannelGraph) { + rpc DescribeGraph (ChannelGraphRequest) returns (ChannelGraph) { option (google.api.http) = { get: "/v1/graph" }; } - rpc GetChanInfo(ChanInfoRequest) returns (ChannelEdge) { + rpc GetChanInfo (ChanInfoRequest) returns (ChannelEdge) { option (google.api.http) = { get: "/v1/graph/edge/{chan_id}" }; } - rpc GetNodeInfo(NodeInfoRequest) returns (NodeInfo) { + rpc GetNodeInfo (NodeInfoRequest) returns (NodeInfo) { option (google.api.http) = { get: "/v1/graph/node/{pub_key}" }; @@ -153,7 +160,7 @@ service Lightning { }; } - rpc GetNetworkInfo(NetworkInfoRequest) returns (NetworkInfo) { + rpc GetNetworkInfo (NetworkInfoRequest) returns (NetworkInfo) { option (google.api.http) = { get: "/v1/graph/info" }; @@ -163,7 +170,7 @@ service Lightning { rpc SetAlias(SetAliasRequest) returns (SetAliasResponse); - rpc DebugLevel(DebugLevelRequest) returns (DebugLevelResponse); + rpc DebugLevel (DebugLevelRequest) returns (DebugLevelResponse); } message Transaction { @@ -178,7 +185,7 @@ message Transaction { message GetTransactionsRequest { } message TransactionDetails { - repeated Transaction transactions = 1 [ json_name = "transactions" ]; + repeated Transaction transactions = 1 [json_name = "transactions"]; } message SendRequest { @@ -193,8 +200,8 @@ message SendRequest { string payment_request = 6; } message SendResponse { - bytes payment_preimage = 1 [ json_name = "payment_preimage" ]; - Route payment_route = 2 [ json_name = "payment_route" ]; + bytes payment_preimage = 1 [json_name = "payment_preimage"]; + Route payment_route = 2 [json_name = "payment_route"]; } message ChannelPoint { @@ -205,15 +212,15 @@ message ChannelPoint { } message LightningAddress { - string pubkey = 1 [ json_name = "pubkey" ]; - string host = 2 [ json_name = "host" ]; + string pubkey = 1 [json_name = "pubkey"]; + string host = 2 [json_name = "host"]; } message SendManyRequest { map AddrToAmount = 1; } message SendManyResponse { - string txid = 1 [ json_name = "txid" ]; + string txid = 1 [json_name = "txid"]; } message SendCoinsRequest { @@ -221,7 +228,7 @@ message SendCoinsRequest { int64 amount = 2; } message SendCoinsResponse { - string txid = 1 [ json_name = "txid" ]; + string txid = 1 [json_name = "txid"]; } message NewAddressRequest { @@ -232,9 +239,10 @@ message NewAddressRequest { } AddressType type = 1; } -message NewWitnessAddressRequest {} +message NewWitnessAddressRequest { +} message NewAddressResponse { - string address = 1 [ json_name = "address" ]; + string address = 1 [json_name = "address"]; } message ConnectPeerRequest { @@ -242,73 +250,82 @@ message ConnectPeerRequest { bool perm = 2; } message ConnectPeerResponse { - int32 peer_id = 1 [ json_name = "peer_id" ]; + int32 peer_id = 1 [json_name = "peer_id"]; +} + +message DisconnectPeerRequest { + string pub_key = 1 [json_name = "pub_key"]; +} +message DisconnectPeerResponse { } message HTLC { - bool incoming = 1 [ json_name = "incoming" ]; - int64 amount = 2 [ json_name = "amount" ]; - bytes hash_lock = 3 [ json_name = "hash_lock" ]; - uint32 expiration_height = 4 [ json_name = "expiration_height" ]; - uint32 revocation_delay = 5 [ json_name = "revocation_delay" ]; + bool incoming = 1 [json_name = "incoming"]; + int64 amount = 2 [json_name = "amount"]; + bytes hash_lock = 3 [json_name = "hash_lock"]; + uint32 expiration_height = 4 [json_name = "expiration_height"]; + uint32 revocation_delay = 5 [json_name = "revocation_delay"]; } message ActiveChannel { - bool active = 1 [ json_name = "active" ]; - string remote_pubkey = 2 [ json_name = "remote_pubkey" ]; - string channel_point = 3 [ json_name = "channel_point" ]; - uint64 chan_id = 4 [ json_name = "chan_id" ]; + bool active = 1 [json_name = "active"]; + string remote_pubkey = 2 [json_name = "remote_pubkey"]; + string channel_point = 3 [json_name = "channel_point"]; + uint64 chan_id = 4 [json_name = "chan_id"]; - int64 capacity = 5 [ json_name = "capacity" ]; - int64 local_balance = 6 [ json_name = "local_balance" ]; - int64 remote_balance = 7 [ json_name = "remote_balance" ]; + int64 capacity = 5 [json_name = "capacity"]; + int64 local_balance = 6 [json_name = "local_balance"]; + int64 remote_balance = 7 [json_name = "remote_balance"]; - int64 unsettled_balance = 8 [ json_name = "unsettled_balance" ]; - int64 total_satoshis_sent = 9 [ json_name = "total_satoshis_sent" ]; - int64 total_satoshis_received = 10 [ json_name = "total_satoshis_received" ]; - uint64 num_updates = 11 [ json_name = "num_updates" ]; + int64 unsettled_balance = 8 [json_name = "unsettled_balance"]; + int64 total_satoshis_sent = 9 [json_name = "total_satoshis_sent"]; + int64 total_satoshis_received = 10 [json_name = "total_satoshis_received"]; + uint64 num_updates = 11 [json_name = "num_updates"]; - repeated HTLC pending_htlcs = 12 [ json_name = "pending_htlcs" ]; + repeated HTLC pending_htlcs = 12 [json_name = "pending_htlcs"]; } -message ListChannelsRequest {} +message ListChannelsRequest { +} message ListChannelsResponse { - repeated ActiveChannel channels = 11 [ json_name = "channels" ]; + repeated ActiveChannel channels = 11 [json_name = "channels"]; } message Peer { - string pub_key = 1 [ json_name = "pub_key" ]; - int32 peer_id = 2 [ json_name = "peer_id" ]; - string address = 3 [ json_name = "address" ]; + string pub_key = 1 [json_name = "pub_key"]; + int32 peer_id = 2 [json_name = "peer_id"]; + string address = 3 [json_name = "address"]; - uint64 bytes_sent = 4 [ json_name = "bytes_sent" ]; - uint64 bytes_recv = 5 [ json_name = "bytes_recv" ]; + uint64 bytes_sent = 4 [json_name = "bytes_sent"]; + uint64 bytes_recv = 5 [json_name = "bytes_recv"]; - int64 sat_sent = 6 [ json_name = "sat_sent" ]; - int64 sat_recv = 7 [ json_name = "sat_recv" ]; + int64 sat_sent = 6 [json_name = "sat_sent"]; + int64 sat_recv = 7 [json_name = "sat_recv"]; - bool inbound = 8 [ json_name = "inbound" ]; + bool inbound = 8 [json_name = "inbound"]; - int64 ping_time = 9 [ json_name = "ping_time" ]; + int64 ping_time = 9 [json_name = "ping_time"]; } -message ListPeersRequest {} +message ListPeersRequest { +} message ListPeersResponse { - repeated Peer peers = 1 [ json_name = "peers" ]; + repeated Peer peers = 1 [json_name = "peers"]; } -message GetInfoRequest{} +message GetInfoRequest { +} message GetInfoResponse { - string identity_pubkey = 1 [ json_name = "identity_pubkey" ]; - string alias = 2 [ json_name = "alias" ]; + string identity_pubkey = 1 [json_name = "identity_pubkey"]; + string alias = 2 [json_name = "alias"]; - uint32 num_pending_channels = 3 [ json_name = "num_pending_channels" ]; - uint32 num_active_channels = 4 [ json_name = "num_active_channels" ]; + uint32 num_pending_channels = 3 [json_name = "num_pending_channels"]; + uint32 num_active_channels = 4 [json_name = "num_active_channels"]; - uint32 num_peers = 5 [ json_name = "num_peers" ]; + uint32 num_peers = 5 [json_name = "num_peers"]; - uint32 block_height = 6 [ json_name = "block_height" ]; - string block_hash = 8 [ json_name = "block_hash" ]; + uint32 block_height = 6 [json_name = "block_height"]; + string block_hash = 8 [json_name = "block_hash"]; bool synced_to_chain = 9 [ json_name = "synced_to_chain" ]; bool testnet = 10 [ json_name = "testnet" ]; @@ -324,13 +341,13 @@ message ConfirmationUpdate { } message ChannelOpenUpdate { - ChannelPoint channel_point = 1 [ json_name = "channel_point"] ; + ChannelPoint channel_point = 1 [json_name = "channel_point"]; } message ChannelCloseUpdate { - bytes closing_txid = 1 [ json_name = "closing_txid" ]; + bytes closing_txid = 1 [json_name = "closing_txid"]; - bool success = 2 [ json_name = "success" ]; + bool success = 2 [json_name = "success"]; } message CloseChannelRequest { @@ -340,32 +357,32 @@ message CloseChannelRequest { } message CloseStatusUpdate { oneof update { - PendingUpdate close_pending = 1 [ json_name = "close_pending" ]; - ConfirmationUpdate confirmation = 2 [ json_name = "confirmation" ]; - ChannelCloseUpdate chan_close = 3 [ json_name = "chan_close" ]; + PendingUpdate close_pending = 1 [json_name = "close_pending"]; + ConfirmationUpdate confirmation = 2 [json_name = "confirmation"]; + ChannelCloseUpdate chan_close = 3 [json_name = "chan_close"]; } } message PendingUpdate { - bytes txid = 1 [ json_name = "txid" ]; - uint32 output_index = 2 [ json_name = "output_index" ]; + bytes txid = 1 [json_name = "txid"]; + uint32 output_index = 2 [json_name = "output_index"]; } message OpenChannelRequest { - int32 target_peer_id = 1 [ json_name = "target_peer_id" ]; - bytes node_pubkey = 2 [ json_name = "node_pubkey" ]; - string node_pubkey_string = 3 [ json_name = "node_pubkey_string" ]; + int32 target_peer_id = 1 [json_name = "target_peer_id"]; + bytes node_pubkey = 2 [json_name = "node_pubkey"]; + string node_pubkey_string = 3 [json_name = "node_pubkey_string"]; - int64 local_funding_amount = 4 [ json_name = "local_funding_amount" ]; - int64 push_sat = 5 [ json_name = "push_sat" ]; + int64 local_funding_amount = 4 [json_name = "local_funding_amount"]; + int64 push_sat = 5 [json_name = "push_sat"]; - uint32 num_confs = 6 [ json_name = "num_confs" ]; + uint32 num_confs = 6 [json_name = "num_confs"]; } message OpenStatusUpdate { oneof update { - PendingUpdate chan_pending = 1 [ json_name = "chan_pending" ]; - ConfirmationUpdate confirmation = 2 [ json_name = "confirmation" ]; - ChannelOpenUpdate chan_open = 3 [ json_name = "chan_open" ]; + PendingUpdate chan_pending = 1 [json_name = "chan_pending"]; + ConfirmationUpdate confirmation = 2 [json_name = "confirmation"]; + ChannelOpenUpdate chan_open = 3 [json_name = "chan_open"]; } } @@ -416,13 +433,13 @@ message WalletBalanceRequest { bool witness_only = 1; } message WalletBalanceResponse { - double balance = 1 [ json_name = "balance" ]; + double balance = 1 [json_name = "balance"]; } message ChannelBalanceRequest { } message ChannelBalanceResponse { - int64 balance = 1 [ json_name = "balance" ]; + int64 balance = 1 [json_name = "balance"]; } message QueryRoutesRequest { @@ -434,29 +451,29 @@ message QueryRoutesResponse { } message Hop { - uint64 chan_id = 1 [ json_name = "chan_id" ]; - int64 chan_capacity = 2 [ json_name = "chan_capacity" ]; - int64 amt_to_forward = 3 [ json_name = "amt_to_forward" ]; - int64 fee = 4 [ json_name = "fee" ]; + uint64 chan_id = 1 [json_name = "chan_id"]; + int64 chan_capacity = 2 [json_name = "chan_capacity"]; + int64 amt_to_forward = 3 [json_name = "amt_to_forward"]; + int64 fee = 4 [json_name = "fee"]; } message Route { - uint32 total_time_lock = 1 [ json_name = "total_time_lock" ]; - int64 total_fees = 2 [ json_name = "total_fees" ]; - int64 total_amt = 3 [ json_name = "total_amt" ]; + uint32 total_time_lock = 1 [json_name = "total_time_lock"]; + int64 total_fees = 2 [json_name = "total_fees"]; + int64 total_amt = 3 [json_name = "total_amt"]; - repeated Hop hops = 4 [ json_name = "hops" ]; + repeated Hop hops = 4 [json_name = "hops"]; } -message NodeInfoRequest{ - string pub_key = 1; +message NodeInfoRequest { + string pub_key = 1; } message NodeInfo { - LightningNode node = 1 [ json_name = "node" ]; + LightningNode node = 1 [json_name = "node"]; - uint32 num_channels = 2 [ json_name = "num_channels" ]; - int64 total_capacity = 3 [ json_name = "total_capacity" ]; + uint32 num_channels = 2 [json_name = "num_channels"]; + int64 total_capacity = 3 [json_name = "total_capacity"]; } message LightningNode { @@ -472,52 +489,54 @@ message NodeAddress { } message RoutingPolicy { - uint32 time_lock_delta = 1 [ json_name = "time_lock_delta" ]; - int64 min_htlc = 2 [ json_name = "min_htlc" ]; - int64 fee_base_msat = 3 [ json_name = "fee_base_msat" ]; - int64 fee_rate_milli_msat = 4 [ json_name = "fee_rate_milli_msat" ]; + uint32 time_lock_delta = 1 [json_name = "time_lock_delta"]; + int64 min_htlc = 2 [json_name = "min_htlc"]; + int64 fee_base_msat = 3 [json_name = "fee_base_msat"]; + int64 fee_rate_milli_msat = 4 [json_name = "fee_rate_milli_msat"]; } message ChannelEdge { - uint64 channel_id = 1 [ json_name = "channel_id" ]; - string chan_point = 2 [ json_name = "chan_point" ]; + uint64 channel_id = 1 [json_name = "channel_id"]; + string chan_point = 2 [json_name = "chan_point"]; - uint32 last_update = 3 [ json_name = "last_update" ]; + uint32 last_update = 3 [json_name = "last_update"]; - string node1_pub = 4 [ json_name = "node1_pub" ]; - string node2_pub = 5 [ json_name = "node2_pub" ]; + string node1_pub = 4 [json_name = "node1_pub"]; + string node2_pub = 5 [json_name = "node2_pub"]; - int64 capacity = 6 [ json_name = "capacity" ]; + int64 capacity = 6 [json_name = "capacity"]; - RoutingPolicy node1_policy = 7 [ json_name = "node1_policy" ]; - RoutingPolicy node2_policy = 8 [ json_name = "node2_policy" ]; + RoutingPolicy node1_policy = 7 [json_name = "node1_policy"]; + RoutingPolicy node2_policy = 8 [json_name = "node2_policy"]; } -message ChannelGraphRequest{} +message ChannelGraphRequest { +} message ChannelGraph { - repeated LightningNode nodes = 1 [ json_name = "nodes" ]; - repeated ChannelEdge edges = 2 [ json_name = "edges" ]; + repeated LightningNode nodes = 1 [json_name = "nodes"]; + repeated ChannelEdge edges = 2 [json_name = "edges"]; } message ChanInfoRequest { uint64 chan_id = 1; } -message NetworkInfoRequest{} +message NetworkInfoRequest { +} message NetworkInfo { - uint32 graph_diameter = 1 [ json_name = "graph_diameter" ]; - double avg_out_degree = 2 [ json_name = "avg_out_degree" ]; - uint32 max_out_degree = 3 [ json_name = "max_out_degree" ]; + uint32 graph_diameter = 1 [json_name = "graph_diameter"]; + double avg_out_degree = 2 [json_name = "avg_out_degree"]; + uint32 max_out_degree = 3 [json_name = "max_out_degree"]; - uint32 num_nodes = 4 [ json_name = "num_nodes" ]; - uint32 num_channels = 5 [ json_name = "num_channels" ]; + uint32 num_nodes = 4 [json_name = "num_nodes"]; + uint32 num_channels = 5 [json_name = "num_channels"]; - int64 total_network_capacity = 6 [ json_name = "total_network_capacity" ]; + int64 total_network_capacity = 6 [json_name = "total_network_capacity"]; - double avg_channel_size = 7 [ json_name = "avg_channel_size" ]; - int64 min_channel_size = 8 [ json_name = "min_channel_size" ]; - int64 max_channel_size = 9 [ json_name = "max_channel_size" ]; + double avg_channel_size = 7 [json_name = "avg_channel_size"]; + int64 min_channel_size = 8 [json_name = "min_channel_size"]; + int64 max_channel_size = 9 [json_name = "max_channel_size"]; // TODO(roasbeef): fee rate info, expiry // * also additional RPC for tracking fee info once in @@ -557,59 +576,61 @@ message ClosedChannelUpdate { message SetAliasRequest { string new_alias = 1; } -message SetAliasResponse{} +message SetAliasResponse { +} message Invoice { - string memo = 1 [ json_name = "memo" ]; - bytes receipt = 2 [ json_name = "receipt" ]; + string memo = 1 [json_name = "memo"]; + bytes receipt = 2 [json_name = "receipt"]; - bytes r_preimage = 3 [ json_name = "r_preimage" ]; - bytes r_hash = 4 [ json_name = "r_hash" ]; + bytes r_preimage = 3 [json_name = "r_preimage"]; + bytes r_hash = 4 [json_name = "r_hash"]; - int64 value = 5 [ json_name = "value" ]; + int64 value = 5 [json_name = "value"]; - bool settled = 6 [ json_name = "settled" ]; + bool settled = 6 [json_name = "settled"]; - int64 creation_date = 7 [ json_name = "creation_date" ]; - int64 settle_date = 8 [ json_name = "settle_date" ]; + int64 creation_date = 7 [json_name = "creation_date"]; + int64 settle_date = 8 [json_name = "settle_date"]; - string payment_request = 9 [ json_name = "payment_request" ]; + string payment_request = 9 [json_name = "payment_request"]; } message AddInvoiceResponse { - bytes r_hash = 1 [ json_name = "r_hash" ]; + bytes r_hash = 1 [json_name = "r_hash"]; - string payment_request = 2 [ json_name = "payment_request" ]; + string payment_request = 2 [json_name = "payment_request"]; } message PaymentHash { - string r_hash_str = 1 [ json_name = "r_hash_str" ]; - bytes r_hash = 2 [ json_name = "r_hash" ]; + string r_hash_str = 1 [json_name = "r_hash_str"]; + bytes r_hash = 2 [json_name = "r_hash"]; } message ListInvoiceRequest { bool pending_only = 1; } message ListInvoiceResponse { - repeated Invoice invoices = 1 [ json_name = "invoices" ]; + repeated Invoice invoices = 1 [json_name = "invoices"]; } -message InvoiceSubscription {} +message InvoiceSubscription { +} message Payment { - string payment_hash = 1 [ json_name = "payment_hash" ]; - int64 value = 2 [ json_name = "value" ]; + string payment_hash = 1 [json_name = "payment_hash"]; + int64 value = 2 [json_name = "value"]; - int64 creation_date = 3 [ json_name = "creation_date" ]; + int64 creation_date = 3 [json_name = "creation_date"]; repeated string path = 4 [ json_name = "path" ]; - int64 fee = 5 [ json_name = "fee" ]; + int64 fee = 5 [json_name = "fee"]; } message ListPaymentsRequest { } message ListPaymentsResponse { - repeated Payment payments = 1 [ json_name= "payments" ]; + repeated Payment payments = 1 [json_name = "payments"]; } message DeleteAllPaymentsRequest { @@ -623,14 +644,14 @@ message DebugLevelRequest { string level_spec = 2; } message DebugLevelResponse { - string sub_systems = 1 [ json_name = "sub_systems" ]; + string sub_systems = 1 [json_name = "sub_systems"]; } message PayReqString { string pay_req = 1; } message PayReq { - string destination = 1 [ json_name = "destination" ]; - string payment_hash = 2 [ json_name = "payment_hash" ]; - int64 num_satoshis = 3 [ json_name = "num_satoshis" ]; + string destination = 1 [json_name = "destination"]; + string payment_hash = 2 [json_name = "payment_hash"]; + int64 num_satoshis = 3 [json_name = "num_satoshis"]; } diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 2d15dd18a..51039f4dd 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -514,6 +514,30 @@ ] } }, + "/v1/peers/{pub_key}": { + "delete": { + "operationId": "DisconnectPeer", + "responses": { + "200": { + "description": "", + "schema": { + "$ref": "#/definitions/lnrpcDisconnectPeerResponse" + } + } + }, + "parameters": [ + { + "name": "pub_key", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Lightning" + ] + } + }, "/v1/transactions": { "get": { "operationId": "GetTransactions", @@ -953,6 +977,17 @@ "lnrpcDeleteAllPaymentsResponse": { "type": "object" }, + "lnrpcDisconnectPeerRequest": { + "type": "object", + "properties": { + "pub_key": { + "type": "string" + } + } + }, + "lnrpcDisconnectPeerResponse": { + "type": "object" + }, "lnrpcGetInfoRequest": { "type": "object" },