1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package logging
22
23 import (
24 reflect "reflect"
25 sync "sync"
26
27 _ "google.golang.org/genproto/googleapis/api/annotations"
28 v1 "google.golang.org/genproto/googleapis/cloud/recommender/v1"
29 protoreflect "google.golang.org/protobuf/reflect/protoreflect"
30 protoimpl "google.golang.org/protobuf/runtime/protoimpl"
31 )
32
33 const (
34
35 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
36
37 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
38 )
39
40
41 type ActionLog struct {
42 state protoimpl.MessageState
43 sizeCache protoimpl.SizeCache
44 unknownFields protoimpl.UnknownFields
45
46
47 Actor string `protobuf:"bytes,1,opt,name=actor,proto3" json:"actor,omitempty"`
48
49 State v1.RecommendationStateInfo_State `protobuf:"varint,2,opt,name=state,proto3,enum=google.cloud.recommender.v1.RecommendationStateInfo_State" json:"state,omitempty"`
50
51 StateMetadata map[string]string `protobuf:"bytes,3,rep,name=state_metadata,json=stateMetadata,proto3" json:"state_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
52
53
54 RecommendationName string `protobuf:"bytes,4,opt,name=recommendation_name,json=recommendationName,proto3" json:"recommendation_name,omitempty"`
55 }
56
57 func (x *ActionLog) Reset() {
58 *x = ActionLog{}
59 if protoimpl.UnsafeEnabled {
60 mi := &file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes[0]
61 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
62 ms.StoreMessageInfo(mi)
63 }
64 }
65
66 func (x *ActionLog) String() string {
67 return protoimpl.X.MessageStringOf(x)
68 }
69
70 func (*ActionLog) ProtoMessage() {}
71
72 func (x *ActionLog) ProtoReflect() protoreflect.Message {
73 mi := &file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes[0]
74 if protoimpl.UnsafeEnabled && x != nil {
75 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
76 if ms.LoadMessageInfo() == nil {
77 ms.StoreMessageInfo(mi)
78 }
79 return ms
80 }
81 return mi.MessageOf(x)
82 }
83
84
85 func (*ActionLog) Descriptor() ([]byte, []int) {
86 return file_google_cloud_recommender_logging_v1_action_log_proto_rawDescGZIP(), []int{0}
87 }
88
89 func (x *ActionLog) GetActor() string {
90 if x != nil {
91 return x.Actor
92 }
93 return ""
94 }
95
96 func (x *ActionLog) GetState() v1.RecommendationStateInfo_State {
97 if x != nil {
98 return x.State
99 }
100 return v1.RecommendationStateInfo_STATE_UNSPECIFIED
101 }
102
103 func (x *ActionLog) GetStateMetadata() map[string]string {
104 if x != nil {
105 return x.StateMetadata
106 }
107 return nil
108 }
109
110 func (x *ActionLog) GetRecommendationName() string {
111 if x != nil {
112 return x.RecommendationName
113 }
114 return ""
115 }
116
117
118 type InsightActionLog struct {
119 state protoimpl.MessageState
120 sizeCache protoimpl.SizeCache
121 unknownFields protoimpl.UnknownFields
122
123
124 Actor string `protobuf:"bytes,1,opt,name=actor,proto3" json:"actor,omitempty"`
125
126 State v1.InsightStateInfo_State `protobuf:"varint,2,opt,name=state,proto3,enum=google.cloud.recommender.v1.InsightStateInfo_State" json:"state,omitempty"`
127
128 StateMetadata map[string]string `protobuf:"bytes,3,rep,name=state_metadata,json=stateMetadata,proto3" json:"state_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
129
130
131 Insight string `protobuf:"bytes,4,opt,name=insight,proto3" json:"insight,omitempty"`
132 }
133
134 func (x *InsightActionLog) Reset() {
135 *x = InsightActionLog{}
136 if protoimpl.UnsafeEnabled {
137 mi := &file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes[1]
138 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
139 ms.StoreMessageInfo(mi)
140 }
141 }
142
143 func (x *InsightActionLog) String() string {
144 return protoimpl.X.MessageStringOf(x)
145 }
146
147 func (*InsightActionLog) ProtoMessage() {}
148
149 func (x *InsightActionLog) ProtoReflect() protoreflect.Message {
150 mi := &file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes[1]
151 if protoimpl.UnsafeEnabled && x != nil {
152 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
153 if ms.LoadMessageInfo() == nil {
154 ms.StoreMessageInfo(mi)
155 }
156 return ms
157 }
158 return mi.MessageOf(x)
159 }
160
161
162 func (*InsightActionLog) Descriptor() ([]byte, []int) {
163 return file_google_cloud_recommender_logging_v1_action_log_proto_rawDescGZIP(), []int{1}
164 }
165
166 func (x *InsightActionLog) GetActor() string {
167 if x != nil {
168 return x.Actor
169 }
170 return ""
171 }
172
173 func (x *InsightActionLog) GetState() v1.InsightStateInfo_State {
174 if x != nil {
175 return x.State
176 }
177 return v1.InsightStateInfo_STATE_UNSPECIFIED
178 }
179
180 func (x *InsightActionLog) GetStateMetadata() map[string]string {
181 if x != nil {
182 return x.StateMetadata
183 }
184 return nil
185 }
186
187 func (x *InsightActionLog) GetInsight() string {
188 if x != nil {
189 return x.Insight
190 }
191 return ""
192 }
193
194 var File_google_cloud_recommender_logging_v1_action_log_proto protoreflect.FileDescriptor
195
196 var file_google_cloud_recommender_logging_v1_action_log_proto_rawDesc = []byte{
197 0x0a, 0x34, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72,
198 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2f, 0x6c, 0x6f, 0x67, 0x67, 0x69,
199 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67,
200 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
201 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72,
202 0x2e, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f,
203 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65,
204 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f,
205 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
206 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
207 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65,
208 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f,
209 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64,
210 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f,
211 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70,
212 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x02, 0x0a, 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
213 0x6f, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
214 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74,
215 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
216 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
217 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61,
218 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74,
219 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x73, 0x74,
220 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03,
221 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
222 0x64, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x6c, 0x6f,
223 0x67, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
224 0x6f, 0x67, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
225 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61,
226 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x13, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
227 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
228 0x09, 0x52, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f,
229 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x40, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65,
230 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
231 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
232 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
233 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfb, 0x02, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x69,
234 0x67, 0x68, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x12, 0x19, 0x0a, 0x05,
235 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02,
236 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
237 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
238 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65,
239 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74,
240 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02,
241 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65,
242 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
243 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72,
244 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x6c, 0x6f, 0x67, 0x67, 0x69,
245 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x41, 0x63, 0x74,
246 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61,
247 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0d,
248 0x73, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a,
249 0x07, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a,
250 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x24, 0x0a, 0x22, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
251 0x64, 0x65, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
252 0x6f, 0x6d, 0x2f, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x69, 0x6e, 0x73, 0x69,
253 0x67, 0x68, 0x74, 0x1a, 0x40, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61,
254 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
255 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
256 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
257 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x87, 0x01, 0x0a, 0x27, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f,
258 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x6d,
259 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76,
260 0x31, 0x42, 0x0e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x50, 0x72, 0x6f, 0x74,
261 0x6f, 0x50, 0x01, 0x5a, 0x4a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61,
262 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
263 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64,
264 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2f, 0x6c, 0x6f, 0x67,
265 0x67, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x62,
266 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
267 }
268
269 var (
270 file_google_cloud_recommender_logging_v1_action_log_proto_rawDescOnce sync.Once
271 file_google_cloud_recommender_logging_v1_action_log_proto_rawDescData = file_google_cloud_recommender_logging_v1_action_log_proto_rawDesc
272 )
273
274 func file_google_cloud_recommender_logging_v1_action_log_proto_rawDescGZIP() []byte {
275 file_google_cloud_recommender_logging_v1_action_log_proto_rawDescOnce.Do(func() {
276 file_google_cloud_recommender_logging_v1_action_log_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_recommender_logging_v1_action_log_proto_rawDescData)
277 })
278 return file_google_cloud_recommender_logging_v1_action_log_proto_rawDescData
279 }
280
281 var file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
282 var file_google_cloud_recommender_logging_v1_action_log_proto_goTypes = []interface{}{
283 (*ActionLog)(nil),
284 (*InsightActionLog)(nil),
285 nil,
286 nil,
287 (v1.RecommendationStateInfo_State)(0),
288 (v1.InsightStateInfo_State)(0),
289 }
290 var file_google_cloud_recommender_logging_v1_action_log_proto_depIdxs = []int32{
291 4,
292 2,
293 5,
294 3,
295 4,
296 4,
297 4,
298 4,
299 0,
300 }
301
302 func init() { file_google_cloud_recommender_logging_v1_action_log_proto_init() }
303 func file_google_cloud_recommender_logging_v1_action_log_proto_init() {
304 if File_google_cloud_recommender_logging_v1_action_log_proto != nil {
305 return
306 }
307 if !protoimpl.UnsafeEnabled {
308 file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
309 switch v := v.(*ActionLog); i {
310 case 0:
311 return &v.state
312 case 1:
313 return &v.sizeCache
314 case 2:
315 return &v.unknownFields
316 default:
317 return nil
318 }
319 }
320 file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
321 switch v := v.(*InsightActionLog); i {
322 case 0:
323 return &v.state
324 case 1:
325 return &v.sizeCache
326 case 2:
327 return &v.unknownFields
328 default:
329 return nil
330 }
331 }
332 }
333 type x struct{}
334 out := protoimpl.TypeBuilder{
335 File: protoimpl.DescBuilder{
336 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
337 RawDescriptor: file_google_cloud_recommender_logging_v1_action_log_proto_rawDesc,
338 NumEnums: 0,
339 NumMessages: 4,
340 NumExtensions: 0,
341 NumServices: 0,
342 },
343 GoTypes: file_google_cloud_recommender_logging_v1_action_log_proto_goTypes,
344 DependencyIndexes: file_google_cloud_recommender_logging_v1_action_log_proto_depIdxs,
345 MessageInfos: file_google_cloud_recommender_logging_v1_action_log_proto_msgTypes,
346 }.Build()
347 File_google_cloud_recommender_logging_v1_action_log_proto = out.File
348 file_google_cloud_recommender_logging_v1_action_log_proto_rawDesc = nil
349 file_google_cloud_recommender_logging_v1_action_log_proto_goTypes = nil
350 file_google_cloud_recommender_logging_v1_action_log_proto_depIdxs = nil
351 }
352
View as plain text