google-cloud-security_center-v1p1beta1 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +12 -0
  3. data/AUTHENTICATION.md +169 -0
  4. data/LICENSE.md +203 -0
  5. data/README.md +71 -0
  6. data/lib/google-cloud-security_center-v1p1beta1.rb +21 -0
  7. data/lib/google/cloud/common_resources_pb.rb +15 -0
  8. data/lib/google/cloud/security_center/v1p1beta1.rb +35 -0
  9. data/lib/google/cloud/security_center/v1p1beta1/security_center.rb +50 -0
  10. data/lib/google/cloud/security_center/v1p1beta1/security_center/client.rb +2680 -0
  11. data/lib/google/cloud/security_center/v1p1beta1/security_center/credentials.rb +51 -0
  12. data/lib/google/cloud/security_center/v1p1beta1/security_center/operations.rb +564 -0
  13. data/lib/google/cloud/security_center/v1p1beta1/security_center/paths.rb +172 -0
  14. data/lib/google/cloud/security_center/v1p1beta1/version.rb +28 -0
  15. data/lib/google/cloud/securitycenter/v1p1beta1/asset_pb.rb +48 -0
  16. data/lib/google/cloud/securitycenter/v1p1beta1/finding_pb.rb +43 -0
  17. data/lib/google/cloud/securitycenter/v1p1beta1/notification_config_pb.rb +41 -0
  18. data/lib/google/cloud/securitycenter/v1p1beta1/notification_message_pb.rb +28 -0
  19. data/lib/google/cloud/securitycenter/v1p1beta1/organization_settings_pb.rb +37 -0
  20. data/lib/google/cloud/securitycenter/v1p1beta1/run_asset_discovery_response_pb.rb +32 -0
  21. data/lib/google/cloud/securitycenter/v1p1beta1/security_marks_pb.rb +25 -0
  22. data/lib/google/cloud/securitycenter/v1p1beta1/securitycenter_service_pb.rb +241 -0
  23. data/lib/google/cloud/securitycenter/v1p1beta1/securitycenter_service_services_pb.rb +108 -0
  24. data/lib/google/cloud/securitycenter/v1p1beta1/source_pb.rb +26 -0
  25. data/proto_docs/README.md +4 -0
  26. data/proto_docs/google/api/field_behavior.rb +59 -0
  27. data/proto_docs/google/api/resource.rb +247 -0
  28. data/proto_docs/google/cloud/securitycenter/v1p1beta1/asset.rb +127 -0
  29. data/proto_docs/google/cloud/securitycenter/v1p1beta1/finding.rb +112 -0
  30. data/proto_docs/google/cloud/securitycenter/v1p1beta1/notification_config.rb +97 -0
  31. data/proto_docs/google/cloud/securitycenter/v1p1beta1/notification_message.rb +39 -0
  32. data/proto_docs/google/cloud/securitycenter/v1p1beta1/organization_settings.rb +82 -0
  33. data/proto_docs/google/cloud/securitycenter/v1p1beta1/run_asset_discovery_response.rb +54 -0
  34. data/proto_docs/google/cloud/securitycenter/v1p1beta1/security_marks.rb +61 -0
  35. data/proto_docs/google/cloud/securitycenter/v1p1beta1/securitycenter_service.rb +1026 -0
  36. data/proto_docs/google/cloud/securitycenter/v1p1beta1/source.rb +56 -0
  37. data/proto_docs/google/iam/v1/iam_policy.rb +80 -0
  38. data/proto_docs/google/iam/v1/options.rb +40 -0
  39. data/proto_docs/google/iam/v1/policy.rb +248 -0
  40. data/proto_docs/google/longrunning/operations.rb +150 -0
  41. data/proto_docs/google/protobuf/any.rb +138 -0
  42. data/proto_docs/google/protobuf/duration.rb +98 -0
  43. data/proto_docs/google/protobuf/empty.rb +36 -0
  44. data/proto_docs/google/protobuf/field_mask.rb +229 -0
  45. data/proto_docs/google/protobuf/struct.rb +96 -0
  46. data/proto_docs/google/protobuf/timestamp.rb +120 -0
  47. data/proto_docs/google/rpc/status.rb +46 -0
  48. data/proto_docs/google/type/expr.rb +52 -0
  49. metadata +222 -0
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2020 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module SecurityCenter
23
+ module V1p1beta1
24
+ # Cloud Security Command Center's (Cloud SCC) representation of a Google Cloud
25
+ # Platform (GCP) resource.
26
+ #
27
+ # The Asset is a Cloud SCC resource that captures information about a single
28
+ # GCP resource. All modifications to an Asset are only within the context of
29
+ # Cloud SCC and don't affect the referenced GCP resource.
30
+ # @!attribute [rw] name
31
+ # @return [String]
32
+ # The relative resource name of this asset. See:
33
+ # https://cloud.google.com/apis/design/resource_names#relative_resource_name
34
+ # Example:
35
+ # "organizations/\\{organization_id}/assets/\\{asset_id}".
36
+ # @!attribute [rw] security_center_properties
37
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::Asset::SecurityCenterProperties]
38
+ # Cloud SCC managed properties. These properties are managed by
39
+ # Cloud SCC and cannot be modified by the user.
40
+ # @!attribute [rw] resource_properties
41
+ # @return [Google::Protobuf::Map{String => Google::Protobuf::Value}]
42
+ # Resource managed properties. These properties are managed and defined by
43
+ # the GCP resource and cannot be modified by the user.
44
+ # @!attribute [rw] security_marks
45
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::SecurityMarks]
46
+ # User specified security marks. These marks are entirely managed by the user
47
+ # and come from the SecurityMarks resource that belongs to the asset.
48
+ # @!attribute [rw] create_time
49
+ # @return [Google::Protobuf::Timestamp]
50
+ # The time at which the asset was created in Cloud SCC.
51
+ # @!attribute [rw] update_time
52
+ # @return [Google::Protobuf::Timestamp]
53
+ # The time at which the asset was last updated, added, or deleted in Cloud
54
+ # SCC.
55
+ # @!attribute [rw] iam_policy
56
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::Asset::IamPolicy]
57
+ # IAM Policy information associated with the GCP resource described by the
58
+ # Cloud SCC asset. This information is managed and defined by the GCP
59
+ # resource and cannot be modified by the user.
60
+ class Asset
61
+ include Google::Protobuf::MessageExts
62
+ extend Google::Protobuf::MessageExts::ClassMethods
63
+
64
+ # Cloud SCC managed properties. These properties are managed by Cloud SCC and
65
+ # cannot be modified by the user.
66
+ # @!attribute [rw] resource_name
67
+ # @return [String]
68
+ # The full resource name of the GCP resource this asset
69
+ # represents. This field is immutable after create time. See:
70
+ # https://cloud.google.com/apis/design/resource_names#full_resource_name
71
+ # @!attribute [rw] resource_type
72
+ # @return [String]
73
+ # The type of the GCP resource. Examples include: APPLICATION,
74
+ # PROJECT, and ORGANIZATION. This is a case insensitive field defined by
75
+ # Cloud SCC and/or the producer of the resource and is immutable
76
+ # after create time.
77
+ # @!attribute [rw] resource_parent
78
+ # @return [String]
79
+ # The full resource name of the immediate parent of the resource. See:
80
+ # https://cloud.google.com/apis/design/resource_names#full_resource_name
81
+ # @!attribute [rw] resource_project
82
+ # @return [String]
83
+ # The full resource name of the project the resource belongs to. See:
84
+ # https://cloud.google.com/apis/design/resource_names#full_resource_name
85
+ # @!attribute [rw] resource_owners
86
+ # @return [Array<String>]
87
+ # Owners of the Google Cloud resource.
88
+ # @!attribute [rw] resource_display_name
89
+ # @return [String]
90
+ # The user defined display name for this resource.
91
+ # @!attribute [rw] resource_parent_display_name
92
+ # @return [String]
93
+ # The user defined display name for the parent of this resource.
94
+ # @!attribute [rw] resource_project_display_name
95
+ # @return [String]
96
+ # The user defined display name for the project of this resource.
97
+ class SecurityCenterProperties
98
+ include Google::Protobuf::MessageExts
99
+ extend Google::Protobuf::MessageExts::ClassMethods
100
+ end
101
+
102
+ # IAM Policy information associated with the GCP resource described by the
103
+ # Cloud SCC asset. This information is managed and defined by the GCP
104
+ # resource and cannot be modified by the user.
105
+ # @!attribute [rw] policy_blob
106
+ # @return [String]
107
+ # The JSON representation of the Policy associated with the asset.
108
+ # See https://cloud.google.com/iam/reference/rest/v1/Policy for
109
+ # format details.
110
+ class IamPolicy
111
+ include Google::Protobuf::MessageExts
112
+ extend Google::Protobuf::MessageExts::ClassMethods
113
+ end
114
+
115
+ # @!attribute [rw] key
116
+ # @return [String]
117
+ # @!attribute [rw] value
118
+ # @return [Google::Protobuf::Value]
119
+ class ResourcePropertiesEntry
120
+ include Google::Protobuf::MessageExts
121
+ extend Google::Protobuf::MessageExts::ClassMethods
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2020 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module SecurityCenter
23
+ module V1p1beta1
24
+ # Cloud Security Command Center (Cloud SCC) finding.
25
+ #
26
+ # A finding is a record of assessment data (security, risk, health or privacy)
27
+ # ingested into Cloud SCC for presentation, notification, analysis,
28
+ # policy testing, and enforcement. For example, an XSS vulnerability in an
29
+ # App Engine application is a finding.
30
+ # @!attribute [rw] name
31
+ # @return [String]
32
+ # The relative resource name of this finding. See:
33
+ # https://cloud.google.com/apis/design/resource_names#relative_resource_name
34
+ # Example:
35
+ # "organizations/\\{organization_id}/sources/\\{source_id}/findings/\\{finding_id}"
36
+ # @!attribute [rw] parent
37
+ # @return [String]
38
+ # The relative resource name of the source the finding belongs to. See:
39
+ # https://cloud.google.com/apis/design/resource_names#relative_resource_name
40
+ # This field is immutable after creation time.
41
+ # For example:
42
+ # "organizations/\\{organization_id}/sources/\\{source_id}"
43
+ # @!attribute [rw] resource_name
44
+ # @return [String]
45
+ # For findings on Google Cloud Platform (GCP) resources, the full resource
46
+ # name of the GCP resource this finding is for. See:
47
+ # https://cloud.google.com/apis/design/resource_names#full_resource_name
48
+ # When the finding is for a non-GCP resource, the resourceName can be a
49
+ # customer or partner defined string.
50
+ # This field is immutable after creation time.
51
+ # @!attribute [rw] state
52
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::Finding::State]
53
+ # The state of the finding.
54
+ # @!attribute [rw] category
55
+ # @return [String]
56
+ # The additional taxonomy group within findings from a given source.
57
+ # This field is immutable after creation time.
58
+ # Example: "XSS_FLASH_INJECTION"
59
+ # @!attribute [rw] external_uri
60
+ # @return [String]
61
+ # The URI that, if available, points to a web page outside of Cloud SCC
62
+ # where additional information about the finding can be found. This field is
63
+ # guaranteed to be either empty or a well formed URL.
64
+ # @!attribute [rw] source_properties
65
+ # @return [Google::Protobuf::Map{String => Google::Protobuf::Value}]
66
+ # Source specific properties. These properties are managed by the source
67
+ # that writes the finding. The key names in the source_properties map must be
68
+ # between 1 and 255 characters, and must start with a letter and contain
69
+ # alphanumeric characters or underscores only.
70
+ # @!attribute [r] security_marks
71
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::SecurityMarks]
72
+ # Output only. User specified security marks. These marks are entirely
73
+ # managed by the user and come from the SecurityMarks resource that belongs
74
+ # to the finding.
75
+ # @!attribute [rw] event_time
76
+ # @return [Google::Protobuf::Timestamp]
77
+ # The time at which the event took place. For example, if the finding
78
+ # represents an open firewall it would capture the time the detector believes
79
+ # the firewall became open. The accuracy is determined by the detector.
80
+ # @!attribute [rw] create_time
81
+ # @return [Google::Protobuf::Timestamp]
82
+ # The time at which the finding was created in Cloud SCC.
83
+ class Finding
84
+ include Google::Protobuf::MessageExts
85
+ extend Google::Protobuf::MessageExts::ClassMethods
86
+
87
+ # @!attribute [rw] key
88
+ # @return [String]
89
+ # @!attribute [rw] value
90
+ # @return [Google::Protobuf::Value]
91
+ class SourcePropertiesEntry
92
+ include Google::Protobuf::MessageExts
93
+ extend Google::Protobuf::MessageExts::ClassMethods
94
+ end
95
+
96
+ # The state of the finding.
97
+ module State
98
+ # Unspecified state.
99
+ STATE_UNSPECIFIED = 0
100
+
101
+ # The finding requires attention and has not been addressed yet.
102
+ ACTIVE = 1
103
+
104
+ # The finding has been fixed, triaged as a non-issue or otherwise addressed
105
+ # and is no longer active.
106
+ INACTIVE = 2
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2020 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module SecurityCenter
23
+ module V1p1beta1
24
+ # Cloud Security Command Center (Cloud SCC) notification configs.
25
+ #
26
+ # A notification config is a Cloud SCC resource that contains the configuration
27
+ # to send notifications for create/update events of findings, assets and etc.
28
+ # @!attribute [rw] name
29
+ # @return [String]
30
+ # The relative resource name of this notification config. See:
31
+ # https://cloud.google.com/apis/design/resource_names#relative_resource_name
32
+ # Example:
33
+ # "organizations/\\{organization_id}/notificationConfigs/notify_public_bucket".
34
+ # @!attribute [rw] description
35
+ # @return [String]
36
+ # The description of the notification config (max of 1024 characters).
37
+ # @!attribute [rw] event_type
38
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig::EventType]
39
+ # The type of events the config is for, e.g. FINDING.
40
+ # @!attribute [rw] pubsub_topic
41
+ # @return [String]
42
+ # The PubSub topic to send notifications to. Its format is
43
+ # "projects/[project_id]/topics/[topic]".
44
+ # @!attribute [r] service_account
45
+ # @return [String]
46
+ # Output only. The service account that needs "pubsub.topics.publish"
47
+ # permission to publish to the PubSub topic.
48
+ # @!attribute [rw] streaming_config
49
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::NotificationConfig::StreamingConfig]
50
+ # The config for triggering streaming-based notifications.
51
+ class NotificationConfig
52
+ include Google::Protobuf::MessageExts
53
+ extend Google::Protobuf::MessageExts::ClassMethods
54
+
55
+ # The config for streaming-based notifications, which send each event as soon
56
+ # as it is detected.
57
+ # @!attribute [rw] filter
58
+ # @return [String]
59
+ # Expression that defines the filter to apply across create/update events
60
+ # of assets or findings as specified by the event type. The expression is a
61
+ # list of zero or more restrictions combined via logical operators `AND`
62
+ # and `OR`. Parentheses are supported, and `OR` has higher precedence than
63
+ # `AND`.
64
+ #
65
+ # Restrictions have the form `<field> <operator> <value>` and may have a
66
+ # `-` character in front of them to indicate negation. The fields map to
67
+ # those defined in the corresponding resource.
68
+ #
69
+ # The supported operators are:
70
+ #
71
+ # * `=` for all value types.
72
+ # * `>`, `<`, `>=`, `<=` for integer values.
73
+ # * `:`, meaning substring matching, for strings.
74
+ #
75
+ # The supported value types are:
76
+ #
77
+ # * string literals in quotes.
78
+ # * integer literals without quotes.
79
+ # * boolean literals `true` and `false` without quotes.
80
+ class StreamingConfig
81
+ include Google::Protobuf::MessageExts
82
+ extend Google::Protobuf::MessageExts::ClassMethods
83
+ end
84
+
85
+ # The type of events.
86
+ module EventType
87
+ # Unspecified event type.
88
+ EVENT_TYPE_UNSPECIFIED = 0
89
+
90
+ # Events for findings.
91
+ FINDING = 1
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2020 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module SecurityCenter
23
+ module V1p1beta1
24
+ # Cloud SCC's Notification
25
+ # @!attribute [rw] notification_config_name
26
+ # @return [String]
27
+ # Name of the notification config that generated current notification.
28
+ # @!attribute [rw] finding
29
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::Finding]
30
+ # If it's a Finding based notification config, this field will be
31
+ # populated.
32
+ class NotificationMessage
33
+ include Google::Protobuf::MessageExts
34
+ extend Google::Protobuf::MessageExts::ClassMethods
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2020 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module SecurityCenter
23
+ module V1p1beta1
24
+ # User specified settings that are attached to the Cloud Security Command
25
+ # Center (Cloud SCC) organization.
26
+ # @!attribute [rw] name
27
+ # @return [String]
28
+ # The relative resource name of the settings. See:
29
+ # https://cloud.google.com/apis/design/resource_names#relative_resource_name
30
+ # Example:
31
+ # "organizations/\\{organization_id}/organizationSettings".
32
+ # @!attribute [rw] enable_asset_discovery
33
+ # @return [Boolean]
34
+ # A flag that indicates if Asset Discovery should be enabled. If the flag is
35
+ # set to `true`, then discovery of assets will occur. If it is set to `false,
36
+ # all historical assets will remain, but discovery of future assets will not
37
+ # occur.
38
+ # @!attribute [rw] asset_discovery_config
39
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings::AssetDiscoveryConfig]
40
+ # The configuration used for Asset Discovery runs.
41
+ class OrganizationSettings
42
+ include Google::Protobuf::MessageExts
43
+ extend Google::Protobuf::MessageExts::ClassMethods
44
+
45
+ # The configuration used for Asset Discovery runs.
46
+ # @!attribute [rw] project_ids
47
+ # @return [Array<String>]
48
+ # The project ids to use for filtering asset discovery.
49
+ # @!attribute [rw] inclusion_mode
50
+ # @return [Google::Cloud::SecurityCenter::V1p1beta1::OrganizationSettings::AssetDiscoveryConfig::InclusionMode]
51
+ # The mode to use for filtering asset discovery.
52
+ class AssetDiscoveryConfig
53
+ include Google::Protobuf::MessageExts
54
+ extend Google::Protobuf::MessageExts::ClassMethods
55
+
56
+ # The mode of inclusion when running Asset Discovery.
57
+ # Asset discovery can be limited by explicitly identifying projects to be
58
+ # included or excluded. If INCLUDE_ONLY is set, then only those projects
59
+ # within the organization and their children are discovered during asset
60
+ # discovery. If EXCLUDE is set, then projects that don't match those
61
+ # projects are discovered during asset discovery. If neither are set, then
62
+ # all projects within the organization are discovered during asset
63
+ # discovery.
64
+ module InclusionMode
65
+ # Unspecified. Setting the mode with this value will disable
66
+ # inclusion/exclusion filtering for Asset Discovery.
67
+ INCLUSION_MODE_UNSPECIFIED = 0
68
+
69
+ # Asset Discovery will capture only the resources within the projects
70
+ # specified. All other resources will be ignored.
71
+ INCLUDE_ONLY = 1
72
+
73
+ # Asset Discovery will ignore all resources under the projects specified.
74
+ # All other resources will be retrieved.
75
+ EXCLUDE = 2
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end