tccli 3.0.966.1__py2.py3-none-any.whl → 3.0.968.1__py2.py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. tccli/__init__.py +1 -1
  2. tccli/examples/bi/v20220105/ModifyUserRole.md +53 -0
  3. tccli/examples/cdwpg/v20201230/CreateInstanceByApi.md +40 -0
  4. tccli/examples/cdwpg/v20201230/DestroyInstanceByApi.md +22 -0
  5. tccli/examples/csip/v20221121/DescribeDbAssets.md +258 -65
  6. tccli/examples/dbbrain/v20210527/DescribeIndexRecommendAggregationSlowLogs.md +34 -0
  7. tccli/examples/dbbrain/v20210527/DescribeIndexRecommendInfo.md +57 -0
  8. tccli/examples/dbbrain/v20210527/DescribeRedisProcessList.md +46 -0
  9. tccli/examples/ess/v20201111/CreateDocument.md +1 -1
  10. tccli/examples/ess/v20201111/DescribeFileUrls.md +30 -0
  11. tccli/examples/ess/v20201111/UploadFiles.md +46 -14
  12. tccli/examples/sms/v20210111/AddSmsSign.md +4 -4
  13. tccli/examples/sms/v20210111/AddSmsTemplate.md +1 -1
  14. tccli/examples/sms/v20210111/DescribeSmsSignList.md +2 -2
  15. tccli/examples/sms/v20210111/DescribeSmsTemplateList.md +2 -2
  16. tccli/examples/sms/v20210111/ModifySmsSign.md +4 -4
  17. tccli/examples/sms/v20210111/ModifySmsTemplate.md +1 -1
  18. tccli/examples/sms/v20210111/PullSmsReplyStatus.md +3 -3
  19. tccli/examples/sms/v20210111/PullSmsReplyStatusByPhoneNumber.md +2 -2
  20. tccli/examples/sms/v20210111/PullSmsSendStatus.md +1 -1
  21. tccli/examples/sms/v20210111/SendSms.md +3 -3
  22. tccli/examples/tat/v20201028/DescribeInvocationTasks.md +12 -6
  23. tccli/examples/teo/v20220901/VerifyOwnership.md +66 -0
  24. tccli/examples/trtc/v20190722/DescribeTRTCMarketQualityData.md +2 -2
  25. tccli/examples/trtc/v20190722/DescribeTRTCMarketScaleData.md +27 -45
  26. tccli/examples/trtc/v20190722/DescribeTRTCRealTimeQualityData.md +202 -6
  27. tccli/examples/trtc/v20190722/DescribeTRTCRealTimeScaleData.md +214 -7
  28. tccli/examples/tse/v20201207/CreateCloudNativeAPIGatewayCanaryRule.md +2 -2
  29. tccli/examples/tse/v20201207/DeleteCloudNativeAPIGatewayCanaryRule.md +3 -3
  30. tccli/examples/tse/v20201207/DescribeCloudNativeAPIGatewayCanaryRules.md +10 -10
  31. tccli/examples/tse/v20201207/DescribeNacosReplicas.md +13 -10
  32. tccli/examples/tse/v20201207/DescribeNacosServerInterfaces.md +4 -4
  33. tccli/examples/tse/v20201207/DescribeZookeeperReplicas.md +12 -10
  34. tccli/examples/tse/v20201207/ModifyCloudNativeAPIGatewayCanaryRule.md +5 -5
  35. tccli/examples/vpc/v20170312/DescribeVpcPeeringConnections.md +29 -1
  36. tccli/services/__init__.py +3 -0
  37. tccli/services/asr/v20190614/api.json +1 -1
  38. tccli/services/bi/bi_client.py +53 -0
  39. tccli/services/bi/v20220105/api.json +109 -0
  40. tccli/services/bi/v20220105/examples.json +14 -0
  41. tccli/services/cdwpg/__init__.py +4 -0
  42. tccli/services/cdwpg/cdwpg_client.py +247 -0
  43. tccli/services/cdwpg/v20201230/api.json +354 -0
  44. tccli/services/cdwpg/v20201230/examples.json +21 -0
  45. tccli/services/clb/v20180317/api.json +4 -4
  46. tccli/services/csip/v20221121/api.json +66 -26
  47. tccli/services/csip/v20221121/examples.json +4 -4
  48. tccli/services/dbbrain/dbbrain_client.py +171 -12
  49. tccli/services/dbbrain/v20210527/api.json +614 -0
  50. tccli/services/dbbrain/v20210527/examples.json +24 -0
  51. tccli/services/ess/v20201111/api.json +158 -28
  52. tccli/services/ess/v20201111/examples.json +20 -8
  53. tccli/services/essbasic/v20210526/api.json +140 -2
  54. tccli/services/lcic/v20220817/api.json +7 -7
  55. tccli/services/lighthouse/v20200324/api.json +3 -3
  56. tccli/services/mps/v20190612/api.json +2 -1
  57. tccli/services/ocr/v20181119/api.json +1 -1
  58. tccli/services/sms/v20210111/api.json +84 -81
  59. tccli/services/sms/v20210111/examples.json +11 -11
  60. tccli/services/tat/v20201028/api.json +9 -9
  61. tccli/services/tat/v20201028/examples.json +1 -1
  62. tccli/services/teo/teo_client.py +65 -12
  63. tccli/services/teo/v20220901/api.json +169 -1
  64. tccli/services/teo/v20220901/examples.json +20 -0
  65. tccli/services/tmt/v20180321/api.json +5 -2
  66. tccli/services/trtc/v20190722/api.json +1 -1
  67. tccli/services/trtc/v20190722/examples.json +8 -8
  68. tccli/services/tse/v20201207/api.json +7 -6
  69. tccli/services/tse/v20201207/examples.json +13 -13
  70. tccli/services/vod/v20180717/api.json +18 -5
  71. tccli/services/vpc/v20170312/api.json +206 -0
  72. tccli/services/vpc/v20170312/examples.json +1 -1
  73. tccli/services/waf/v20180125/api.json +22 -0
  74. {tccli-3.0.966.1.dist-info → tccli-3.0.968.1.dist-info}/METADATA +2 -2
  75. {tccli-3.0.966.1.dist-info → tccli-3.0.968.1.dist-info}/RECORD +78 -67
  76. {tccli-3.0.966.1.dist-info → tccli-3.0.968.1.dist-info}/WHEEL +0 -0
  77. {tccli-3.0.966.1.dist-info → tccli-3.0.968.1.dist-info}/entry_points.txt +0 -0
  78. {tccli-3.0.966.1.dist-info → tccli-3.0.968.1.dist-info}/license_files/LICENSE +0 -0
@@ -6,9 +6,9 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli trtc DescribeTRTCRealTimeQualityData --cli-unfold-argument \
9
- --StartTime 1665747036 \
10
- --EndTime 1665747284 \
11
- --SdkAppId 1400188366
9
+ --StartTime 1695711343 \
10
+ --EndTime 1695711643 \
11
+ --SdkAppId 1400xxxxxx
12
12
  ```
13
13
 
14
14
  Output:
@@ -27,14 +27,210 @@ Output:
27
27
  "Values": [
28
28
  {
29
29
  "RowValue": [
30
- 1692935050,
30
+ 1695711350,
31
31
  0,
32
32
  0
33
33
  ]
34
34
  },
35
35
  {
36
36
  "RowValue": [
37
- 1692935060,
37
+ 1695711360,
38
+ 0,
39
+ 0
40
+ ]
41
+ },
42
+ {
43
+ "RowValue": [
44
+ 1695711370,
45
+ 0,
46
+ 0
47
+ ]
48
+ },
49
+ {
50
+ "RowValue": [
51
+ 1695711380,
52
+ 0,
53
+ 0
54
+ ]
55
+ },
56
+ {
57
+ "RowValue": [
58
+ 1695711390,
59
+ 0,
60
+ 0
61
+ ]
62
+ },
63
+ {
64
+ "RowValue": [
65
+ 1695711400,
66
+ 0,
67
+ 0
68
+ ]
69
+ },
70
+ {
71
+ "RowValue": [
72
+ 1695711410,
73
+ 0,
74
+ 0
75
+ ]
76
+ },
77
+ {
78
+ "RowValue": [
79
+ 1695711420,
80
+ 0,
81
+ 0
82
+ ]
83
+ },
84
+ {
85
+ "RowValue": [
86
+ 1695711430,
87
+ 0,
88
+ 0
89
+ ]
90
+ },
91
+ {
92
+ "RowValue": [
93
+ 1695711440,
94
+ 0,
95
+ 0
96
+ ]
97
+ },
98
+ {
99
+ "RowValue": [
100
+ 1695711450,
101
+ 0,
102
+ 0
103
+ ]
104
+ },
105
+ {
106
+ "RowValue": [
107
+ 1695711460,
108
+ 0,
109
+ 0
110
+ ]
111
+ },
112
+ {
113
+ "RowValue": [
114
+ 1695711470,
115
+ 0,
116
+ 0
117
+ ]
118
+ },
119
+ {
120
+ "RowValue": [
121
+ 1695711480,
122
+ 0,
123
+ 0
124
+ ]
125
+ },
126
+ {
127
+ "RowValue": [
128
+ 1695711490,
129
+ 0,
130
+ 4
131
+ ]
132
+ },
133
+ {
134
+ "RowValue": [
135
+ 1695711500,
136
+ 0,
137
+ 0
138
+ ]
139
+ },
140
+ {
141
+ "RowValue": [
142
+ 1695711510,
143
+ 0,
144
+ 0
145
+ ]
146
+ },
147
+ {
148
+ "RowValue": [
149
+ 1695711520,
150
+ 0,
151
+ 0
152
+ ]
153
+ },
154
+ {
155
+ "RowValue": [
156
+ 1695711530,
157
+ 0,
158
+ 0
159
+ ]
160
+ },
161
+ {
162
+ "RowValue": [
163
+ 1695711540,
164
+ 0,
165
+ 0
166
+ ]
167
+ },
168
+ {
169
+ "RowValue": [
170
+ 1695711550,
171
+ 0,
172
+ 0
173
+ ]
174
+ },
175
+ {
176
+ "RowValue": [
177
+ 1695711560,
178
+ 0,
179
+ 0
180
+ ]
181
+ },
182
+ {
183
+ "RowValue": [
184
+ 1695711570,
185
+ 0,
186
+ 0
187
+ ]
188
+ },
189
+ {
190
+ "RowValue": [
191
+ 1695711580,
192
+ 0,
193
+ 0
194
+ ]
195
+ },
196
+ {
197
+ "RowValue": [
198
+ 1695711590,
199
+ 0,
200
+ 0
201
+ ]
202
+ },
203
+ {
204
+ "RowValue": [
205
+ 1695711600,
206
+ 0,
207
+ 0
208
+ ]
209
+ },
210
+ {
211
+ "RowValue": [
212
+ 1695711610,
213
+ 0,
214
+ 0
215
+ ]
216
+ },
217
+ {
218
+ "RowValue": [
219
+ 1695711620,
220
+ 0,
221
+ 0
222
+ ]
223
+ },
224
+ {
225
+ "RowValue": [
226
+ 1695711630,
227
+ 0,
228
+ 0
229
+ ]
230
+ },
231
+ {
232
+ "RowValue": [
233
+ 1695711640,
38
234
  0,
39
235
  0
40
236
  ]
@@ -44,7 +240,7 @@ Output:
44
240
  ],
45
241
  "Total": 1
46
242
  },
47
- "RequestId": "4mry45x5sslfsee3vfl5n99oz4u9u-8w"
243
+ "RequestId": "75fegcba14mffq3wl2zz578ml3e-i1a3"
48
244
  }
49
245
  }
50
246
  ```
@@ -6,9 +6,9 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli trtc DescribeTRTCRealTimeScaleData --cli-unfold-argument \
9
- --StartTime 1665747036 \
10
- --EndTime 1665747284 \
11
- --SdkAppId 1400188366
9
+ --StartTime 1695711343 \
10
+ --EndTime 1695711643 \
11
+ --SdkAppId 1400xxxxxx
12
12
  ```
13
13
 
14
14
  Output:
@@ -20,20 +20,227 @@ Output:
20
20
  "Series": [
21
21
  {
22
22
  "Columns": [
23
- "abc"
23
+ "time",
24
+ "userCount",
25
+ "roomCount"
24
26
  ],
25
27
  "Values": [
26
28
  {
27
29
  "RowValue": [
28
- 0
30
+ 1695711350,
31
+ 22,
32
+ 18
33
+ ]
34
+ },
35
+ {
36
+ "RowValue": [
37
+ 1695711360,
38
+ 22,
39
+ 18
40
+ ]
41
+ },
42
+ {
43
+ "RowValue": [
44
+ 1695711370,
45
+ 22,
46
+ 18
47
+ ]
48
+ },
49
+ {
50
+ "RowValue": [
51
+ 1695711380,
52
+ 22,
53
+ 18
54
+ ]
55
+ },
56
+ {
57
+ "RowValue": [
58
+ 1695711390,
59
+ 23,
60
+ 18
61
+ ]
62
+ },
63
+ {
64
+ "RowValue": [
65
+ 1695711400,
66
+ 21,
67
+ 18
68
+ ]
69
+ },
70
+ {
71
+ "RowValue": [
72
+ 1695711410,
73
+ 21,
74
+ 18
75
+ ]
76
+ },
77
+ {
78
+ "RowValue": [
79
+ 1695711420,
80
+ 21,
81
+ 18
82
+ ]
83
+ },
84
+ {
85
+ "RowValue": [
86
+ 1695711430,
87
+ 21,
88
+ 18
89
+ ]
90
+ },
91
+ {
92
+ "RowValue": [
93
+ 1695711440,
94
+ 21,
95
+ 18
96
+ ]
97
+ },
98
+ {
99
+ "RowValue": [
100
+ 1695711450,
101
+ 21,
102
+ 18
103
+ ]
104
+ },
105
+ {
106
+ "RowValue": [
107
+ 1695711460,
108
+ 21,
109
+ 18
110
+ ]
111
+ },
112
+ {
113
+ "RowValue": [
114
+ 1695711470,
115
+ 21,
116
+ 18
117
+ ]
118
+ },
119
+ {
120
+ "RowValue": [
121
+ 1695711480,
122
+ 21,
123
+ 18
124
+ ]
125
+ },
126
+ {
127
+ "RowValue": [
128
+ 1695711490,
129
+ 21,
130
+ 18
131
+ ]
132
+ },
133
+ {
134
+ "RowValue": [
135
+ 1695711500,
136
+ 21,
137
+ 18
138
+ ]
139
+ },
140
+ {
141
+ "RowValue": [
142
+ 1695711510,
143
+ 21,
144
+ 18
145
+ ]
146
+ },
147
+ {
148
+ "RowValue": [
149
+ 1695711520,
150
+ 21,
151
+ 18
152
+ ]
153
+ },
154
+ {
155
+ "RowValue": [
156
+ 1695711530,
157
+ 21,
158
+ 18
159
+ ]
160
+ },
161
+ {
162
+ "RowValue": [
163
+ 1695711540,
164
+ 21,
165
+ 18
166
+ ]
167
+ },
168
+ {
169
+ "RowValue": [
170
+ 1695711550,
171
+ 22,
172
+ 19
173
+ ]
174
+ },
175
+ {
176
+ "RowValue": [
177
+ 1695711560,
178
+ 22,
179
+ 19
180
+ ]
181
+ },
182
+ {
183
+ "RowValue": [
184
+ 1695711570,
185
+ 22,
186
+ 19
187
+ ]
188
+ },
189
+ {
190
+ "RowValue": [
191
+ 1695711580,
192
+ 22,
193
+ 19
194
+ ]
195
+ },
196
+ {
197
+ "RowValue": [
198
+ 1695711590,
199
+ 22,
200
+ 19
201
+ ]
202
+ },
203
+ {
204
+ "RowValue": [
205
+ 1695711600,
206
+ 22,
207
+ 19
208
+ ]
209
+ },
210
+ {
211
+ "RowValue": [
212
+ 1695711610,
213
+ 22,
214
+ 19
215
+ ]
216
+ },
217
+ {
218
+ "RowValue": [
219
+ 1695711620,
220
+ 22,
221
+ 19
222
+ ]
223
+ },
224
+ {
225
+ "RowValue": [
226
+ 1695711630,
227
+ 24,
228
+ 20
229
+ ]
230
+ },
231
+ {
232
+ "RowValue": [
233
+ 1695711640,
234
+ 22,
235
+ 19
29
236
  ]
30
237
  }
31
238
  ]
32
239
  }
33
240
  ],
34
- "Total": 0
241
+ "Total": 1
35
242
  },
36
- "RequestId": "abc"
243
+ "RequestId": "7gb56tcisiuy9el619p3jjkccop9qpv8"
37
244
  }
38
245
  }
39
246
  ```
@@ -6,8 +6,8 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli tse CreateCloudNativeAPIGatewayCanaryRule --cli-unfold-argument \
9
- --GatewayId gateway-xxx \
10
- --ServiceId xxxx \
9
+ --GatewayId gateway-18f786a \
10
+ --ServiceId 6abf620f-c6b9-4440-b90c-56c165225cfc \
11
11
  --CanaryRule.Priority 10 \
12
12
  --CanaryRule.Enabled True \
13
13
  --CanaryRule.ConditionList.0.Type query \
@@ -6,8 +6,8 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli tse DeleteCloudNativeAPIGatewayCanaryRule --cli-unfold-argument \
9
- --GatewayId gateway-xxx \
10
- --ServiceId xxxx \
9
+ --GatewayId gateway-18f786a \
10
+ --ServiceId 6abf620f-c6b9-4440-b90c-56c165225cfc \
11
11
  --Priority 10
12
12
  ```
13
13
 
@@ -15,7 +15,7 @@ Output:
15
15
  ```
16
16
  {
17
17
  "Response": {
18
- "RequestId": "abc"
18
+ "RequestId": "741e4e82-371d-48de-a843-867c69ff114d"
19
19
  }
20
20
  }
21
21
  ```
@@ -6,8 +6,8 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli tse DescribeCloudNativeAPIGatewayCanaryRules --cli-unfold-argument \
9
- --GatewayId abc \
10
- --ServiceId abc \
9
+ --GatewayId gateway-18f786a \
10
+ --ServiceId 6abf620f-c6b9-4440-b90c-56c165225cfc \
11
11
  --Limit 0 \
12
12
  --Offset 0
13
13
  ```
@@ -23,9 +23,9 @@ Output:
23
23
  "Enabled": true,
24
24
  "ConditionList": [
25
25
  {
26
- "Type": "abc",
26
+ "Type": "query",
27
27
  "Key": "abc",
28
- "Operator": "abc",
28
+ "Operator": "==",
29
29
  "Value": "abc",
30
30
  "Delimiter": "abc",
31
31
  "GlobalConfigId": "abc",
@@ -34,19 +34,19 @@ Output:
34
34
  ],
35
35
  "BalancedServiceList": [
36
36
  {
37
- "ServiceID": "abc",
38
- "ServiceName": "abc",
37
+ "ServiceID": "6abf620f-c6b9-4440-b90c-56c165225cfc",
38
+ "ServiceName": "svc1",
39
39
  "UpstreamName": "abc",
40
40
  "Percent": 0
41
41
  }
42
42
  ],
43
- "ServiceId": "abc",
44
- "ServiceName": "abc"
43
+ "ServiceId": "6abf620f-c6b9-4440-b90c-56c165225cfc",
44
+ "ServiceName": "svc1"
45
45
  }
46
46
  ],
47
- "TotalCount": 0
47
+ "TotalCount": 1
48
48
  },
49
- "RequestId": "abc"
49
+ "RequestId": "741e4e82-371d-48de-a843-867c69ff114d"
50
50
  }
51
51
  }
52
52
  ```
@@ -6,25 +6,28 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli tse DescribeNacosReplicas --cli-unfold-argument \
9
- --InstanceId xx
9
+ --InstanceId ins-123456 \
10
+ --Limit 1 \
11
+ --Offset 1
10
12
  ```
11
13
 
12
14
  Output:
13
15
  ```
14
16
  {
15
17
  "Response": {
16
- "TotalCount": 1,
17
- "RequestId": "xx",
18
18
  "Replicas": [
19
19
  {
20
- "Status": "xx",
21
- "Name": "xx",
22
- "Zone": "xx",
23
- "ZoneId": "xx",
24
- "Role": "xx",
25
- "SubnetId": "xx"
20
+ "Name": "abc",
21
+ "Role": "abc",
22
+ "Status": "abc",
23
+ "SubnetId": "abc",
24
+ "Zone": "abc",
25
+ "ZoneId": "abc",
26
+ "VpcId": "abc"
26
27
  }
27
- ]
28
+ ],
29
+ "TotalCount": 1,
30
+ "RequestId": "abc"
28
31
  }
29
32
  }
30
33
  ```
@@ -6,7 +6,7 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli tse DescribeNacosServerInterfaces --cli-unfold-argument \
9
- --InstanceId xx \
9
+ --InstanceId ins-123456 \
10
10
  --Limit 1 \
11
11
  --Offset 1
12
12
  ```
@@ -15,13 +15,13 @@ Output:
15
15
  ```
16
16
  {
17
17
  "Response": {
18
+ "TotalCount": 1,
18
19
  "Content": [
19
20
  {
20
- "Interface": "xx"
21
+ "Interface": "abc"
21
22
  }
22
23
  ],
23
- "TotalCount": 1,
24
- "RequestId": "xx"
24
+ "RequestId": "abc"
25
25
  }
26
26
  }
27
27
  ```
@@ -1,4 +1,4 @@
1
- **Example 1: 查询consul类型注册引擎实例副本信息**
1
+ **Example 1: 查询 Zookeeper 类型注册引擎实例副本信息**
2
2
 
3
3
 
4
4
 
@@ -13,18 +13,20 @@ Output:
13
13
  ```
14
14
  {
15
15
  "Response": {
16
- "TotalCount": 1,
17
- "RequestId": "xx",
18
16
  "Replicas": [
19
17
  {
20
- "Status": "xx",
21
- "Name": "xx",
22
- "Zone": "xx",
23
- "ZoneId": "xx",
24
- "Role": "xx",
25
- "SubnetId": "xx"
18
+ "Name": "abc",
19
+ "Role": "Leader",
20
+ "Status": "running",
21
+ "SubnetId": "subnet-xxx",
22
+ "Zone": "ap-guangzhou-1",
23
+ "ZoneId": "100000",
24
+ "AliasName": "abc",
25
+ "VpcId": "vpc-xxx"
26
26
  }
27
- ]
27
+ ],
28
+ "TotalCount": 1,
29
+ "RequestId": "abc"
28
30
  }
29
31
  }
30
32
  ```
@@ -6,8 +6,8 @@ Input:
6
6
 
7
7
  ```
8
8
  tccli tse ModifyCloudNativeAPIGatewayCanaryRule --cli-unfold-argument \
9
- --GatewayId gateway-xxx \
10
- --ServiceId xxx \
9
+ --GatewayId gateway-18f786a \
10
+ --ServiceId 6abf620f-c6b9-4440-b90c-56c165225cfc \
11
11
  --Priority 10 \
12
12
  --CanaryRule.Priority 20 \
13
13
  --CanaryRule.Enabled True \
@@ -15,8 +15,8 @@ tccli tse ModifyCloudNativeAPIGatewayCanaryRule --cli-unfold-argument \
15
15
  --CanaryRule.ConditionList.0.Key b1 \
16
16
  --CanaryRule.ConditionList.0.Operator == \
17
17
  --CanaryRule.ConditionList.0.Value abc \
18
- --CanaryRule.BalancedServiceList.0.ServiceID xxx \
19
- --CanaryRule.BalancedServiceList.0.ServiceName abc \
18
+ --CanaryRule.BalancedServiceList.0.ServiceID 6abf620f-c6b9-4440-b90c-56c165225cfc \
19
+ --CanaryRule.BalancedServiceList.0.ServiceName svc1 \
20
20
  --CanaryRule.BalancedServiceList.0.UpstreamName \
21
21
  --CanaryRule.BalancedServiceList.0.Percent 10
22
22
  ```
@@ -25,7 +25,7 @@ Output:
25
25
  ```
26
26
  {
27
27
  "Response": {
28
- "RequestId": "abc"
28
+ "RequestId": "741e4e82-371d-48de-a843-867c69ff114d"
29
29
  }
30
30
  }
31
31
  ```