Skip to content

Commit 21fc00a

Browse files
feat: Automated regeneration of DiscoveryEngine client (googleapis#12886)
Auto-created at 2025-01-29 13:11:31 +0000 using the toys pull request generator.
1 parent 3355031 commit 21fc00a

File tree

42 files changed

+2105
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2105
-7
lines changed

clients/discovery_engine/lib/google_api/discovery_engine/v1/metadata.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ defmodule GoogleApi.DiscoveryEngine.V1 do
2020
API client metadata for GoogleApi.DiscoveryEngine.V1.
2121
"""
2222

23-
@discovery_revision "20250121"
23+
@discovery_revision "20250125"
2424

2525
def discovery_revision(), do: @discovery_revision
2626
end

clients/discovery_engine/lib/google_api/discovery_engine/v1/model/google_cloud_discoveryengine_v1_data_store.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1DataSto
2929
* `defaultSchemaId` (*type:* `String.t`, *default:* `nil`) - Output only. The id of the default Schema asscociated to this data store.
3030
* `displayName` (*type:* `String.t`, *default:* `nil`) - Required. The data store display name. This field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
3131
* `documentProcessingConfig` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1DocumentProcessingConfig.t`, *default:* `nil`) - Configuration for Document understanding and enrichment.
32+
* `healthcareFhirConfig` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig.t`, *default:* `nil`) - Optional. Configuration for `HEALTHCARE_FHIR` vertical.
3233
* `industryVertical` (*type:* `String.t`, *default:* `nil`) - Immutable. The industry vertical that the data store registers.
3334
* `isInfobotFaqDataStore` (*type:* `boolean()`, *default:* `nil`) - Optional. If set, this DataStore is an Infobot FAQ DataStore.
3435
* `kmsKeyName` (*type:* `String.t`, *default:* `nil`) - Input only. The KMS key to be used to protect this DataStore at creation time. Must be set for requests that need to comply with CMEK Org Policy protections. If this field is set and processed successfully, the DataStore will be protected by the KMS key, as indicated in the cmek_config field.
@@ -57,6 +58,9 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1DataSto
5758
:documentProcessingConfig =>
5859
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1DocumentProcessingConfig.t()
5960
| nil,
61+
:healthcareFhirConfig =>
62+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig.t()
63+
| nil,
6064
:industryVertical => String.t() | nil,
6165
:isInfobotFaqDataStore => boolean() | nil,
6266
:kmsKeyName => String.t() | nil,
@@ -91,6 +95,10 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1DataSto
9195
as: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1DocumentProcessingConfig
9296
)
9397

98+
field(:healthcareFhirConfig,
99+
as: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig
100+
)
101+
94102
field(:industryVertical)
95103
field(:isInfobotFaqDataStore)
96104
field(:kmsKeyName)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Copyright 2019 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# NOTE: This file is auto generated by the elixir code generator program.
16+
# Do not edit this file manually.
17+
18+
defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig do
19+
@moduledoc """
20+
Config to data store for `HEALTHCARE_FHIR` vertical.
21+
22+
## Attributes
23+
24+
* `enableConfigurableSchema` (*type:* `boolean()`, *default:* `nil`) - Whether to enable configurable schema for `HEALTHCARE_FHIR` vertical. If set to `true`, the predefined healthcare fhir schema can be extended for more customized searching and filtering.
25+
* `enableStaticIndexingForBatchIngestion` (*type:* `boolean()`, *default:* `nil`) - Whether to enable static indexing for `HEALTHCARE_FHIR` batch ingestion. If set to `true`, the batch ingestion will be processed in a static indexing mode which is slower but more capable of handling larger volume.
26+
"""
27+
28+
use GoogleApi.Gax.ModelBase
29+
30+
@type t :: %__MODULE__{
31+
:enableConfigurableSchema => boolean() | nil,
32+
:enableStaticIndexingForBatchIngestion => boolean() | nil
33+
}
34+
35+
field(:enableConfigurableSchema)
36+
field(:enableStaticIndexingForBatchIngestion)
37+
end
38+
39+
defimpl Poison.Decoder,
40+
for: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig do
41+
def decode(value, options) do
42+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig.decode(
43+
value,
44+
options
45+
)
46+
end
47+
end
48+
49+
defimpl Poison.Encoder,
50+
for: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1HealthcareFhirConfig do
51+
def encode(value, options) do
52+
GoogleApi.Gax.ModelBase.encode(value, options)
53+
end
54+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Copyright 2019 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# NOTE: This file is auto generated by the elixir code generator program.
16+
# Do not edit this file manually.
17+
18+
defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1IdentityMappingEntryOperationMetadata do
19+
@moduledoc """
20+
IdentityMappingEntry LongRunningOperation metadata for [IdentityMappingStoreService.ImportIdentityMappings] and [IdentityMappingStoreService.PurgeIdentityMappings]
21+
22+
## Attributes
23+
24+
* `failureCount` (*type:* `String.t`, *default:* `nil`) - The number of IdentityMappingEntries that failed to be processed.
25+
* `successCount` (*type:* `String.t`, *default:* `nil`) - The number of IdentityMappingEntries that were successfully processed.
26+
* `totalCount` (*type:* `String.t`, *default:* `nil`) - The total number of IdentityMappingEntries that were processed.
27+
"""
28+
29+
use GoogleApi.Gax.ModelBase
30+
31+
@type t :: %__MODULE__{
32+
:failureCount => String.t() | nil,
33+
:successCount => String.t() | nil,
34+
:totalCount => String.t() | nil
35+
}
36+
37+
field(:failureCount)
38+
field(:successCount)
39+
field(:totalCount)
40+
end
41+
42+
defimpl Poison.Decoder,
43+
for:
44+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1IdentityMappingEntryOperationMetadata do
45+
def decode(value, options) do
46+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1IdentityMappingEntryOperationMetadata.decode(
47+
value,
48+
options
49+
)
50+
end
51+
end
52+
53+
defimpl Poison.Encoder,
54+
for:
55+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1IdentityMappingEntryOperationMetadata do
56+
def encode(value, options) do
57+
GoogleApi.Gax.ModelBase.encode(value, options)
58+
end
59+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Copyright 2019 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# NOTE: This file is auto generated by the elixir code generator program.
16+
# Do not edit this file manually.
17+
18+
defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1ImportIdentityMappingsResponse do
19+
@moduledoc """
20+
Response message for IdentityMappingStoreService.ImportIdentityMappings
21+
22+
## Attributes
23+
24+
* `errorSamples` (*type:* `list(GoogleApi.DiscoveryEngine.V1.Model.GoogleRpcStatus.t)`, *default:* `nil`) - A sample of errors encountered while processing the request.
25+
"""
26+
27+
use GoogleApi.Gax.ModelBase
28+
29+
@type t :: %__MODULE__{
30+
:errorSamples => list(GoogleApi.DiscoveryEngine.V1.Model.GoogleRpcStatus.t()) | nil
31+
}
32+
33+
field(:errorSamples, as: GoogleApi.DiscoveryEngine.V1.Model.GoogleRpcStatus, type: :list)
34+
end
35+
36+
defimpl Poison.Decoder,
37+
for:
38+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1ImportIdentityMappingsResponse do
39+
def decode(value, options) do
40+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1ImportIdentityMappingsResponse.decode(
41+
value,
42+
options
43+
)
44+
end
45+
end
46+
47+
defimpl Poison.Encoder,
48+
for:
49+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1ImportIdentityMappingsResponse do
50+
def encode(value, options) do
51+
GoogleApi.Gax.ModelBase.encode(value, options)
52+
end
53+
end

clients/discovery_engine/lib/google_api/discovery_engine/v1/model/google_cloud_discoveryengine_v1_search_request.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1SearchR
4343
* `session` (*type:* `String.t`, *default:* `nil`) - The session resource name. Optional. Session allows users to do multi-turn /search API calls or coordination between /search API calls and /answer API calls. Example #1 (multi-turn /search API calls): 1. Call /search API with the auto-session mode (see below). 2. Call /search API with the session ID generated in the first call. Here, the previous search query gets considered in query standing. I.e., if the first query is "How did Alphabet do in 2022?" and the current query is "How about 2023?", the current query will be interpreted as "How did Alphabet do in 2023?". Example #2 (coordination between /search API calls and /answer API calls): 1. Call /search API with the auto-session mode (see below). 2. Call /answer API with the session ID generated in the first call. Here, the answer generation happens in the context of the search results from the first search call. Auto-session mode: when `projects/.../sessions/-` is used, a new session gets automatically created. Otherwise, users can use the create-session API to create a session manually. Multi-turn Search feature is currently at private GA stage. Please use v1alpha or v1beta version instead before we launch this feature to public GA. Or ask for allowlisting through Google Support team.
4444
* `sessionSpec` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1SearchRequestSessionSpec.t`, *default:* `nil`) - Session specification. Can be used only when `session` is set.
4545
* `spellCorrectionSpec` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1SearchRequestSpellCorrectionSpec.t`, *default:* `nil`) - The spell correction specification that specifies the mode under which spell correction takes effect.
46-
* `userInfo` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1UserInfo.t`, *default:* `nil`) - Information about the end user. Highly recommended for analytics. UserInfo.user_agent is used to deduce `device_type` for analytics.
46+
* `userInfo` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1UserInfo.t`, *default:* `nil`) - Information about the end user. Highly recommended for analytics and personalization. UserInfo.user_agent is used to deduce `device_type` for analytics.
4747
* `userLabels` (*type:* `map()`, *default:* `nil`) - The user labels applied to a resource must meet the following requirements: * Each resource can have multiple labels, up to a maximum of 64. * Each label must be a key-value pair. * Keys have a minimum length of 1 character and a maximum length of 63 characters and cannot be empty. Values can be empty and have a maximum length of 63 characters. * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. All characters must use UTF-8 encoding, and international characters are allowed. * The key portion of a label must be unique. However, you can use the same key with multiple resources. * Keys must start with a lowercase letter or international character. See [Google Cloud Document](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements) for more details.
4848
* `userPseudoId` (*type:* `String.t`, *default:* `nil`) - A unique identifier for tracking visitors. For example, this could be implemented with an HTTP cookie, which should be able to uniquely identify a visitor on a single device. This unique identifier should not change if the visitor logs in or out of the website. This field should NOT have a fixed value such as `unknown_visitor`. This should be the same identifier as UserEvent.user_pseudo_id and CompleteQueryRequest.user_pseudo_id The field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an `INVALID_ARGUMENT` error is returned.
4949
"""

clients/discovery_engine/lib/google_api/discovery_engine/v1/model/google_cloud_discoveryengine_v1alpha_data_store.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaDa
3030
* `defaultSchemaId` (*type:* `String.t`, *default:* `nil`) - Output only. The id of the default Schema asscociated to this data store.
3131
* `displayName` (*type:* `String.t`, *default:* `nil`) - Required. The data store display name. This field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
3232
* `documentProcessingConfig` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaDocumentProcessingConfig.t`, *default:* `nil`) - Configuration for Document understanding and enrichment.
33+
* `healthcareFhirConfig` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig.t`, *default:* `nil`) - Optional. Configuration for `HEALTHCARE_FHIR` vertical.
3334
* `idpConfig` (*type:* `GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdpConfig.t`, *default:* `nil`) - Output only. Data store level identity provider config.
3435
* `industryVertical` (*type:* `String.t`, *default:* `nil`) - Immutable. The industry vertical that the data store registers.
3536
* `isInfobotFaqDataStore` (*type:* `boolean()`, *default:* `nil`) - Optional. If set, this DataStore is an Infobot FAQ DataStore.
@@ -63,6 +64,9 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaDa
6364
:documentProcessingConfig =>
6465
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaDocumentProcessingConfig.t()
6566
| nil,
67+
:healthcareFhirConfig =>
68+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig.t()
69+
| nil,
6670
:idpConfig =>
6771
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdpConfig.t()
6872
| nil,
@@ -113,6 +117,10 @@ defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaDa
113117
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaDocumentProcessingConfig
114118
)
115119

120+
field(:healthcareFhirConfig,
121+
as: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig
122+
)
123+
116124
field(:idpConfig,
117125
as: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdpConfig
118126
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Copyright 2019 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# NOTE: This file is auto generated by the elixir code generator program.
16+
# Do not edit this file manually.
17+
18+
defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig do
19+
@moduledoc """
20+
Config to data store for `HEALTHCARE_FHIR` vertical.
21+
22+
## Attributes
23+
24+
* `enableConfigurableSchema` (*type:* `boolean()`, *default:* `nil`) - Whether to enable configurable schema for `HEALTHCARE_FHIR` vertical. If set to `true`, the predefined healthcare fhir schema can be extended for more customized searching and filtering.
25+
* `enableStaticIndexingForBatchIngestion` (*type:* `boolean()`, *default:* `nil`) - Whether to enable static indexing for `HEALTHCARE_FHIR` batch ingestion. If set to `true`, the batch ingestion will be processed in a static indexing mode which is slower but more capable of handling larger volume.
26+
"""
27+
28+
use GoogleApi.Gax.ModelBase
29+
30+
@type t :: %__MODULE__{
31+
:enableConfigurableSchema => boolean() | nil,
32+
:enableStaticIndexingForBatchIngestion => boolean() | nil
33+
}
34+
35+
field(:enableConfigurableSchema)
36+
field(:enableStaticIndexingForBatchIngestion)
37+
end
38+
39+
defimpl Poison.Decoder,
40+
for: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig do
41+
def decode(value, options) do
42+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig.decode(
43+
value,
44+
options
45+
)
46+
end
47+
end
48+
49+
defimpl Poison.Encoder,
50+
for: GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaHealthcareFhirConfig do
51+
def encode(value, options) do
52+
GoogleApi.Gax.ModelBase.encode(value, options)
53+
end
54+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Copyright 2019 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# NOTE: This file is auto generated by the elixir code generator program.
16+
# Do not edit this file manually.
17+
18+
defmodule GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdentityMappingEntryOperationMetadata do
19+
@moduledoc """
20+
IdentityMappingEntry LongRunningOperation metadata for [IdentityMappingStoreService.ImportIdentityMappings] and [IdentityMappingStoreService.PurgeIdentityMappings]
21+
22+
## Attributes
23+
24+
* `failureCount` (*type:* `String.t`, *default:* `nil`) - The number of IdentityMappingEntries that failed to be processed.
25+
* `successCount` (*type:* `String.t`, *default:* `nil`) - The number of IdentityMappingEntries that were successfully processed.
26+
* `totalCount` (*type:* `String.t`, *default:* `nil`) - The total number of IdentityMappingEntries that were processed.
27+
"""
28+
29+
use GoogleApi.Gax.ModelBase
30+
31+
@type t :: %__MODULE__{
32+
:failureCount => String.t() | nil,
33+
:successCount => String.t() | nil,
34+
:totalCount => String.t() | nil
35+
}
36+
37+
field(:failureCount)
38+
field(:successCount)
39+
field(:totalCount)
40+
end
41+
42+
defimpl Poison.Decoder,
43+
for:
44+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdentityMappingEntryOperationMetadata do
45+
def decode(value, options) do
46+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdentityMappingEntryOperationMetadata.decode(
47+
value,
48+
options
49+
)
50+
end
51+
end
52+
53+
defimpl Poison.Encoder,
54+
for:
55+
GoogleApi.DiscoveryEngine.V1.Model.GoogleCloudDiscoveryengineV1alphaIdentityMappingEntryOperationMetadata do
56+
def encode(value, options) do
57+
GoogleApi.Gax.ModelBase.encode(value, options)
58+
end
59+
end

0 commit comments

Comments
 (0)