From 43b39d5cb5c3587e13d0d247f9cc62f08a1675f4 Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Wed, 30 Mar 2022 10:05:33 +0530 Subject: [PATCH 001/102] DEV-98889 fix --- cloudformation.yaml | 4 ++-- code/version.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 code/version.go diff --git a/cloudformation.yaml b/cloudformation.yaml index 6fa90ba..8ba5633 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to Logic Monitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.0.0 + Version: 1.0.6 Parameters: LMCompanyName: Type: String @@ -117,7 +117,7 @@ Resources: DestZipsBucket: !Ref "ForwarderZipsBucket" SourceZipUrl: Fn::Sub: - - "https://lm-logs-forwarder.s3.amazonaws.com/source/${LMForwarderVersion}/lambda.zip" + - "https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/${LMForwarderVersion}/lambda.zip" - { LMForwarderVersion: !FindInMap [Constants, LMForwarder, Version], diff --git a/code/version.go b/code/version.go new file mode 100644 index 0000000..8c07c52 --- /dev/null +++ b/code/version.go @@ -0,0 +1,6 @@ +package main + +const ( + // Version for aws lambda + Version = "1.0.6" +) From f774d07f6c05b113b426d5b73852104c32aeee9d Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Wed, 30 Mar 2022 12:34:01 +0530 Subject: [PATCH 002/102] Updating version.properties --- code/version.go | 6 ------ code/version.properties | 1 + 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 code/version.go create mode 100644 code/version.properties diff --git a/code/version.go b/code/version.go deleted file mode 100644 index 8c07c52..0000000 --- a/code/version.go +++ /dev/null @@ -1,6 +0,0 @@ -package main - -const ( - // Version for aws lambda - Version = "1.0.6" -) diff --git a/code/version.properties b/code/version.properties new file mode 100644 index 0000000..2058158 --- /dev/null +++ b/code/version.properties @@ -0,0 +1 @@ +Version = "1.0.6" \ No newline at end of file From 4aaee1b37ae3c46405a254aa2f0893c2767a305c Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Wed, 30 Mar 2022 12:43:46 +0530 Subject: [PATCH 003/102] capitalising version variable --- code/version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/version.properties b/code/version.properties index 2058158..69d5902 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -Version = "1.0.6" \ No newline at end of file +VERSION = "1.0.6" \ No newline at end of file From 5cd5585f04453d0ba19437de763c4fafad4d64dd Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Wed, 30 Mar 2022 16:22:34 +0530 Subject: [PATCH 004/102] Version file update --- code/version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/version.properties b/code/version.properties index 69d5902..99d0635 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -VERSION = "1.0.6" \ No newline at end of file +version=1.0.6 \ No newline at end of file From 047977c2c7c212972442527ab3c47473b673f73c Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Fri, 22 Apr 2022 13:28:35 +0530 Subject: [PATCH 005/102] DEV-99879 changes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6fd308e..98c8ddc 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You will need to supply the following LogicMonitor credentials when configuring * LM Account Name ### Deploying lambda using CloudFormation -[![Launch Stack](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=lm-forwarder&templateURL=https://lm-logs-forwarder.s3.amazonaws.com/latest.yaml) +[![Launch Stack](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=lm-forwarder&templateURL=https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/latest.yaml) ### Deploying lambda using Terraform **Sample configuration** From bcda7ec28a71fa9f45787de4e830b1114cfad820 Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Thu, 26 May 2022 14:40:16 +0530 Subject: [PATCH 006/102] Update cloudformation.yaml --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 8ba5633..70b17b7 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -117,7 +117,7 @@ Resources: DestZipsBucket: !Ref "ForwarderZipsBucket" SourceZipUrl: Fn::Sub: - - "https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/${LMForwarderVersion}/lambda.zip" + - "https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/code/${LMForwarderVersion}/lambda.zip" - { LMForwarderVersion: !FindInMap [Constants, LMForwarder, Version], From 6b2445acef258c3eb85d2dc06283e25e9e9d9490 Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Thu, 26 May 2022 16:12:39 +0530 Subject: [PATCH 007/102] Update region in url --- README.md | 4 ++-- cloudformation.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 98c8ddc..16e0944 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You will need to supply the following LogicMonitor credentials when configuring * LM Account Name ### Deploying lambda using CloudFormation -[![Launch Stack](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=lm-forwarder&templateURL=https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/latest.yaml) +[![Launch Stack](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=lm-forwarder&templateURL=https://logicmonitor-logs-forwarder.s3.us-west-1.amazonaws.com/source/latest.yaml) ### Deploying lambda using Terraform **Sample configuration** @@ -39,7 +39,7 @@ resource "aws_cloudformation_stack" "lm_forwarder" { LMRegexScrub = "" PermissionsBoundaryArn = "" } - template_url = "https://lm-logs-forwarder.s3.amazonaws.com/latest.yaml" + template_url = "https://logicmonitor-logs-forwarder.s3.us-west-1.amazonaws.com/source/latest.yaml" } ``` `terraform apply --var 'lm_access_id=' --var 'lm_access_key=' --var 'lm_company_name='` diff --git a/cloudformation.yaml b/cloudformation.yaml index 70b17b7..89c3845 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -117,7 +117,7 @@ Resources: DestZipsBucket: !Ref "ForwarderZipsBucket" SourceZipUrl: Fn::Sub: - - "https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/code/${LMForwarderVersion}/lambda.zip" + - "https://logicmonitor-logs-forwarder.s3.us-west-1.amazonaws.com/source/code/${LMForwarderVersion}/lambda.zip" - { LMForwarderVersion: !FindInMap [Constants, LMForwarder, Version], From c9cd4a7707595d024fbe163162271e35df3fc333 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Mon, 30 May 2022 15:58:47 +0530 Subject: [PATCH 008/102] DEV-102562:Changed elb flow logs to rds logs --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6fd308e..1d11d6d 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be 6. Go to /aws/elb/networkInterface log group. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. 7. Logs will start to propagate through lambda to LogIngest. -### Send ELB flow logs +### Send RDS logs 1.Add below lines in permissions of lambda's role policy: "logs:CreateLogGroup", "logs:CreateLogStream", @@ -160,7 +160,7 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be 2. Add below line in the Trust Relationship part of the role in the Service tag: "vpc-flow-logs.amazonaws.com" 3. A Log group in cloud watch should be created with name /aws/rds/networkInterface -4. Use the your RDS instance private IP address to search in Network interfaces page. Select that Network interface row and create a flow log. In create flow log Destination log group should be /aws/rds/networkInterface and IAM role should be the role created in 1st and 2nd step. +4. Use your RDS instance private IP address to search in Network interfaces page. Select that Network interface row and create a flow log. In create flow log Destination log group should be /aws/rds/networkInterface and IAM role should be the role created in 1st and 2nd step. 5. Go to /aws/rds/networkInterface log group. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. 6. Logs will start to propagate through lambda to LogIngest. From 06e87dfa2c93b0964fb8378d9df15ec814848e42 Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Mon, 30 May 2022 18:19:14 +0530 Subject: [PATCH 009/102] Update cloudformation.yaml --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 89c3845..70b17b7 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -117,7 +117,7 @@ Resources: DestZipsBucket: !Ref "ForwarderZipsBucket" SourceZipUrl: Fn::Sub: - - "https://logicmonitor-logs-forwarder.s3.us-west-1.amazonaws.com/source/code/${LMForwarderVersion}/lambda.zip" + - "https://logicmonitor-logs-forwarder.s3.amazonaws.com/source/code/${LMForwarderVersion}/lambda.zip" - { LMForwarderVersion: !FindInMap [Constants, LMForwarder, Version], From b92d89cd8353b7295500ca338d61490fa9464c06 Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Thu, 3 Nov 2022 22:06:20 +0530 Subject: [PATCH 010/102] DEV-116564 fix --- code/parse.go | 4 ++++ code/parse_test.go | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/code/parse.go b/code/parse.go index 2701f6d..5c0cfe9 100644 --- a/code/parse.go +++ b/code/parse.go @@ -143,6 +143,10 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { splitLogStream := strings.Split(d.LogStream, "-") resourceValue = splitLogStream[0] + "-" + splitLogStream[1] resoureProp[resourceProperty] = resourceValue + } else if strings.Contains(d.LogGroup, "/aws/fargate") { + fmt.Println("##################d.Owner = ", d.Owner) + resoureProp["system.aws.accountid"] = d.Owner + resoureProp["system.cloud.category"] = "AWS/LMAccount" } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) } else { diff --git a/code/parse_test.go b/code/parse_test.go index 7c6ee92..0f68d4d 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -543,3 +543,23 @@ func TestRDSFlowLogs(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } + +func TestFargateLog(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAAAH3SS2/bMAwA4L8S+Nyk4ksUcyu2pqed0p2GopBjuTCaF2ynxVD0v4/JMGDdksIXixTET6Teqk0ZhvxU7n/uSzWvvt7c3zx+u10ub+5uq6tq97otvYeBU2KLahDUw+vd012/O+w9c51fh+s29095LL8zy7EveeOptt9tpu36ULbjtO7G6fOhLrOX3M9802y1246589MH/z1sx9I/NqXNh/X4eFpP21YlNyVrxiZKSzVLHepmldu2ZiyQAVMgjK2J1ivQhoiaOgOrNGw1H6s4aDjUw6rv9mO32y66tdcZqvmPKlcPJ+zti+uOkbeqa9xMMaZEaoRECsEXkgxO1xdRQ9BggckAlRFVIxCnGJJXGjtv5Zg33hWILBApoRLD1Z8W+/GCYT5Z9N1kUeoJpEmQueg86OT7/ZcJBsTq/epfCUs0PhICRg7Ry2JgDyEnEwLExMEEWZUloFyQJGL8KIFzkvSZJKYACjEoR4qmJpYEOEZNKUVvGBpZPN3ZP8YLEr8RfZTgOYl9JrFAoBbEmC0EBp+Hp5BMQRwDUYRjUjgOjZnOSyj8J6EzEgifSBiOQzGBUwv8KaI/FxKL4hOz48iiEEUMvof8oVyQ+CvijxI+J4G/JA/vvwBKpFa1vAMAAA==", + }, + } + logs := parseCloudWatchLogs(cloudWatchEvent) + localTime := time.Local + timeValue := time.Date(2022, time.February, 18, 11, 27, 07, 341000000, time.Local) + if strings.Contains(localTime.String(), "UTC") { //Test case is running at system with time.Local as UTC + timeValue = time.Date(2022, time.February, 18, 5, 57, 07, 341000000, time.Local) + } + expectedLMEvent := ingest.Log{ + Message: "520: Fri Feb 18 05:57:07 UTC 2022", + Timestamp: timeValue, + ResourceID: map[string]string{"system.aws.accountid": "148849679107", "system.cloud.category": "AWS/LMAccount"}, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} From a341a58c8143f992f7905fa1e47b8184bf3c9b87 Mon Sep 17 00:00:00 2001 From: gagansingh355 <75354427+gagansingh355@users.noreply.github.com> Date: Thu, 3 Nov 2022 22:07:14 +0530 Subject: [PATCH 011/102] Removing log line --- code/parse.go | 1 - 1 file changed, 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index 5c0cfe9..7cba256 100644 --- a/code/parse.go +++ b/code/parse.go @@ -144,7 +144,6 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { resourceValue = splitLogStream[0] + "-" + splitLogStream[1] resoureProp[resourceProperty] = resourceValue } else if strings.Contains(d.LogGroup, "/aws/fargate") { - fmt.Println("##################d.Owner = ", d.Owner) resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { From bc90303bfb55644e37724c634c33f10b5f73f007 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Mon, 6 Mar 2023 10:36:34 +0530 Subject: [PATCH 012/102] DEV-126037:Syncing stash with git for ticket DEV-126037 --- Dockerfile | 4 ++-- code/parse.go | 10 ++++++++++ code/parse_test.go | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 66a42b8..10a8270 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14-alpine as base +FROM golang:1.19-alpine as base ENV GOOS linux ENV GOARCH amd64 ENV CGO_ENABLED 0 @@ -15,7 +15,7 @@ RUN go build -o main *.go \ FROM base as test RUN go test RUN wget -O- -nv 'https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh' \ - | sh -s -- -b "$(go env GOPATH)/bin" 'v1.30.0' + | sh -s -- -b "$(go env GOPATH)/bin" 'v1.49.0' RUN golangci-lint run . FROM alpine as release diff --git a/code/parse.go b/code/parse.go index 7cba256..02da652 100644 --- a/code/parse.go +++ b/code/parse.go @@ -14,6 +14,8 @@ import ( "github.com/logicmonitor/lm-logs-sdk-go/ingest" ) +var s3Regex, _ = regexp.Compile(`("ARN":")(?P[^/][^,][^"]*)`) + func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { lmBatch := make([]ingest.Log, 0) @@ -222,6 +224,14 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ecs:%s:%s:cluster/%s", awsRegion, data.Owner, ecsStreamArray[2]) accountLevelLog = false } + } else if eventSource == "s3.amazonaws.com" { + s3RegexArray := s3Regex.FindStringSubmatch(event.Message) + s3Arn := s3Regex.SubexpIndex("arn") + + if len(s3RegexArray) > 0 && s3Arn != 0 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) + accountLevelLog = false + } } if accountLevelLog { diff --git a/code/parse_test.go b/code/parse_test.go index 0f68d4d..7e9e728 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -563,3 +563,21 @@ func TestFargateLog(t *testing.T) { } assert.Equal(t, expectedLMEvent, logs[0]) } + +func TestParseCloudtrailLogsS3(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "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", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + + expectedLMEvent := ingest.Log{ + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"cloudtrail.amazonaws.com\"},\"eventTime\":\"2023-03-03T07:30:04Z\",\"eventSource\":\"s3.amazonaws.com\",\"eventName\":\"GetBucketAcl\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"cloudtrail.amazonaws.com\",\"userAgent\":\"cloudtrail.amazonaws.com\",\"requestParameters\":{\"bucketName\":\"aws-cloudtrail-logs-700010466334-8d075b05\",\"Host\":\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\",\"acl\":\"\"},\"responseElements\":null,\"additionalEventData\":{\"SignatureVersion\":\"SigV4\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"bytesTransferredIn\":0,\"AuthenticationMethod\":\"AuthHeader\",\"x-amz-id-2\":\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\",\"bytesTransferredOut\":568},\"requestID\":\"TAQNDGTZC32834P4\",\"eventID\":\"2514d9c5-5365-4b24-ac86-241dea825ad6\",\"readOnly\":true,\"resources\":[{\"accountId\":\"700010466334\",\"type\":\"AWS::S3::Bucket\",\"ARN\":\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"700010466334\",\"sharedEventID\":\"59523b9c-953d-4110-b4d5-b8209621af88\",\"eventCategory\":\"Management\"}", + Timestamp: time.Date(2023, time.March, 3, 7, 30, 27, 87000000, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, + } + + assert.Equal(t, expectedLMEvent, logs[0]) +} From 490ec9bcdd49b7ed6cca6eddf2be8bcaf65b95ac Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Thu, 9 Mar 2023 11:08:38 +0530 Subject: [PATCH 013/102] DEV-126039:Mapping lambd cloudrail logs to resp. lambda resource --- code/parse.go | 40 +++++++++++++++++++++++++++++++++++++--- code/parse_test.go | 18 ++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/code/parse.go b/code/parse.go index 02da652..52746e7 100644 --- a/code/parse.go +++ b/code/parse.go @@ -15,6 +15,7 @@ import ( ) var s3Regex, _ = regexp.Compile(`("ARN":")(?P[^/][^,][^"]*)`) +var lambdaRegex, _ = regexp.Compile(`("functionName":")(?P[^/][^,][^"]*)|("resource":")(?P[^/][^,][^"]*)|("functionVersion":")(?P[^/][^,][^"]*)`) func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { lmBatch := make([]ingest.Log, 0) @@ -194,12 +195,12 @@ func decompressGzip(content string) string { func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { lmBatch := make([]ingest.Log, 0) - for _, event := range data.LogEvents { var resoureIDMap = make(map[string]string) eventSourceRegex, _ := regexp.Compile(`("eventSource":")([^",]*)`) eventSourceArray := eventSourceRegex.FindStringSubmatch(event.Message) eventSource := eventSourceArray[2] + var lambdaMapping string accountLevelLog := true @@ -226,19 +227,52 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } } else if eventSource == "s3.amazonaws.com" { s3RegexArray := s3Regex.FindStringSubmatch(event.Message) + s3Arn := s3Regex.SubexpIndex("arn") if len(s3RegexArray) > 0 && s3Arn != 0 { resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) accountLevelLog = false } - } + } else if eventSource == "lambda.amazonaws.com" { + + lambdaRegexArray := lambdaRegex.FindStringSubmatch(event.Message) + if len(lambdaRegexArray) > 0 { + lambdaFunctionName := lambdaRegex.SubexpIndex("functionName") + lambdaResourceName := lambdaRegex.SubexpIndex("resource") + lambdaFunctionWithVersion := lambdaRegex.SubexpIndex("functionVersion") + + functionNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionName]) + resourceNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaResourceName]) + lambdaFunctionWithVersionStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionWithVersion]) + + if functionNameStr != "" { + lambdaMapping = functionNameStr + } else if resourceNameStr != "" { + lambdaMapping = resourceNameStr + } else { + lambdaMapping = lambdaFunctionWithVersionStr + } + if lambdaMapping != "" { + if strings.Contains(lambdaMapping, "arn:aws:lambda") && !strings.Contains(lambdaMapping, ":$") { + resoureIDMap["system.aws.arn"] = lambdaMapping + + } else if !strings.Contains(lambdaMapping, "arn:aws:lambda") { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, data.Owner, lambdaMapping) + + } else if strings.Contains(lambdaMapping, ":$") { + resoureIDMap["system.aws.arn"] = strings.Split(lambdaMapping, ":$")[0] + } + accountLevelLog = false + } + } + + } if accountLevelLog { resoureIDMap["system.aws.accountid"] = data.Owner resoureIDMap["system.cloud.category"] = "AWS/LMAccount" } - lmEv := ingest.Log{ Message: event.Message, ResourceID: resoureIDMap, diff --git a/code/parse_test.go b/code/parse_test.go index 7e9e728..00e8262 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -581,3 +581,21 @@ func TestParseCloudtrailLogsS3(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } + +func TestParseCloudtrailLogsLambda(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAAAO1W227bRhD9F6JPhdbZO3f5xtpyYMBJg0hogUaGMNxdqkQpUiUpG47hf++QlBTZadIAcR8CCCBAcOfM7czskR6idWhbWIX5/SZESXSRztPlm+lslr6eRpOovqtCg8fcUCmFotRwisdlvXrd1NsNWl7BXfvKlfXWdw0U5WicdU2A9TO/5XmPmveo5bYlAdqOsKVEj3abta4pNl1RV5dF2YWmjZIP0S5qAeWyhGztYdkDo5shxfQ2VF0Pe4gKj5lELLmOpTGMcqm5EpZTFhsrtdZGCM0lfnLJqbUqZpzHylKtdN9NVyAHHayxHaZjw2MhNeXCTvbcYPiHRRT6jL9hbVjlIkoWETujZhFNFtG2Dc2VR2vR3aMFsR2yOWDS32ez0NwWLgzIorqt/wr+l/vBiG20Z7CGj3WFLJ65er2IHie7THOsakBxrIVQfMyc0UTZhLI/hmADbFZvGzcCS1hnHp4H3APfwi7e1VDDYEDQ+7Da93MYymBrh8BX71LvG6ThiwXv+k9XmONroCb8vUWa30GDhfQjHpnKt5Xr534oD5oqQb9k7CY5FJUc71Kyd0uu31xjvsu6uYPGh+bAsoPePN/PYViXo77SpnqaDYN8KRfayKpf9+TZsic/H0d0rt7uKDh2H0eKFG7qqg3TMqz7xUVYtS3LfgbeF32pUA41XkAHT5k5XrnvIyf56TqdT2fzfUnDQK4uhsh54ILTmBJ8A5GgGMlCLglkTINVIc6M+7RMOyePN8tBTok01hOpLSfAjSZKecd1iLVTsBs++F+rsl/7HMo2jIwMvPVUfMB2YeTvyv8Lg5OnNypJrsf+k8tdpwMkff/2RTbo8eZwBw9J79p0U5xDWQ6Z1lChLPSD3O3VUVeu2BR4ln69nfZPaIKfHnGpPfM8t4544WMireDEOgZEcaUUGCmspZ8GcA5dWNXNqCPjzjziVL9PDNmPJYYMlTDh8UkMT2L4wmIIUsiMgiI2Y3gXKbPEWEqJ9tZncaBZsPxzMbTC61woQplHBRWZIUZLSix3woAGShU7ieG3iWGQmeDgBQGhGZFK4Q+LCJTElFrAL0H1/y2G/IcTQ5EwcxLDkxi+sBhy77V2sSeGcUski2MCNJYkMEc1eJcbDp+JofKZNbkIRHmESgiBmDjkuKqUO68soCSexPDbxFABBAU0JxZ5J5Ljv+yM4bU3sUI/a5yh9r/E8ObxH0p2zy7qDwAA", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + //2023-03-08 11:04:20.239 +0000 UTC + expectedLMEvent := ingest.Log{ + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"logs.amazonaws.com\"},\"eventTime\":\"2023-03-08T10:59:01Z\",\"eventSource\":\"lambda.amazonaws.com\",\"eventName\":\"Invoke\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceArn\":\"arn:aws:logs:us-east-1:280443500820:log-group:/aws/cloudtrail:*\",\"sourceAccount\":\"280443500820\"},\"responseElements\":null,\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder:$LATEST\"},\"requestID\":\"fe232070-e23a-4a51-bef4-ab16a95e7b8c\",\"eventID\":\"d833caf0-489d-4692-a286-55dc26e76c5a\",\"readOnly\":false,\"resources\":[{\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\",\"ARN\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":false,\"recipientAccountId\":\"280443500820\",\"sharedEventID\":\"6d1d2f9c-d3d7-4932-9c1a-52555a843990\",\"eventCategory\":\"Data\"}", + Timestamp: time.Date(2023, time.March, 8, 11, 4, 20, 239000000, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder"}, + } + + assert.Equal(t, expectedLMEvent, logs[0]) +} From 6b15d746b4f07c24167d7bea6529e40cc23e66fa Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Thu, 9 Mar 2023 12:42:49 +0530 Subject: [PATCH 014/102] DEV-126039:Addressing PR comments --- code/parse.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index 52746e7..0b17516 100644 --- a/code/parse.go +++ b/code/parse.go @@ -255,6 +255,7 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { lambdaMapping = lambdaFunctionWithVersionStr } if lambdaMapping != "" { + accountLevelLog = false if strings.Contains(lambdaMapping, "arn:aws:lambda") && !strings.Contains(lambdaMapping, ":$") { resoureIDMap["system.aws.arn"] = lambdaMapping @@ -263,8 +264,9 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } else if strings.Contains(lambdaMapping, ":$") { resoureIDMap["system.aws.arn"] = strings.Split(lambdaMapping, ":$")[0] + } else { + accountLevelLog = true } - accountLevelLog = false } } From 330904b9f6ad45e352a41d2818fd4c63be1059ca Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 10 Mar 2023 11:28:46 +0530 Subject: [PATCH 015/102] DEV-126037:We can get bucketName instead of ARn --- code/parse.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/code/parse.go b/code/parse.go index 0b17516..ce7ca40 100644 --- a/code/parse.go +++ b/code/parse.go @@ -14,7 +14,7 @@ import ( "github.com/logicmonitor/lm-logs-sdk-go/ingest" ) -var s3Regex, _ = regexp.Compile(`("ARN":")(?P[^/][^,][^"]*)`) +var s3Regex, _ = regexp.Compile(`("bucketName":")(?P[^/][^,][^"]*)|("ARN":")(?P[^/][^,][^"]*)`) var lambdaRegex, _ = regexp.Compile(`("functionName":")(?P[^/][^,][^"]*)|("resource":")(?P[^/][^,][^"]*)|("functionVersion":")(?P[^/][^,][^"]*)`) func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { @@ -229,10 +229,16 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { s3RegexArray := s3Regex.FindStringSubmatch(event.Message) s3Arn := s3Regex.SubexpIndex("arn") + s3Bucket := s3Regex.SubexpIndex("bucketName") - if len(s3RegexArray) > 0 && s3Arn != 0 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) - accountLevelLog = false + if len(s3RegexArray) > 0 { + if s3Bucket != 0 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) + accountLevelLog = false + } else if s3Arn != 0 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) + accountLevelLog = false + } } } else if eventSource == "lambda.amazonaws.com" { From d35300c31972bdfb4f15a3e9fbf494480a2dbe6c Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 14 Apr 2023 14:35:07 +0530 Subject: [PATCH 016/102] DEV-129768:Adding support for metadata --- cloudformation.yaml | 8 +++++ code/helper.go | 4 +++ code/parse.go | 71 ++++++++++++++++++++++++++++++++++++++++++++- code/parse_test.go | 59 ++++++++++++++++++++++++++++++++++--- 4 files changed, 137 insertions(+), 5 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 70b17b7..4cfe20b 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -20,6 +20,13 @@ Parameters: NoEcho: true Default: "" Description: The LM API tokens access key + Metadata: + Type: CommaDelimitedList + Description: Metadata if any + Default: awsRegion, arn + AllowedValues: + - awsRegion + - arn FunctionName: Type: String Default: LMLogsForwarder @@ -63,6 +70,7 @@ Resources: Variables: LM_COMPANY_NAME: Ref: LMCompanyName + METADATA: !Join [",", !Ref Metadata] LM_ACCESS_ID_ARN: Ref: AccessIdSecret LM_ACCESS_KEY_ARN: diff --git a/code/helper.go b/code/helper.go index 4c206cf..187a9c8 100644 --- a/code/helper.go +++ b/code/helper.go @@ -5,6 +5,7 @@ import ( "io" "log" "os" + "strings" ) func ExtractEnvironmentVariables() { @@ -22,6 +23,9 @@ func ExtractEnvironmentVariables() { lmHost = os.Getenv("LM_HOST") companyName = os.Getenv("LM_COMPANY_NAME") + defaultMetadata := os.Getenv("METADATA") + + metadataArray = strings.Split(defaultMetadata, ",") if lmHost == "" && companyName == "" { log.Fatalf("missing company name") diff --git a/code/parse.go b/code/parse.go index ce7ca40..280e376 100644 --- a/code/parse.go +++ b/code/parse.go @@ -16,6 +16,10 @@ import ( var s3Regex, _ = regexp.Compile(`("bucketName":")(?P[^/][^,][^"]*)|("ARN":")(?P[^/][^,][^"]*)`) var lambdaRegex, _ = regexp.Compile(`("functionName":")(?P[^/][^,][^"]*)|("resource":")(?P[^/][^,][^"]*)|("functionVersion":")(?P[^/][^,][^"]*)`) +var awsRegionRegex, _ = regexp.Compile(`("awsRegion":")(?P[^/][^,][^"]*)`) +var awsEventSourceRegex, _ = regexp.Compile(`("eventSource":")(?P[^/][^,][^"]*)`) +var awsARNRegex, _ = regexp.Compile(`("arn":")(?P[^/][^,][^"]*)`) +var metadataArray []string func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { lmBatch := make([]ingest.Log, 0) @@ -51,12 +55,14 @@ func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFrom arn := fmt.Sprintf("arn:aws:elasticloadbalancing:%s:%s:loadbalancer/%s", region, accountId, elbName) + metadataMap := extractMetadata(region, arn, "elb.amazonaws.com") for _, message := range allMessages { log := ingest.Log{ Message: message, ResourceID: map[string]string{"system.aws.arn": arn}, Timestamp: request.Records[0].EventTime, + Metadata: metadataMap, } lmBatch = append(lmBatch, log) @@ -83,10 +89,12 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS lmBatch := make([]ingest.Log, 0) + metadataMap := extractMetadata(request.Records[0].AWSRegion, arn, request.Records[0].EventSource) lmEv := ingest.Log{ Message: content, ResourceID: map[string]string{"system.aws.arn": arn}, Timestamp: request.Records[0].EventTime, + Metadata: metadataMap, } lmBatch = append(lmBatch, lmEv) @@ -95,6 +103,7 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS } func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { + var metadataMap = map[string]string{} lmBatch := make([]ingest.Log, 0) d, err := request.AWSLogs.Parse() @@ -110,6 +119,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { rdsInstance := rdsEnhancedEvent["instanceID"] resourceValue = fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance) resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance), "rds.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/rds") { splitLogGroup := strings.Split(d.LogGroup, "/") if splitLogGroup[len(splitLogGroup)-1] == "networkInterface" { @@ -117,12 +127,16 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { splitLogStream := strings.Split(d.LogStream, "-") resourceValue = splitLogStream[0] + "-" + splitLogStream[1] resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, "", "rds.amazonaws.com") + } else { re1, _ := regexp.Compile(`/aws/rds/(instance|cluster)/([^/]*)`) result := re1.FindStringSubmatch(d.LogGroup) rdsInstance := result[2] resourceValue = fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance) resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance), "rds.amazonaws.com") + } } else if d.LogGroup != "/aws/lambda/lm" && strings.Contains(d.LogGroup, "/aws/lambda") { re1, _ := regexp.Compile(`aws/lambda/(.*)`) @@ -130,6 +144,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { lambdaName := result[1] resourceValue = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, d.Owner, lambdaName) resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, d.Owner, lambdaName), "lambda.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/ec2/networkInterface") { isEC2NetworkInterface = true } else if strings.Contains(d.LogGroup, "/aws/natGateway/networkInterface") { @@ -137,23 +152,31 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { splitLogStream := strings.Split(d.LogStream, "-") resourceValue = splitLogStream[0] + "-" + splitLogStream[1] resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, "", "natGateway.amazonaws.com") + } else if strings.Contains(d.LogGroup, "/aws/kinesisfirehose") { splitLogGroup := strings.Split(d.LogGroup, "/") resourceValue = splitLogGroup[3] resoureProp[resourceProperty] = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, d.Owner, resourceValue) + metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, d.Owner, resourceValue), "firehose.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/elb/networkInterface") { resourceProperty = "system.aws.networkInterfaceId" splitLogStream := strings.Split(d.LogStream, "-") resourceValue = splitLogStream[0] + "-" + splitLogStream[1] resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, "", "networkInterfaceId.amazonaws.com") + } else if strings.Contains(d.LogGroup, "/aws/fargate") { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" + metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream), "ec2.amazonaws.com") + } handleFatalError("failed to parse cloudwatch event", err) @@ -165,12 +188,15 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { ec2InstanceID := splitEventMessage[0] resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, ec2InstanceID) resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, ec2InstanceID), "ec2.amazonaws.com") + } lmEv := ingest.Log{ Message: event.Message, ResourceID: resoureProp, Timestamp: time.Unix(0, event.Timestamp*1000000), + Metadata: metadataMap, } lmBatch = append(lmBatch, lmEv) } @@ -195,13 +221,14 @@ func decompressGzip(content string) string { func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { lmBatch := make([]ingest.Log, 0) + for _, event := range data.LogEvents { var resoureIDMap = make(map[string]string) eventSourceRegex, _ := regexp.Compile(`("eventSource":")([^",]*)`) eventSourceArray := eventSourceRegex.FindStringSubmatch(event.Message) eventSource := eventSourceArray[2] var lambdaMapping string - + metadataMap := extractMetadataForCloudTrail(event) accountLevelLog := true if eventSource == "firehose.amazonaws.com" { @@ -285,6 +312,7 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { Message: event.Message, ResourceID: resoureIDMap, Timestamp: time.Unix(0, event.Timestamp*1000000), + Metadata: metadataMap, } lmBatch = append(lmBatch, lmEv) } @@ -292,3 +320,44 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { return lmBatch } + +func extractMetadataForCloudTrail(event events.CloudwatchLogsLogEvent) map[string]string { + var metadataMap = make(map[string]string) + metadataMap["_integration"] = "aws" + for _, str := range metadataArray { + if strings.TrimSpace(str) == "awsRegion" { + regionRegexArray := awsRegionRegex.FindStringSubmatch(event.Message) + awsRegion := awsRegionRegex.SubexpIndex("awsRegion") + if len(regionRegexArray) > 0 && awsRegion != 0 { + metadataMap["region"] = fmt.Sprintf(regionRegexArray[awsRegion]) + } + } else if strings.TrimSpace(str) == "arn" { + arnRegexArray := awsARNRegex.FindStringSubmatch(event.Message) + awsARN := awsARNRegex.SubexpIndex("arn") + if len(arnRegexArray) > 0 && awsARN != 0 { + metadataMap["arn"] = fmt.Sprintf(arnRegexArray[awsARN]) + } + } + } + eventSourceRegexArray := awsEventSourceRegex.FindStringSubmatch(event.Message) + eventSourceRegex := awsEventSourceRegex.SubexpIndex("eventSource") + if len(eventSourceRegexArray) > 0 && eventSourceRegex != 0 { + metadataMap["_type"] = fmt.Sprintf(eventSourceRegexArray[eventSourceRegex]) + } + return metadataMap +} + +func extractMetadata(region string, arn string, eventsource string) map[string]string { + var metadataMap = make(map[string]string) + metadataMap["_integration"] = "aws" + for _, str := range metadataArray { + if strings.TrimSpace(str) == "awsRegion" { + metadataMap["region"] = region + + } else if strings.TrimSpace(str) == "arn" && arn != "" { + metadataMap["arn"] = arn + } + } + metadataMap["_type"] = eventsource + return metadataMap +} diff --git a/code/parse_test.go b/code/parse_test.go index 00e8262..fa6a306 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -15,6 +15,7 @@ import ( ) func TestParseELBlogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "elb.amazonaws.com"} t.Run("parse elb log without prefix", func(t *testing.T) { message := "2020-05-11T09:24:27.754579Z test 78.82.62.133:64107 172.40.0.85:80 0.00005 0.000852 0.000027 304 304 0 0 \"GET http://test-56808838.eu-west-1.elb.amazonaws.com:80/ HTTP/1.1\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\" - -" @@ -53,6 +54,7 @@ func TestParseELBlogs(t *testing.T) { Message: message, Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, lmEvents[0]) @@ -95,6 +97,7 @@ func TestParseELBlogs(t *testing.T) { Message: message, Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, lmEvents[0]) @@ -103,6 +106,8 @@ func TestParseELBlogs(t *testing.T) { func TestParseS3logs(t *testing.T) { // Data preparation + var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.aws"} + time, _ := time.Parse(time.RFC3339, "2020-04-08T13:08:34+00:00") record := events.S3EventRecord{ S3: events.S3Entity{ @@ -113,7 +118,8 @@ func TestParseS3logs(t *testing.T) { Key: "Key", }, }, - EventTime: time, + EventTime: time, + EventSource: "s3.aws", } records := make([]events.S3EventRecord, 0) @@ -138,12 +144,15 @@ func TestParseS3logs(t *testing.T) { Message: "a OriginBucket c", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::OriginBucket"}, + Metadata: metadataMap, } assert.Equal(t, expectedlmEvent, lmEvents[0]) } func TestParseCloudWatchlogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAE1Q22oCMRD9lZBnU5NMNpd9W1oV2lqQlVoQKdk1amBvZKNSpP/etKXQp4E5M+d2w60bR3t064/B4Rw/FOvifTkry2IxwxPcXzsX0lpKoQEgE8LwtG764yL05yEhU3sdp41tq72dNu0vVsbgbJtATyg7VFBnDIwTFVdVlS7GczXWwQ/R993cN9GFEedb3LTk0IerDXsXyHNi+XdGXp9eVpv7R7EqNnO8+1GZXVwXvz9v2O+TGGSgpGZSCK2l5mkYpoAplSlupDRGcQraUKMkVZQDaA5SMJkcRZ9aiLZNgVimJSS/TFBKJ3/tJPpiCAhpxCCnOgeB/ECY4kRQQgnnCu1PdeOToy3nnO1y9LZc56jsG1/7iPoOuXiiE+S7FPdiG6QYAG3HO/y5+/wC3OrpfYUBAAA=", @@ -157,12 +166,14 @@ func TestParseCloudWatchlogs(t *testing.T) { Message: "Apr 8 13:08:34 ip-172-40-0-227 dhclient[2221]: XMT: Solicit on eth0, interval 71330ms.", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::664833354492:instance/i-01fb3c5139e4b27bb"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, lmEvents[0]) } func TestRDSLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "rds.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAALVSzY7aMBB+FctSpV0pwMSJQ2KEVNpSLqx6gKqHFVqZZEitTeLUNiC04t07G4T2AarePN+fZ8Z+4y16r2vcXnrkin9bbBcvT8vNZrFa8ojbc4eO4CxL8yRJZJoWguDG1itnjz0xE332E1f5iel80F2Jk0oHvdceR/Gktz7UDv2f5mbaBIe6JdeHZgxE+ePel870wdjuu2kCOs/VM1/rdl/pm+kloA+jZkD4bkhbnrAL78I3bioKTWQGEhIAKHIBcZpDMY2TOC9kAaIASGUihYRM5HI6lXlapELkpKIGgqE1BN3SRLEsMiKnWUpB0X09FC9AwAjyEaRMJCrNFB1+br8q9Vk9SzGVO7X+sVKMlb+xfO2t6QKjSBdMVyv2fgG/Rv/Wafz/Oi1t2zcYULGzswFZzPbHw4HegT3AGD49zhiwX4s1O5gGH/wj01WFVUSgw9ae7sfyUjZYzSjDBJzDOIaY+Yj5S1dSBbcq2KAbKhOQzM8Gcoj18zhije1qmu9DrU/oaKo7MGOVuf2zeSZlkrHXLxEjg2l1GCCZE8Svu+tfg3YiCdoCAAA=", @@ -176,12 +187,15 @@ func TestRDSLogs(t *testing.T) { Message: "2020-08-04 23:46:04 UTC::@:[5275]:LOG: checkpoint starting: time", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:rds::664833354492:db:database-1"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, lmEvents[0]) } func TestRDSEnhancedLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "rds.amazonaws.com"} + cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAM1Z227bOBD9lYWeEy3vlPxmbJI2aLK5OOlitykKWaYdIrpFopwb8u87pGRbdtvsDdjyIYA4HA7PHM4c0shLkKumSRbq6qlSwSg4GF+Nv5weTibjd4fBXlA+FKoGsxAsopRyxmIC5qxcvKvLtoKZy4PJ2eRUmVqnTTczMbVKcpiaTffpeCzG14K8/yg+nL0nv4nja3n8qzhmF+DbtNMmrXVldFkc6cyouglGn4KTJJ/Oki7KF6Mas585S/DZhT9cqsJYx5dAz2AXygUSsYgJ5pIgKoUkjJOI45gzwUWMJEUcI4SJxJSgCMuIyIghAGA0JG+SHPLAPBZCYknAE+2tSIHwLzeBKha6UDfB6CY4/X1ycXIT7N0EuoCVRaqOD9zELDHJNGnUPtmavVRN2dYbr7cYcQvXkJw/QQTto2gf8StCR5yPCP7DuS2BK2ANnDCM2soucysQGhE0wtJ5FW3+8Zfz66Z3S6v22uhMPyemWwu5LVrYDj5RiCzs+n793Tw1RuVuGMHwIdGdH7F+s8xuF8uQ2u0bVdstQmETKE2SwYiE0gYxyo1QaAEUOlVd/FcYZWUyG0MiwPOpLlqjOkRlodYY5no5HMyNUsUmQK7ysn7qVj3U2qhpkt7ZaZi7bRfqHCI3R7VSu7bLZjnbtU3auuptaZLeKuvAKJRUtOWln200gpg1z7vYUDIRFUO3q54Ex2mRpKbLg8TQPtZW2YZLppmyR0OZtItnujY2GRJZjzypKodB4JhZwzoIJwxjMmAaIxxTB7PJkqmFTaSLOG3nc6gTG5NHhFnKTNLcNR1jTaZUpYuFPUfr/VzmU72iqm6LoptzpWDKHg0a7OtWTbMyveumbPzmIam68GsSh0sYinns1vXUbQy6WB902ZrNIRfKPJS1PdZPL9YLVGKepF2xK3OLXKHXj5YpzkJHg3l0NMY0pPz1s6O2uTs+60O4SvkwPZ9YLkNsCxiUZnZ81jgTVKot3GRd7xL3Hv0aFArrUNf3eT+2mFtorG7A7Orl4qJVrTpRm6xM5fowZOtwLn8LTy11n1E9a2Dkcupx2gJBURfzUt1PnsEQhSR2HlsQ3IJVGjgk9HVvJ10i17t/N11K/lm60ZvpkpDTt/Kda+iBXmi2csaCse2kCQmxGGZNQiJ30yYhle7Iq9unRqdJduD2+ruHj3fZcG0+YIP9JzZwv3rFRtfqAzoel7PFXx0+xqEU26cvol0eUNhVvuV38tT02YNQ246kEnTIhiiS/tZwe9rZI91pElyDA8u5gius6JuSOHV6XHliipF0opaXbWHOS+0cb4KfbS1P7b3YXWyrewHB3pStwm9C4zDirmJ7lAQu49j18/dhSk4p+yZQYIlvAxWcU/EtnFvwrJgijNhX8AiG1uhKqy5TeB6caHdxWl6XjQMjEI3JEO/Z5Kfe2SKwuyz0ShKrpIbA7l2A1nfZtd0ytUfUVYq9sVemnvp1gNptSiU8duyDIM903hWtI7GDRDCLCN7CBO+1fwuKiJDFO6hAz+TXqIhEyN2I34YF9UIiNkSVPzX32WwIh0Fi24jAgr8GhXknCztUrTD1YTpYmDNOt9mCYy7ct625/xciGWCM3sL446iLvYTFkZ+wsJ+wiEewBjXfPQw8wTWAxfyE9aaK/ThYwk9Y0k9YHsk85gNcPun8QCKET0I/xOWn0gtPlV74pPRDXH5KvfBT6oWfUi/8lPrIJ+kawPJJIgaw/OzEyM9OjPzsxMij180Qlk+Pmw2s2E+BiH162gzu6tjPVoz9bMXYz0sx9lMhYi8VIsJeXoqRVw+u9Y9Y+x/+t3F9fg3g709et82y8CAAAA==", @@ -195,12 +209,15 @@ func TestRDSEnhancedLogs(t *testing.T) { Message: "{\"engine\":\"MYSQL\",\"instanceID\":\"database-2\",\"instanceResourceID\":\"db-3AA6AU62HV6KOH2W6IU7IN6I4Q\",\"timestamp\":\"2020-08-05T23:55:21Z\",\"version\":1,\"uptime\":\"00:20:17\",\"numVCPUs\":1,\"cpuUtilization\":{\"guest\":0.0,\"irq\":0.0,\"system\":0.8,\"wait\":0.2,\"idle\":97.3,\"user\":1.6,\"total\":2.7,\"steal\":0.1,\"nice\":0.0},\"loadAverageMinute\":{\"one\":0.0,\"five\":0.0,\"fifteen\":0.0},\"memory\":{\"writeback\":0,\"hugePagesFree\":0,\"hugePagesRsvd\":0,\"hugePagesSurp\":0,\"cached\":435728,\"hugePagesSize\":2048,\"free\":100836,\"hugePagesTotal\":0,\"inactive\":294920,\"pageTables\":3476,\"dirty\":280,\"mapped\":61940,\"active\":524112,\"total\":1019328,\"slab\":42776,\"buffers\":25824},\"tasks\":{\"sleeping\":96,\"zombie\":0,\"running\":0,\"stopped\":0,\"total\":96,\"blocked\":0},\"swap\":{\"cached\":0,\"total\":4095996,\"free\":4095996,\"in\":0.0,\"out\":0.0},\"network\":[{\"interface\":\"eth0\",\"rx\":654.28,\"tx\":2893.35}],\"diskIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":0.17,\"await\":0.71,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.04,\"avgQueueLen\":0.0,\"tps\":1.4,\"readKb\":40,\"device\":\"rdsdev\",\"writeKb\":308,\"avgReqSz\":8.29,\"wrqmPS\":0.0,\"writeIOsPS\":1.23},{\"writeKbPS\":27.4,\"readIOsPS\":0.17,\"await\":0.32,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":2.53,\"readKb\":40,\"device\":\"filesystem\",\"writeKb\":1644,\"avgReqSz\":22.16,\"wrqmPS\":2.27,\"writeIOsPS\":2.37}],\"physicalDeviceIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":1.17,\"await\":0.48,\"readKbPS\":4.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":1.67,\"readKb\":280,\"device\":\"xvdg\",\"writeKb\":308,\"avgReqSz\":11.76,\"wrqmPS\":0.68,\"writeIOsPS\":0.5}],\"fileSys\":[{\"used\":379496,\"name\":\"\",\"usedFiles\":210,\"usedFilePercent\":0.02,\"maxFiles\":1310720,\"mountPoint\":\"/rdsdbdata\",\"total\":20496340,\"usedPercent\":1.85},{\"used\":2172928,\"name\":\"\",\"usedFiles\":75334,\"usedFilePercent\":11.5,\"maxFiles\":655360,\"mountPoint\":\"/\",\"total\":10190104,\"usedPercent\":21.32}],\"processList\":[{\"vss\":760392,\"name\":\"OS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":3.67,\"cpuUsedPc\":0.02,\"id\":0,\"rss\":37452,\"vmlimit\":0},{\"vss\":2148212,\"name\":\"RDS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":26.49,\"cpuUsedPc\":1.47,\"id\":0,\"rss\":270036,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4745,\"rss\":154532,\"vmlimit\":\"unlimited\"},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4748,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4749,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4750,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4751,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4752,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4753,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4754,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4755,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4756,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4757,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4758,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.15,\"id\":4759,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4760,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4761,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4762,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4763,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4764,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4765,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4766,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4767,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4780,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4782,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4784,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4785,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4786,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4788,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4789,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4790,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4791,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4795,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4796,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4797,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4798,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4799,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4814,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4867,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.05,\"id\":5100,\"rss\":154532,\"vmlimit\":0}]}", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:rds::664833354492:db:database-2"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestLambdaLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} + cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "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", @@ -214,12 +231,14 @@ func TestLambdaLogs(t *testing.T) { Message: "START RequestId: b8cf7efa-a997-4a31-a1ff-881feee2273e Version: $LATEST\n", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda::197152445587:function:observatory-worker"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestEC2FlowLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAL3RUUsjMRAA4L8S8ly3mcnMJPGtaE8OkRPaN5Fju6ayaHfL7mo5xP/ubEW04MPB0XubZIaZfJkXu8l9X97n5Z9ttqf2fLac/b6aLxazi7md2HbX5E6vIQVgJGKOQa8f2/uLrn3aamZa7vpprnDa5GHXdg8/myF367LK72WLocvlRutyU5+4AOuVphBdFOfBn5RVlbeDlvZPq77q6u1Qt82P+lF79Pb0xq73YVNusr3d95s/52YYUy+2vtO2XhxJAgdMCQlJILFEx8BBopCTSCDCTJQCMnrGyJAk6sihVvpQblQBAuJT8szOucnHl2h7fbOEVYCYGaG6W5MP5utfmG9ZhrEASAUiFOINuAI8FUHPZIi8IR4jMRCNSEzmc/xHSEBmdnY2v16aX5f2dfJv2nRc7YHvkP4uHc2qZeNFoyNrgzuyVkIRoFBmcof08bloENWKJsajQ+E/rvVAPRL3Vl2qob+A3r6+AaSOCSloBAAA", @@ -233,12 +252,14 @@ func TestEC2FlowLogs(t *testing.T) { Message: "i-067b718e521cdf437 197152445587 eni-071fbace220860313 52.119.221.63 10.134.7.224 443 45224 6 18 6689 1616399355 1616399414 ACCEPT OK", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::197152445587:instance/i-067b718e521cdf437"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestNATFlowLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "natGateway.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAL2Wb2/aMBDGv4qV1zT4zr6z3XeoZWiapk2Cd1M1ZdStopWAknSoqvrdd4FSAdW2F3Mi/og4jn0/7rnz85ytYtMU93HxtInZZXY9WUy+f57O55PZNBtl620VaxmG4IDQWiLvZPhhfT+r148buTMuts24KtpZ0cZt8TSuYrtd1z8/Vm2s74pl3M+et3UsVjI9VuUFMGi6o+KiWC7jppUZzeOPZlmXm7ZcVx/KB3m0yS6/ZUV2s3t6+itWbTfynJW3sohh7YJnSxoMQgiBGdEY0jaANj44MoHlI5dA4LwJ5INxLDu1pfC2xUpClzCcd06W0lqPDv+DLI/qGFcdh6xA52BsDjmwOVxQDl4rMB4VsWZQrEBZGXnb4PBT5qjJ1dX060J9+ZS9jP6Px/XLg2CDMs4DDwXk0wFhjgZOgSw565W1RnCYFUo40DtSSJkjRDxDAnL4igROYZCvnom8Tkf0KrRjvI5lT9VpjrB3HOgJZy/AHQ450oIjAMFy70CYAIgkegg5uJzsmeIEyGjkwfJjUufnhG2PMmwB2TQJkjebvBPUeX7YGLc7hFCZgNQ7EPUOhKTdcBXUr0/ogEC2sQOdqj6hTfhLh8MBBZfQJ0Aewikdy6GtyAY/WIISeoSzBLFEjNKwnRRQ199Aud7LJyQxCOxFXZR7zs07XyqC09bCYEAJLcIf+oFFdkPJLaQwCOcn6lvvlurhoU12SOgR3veD7tWJTYRn/01y8/Ibd82p5VIPAAA=", @@ -252,12 +273,15 @@ func TestNATFlowLogs(t *testing.T) { Message: "2 197152445587 eni-16105f5a 10.134.1.163 10.134.5.180 1382 56061 6 1 40 1617877079 1617877138 ACCEPT OK", Timestamp: time, ResourceID: map[string]string{"system.aws.networkInterfaceId": "eni-16105f5a"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestParseCloudfrontlogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "cloudFront.amazonaws.com"} + // Data preparation time, _ := time.Parse(time.RFC3339, "2020-04-08T13:08:34+00:00") record := events.S3EventRecord{ @@ -269,7 +293,8 @@ func TestParseCloudfrontlogs(t *testing.T) { Key: "Key", }, }, - EventTime: time, + EventTime: time, + EventSource: "cloudFront.amazonaws.com", } records := make([]events.S3EventRecord, 0) @@ -312,6 +337,7 @@ func TestParseCloudfrontlogs(t *testing.T) { Message: "Test the Cloudfront logs", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::CloudfrontLogBucket"}, + Metadata: metadataMap, } assert.Equal(t, expectedlmEvent, lmEvents[0]) @@ -324,6 +350,8 @@ func TestParseCloudtrailLogs(t *testing.T) { }, } + var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + logs := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1618555235714*1000000) @@ -331,12 +359,14 @@ func TestParseCloudtrailLogs(t *testing.T) { Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/LogicMonitor_119/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJVBZZRIN7\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4\",\"arn\":\"arn:aws:iam::197152445587:role/LogicMonitor_119\",\"accountId\":\"197152445587\",\"userName\":\"LogicMonitor_119\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-16T06:03:12Z\"}}},\"eventTime\":\"2021-04-16T06:27:05Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceStatus\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.221.10.3\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"errorCode\":\"Client.RequestLimitExceeded\",\"errorMessage\":\"Request limit exceeded.\",\"requestParameters\":{\"instancesSet\":{\"items\":[{\"instanceId\":\"i-0d345eec77c8a08b1\"}]},\"filterSet\":{},\"includeAllInstances\":false},\"responseElements\":null,\"requestID\":\"23b2ea29-b7b1-449f-a584-035f485f05cf\",\"eventID\":\"703a3ad3-3d3d-4bd1-8637-3692f850e857\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", Timestamp: time, ResourceID: map[string]string{"system.aws.accountid": "197152445587", "system.cloud.category": "AWS/LMAccount"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestElbGzipLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "elb.amazonaws.com"} message := "2020-05-11T09:24:27.754579Z test 78.82.62.133:64107 172.40.0.85:80 0.00005 0.000852 0.000027 304 304 0 0 \"GET http://test-56808838.eu-west-1.elb.amazonaws.com:80/ HTTP/1.1\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\" - -" fileName := "AWSLogs/123123123123/elasticloadbalancing/us-west-1/2020/06/02/123123123123_elasticloadbalancing_us-west-1_test_20200511T0925Z_34.242.46.46_4jtxqo72.gz" time, _ := time.Parse(time.RFC3339, "2020-04-08T15:08:34+02:00") @@ -394,6 +424,7 @@ func TestElbGzipLogs(t *testing.T) { Message: message, Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, lmEvents[0]) @@ -407,6 +438,8 @@ func TestParseKinesisFirehoseLogs(t *testing.T) { }, } + var metadataMap = map[string]string{"_integration": "aws", "_type": "firehose.amazonaws.com"} + logs := parseCloudWatchLogs(cloudWatchEvent) localTime := time.Local @@ -419,12 +452,14 @@ func TestParseKinesisFirehoseLogs(t *testing.T) { Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/LogicMonitor_119/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJ5UWDCK2J\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4\",\"arn\":\"arn:aws:iam::197152445587:role/LogicMonitor_119\",\"accountId\":\"197152445587\",\"userName\":\"LogicMonitor_119\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-26T05:23:11Z\"}}},\"eventTime\":\"2021-04-26T05:30:50Z\",\"eventSource\":\"firehose.amazonaws.com\",\"eventName\":\"DescribeDeliveryStream\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.214.159.46\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"errorCode\":\"ResourceNotFoundException\",\"errorMessage\":\"Firehose firehosedelievery under account 197152445587 not found.\",\"requestParameters\":{\"deliveryStreamName\":\"firehosedelievery\"},\"responseElements\":null,\"requestID\":\"dd1d624c-66ab-9056-841d-300639f2b022\",\"eventID\":\"f25e9886-5059-4b07-90d1-d29a965c0a0f\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.arn": "arn:aws:firehose::197152445587:deliverystream/firehosedelievery"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[4]) } func TestKinesisFirehoseErrorLog(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "firehose.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAADWPQW7CMBBFrxJ5jZTYHtsxu0gNbNpVsqtQ5RITrJI48piiCnH3Di0s/fxm5v8rmzyiG33/s3i2Zi9N33y8tV3XbFu2YvEy+0SYW8OVAFCqNoRPcdymeF7op3QXLL/C7DHgISR/jOjLwWW3eTz+9S4n7ybyBySA50/cp7DkEOdNOGWfkK3fmduz3Z/dfvs539GVhYGGpOYcVAWmri1UWlAUIQ0IS7kMKC2VEbbWQmqj7shaY4WGik7lQAWzmygr19yCrKCSgtvVszit78koXuNYHGIqHl2KZxl2291+AT15qVomAQAA", @@ -443,6 +478,7 @@ func TestKinesisFirehoseErrorLog(t *testing.T) { Message: "Test Log for kinesis firehose", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.arn": "arn:aws:firehose::197152445587:deliverystream/dataFirehose"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -455,6 +491,8 @@ func TestKinesisDataStreamLog(t *testing.T) { }, } + var metadataMap = map[string]string{"_integration": "aws", "_type": "kinesis.amazonaws.com"} + logs := parseCloudWatchLogs(cloudWatchEvent) localTime := time.Local @@ -467,6 +505,7 @@ func TestKinesisDataStreamLog(t *testing.T) { Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJTJMESL5PU:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/BhushanPuriPortal/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJV4QL3KY6\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJTJMESL5PU\",\"arn\":\"arn:aws:iam::197152445587:role/BhushanPuriPortal\",\"accountId\":\"197152445587\",\"userName\":\"BhushanPuriPortal\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-27T08:34:28Z\"}}},\"eventTime\":\"2021-04-27T08:39:15Z\",\"eventSource\":\"kinesis.amazonaws.com\",\"eventName\":\"ListTagsForStream\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.220.47.95\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"requestParameters\":{\"streamName\":\"kinesisTestSream\"},\"responseElements\":null,\"requestID\":\"f85f8e09-9fda-a448-a15e-41fa3263205e\",\"eventID\":\"d815bd8e-1016-46a6-8f68-608a42b9b7d3\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.arn": "arn:aws:kinesis::197152445587:stream/kinesisTestSream"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[1]) @@ -478,7 +517,7 @@ func TestECSLog(t *testing.T) { Data: "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", }, } - + var metadataMap = map[string]string{"_integration": "aws", "_type": "ecs.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) localTime := time.Local @@ -491,12 +530,15 @@ func TestECSLog(t *testing.T) { Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJQUWVOXM6Y:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/lmngstockholm/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJ57ASTCJ6\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJQUWVOXM6Y\",\"arn\":\"arn:aws:iam::197152445587:role/lmngstockholm\",\"accountId\":\"197152445587\",\"userName\":\"lmngstockholm\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-30T08:30:58Z\"}}},\"eventTime\":\"2021-04-30T08:39:02Z\",\"eventSource\":\"ecs.amazonaws.com\",\"eventName\":\"ListTagsForResource\",\"awsRegion\":\"us-west-1\",\"sourceIPAddress\":\"34.219.122.65\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"requestParameters\":{\"resourceArn\":\"arn:aws:ecs:us-west-1:197152445587:cluster/CVTestCluster\"},\"responseElements\":{\"tags\":[{\"key\":\"testKey\",\"value\":\"testValue\"}]},\"requestID\":\"ad778dc0-1c40-4599-a1d6-5bbbee2d17c2\",\"eventID\":\"f53bf60c-3b8b-4304-9a80-cacd7b02a275\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.arn": "arn:aws:ecs::197152445587:cluster/CVTestCluster"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[44]) } func TestELBlowLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "networkInterfaceId.amazonaws.com"} + cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAK2QT2sCMRDFv0rI2T+TZJLselvsVkopLeitSInrVJbq7rIbK0X87h2VUsFCD+0hTPIyefN+2csNdV1Y0eyjITmSN9kse3nIp9NsksuerHcVtSyr1CurEa1NPMvrejVp623DN8Ow64a0Xgwriru6fburIrWvoaBz2zS2FDbcR1XZh8KBNgtXLCnx4Cj0Q1FQE7m12y66oi2bWNbVbblmj06OnmWQ85NN/k5VPCp7WS7ZzTiVeK+tA6VTo3zKudBodCk4MAa9TzC1YDAxFhAQ8Vgd8qRYMnEMGw6vnNZeGW8SAOh9/QTba3EJLH7MLvj1QCEvbbkmQsFAGRzwQYOwimWhtEqdcEIJRPE97XKbjcf500w83stD729w9l/hLmGuSE9YZ8QTHPwONz98As9B+hNrAgAA", @@ -515,12 +557,15 @@ func TestELBlowLogs(t *testing.T) { Message: "2 197152445587 eni-0c6023b6cde8706ea 162.142.125.148 10.134.5.120 51125 12196 6 1 44 1622713738 1622713738 ACCEPT OK", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.networkInterfaceId": "eni-0c6023b6cde8706ea"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestRDSFlowLogs(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "rds.amazonaws.com"} + cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAG2Qy2rDMBBFf8VoHWO9LGmyM9QNXbRdOLsSiiLLwTR+ICk1JeTfO2kJbaEzm+HO5czjTAYfoz347cfsyZrcVdvq9bFummpTkxWZltEHlJk0RoLSwKhG+TgdNmE6zdgp7BKL0MZi9GmZwtvDmHzorPPftiYFbwf0+bHPKTjlulYp7oTpWtnm1jk/J7TG0z660M+pn8b7/oiMSNYvxJLdF6Z+92O6KmfSt0gTihsGXHKGMKpZKTiDUgKlnDHQknIhQVAqFIDkoI00TJTK4KTU48XJDrg8U1yB0LqkGKvbJxDPs98HZ//unuV/8od1Kw0F1J+ery8ll93lE2T4ipxrAQAA", @@ -539,12 +584,14 @@ func TestRDSFlowLogs(t *testing.T) { Message: "2 148849679107 eni-09c6cfd662c38fd4d - - - - - - - 1626937750 1626937809 - NODATA", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.networkInterfaceId": "eni-09c6cfd662c38fd4d"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestFargateLog(t *testing.T) { + var metadataMap = map[string]string{"_integration": "aws", "_type": "fargate.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAH3SS2/bMAwA4L8S+Nyk4ksUcyu2pqed0p2GopBjuTCaF2ynxVD0v4/JMGDdksIXixTET6Teqk0ZhvxU7n/uSzWvvt7c3zx+u10ub+5uq6tq97otvYeBU2KLahDUw+vd012/O+w9c51fh+s29095LL8zy7EveeOptt9tpu36ULbjtO7G6fOhLrOX3M9802y1246589MH/z1sx9I/NqXNh/X4eFpP21YlNyVrxiZKSzVLHepmldu2ZiyQAVMgjK2J1ivQhoiaOgOrNGw1H6s4aDjUw6rv9mO32y66tdcZqvmPKlcPJ+zti+uOkbeqa9xMMaZEaoRECsEXkgxO1xdRQ9BggckAlRFVIxCnGJJXGjtv5Zg33hWILBApoRLD1Z8W+/GCYT5Z9N1kUeoJpEmQueg86OT7/ZcJBsTq/epfCUs0PhICRg7Ry2JgDyEnEwLExMEEWZUloFyQJGL8KIFzkvSZJKYACjEoR4qmJpYEOEZNKUVvGBpZPN3ZP8YLEr8RfZTgOYl9JrFAoBbEmC0EBp+Hp5BMQRwDUYRjUjgOjZnOSyj8J6EzEgifSBiOQzGBUwv8KaI/FxKL4hOz48iiEEUMvof8oVyQ+CvijxI+J4G/JA/vvwBKpFa1vAMAAA==", @@ -560,6 +607,7 @@ func TestFargateLog(t *testing.T) { Message: "520: Fri Feb 18 05:57:07 UTC 2022", Timestamp: timeValue, ResourceID: map[string]string{"system.aws.accountid": "148849679107", "system.cloud.category": "AWS/LMAccount"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } @@ -571,12 +619,14 @@ func TestParseCloudtrailLogsS3(t *testing.T) { }, } + var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"cloudtrail.amazonaws.com\"},\"eventTime\":\"2023-03-03T07:30:04Z\",\"eventSource\":\"s3.amazonaws.com\",\"eventName\":\"GetBucketAcl\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"cloudtrail.amazonaws.com\",\"userAgent\":\"cloudtrail.amazonaws.com\",\"requestParameters\":{\"bucketName\":\"aws-cloudtrail-logs-700010466334-8d075b05\",\"Host\":\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\",\"acl\":\"\"},\"responseElements\":null,\"additionalEventData\":{\"SignatureVersion\":\"SigV4\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"bytesTransferredIn\":0,\"AuthenticationMethod\":\"AuthHeader\",\"x-amz-id-2\":\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\",\"bytesTransferredOut\":568},\"requestID\":\"TAQNDGTZC32834P4\",\"eventID\":\"2514d9c5-5365-4b24-ac86-241dea825ad6\",\"readOnly\":true,\"resources\":[{\"accountId\":\"700010466334\",\"type\":\"AWS::S3::Bucket\",\"ARN\":\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"700010466334\",\"sharedEventID\":\"59523b9c-953d-4110-b4d5-b8209621af88\",\"eventCategory\":\"Management\"}", Timestamp: time.Date(2023, time.March, 3, 7, 30, 27, 87000000, time.Local), ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -589,12 +639,13 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { }, } + var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) - //2023-03-08 11:04:20.239 +0000 UTC expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"logs.amazonaws.com\"},\"eventTime\":\"2023-03-08T10:59:01Z\",\"eventSource\":\"lambda.amazonaws.com\",\"eventName\":\"Invoke\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceArn\":\"arn:aws:logs:us-east-1:280443500820:log-group:/aws/cloudtrail:*\",\"sourceAccount\":\"280443500820\"},\"responseElements\":null,\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder:$LATEST\"},\"requestID\":\"fe232070-e23a-4a51-bef4-ab16a95e7b8c\",\"eventID\":\"d833caf0-489d-4692-a286-55dc26e76c5a\",\"readOnly\":false,\"resources\":[{\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\",\"ARN\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":false,\"recipientAccountId\":\"280443500820\",\"sharedEventID\":\"6d1d2f9c-d3d7-4932-9c1a-52555a843990\",\"eventCategory\":\"Data\"}", Timestamp: time.Date(2023, time.March, 8, 11, 4, 20, 239000000, time.Local), ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder"}, + Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) From 2c7a7525916e73efbdc37aca01fa4dddf661eeb8 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 14 Apr 2023 14:40:39 +0530 Subject: [PATCH 017/102] DEV-129768:Updating lm-logs-sdk version --- code/go.mod | 2 +- code/go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/go.mod b/code/go.mod index d82acb0..1438f0d 100644 --- a/code/go.mod +++ b/code/go.mod @@ -6,6 +6,6 @@ require ( github.com/aws/aws-lambda-go v1.19.1 github.com/aws/aws-sdk-go v1.35.14 github.com/google/uuid v1.1.2 // indirect - github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20210301071118-44b910823a84 + github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9 github.com/stretchr/testify v1.6.1 ) diff --git a/code/go.sum b/code/go.sum index a4fa4fb..a1738e6 100644 --- a/code/go.sum +++ b/code/go.sum @@ -19,6 +19,8 @@ github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20201026123256-fc4c3571fda0 h1:MZl github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20201026123256-fc4c3571fda0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20210301071118-44b910823a84 h1:Optt1OctnFBWgZgH0hpYmWV6CtGgfU+VDyoOybnURiQ= github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20210301071118-44b910823a84/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= +github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9 h1:it9zY3OrwBgbed12/kt3bLGzSR4Rl9ig9QoGQc8jhsk= +github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= From cc9dccc87cc698fd4d57b587611de695b408eac8 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Wed, 24 May 2023 16:27:46 +0530 Subject: [PATCH 018/102] DEV-133359: Adding support for ec2 in cloudtrail logs --- code/parse.go | 10 ++++++++++ code/parse_test.go | 24 +++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/code/parse.go b/code/parse.go index 280e376..e05af16 100644 --- a/code/parse.go +++ b/code/parse.go @@ -20,6 +20,7 @@ var awsRegionRegex, _ = regexp.Compile(`("awsRegion":")(?P[^/][^,][^" var awsEventSourceRegex, _ = regexp.Compile(`("eventSource":")(?P[^/][^,][^"]*)`) var awsARNRegex, _ = regexp.Compile(`("arn":")(?P[^/][^,][^"]*)`) var metadataArray []string +var ec2Regex, _ = regexp.Compile(`("instanceId":")(?P[^/][^"]*)`) func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { lmBatch := make([]ingest.Log, 0) @@ -303,11 +304,20 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } } + } else if eventSource == "ec2.amazonaws.com" { + ec2RegexArray := ec2Regex.FindAllStringSubmatch(event.Message, -1) + if len(ec2RegexArray) == 1 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, data.Owner, ec2RegexArray[0][2]) + accountLevelLog = false + } + } + if accountLevelLog { resoureIDMap["system.aws.accountid"] = data.Owner resoureIDMap["system.cloud.category"] = "AWS/LMAccount" } + lmEv := ingest.Log{ Message: event.Message, ResourceID: resoureIDMap, diff --git a/code/parse_test.go b/code/parse_test.go index fa6a306..76ce2bf 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -2,15 +2,15 @@ package main import ( "compress/gzip" + "encoding/json" "fmt" "os" "strings" "testing" "time" - "github.com/logicmonitor/lm-logs-sdk-go/ingest" - "github.com/aws/aws-lambda-go/events" + "github.com/logicmonitor/lm-logs-sdk-go/ingest" "github.com/stretchr/testify/assert" ) @@ -358,7 +358,7 @@ func TestParseCloudtrailLogs(t *testing.T) { expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/LogicMonitor_119/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJVBZZRIN7\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4\",\"arn\":\"arn:aws:iam::197152445587:role/LogicMonitor_119\",\"accountId\":\"197152445587\",\"userName\":\"LogicMonitor_119\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-16T06:03:12Z\"}}},\"eventTime\":\"2021-04-16T06:27:05Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceStatus\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.221.10.3\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"errorCode\":\"Client.RequestLimitExceeded\",\"errorMessage\":\"Request limit exceeded.\",\"requestParameters\":{\"instancesSet\":{\"items\":[{\"instanceId\":\"i-0d345eec77c8a08b1\"}]},\"filterSet\":{},\"includeAllInstances\":false},\"responseElements\":null,\"requestID\":\"23b2ea29-b7b1-449f-a584-035f485f05cf\",\"eventID\":\"703a3ad3-3d3d-4bd1-8637-3692f850e857\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", Timestamp: time, - ResourceID: map[string]string{"system.aws.accountid": "197152445587", "system.cloud.category": "AWS/LMAccount"}, + ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::197152445587:instance/i-0d345eec77c8a08b1"}, Metadata: metadataMap, } @@ -650,3 +650,21 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } + +func Test(t *testing.T) { + var s = "{\"owner\":\"280443500820\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"280443500820_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKDHXBQTVJ\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-23T05:07:33Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-23T05:36:11Z\\\",\\\"eventSource\\\":\\\"ec2.amazonaws.com\\\",\\\"eventName\\\":\\\"DescribeInstanceAttribute\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.217.191\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"instanceId\\\":\\\"i-0d51cd459226160ac\\\",\\\"attribute\\\":\\\"disableApiTermination\\\"},\\\"responseElements\\\":null,\\\"requestID\\\":\\\"468e0670-30d9-4ef7-ab75-648c03d63371\\\",\\\"eventID\\\":\\\"78294249-5828-4dde-8b53-49f81d715b95\\\",\\\"readOnly\\\":true,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"280443500820\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" + var data events.CloudwatchLogsData + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudTrailLogs(data) + var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + expectedLMEvent := ingest.Log{ + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"280443500820\",\"accessKeyId\":\"ASIAUCS54HEKDHXBQTVJ\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"280443500820\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-23T05:07:33Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-23T05:36:11Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceAttribute\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.217.191\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"instanceId\":\"i-0d51cd459226160ac\",\"attribute\":\"disableApiTermination\"},\"responseElements\":null,\"requestID\":\"468e0670-30d9-4ef7-ab75-648c03d63371\",\"eventID\":\"78294249-5828-4dde-8b53-49f81d715b95\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"280443500820\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", + Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::280443500820:instance/i-0d51cd459226160ac"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} From e15c96f219aa8cc41c4855fd5be1ea7d4ed287eb Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Wed, 24 May 2023 16:29:21 +0530 Subject: [PATCH 019/102] DEV-133359: Changing function name --- code/parse_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/parse_test.go b/code/parse_test.go index 76ce2bf..3aba126 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -651,7 +651,7 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } -func Test(t *testing.T) { +func TestCloudTrailLogsEC2(t *testing.T) { var s = "{\"owner\":\"280443500820\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"280443500820_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKDHXBQTVJ\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-23T05:07:33Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-23T05:36:11Z\\\",\\\"eventSource\\\":\\\"ec2.amazonaws.com\\\",\\\"eventName\\\":\\\"DescribeInstanceAttribute\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.217.191\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"instanceId\\\":\\\"i-0d51cd459226160ac\\\",\\\"attribute\\\":\\\"disableApiTermination\\\"},\\\"responseElements\\\":null,\\\"requestID\\\":\\\"468e0670-30d9-4ef7-ab75-648c03d63371\\\",\\\"eventID\\\":\\\"78294249-5828-4dde-8b53-49f81d715b95\\\",\\\"readOnly\\\":true,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"280443500820\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" var data events.CloudwatchLogsData err := json.Unmarshal([]byte(s), &data) From 18011f95880de9fe1a7822dc6f5bb77d6a47fe21 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 26 May 2023 14:44:52 +0530 Subject: [PATCH 020/102] DEV-133360:Adding support for sqs cloudtrail mapping --- code/parse.go | 22 ++++++++++++++++++++++ code/parse_test.go | 19 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/code/parse.go b/code/parse.go index 280e376..2d51d58 100644 --- a/code/parse.go +++ b/code/parse.go @@ -19,6 +19,7 @@ var lambdaRegex, _ = regexp.Compile(`("functionName":")(?P[^/][^,] var awsRegionRegex, _ = regexp.Compile(`("awsRegion":")(?P[^/][^,][^"]*)`) var awsEventSourceRegex, _ = regexp.Compile(`("eventSource":")(?P[^/][^,][^"]*)`) var awsARNRegex, _ = regexp.Compile(`("arn":")(?P[^/][^,][^"]*)`) +var sqsRegex, _ = regexp.Compile(`("queueName":")(?P[^/][^,][^"]*)|("queueUrl":")(?P[^/][^,][^"]*)`) var metadataArray []string func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { @@ -303,6 +304,23 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } } + } else if eventSource == "sqs.amazonaws.com" { + sqsRegexArray := sqsRegex.FindStringSubmatch(event.Message) + + sqsName := sqsRegex.SubexpIndex("queueName") + sqsUrl := sqsRegex.SubexpIndex("queueUrl") + + if len(sqsRegexArray) > 0 { + if sqsRegexArray[sqsName] != "" { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, data.Owner, sqsRegexArray[sqsName]) + accountLevelLog = false + } else if sqsRegexArray[sqsUrl] != "" { + subStr := strings.Split(sqsRegexArray[sqsUrl], "/") + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, data.Owner, subStr[len(subStr)-1]) + accountLevelLog = false + } + } + } if accountLevelLog { resoureIDMap["system.aws.accountid"] = data.Owner @@ -314,6 +332,10 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { Timestamp: time.Unix(0, event.Timestamp*1000000), Metadata: metadataMap, } + + if debug { + fmt.Printf("request generated to lm-logs api: %s\n", lmEv) + } lmBatch = append(lmBatch, lmEv) } diff --git a/code/parse_test.go b/code/parse_test.go index fa6a306..3f27373 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -2,6 +2,7 @@ package main import ( "compress/gzip" + "encoding/json" "fmt" "os" "strings" @@ -650,3 +651,21 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } + +func TestCloudTrailLogsSQS(t *testing.T) { + var s = "{\"owner\":\"280443500820\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"280443500820_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKPPHDNOGC\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-03T08:34:17Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-03T09:16:01Z\\\",\\\"eventSource\\\":\\\"sqs.amazonaws.com\\\",\\\"eventName\\\":\\\"CreateQueue\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.235.15\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"attribute\\\":{\\\"Policy\\\":\\\"{\\\\\\\"Version\\\\\\\":\\\\\\\"2012-10-17\\\\\\\",\\\\\\\"Id\\\\\\\":\\\\\\\"__default_policy_ID\\\\\\\",\\\\\\\"Statement\\\\\\\":[{\\\\\\\"Sid\\\\\\\":\\\\\\\"__owner_statement\\\\\\\",\\\\\\\"Effect\\\\\\\":\\\\\\\"Allow\\\\\\\",\\\\\\\"Principal\\\\\\\":{\\\\\\\"AWS\\\\\\\":\\\\\\\"280443500820\\\\\\\"},\\\\\\\"Action\\\\\\\":[\\\\\\\"SQS:*\\\\\\\"],\\\\\\\"Resource\\\\\\\":\\\\\\\"arn:aws:sqs:us-west-2:280443500820:TestPoojaNew\\\\\\\"}]}\\\",\\\"ReceiveMessageWaitTimeSeconds\\\":\\\"0\\\",\\\"SqsManagedSseEnabled\\\":\\\"true\\\",\\\"DelaySeconds\\\":\\\"0\\\",\\\"KmsMasterKeyId\\\":\\\"\\\",\\\"RedrivePolicy\\\":\\\"\\\",\\\"MessageRetentionPeriod\\\":\\\"345600\\\",\\\"MaximumMessageSize\\\":\\\"262144\\\",\\\"VisibilityTimeout\\\":\\\"30\\\",\\\"RedriveAllowPolicy\\\":\\\"\\\"},\\\"tags\\\":{\\\"test\\\":\\\"true\\\"}},\\\"responseElements\\\":{\\\"queueUrl\\\":\\\"https://sqs.us-west-2.amazonaws.com/280443500820/TestPoojaNew\\\"},\\\"requestID\\\":\\\"7c41e87a-a828-5717-8eb2-b4b680b92479\\\",\\\"eventID\\\":\\\"85297ed4-f144-4afb-84ce-63e9e58556b4\\\",\\\"readOnly\\\":false,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"280443500820\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" + var data events.CloudwatchLogsData + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudTrailLogs(data) + var metadataMap = map[string]string{"_integration": "aws", "_type": "sqs.amazonaws.com"} + expectedLMEvent := ingest.Log{ + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"280443500820\",\"accessKeyId\":\"ASIAUCS54HEKPPHDNOGC\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"280443500820\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-03T08:34:17Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-03T09:16:01Z\",\"eventSource\":\"sqs.amazonaws.com\",\"eventName\":\"CreateQueue\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.235.15\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"attribute\":{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Id\\\":\\\"__default_policy_ID\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"__owner_statement\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"AWS\\\":\\\"280443500820\\\"},\\\"Action\\\":[\\\"SQS:*\\\"],\\\"Resource\\\":\\\"arn:aws:sqs:us-west-2:280443500820:TestPoojaNew\\\"}]}\",\"ReceiveMessageWaitTimeSeconds\":\"0\",\"SqsManagedSseEnabled\":\"true\",\"DelaySeconds\":\"0\",\"KmsMasterKeyId\":\"\",\"RedrivePolicy\":\"\",\"MessageRetentionPeriod\":\"345600\",\"MaximumMessageSize\":\"262144\",\"VisibilityTimeout\":\"30\",\"RedriveAllowPolicy\":\"\"},\"tags\":{\"test\":\"true\"}},\"responseElements\":{\"queueUrl\":\"https://sqs.us-west-2.amazonaws.com/280443500820/TestPoojaNew\"},\"requestID\":\"7c41e87a-a828-5717-8eb2-b4b680b92479\",\"eventID\":\"85297ed4-f144-4afb-84ce-63e9e58556b4\",\"readOnly\":false,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"280443500820\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", + Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:sqs::280443500820:TestPoojaNew"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} From df201cae6a64894118fef3097c20af7a8b22306d Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 26 May 2023 18:57:01 +0530 Subject: [PATCH 021/102] DEV-133360:Addressing comments --- code/parse_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/parse_test.go b/code/parse_test.go index 341fa97..439c0a8 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -653,7 +653,7 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { } func TestCloudTrailLogsEC2(t *testing.T) { - var s = "{\"owner\":\"280443500820\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"280443500820_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKDHXBQTVJ\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-23T05:07:33Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-23T05:36:11Z\\\",\\\"eventSource\\\":\\\"ec2.amazonaws.com\\\",\\\"eventName\\\":\\\"DescribeInstanceAttribute\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.217.191\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"instanceId\\\":\\\"i-0d51cd459226160ac\\\",\\\"attribute\\\":\\\"disableApiTermination\\\"},\\\"responseElements\\\":null,\\\"requestID\\\":\\\"468e0670-30d9-4ef7-ab75-648c03d63371\\\",\\\"eventID\\\":\\\"78294249-5828-4dde-8b53-49f81d715b95\\\",\\\"readOnly\\\":true,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"280443500820\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" + var s = "{\"owner\":\"123456678\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"123456678_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"123456678\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKDHXBQTVJ\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"123456678\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-23T05:07:33Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-23T05:36:11Z\\\",\\\"eventSource\\\":\\\"ec2.amazonaws.com\\\",\\\"eventName\\\":\\\"DescribeInstanceAttribute\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.217.191\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"instanceId\\\":\\\"i-0d51cd459226160ac\\\",\\\"attribute\\\":\\\"disableApiTermination\\\"},\\\"responseElements\\\":null,\\\"requestID\\\":\\\"468e0670-30d9-4ef7-ab75-648c03d63371\\\",\\\"eventID\\\":\\\"78294249-5828-4dde-8b53-49f81d715b95\\\",\\\"readOnly\\\":true,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"123456678\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" var data events.CloudwatchLogsData err := json.Unmarshal([]byte(s), &data) if err != nil { @@ -662,16 +662,16 @@ func TestCloudTrailLogsEC2(t *testing.T) { logs := parseCloudTrailLogs(data) var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} expectedLMEvent := ingest.Log{ - Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"280443500820\",\"accessKeyId\":\"ASIAUCS54HEKDHXBQTVJ\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"280443500820\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-23T05:07:33Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-23T05:36:11Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceAttribute\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.217.191\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"instanceId\":\"i-0d51cd459226160ac\",\"attribute\":\"disableApiTermination\"},\"responseElements\":null,\"requestID\":\"468e0670-30d9-4ef7-ab75-648c03d63371\",\"eventID\":\"78294249-5828-4dde-8b53-49f81d715b95\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"280443500820\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"123456678\",\"accessKeyId\":\"ASIAUCS54HEKDHXBQTVJ\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"123456678\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-23T05:07:33Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-23T05:36:11Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceAttribute\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.217.191\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"instanceId\":\"i-0d51cd459226160ac\",\"attribute\":\"disableApiTermination\"},\"responseElements\":null,\"requestID\":\"468e0670-30d9-4ef7-ab75-648c03d63371\",\"eventID\":\"78294249-5828-4dde-8b53-49f81d715b95\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"123456678\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::280443500820:instance/i-0d51cd459226160ac"}, + ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::123456678:instance/i-0d51cd459226160ac"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) } func TestCloudTrailLogsSQS(t *testing.T) { - var s = "{\"owner\":\"280443500820\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"280443500820_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKPPHDNOGC\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"280443500820\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-03T08:34:17Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-03T09:16:01Z\\\",\\\"eventSource\\\":\\\"sqs.amazonaws.com\\\",\\\"eventName\\\":\\\"CreateQueue\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.235.15\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"attribute\\\":{\\\"Policy\\\":\\\"{\\\\\\\"Version\\\\\\\":\\\\\\\"2012-10-17\\\\\\\",\\\\\\\"Id\\\\\\\":\\\\\\\"__default_policy_ID\\\\\\\",\\\\\\\"Statement\\\\\\\":[{\\\\\\\"Sid\\\\\\\":\\\\\\\"__owner_statement\\\\\\\",\\\\\\\"Effect\\\\\\\":\\\\\\\"Allow\\\\\\\",\\\\\\\"Principal\\\\\\\":{\\\\\\\"AWS\\\\\\\":\\\\\\\"280443500820\\\\\\\"},\\\\\\\"Action\\\\\\\":[\\\\\\\"SQS:*\\\\\\\"],\\\\\\\"Resource\\\\\\\":\\\\\\\"arn:aws:sqs:us-west-2:280443500820:TestPoojaNew\\\\\\\"}]}\\\",\\\"ReceiveMessageWaitTimeSeconds\\\":\\\"0\\\",\\\"SqsManagedSseEnabled\\\":\\\"true\\\",\\\"DelaySeconds\\\":\\\"0\\\",\\\"KmsMasterKeyId\\\":\\\"\\\",\\\"RedrivePolicy\\\":\\\"\\\",\\\"MessageRetentionPeriod\\\":\\\"345600\\\",\\\"MaximumMessageSize\\\":\\\"262144\\\",\\\"VisibilityTimeout\\\":\\\"30\\\",\\\"RedriveAllowPolicy\\\":\\\"\\\"},\\\"tags\\\":{\\\"test\\\":\\\"true\\\"}},\\\"responseElements\\\":{\\\"queueUrl\\\":\\\"https://sqs.us-west-2.amazonaws.com/280443500820/TestPoojaNew\\\"},\\\"requestID\\\":\\\"7c41e87a-a828-5717-8eb2-b4b680b92479\\\",\\\"eventID\\\":\\\"85297ed4-f144-4afb-84ce-63e9e58556b4\\\",\\\"readOnly\\\":false,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"280443500820\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" + var s = "{\"owner\":\"123456678\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"123456678_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AssumedRole\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\\\",\\\"arn\\\":\\\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\\\",\\\"accountId\\\":\\\"123456678\\\",\\\"accessKeyId\\\":\\\"ASIAUCS54HEKPPHDNOGC\\\",\\\"sessionContext\\\":{\\\"sessionIssuer\\\":{\\\"type\\\":\\\"Role\\\",\\\"principalId\\\":\\\"AROAUCS54HEKDKHAECU5N\\\",\\\"arn\\\":\\\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\",\\\"accountId\\\":\\\"123456678\\\",\\\"userName\\\":\\\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\\\"},\\\"webIdFederationData\\\":{},\\\"attributes\\\":{\\\"creationDate\\\":\\\"2023-05-03T08:34:17Z\\\",\\\"mfaAuthenticated\\\":\\\"false\\\"}}},\\\"eventTime\\\":\\\"2023-05-03T09:16:01Z\\\",\\\"eventSource\\\":\\\"sqs.amazonaws.com\\\",\\\"eventName\\\":\\\"CreateQueue\\\",\\\"awsRegion\\\":\\\"us-west-2\\\",\\\"sourceIPAddress\\\":\\\"49.207.235.15\\\",\\\"userAgent\\\":\\\"AWSInternal\\\",\\\"requestParameters\\\":{\\\"attribute\\\":{\\\"Policy\\\":\\\"{\\\\\\\"Version\\\\\\\":\\\\\\\"2012-10-17\\\\\\\",\\\\\\\"Id\\\\\\\":\\\\\\\"__default_policy_ID\\\\\\\",\\\\\\\"Statement\\\\\\\":[{\\\\\\\"Sid\\\\\\\":\\\\\\\"__owner_statement\\\\\\\",\\\\\\\"Effect\\\\\\\":\\\\\\\"Allow\\\\\\\",\\\\\\\"Principal\\\\\\\":{\\\\\\\"AWS\\\\\\\":\\\\\\\"123456678\\\\\\\"},\\\\\\\"Action\\\\\\\":[\\\\\\\"SQS:*\\\\\\\"],\\\\\\\"Resource\\\\\\\":\\\\\\\"arn:aws:sqs:us-west-2:123456678:TestPoojaNew\\\\\\\"}]}\\\",\\\"ReceiveMessageWaitTimeSeconds\\\":\\\"0\\\",\\\"SqsManagedSseEnabled\\\":\\\"true\\\",\\\"DelaySeconds\\\":\\\"0\\\",\\\"KmsMasterKeyId\\\":\\\"\\\",\\\"RedrivePolicy\\\":\\\"\\\",\\\"MessageRetentionPeriod\\\":\\\"345600\\\",\\\"MaximumMessageSize\\\":\\\"262144\\\",\\\"VisibilityTimeout\\\":\\\"30\\\",\\\"RedriveAllowPolicy\\\":\\\"\\\"},\\\"tags\\\":{\\\"test\\\":\\\"true\\\"}},\\\"responseElements\\\":{\\\"queueUrl\\\":\\\"https://sqs.us-west-2.amazonaws.com/123456678/TestPoojaNew\\\"},\\\"requestID\\\":\\\"7c41e87a-a828-5717-8eb2-b4b680b92479\\\",\\\"eventID\\\":\\\"85297ed4-f144-4afb-84ce-63e9e58556b4\\\",\\\"readOnly\\\":false,\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"123456678\\\",\\\"eventCategory\\\":\\\"Management\\\",\\\"sessionCredentialFromConsole\\\":\\\"true\\\"}\"}]}" var data events.CloudwatchLogsData err := json.Unmarshal([]byte(s), &data) if err != nil { @@ -680,9 +680,9 @@ func TestCloudTrailLogsSQS(t *testing.T) { logs := parseCloudTrailLogs(data) var metadataMap = map[string]string{"_integration": "aws", "_type": "sqs.amazonaws.com"} expectedLMEvent := ingest.Log{ - Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"280443500820\",\"accessKeyId\":\"ASIAUCS54HEKPPHDNOGC\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::280443500820:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"280443500820\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-03T08:34:17Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-03T09:16:01Z\",\"eventSource\":\"sqs.amazonaws.com\",\"eventName\":\"CreateQueue\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.235.15\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"attribute\":{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Id\\\":\\\"__default_policy_ID\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"__owner_statement\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"AWS\\\":\\\"280443500820\\\"},\\\"Action\\\":[\\\"SQS:*\\\"],\\\"Resource\\\":\\\"arn:aws:sqs:us-west-2:280443500820:TestPoojaNew\\\"}]}\",\"ReceiveMessageWaitTimeSeconds\":\"0\",\"SqsManagedSseEnabled\":\"true\",\"DelaySeconds\":\"0\",\"KmsMasterKeyId\":\"\",\"RedrivePolicy\":\"\",\"MessageRetentionPeriod\":\"345600\",\"MaximumMessageSize\":\"262144\",\"VisibilityTimeout\":\"30\",\"RedriveAllowPolicy\":\"\"},\"tags\":{\"test\":\"true\"}},\"responseElements\":{\"queueUrl\":\"https://sqs.us-west-2.amazonaws.com/280443500820/TestPoojaNew\"},\"requestID\":\"7c41e87a-a828-5717-8eb2-b4b680b92479\",\"eventID\":\"85297ed4-f144-4afb-84ce-63e9e58556b4\",\"readOnly\":false,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"280443500820\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"123456678\",\"accessKeyId\":\"ASIAUCS54HEKPPHDNOGC\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"123456678\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-03T08:34:17Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-03T09:16:01Z\",\"eventSource\":\"sqs.amazonaws.com\",\"eventName\":\"CreateQueue\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.235.15\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"attribute\":{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Id\\\":\\\"__default_policy_ID\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"__owner_statement\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"AWS\\\":\\\"123456678\\\"},\\\"Action\\\":[\\\"SQS:*\\\"],\\\"Resource\\\":\\\"arn:aws:sqs:us-west-2:123456678:TestPoojaNew\\\"}]}\",\"ReceiveMessageWaitTimeSeconds\":\"0\",\"SqsManagedSseEnabled\":\"true\",\"DelaySeconds\":\"0\",\"KmsMasterKeyId\":\"\",\"RedrivePolicy\":\"\",\"MessageRetentionPeriod\":\"345600\",\"MaximumMessageSize\":\"262144\",\"VisibilityTimeout\":\"30\",\"RedriveAllowPolicy\":\"\"},\"tags\":{\"test\":\"true\"}},\"responseElements\":{\"queueUrl\":\"https://sqs.us-west-2.amazonaws.com/123456678/TestPoojaNew\"},\"requestID\":\"7c41e87a-a828-5717-8eb2-b4b680b92479\",\"eventID\":\"85297ed4-f144-4afb-84ce-63e9e58556b4\",\"readOnly\":false,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"123456678\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:sqs::280443500820:TestPoojaNew"}, + ResourceID: map[string]string{"system.aws.arn": "arn:aws:sqs::123456678:TestPoojaNew"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) From 06b7bda5e714397260d616a7bcc1bcbcd2740315 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 7 Jul 2023 10:49:19 +0530 Subject: [PATCH 022/102] DEV-136383: Addressing the minor bug for s3 bucket ARN resource mapping --- code/parse.go | 4 ++-- code/parse_test.go | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/code/parse.go b/code/parse.go index b15a0b1..8450d82 100644 --- a/code/parse.go +++ b/code/parse.go @@ -261,10 +261,10 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { s3Bucket := s3Regex.SubexpIndex("bucketName") if len(s3RegexArray) > 0 { - if s3Bucket != 0 { + if s3RegexArray[s3Bucket] != "" { resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) accountLevelLog = false - } else if s3Arn != 0 { + } else if s3RegexArray[s3Arn] != "" { resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) accountLevelLog = false } diff --git a/code/parse_test.go b/code/parse_test.go index 439c0a8..7bd5d2d 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -687,3 +687,24 @@ func TestCloudTrailLogsSQS(t *testing.T) { } assert.Equal(t, expectedLMEvent, logs[0]) } + +func TestParseCloudtrailLogsS3ForARN(t *testing.T) { + var s = "{\"owner\":\"123456678\",\"logGroup\":\"/aws/cloudtrail\",\"logStream\":\"123456678_CloudTrail_us-west-2_3\",\"subscriptionFilters\":[\"testsubslambda\"],\"messageType\":\"DATA_MESSAGE\",\"logEvents\":[{\"id\":\"\",\"timestamp\":123456789,\"message\":\"{\\\"eventVersion\\\":\\\"1.08\\\",\\\"userIdentity\\\":{\\\"type\\\":\\\"AWSService\\\",\\\"invokedBy\\\":\\\"cloudtrail.amazonaws.com\\\"},\\\"eventTime\\\":\\\"2023-03-03T07:30:04Z\\\",\\\"eventSource\\\":\\\"s3.amazonaws.com\\\",\\\"eventName\\\":\\\"GetBucketAcl\\\",\\\"awsRegion\\\":\\\"us-east-1\\\",\\\"sourceIPAddress\\\":\\\"cloudtrail.amazonaws.com\\\",\\\"userAgent\\\":\\\"cloudtrail.amazonaws.com\\\",\\\"requestParameters\\\":{\\\"Host\\\":\\\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\\\",\\\"acl\\\":\\\"\\\"},\\\"responseElements\\\":null,\\\"additionalEventData\\\":{\\\"SignatureVersion\\\":\\\"SigV4\\\",\\\"CipherSuite\\\":\\\"ECDHE-RSA-AES128-GCM-SHA256\\\",\\\"bytesTransferredIn\\\":0,\\\"AuthenticationMethod\\\":\\\"AuthHeader\\\",\\\"x-amz-id-2\\\":\\\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\\\",\\\"bytesTransferredOut\\\":568},\\\"requestID\\\":\\\"TAQNDGTZC32834P4\\\",\\\"eventID\\\":\\\"2514d9c5-5365-4b24-ac86-241dea825ad6\\\",\\\"readOnly\\\":true,\\\"resources\\\":[{\\\"accountId\\\":\\\"700010466334\\\",\\\"type\\\":\\\"AWS::S3::Bucket\\\",\\\"ARN\\\":\\\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\\\"}],\\\"eventType\\\":\\\"AwsApiCall\\\",\\\"managementEvent\\\":true,\\\"recipientAccountId\\\":\\\"700010466334\\\",\\\"sharedEventID\\\":\\\"59523b9c-953d-4110-b4d5-b8209621af88\\\",\\\"eventCategory\\\":\\\"Management\\\"}\"}]}" + var data events.CloudwatchLogsData + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudTrailLogs(data) + + var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} + + expectedLMEvent := ingest.Log{ + Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"cloudtrail.amazonaws.com\"},\"eventTime\":\"2023-03-03T07:30:04Z\",\"eventSource\":\"s3.amazonaws.com\",\"eventName\":\"GetBucketAcl\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"cloudtrail.amazonaws.com\",\"userAgent\":\"cloudtrail.amazonaws.com\",\"requestParameters\":{\"Host\":\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\",\"acl\":\"\"},\"responseElements\":null,\"additionalEventData\":{\"SignatureVersion\":\"SigV4\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"bytesTransferredIn\":0,\"AuthenticationMethod\":\"AuthHeader\",\"x-amz-id-2\":\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\",\"bytesTransferredOut\":568},\"requestID\":\"TAQNDGTZC32834P4\",\"eventID\":\"2514d9c5-5365-4b24-ac86-241dea825ad6\",\"readOnly\":true,\"resources\":[{\"accountId\":\"700010466334\",\"type\":\"AWS::S3::Bucket\",\"ARN\":\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"700010466334\",\"sharedEventID\":\"59523b9c-953d-4110-b4d5-b8209621af88\",\"eventCategory\":\"Management\"}", + Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, + Metadata: metadataMap, + } + + assert.Equal(t, expectedLMEvent, logs[0]) +} From 8cf47f6b5c69f658d3482cfbcb6bd9c64d911c33 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 14 Jul 2023 15:50:11 +0530 Subject: [PATCH 023/102] DEV-136869:Adding support for cloudwatch events --- code/aws.go | 11 ++ code/lambda.go | 13 ++- code/parse.go | 266 ++++++++++++++++++++++++++------------------- code/parse_test.go | 51 ++++++++- 4 files changed, 225 insertions(+), 116 deletions(-) diff --git a/code/aws.go b/code/aws.go index dfd2d4a..0dee79c 100644 --- a/code/aws.go +++ b/code/aws.go @@ -58,3 +58,14 @@ func convertToS3Event(m interface{}) events.S3Event { return result } + +func convertToCloudWatchEvent(m interface{}) events.CloudWatchEvent { + data, err := json.Marshal(m) + handleFatalError("failed to marshal s3 event", err) + + var result events.CloudWatchEvent + err = json.Unmarshal(data, &result) + handleFatalError("failed to unmarshal s3 event", err) + + return result +} diff --git a/code/lambda.go b/code/lambda.go index 8ce4095..27c4a25 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -66,12 +66,12 @@ func ScrubLogsWithRegex(lmBatch []ingest.Log) { func ParseEventType(requests interface{}) string { data := requests.(map[string]interface{}) - _, ok := data["awslogs"] + _, ok := data["awslogs"] //cloudwatch logs if ok { return "cloudwatch" } - _, ok = data["Records"] + _, ok = data["Records"] //s3 and elb logs if ok { event := convertToS3Event(requests) if strings.Contains(event.Records[0].S3.Object.Key, "elasticloadbalancing") { @@ -79,6 +79,12 @@ func ParseEventType(requests interface{}) string { } return "s3" } + + _, ok = data["source"] // cloudWatchEvents + if ok { + return "cloudwatchEvents" + } + log.Fatalf("Could not extract event type") return "" } @@ -107,6 +113,9 @@ func ExtractLogs(data interface{}) []ingest.Log { if err != nil { fmt.Printf("WARN failed to parse elb logs %s\n", err) } + case "cloudwatchEvents": + cloudwatchEvents := convertToCloudWatchEvent(data) + logs = parseCloudWatchEvents(cloudwatchEvents) } return logs } diff --git a/code/parse.go b/code/parse.go index b15a0b1..c457e56 100644 --- a/code/parse.go +++ b/code/parse.go @@ -226,115 +226,9 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { for _, event := range data.LogEvents { var resoureIDMap = make(map[string]string) - eventSourceRegex, _ := regexp.Compile(`("eventSource":")([^",]*)`) - eventSourceArray := eventSourceRegex.FindStringSubmatch(event.Message) - eventSource := eventSourceArray[2] - var lambdaMapping string - metadataMap := extractMetadataForCloudTrail(event) - accountLevelLog := true - - if eventSource == "firehose.amazonaws.com" { - kinesisFirehoseRegex, _ := regexp.Compile(`("deliveryStreamName":"|"deliveryStreamName": "|:deliverystream/)([^/][^,][^"]*)`) - deliveryStreamArray := kinesisFirehoseRegex.FindStringSubmatch(event.Message) - if len(deliveryStreamArray) > 2 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, data.Owner, deliveryStreamArray[2]) - accountLevelLog = false - } - } else if eventSource == "kinesis.amazonaws.com" { - kinesisDataStreamRegex, _ := regexp.Compile(`("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)`) - dataStreamArray := kinesisDataStreamRegex.FindStringSubmatch(event.Message) - if len(dataStreamArray) > 2 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:kinesis:%s:%s:stream/%s", awsRegion, data.Owner, dataStreamArray[2]) - accountLevelLog = false - } - } else if eventSource == "ecs.amazonaws.com" { - ecsStreamRegex, _ := regexp.Compile(`("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)`) - ecsStreamArray := ecsStreamRegex.FindStringSubmatch(event.Message) - if len(ecsStreamArray) > 2 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ecs:%s:%s:cluster/%s", awsRegion, data.Owner, ecsStreamArray[2]) - accountLevelLog = false - } - } else if eventSource == "s3.amazonaws.com" { - s3RegexArray := s3Regex.FindStringSubmatch(event.Message) - - s3Arn := s3Regex.SubexpIndex("arn") - s3Bucket := s3Regex.SubexpIndex("bucketName") - - if len(s3RegexArray) > 0 { - if s3Bucket != 0 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) - accountLevelLog = false - } else if s3Arn != 0 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) - accountLevelLog = false - } - } - - } else if eventSource == "lambda.amazonaws.com" { - - lambdaRegexArray := lambdaRegex.FindStringSubmatch(event.Message) - if len(lambdaRegexArray) > 0 { - lambdaFunctionName := lambdaRegex.SubexpIndex("functionName") - lambdaResourceName := lambdaRegex.SubexpIndex("resource") - lambdaFunctionWithVersion := lambdaRegex.SubexpIndex("functionVersion") - - functionNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionName]) - resourceNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaResourceName]) - lambdaFunctionWithVersionStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionWithVersion]) + metadataMap := extractMetadataForCloudTrail(event.Message) - if functionNameStr != "" { - lambdaMapping = functionNameStr - } else if resourceNameStr != "" { - lambdaMapping = resourceNameStr - } else { - lambdaMapping = lambdaFunctionWithVersionStr - } - if lambdaMapping != "" { - accountLevelLog = false - if strings.Contains(lambdaMapping, "arn:aws:lambda") && !strings.Contains(lambdaMapping, ":$") { - resoureIDMap["system.aws.arn"] = lambdaMapping - - } else if !strings.Contains(lambdaMapping, "arn:aws:lambda") { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, data.Owner, lambdaMapping) - - } else if strings.Contains(lambdaMapping, ":$") { - resoureIDMap["system.aws.arn"] = strings.Split(lambdaMapping, ":$")[0] - } else { - accountLevelLog = true - } - } - } - - } else if eventSource == "ec2.amazonaws.com" { - ec2RegexArray := ec2Regex.FindAllStringSubmatch(event.Message, -1) - if len(ec2RegexArray) == 1 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, data.Owner, ec2RegexArray[0][2]) - accountLevelLog = false - } - - } else if eventSource == "sqs.amazonaws.com" { - sqsRegexArray := sqsRegex.FindStringSubmatch(event.Message) - - sqsName := sqsRegex.SubexpIndex("queueName") - sqsUrl := sqsRegex.SubexpIndex("queueUrl") - - if len(sqsRegexArray) > 0 { - if sqsRegexArray[sqsName] != "" { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, data.Owner, sqsRegexArray[sqsName]) - accountLevelLog = false - } else if sqsRegexArray[sqsUrl] != "" { - subStr := strings.Split(sqsRegexArray[sqsUrl], "/") - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, data.Owner, subStr[len(subStr)-1]) - accountLevelLog = false - } - } - - } - - if accountLevelLog { - resoureIDMap["system.aws.accountid"] = data.Owner - resoureIDMap["system.cloud.category"] = "AWS/LMAccount" - } + resoureIDMap = processResourceMapping(event.Message, data.Owner) lmEv := ingest.Log{ Message: event.Message, @@ -353,25 +247,25 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } -func extractMetadataForCloudTrail(event events.CloudwatchLogsLogEvent) map[string]string { +func extractMetadataForCloudTrail(message string) map[string]string { var metadataMap = make(map[string]string) metadataMap["_integration"] = "aws" for _, str := range metadataArray { if strings.TrimSpace(str) == "awsRegion" { - regionRegexArray := awsRegionRegex.FindStringSubmatch(event.Message) + regionRegexArray := awsRegionRegex.FindStringSubmatch(message) awsRegion := awsRegionRegex.SubexpIndex("awsRegion") if len(regionRegexArray) > 0 && awsRegion != 0 { metadataMap["region"] = fmt.Sprintf(regionRegexArray[awsRegion]) } } else if strings.TrimSpace(str) == "arn" { - arnRegexArray := awsARNRegex.FindStringSubmatch(event.Message) + arnRegexArray := awsARNRegex.FindStringSubmatch(message) awsARN := awsARNRegex.SubexpIndex("arn") if len(arnRegexArray) > 0 && awsARN != 0 { metadataMap["arn"] = fmt.Sprintf(arnRegexArray[awsARN]) } } } - eventSourceRegexArray := awsEventSourceRegex.FindStringSubmatch(event.Message) + eventSourceRegexArray := awsEventSourceRegex.FindStringSubmatch(message) eventSourceRegex := awsEventSourceRegex.SubexpIndex("eventSource") if len(eventSourceRegexArray) > 0 && eventSourceRegex != 0 { metadataMap["_type"] = fmt.Sprintf(eventSourceRegexArray[eventSourceRegex]) @@ -393,3 +287,151 @@ func extractMetadata(region string, arn string, eventsource string) map[string]s metadataMap["_type"] = eventsource return metadataMap } + +func processResourceMapping(message string, accountId string) map[string]string { + eventSourceRegex, _ := regexp.Compile(`("eventSource":")([^",]*)`) + eventSourceArray := eventSourceRegex.FindStringSubmatch(message) + eventSource := eventSourceArray[2] + var lambdaMapping string + accountLevelLog := true + var resoureIDMap = make(map[string]string) + + if eventSource == "firehose.amazonaws.com" { + kinesisFirehoseRegex, _ := regexp.Compile(`("deliveryStreamName":"|"deliveryStreamName": "|:deliverystream/)([^/][^,][^"]*)`) + deliveryStreamArray := kinesisFirehoseRegex.FindStringSubmatch(message) + if len(deliveryStreamArray) > 2 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, accountId, deliveryStreamArray[2]) + accountLevelLog = false + } + } else if eventSource == "kinesis.amazonaws.com" { + kinesisDataStreamRegex, _ := regexp.Compile(`("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)`) + dataStreamArray := kinesisDataStreamRegex.FindStringSubmatch(message) + if len(dataStreamArray) > 2 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:kinesis:%s:%s:stream/%s", awsRegion, accountId, dataStreamArray[2]) + accountLevelLog = false + } + } else if eventSource == "ecs.amazonaws.com" { + ecsStreamRegex, _ := regexp.Compile(`("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)`) + ecsStreamArray := ecsStreamRegex.FindStringSubmatch(message) + if len(ecsStreamArray) > 2 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ecs:%s:%s:cluster/%s", awsRegion, accountId, ecsStreamArray[2]) + accountLevelLog = false + } + } else if eventSource == "s3.amazonaws.com" { + s3RegexArray := s3Regex.FindStringSubmatch(message) + + s3Arn := s3Regex.SubexpIndex("arn") + s3Bucket := s3Regex.SubexpIndex("bucketName") + + if len(s3RegexArray) > 0 { + if s3Bucket != 0 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) + accountLevelLog = false + } else if s3Arn != 0 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) + accountLevelLog = false + } + } + + } else if eventSource == "lambda.amazonaws.com" { + + lambdaRegexArray := lambdaRegex.FindStringSubmatch(message) + if len(lambdaRegexArray) > 0 { + lambdaFunctionName := lambdaRegex.SubexpIndex("functionName") + lambdaResourceName := lambdaRegex.SubexpIndex("resource") + lambdaFunctionWithVersion := lambdaRegex.SubexpIndex("functionVersion") + + functionNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionName]) + resourceNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaResourceName]) + lambdaFunctionWithVersionStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionWithVersion]) + + if functionNameStr != "" { + lambdaMapping = functionNameStr + } else if resourceNameStr != "" { + lambdaMapping = resourceNameStr + } else { + lambdaMapping = lambdaFunctionWithVersionStr + } + if lambdaMapping != "" { + accountLevelLog = false + if strings.Contains(lambdaMapping, "arn:aws:lambda") && !strings.Contains(lambdaMapping, ":$") { + resoureIDMap["system.aws.arn"] = lambdaMapping + + } else if !strings.Contains(lambdaMapping, "arn:aws:lambda") { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, accountId, lambdaMapping) + + } else if strings.Contains(lambdaMapping, ":$") { + resoureIDMap["system.aws.arn"] = strings.Split(lambdaMapping, ":$")[0] + } else { + accountLevelLog = true + } + } + } + + } else if eventSource == "ec2.amazonaws.com" { + ec2RegexArray := ec2Regex.FindAllStringSubmatch(message, -1) + if len(ec2RegexArray) == 1 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) + accountLevelLog = false + } + + } else if eventSource == "sqs.amazonaws.com" { + sqsRegexArray := sqsRegex.FindStringSubmatch(message) + + sqsName := sqsRegex.SubexpIndex("queueName") + sqsUrl := sqsRegex.SubexpIndex("queueUrl") + + if len(sqsRegexArray) > 0 { + if sqsRegexArray[sqsName] != "" { + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, accountId, sqsRegexArray[sqsName]) + accountLevelLog = false + } else if sqsRegexArray[sqsUrl] != "" { + subStr := strings.Split(sqsRegexArray[sqsUrl], "/") + resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, accountId, subStr[len(subStr)-1]) + accountLevelLog = false + } + } + + } + + if accountLevelLog { + resoureIDMap["system.aws.accountid"] = accountId + resoureIDMap["system.cloud.category"] = "AWS/LMAccount" + } + return resoureIDMap +} + +func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { + lmBatch := make([]ingest.Log, 0) + + detailStr, err := json.Marshal(&request.Detail) + if err != nil { + panic(err) + } + + event := string(detailStr) + var resoureIDMap = make(map[string]string) + metadataMap := make(map[string]string) + + if request.DetailType == "AWS API Call via CloudTrail" { + metadataMap = extractMetadataForCloudTrail(event) + resoureIDMap = processResourceMapping(event, request.AccountID) + lmEv := ingest.Log{ + Message: event, + ResourceID: resoureIDMap, + Timestamp: request.Time.Local(), + Metadata: metadataMap, + } + + if debug { + fmt.Printf("request generated to lm-logs api: %s\n", lmEv) + } + + lmBatch = append(lmBatch, lmEv) + } else { + return nil // for now we will ignore the other detail-types for cloudwatch events + } + + return lmBatch + +} diff --git a/code/parse_test.go b/code/parse_test.go index 439c0a8..6867c16 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -9,9 +9,8 @@ import ( "testing" "time" - "github.com/logicmonitor/lm-logs-sdk-go/ingest" - "github.com/aws/aws-lambda-go/events" + "github.com/logicmonitor/lm-logs-sdk-go/ingest" "github.com/stretchr/testify/assert" ) @@ -687,3 +686,51 @@ func TestCloudTrailLogsSQS(t *testing.T) { } assert.Equal(t, expectedLMEvent, logs[0]) } + +func TestCloudWatchEventsS3(t *testing.T) { + var s = "{\"account\":\"280443500820\",\"detail\":{\"additionalEventData\":{\"AuthenticationMethod\":\"AuthHeader\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"SignatureVersion\":\"SigV4\",\"bytesTransferredIn\":0,\"bytesTransferredOut\":0,\"x-amz-id-2\":\"UJNZntIyly1aAdiFVSPCwh14QRbyGaVQsbTjtgaNHRYgy0gl4p8c2Uu8Iu498icXe/3JHf9VFHo=\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"b9d131b3-70c7-4f74-a203-bddda20b7469\",\"eventName\":\"HeadBucket\",\"eventSource\":\"s3.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:54Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":true,\"recipientAccountId\":\"280443500820\",\"requestID\":\"J9ZE535Z4A4RVWZF\",\"requestParameters\":{\"Host\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"bucketName\":\"sagemaker-studio-280443500820-6jk579yrjdw\"},\"resources\":[{\"ARNPrefix\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw/\",\"type\":\"AWS::S3::Object\"},{\"ARN\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw\",\"accountId\":\"1234567\",\"type\":\"AWS::S3::Bucket\"}],\"responseElements\":null,\"sourceIPAddress\":\"10.54.148.148\",\"tlsDetails\":{\"cipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"clientProvidedHostHeader\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"tlsVersion\":\"TLSv1.2\"},\"userAgent\":\"[aws-sdk-java/1.12.498Linux/5.10.178-162.673.amzn2.x86_64OpenJDK_64-Bit_Server_VM/17.0.7+7-LTSjava/17.0.7vendor/Amazon.com_Inc.cfg/retry-mode/legacy]\",\"userIdentity\":{\"accessKeyId\":\"ASIAUCS54HEKCWHITL6Z\",\"accountId\":\"1234567\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/aws-test-pooja-role/LMAssumeRoleSession\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ:LMAssumeRoleSession\",\"sessionContext\":{\"attributes\":{\"creationDate\":\"2023-07-13T09:06:17Z\",\"mfaAuthenticated\":\"false\"},\"sessionIssuer\":{\"accountId\":\"1234567\",\"arn\":\"arn:aws:iam::280443500820:role/aws-test-pooja-role\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ\",\"type\":\"Role\",\"userName\":\"aws-test-pooja-role\"}},\"type\":\"AssumedRole\"},\"vpcEndpointId\":\"vpce-051f8c152e5ab9b9d\"},\"detail-type\":\"AWS API Call via CloudTrail\",\"id\":\"0cc13242-9685-6b5a-4881-e970d28cc19c\",\"region\":\"us-west-2\",\"resources\":[],\"source\":\"aws.s3\",\"time\":\"2023-07-13T09:52:54Z\",\"version\":\"0\"}" + var data events.CloudWatchEvent + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudWatchEvents(data) + var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} + expectedLMEvent := ingest.Log{ + Message: "{\"additionalEventData\":{\"AuthenticationMethod\":\"AuthHeader\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"SignatureVersion\":\"SigV4\",\"bytesTransferredIn\":0,\"bytesTransferredOut\":0,\"x-amz-id-2\":\"UJNZntIyly1aAdiFVSPCwh14QRbyGaVQsbTjtgaNHRYgy0gl4p8c2Uu8Iu498icXe/3JHf9VFHo=\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"b9d131b3-70c7-4f74-a203-bddda20b7469\",\"eventName\":\"HeadBucket\",\"eventSource\":\"s3.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:54Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":true,\"recipientAccountId\":\"280443500820\",\"requestID\":\"J9ZE535Z4A4RVWZF\",\"requestParameters\":{\"Host\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"bucketName\":\"sagemaker-studio-280443500820-6jk579yrjdw\"},\"resources\":[{\"ARNPrefix\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw/\",\"type\":\"AWS::S3::Object\"},{\"ARN\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw\",\"accountId\":\"1234567\",\"type\":\"AWS::S3::Bucket\"}],\"responseElements\":null,\"sourceIPAddress\":\"10.54.148.148\",\"tlsDetails\":{\"cipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"clientProvidedHostHeader\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"tlsVersion\":\"TLSv1.2\"},\"userAgent\":\"[aws-sdk-java/1.12.498Linux/5.10.178-162.673.amzn2.x86_64OpenJDK_64-Bit_Server_VM/17.0.7+7-LTSjava/17.0.7vendor/Amazon.com_Inc.cfg/retry-mode/legacy]\",\"userIdentity\":{\"accessKeyId\":\"ASIAUCS54HEKCWHITL6Z\",\"accountId\":\"1234567\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/aws-test-pooja-role/LMAssumeRoleSession\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ:LMAssumeRoleSession\",\"sessionContext\":{\"attributes\":{\"creationDate\":\"2023-07-13T09:06:17Z\",\"mfaAuthenticated\":\"false\"},\"sessionIssuer\":{\"accountId\":\"1234567\",\"arn\":\"arn:aws:iam::280443500820:role/aws-test-pooja-role\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ\",\"type\":\"Role\",\"userName\":\"aws-test-pooja-role\"}},\"type\":\"AssumedRole\"},\"vpcEndpointId\":\"vpce-051f8c152e5ab9b9d\"}", + Timestamp: time.Date(2023, time.July, 13, 15, 22, 54, 0, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} + +func TestCloudWatchEventsLambda(t *testing.T) { + var s = "{\"account\":\"280443500820\",\"detail\":{\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder:$LATEST\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"e34805e1-c975-40ff-96e9-8fb01c4bd5ec\",\"eventName\":\"Invoke\",\"eventSource\":\"lambda.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:58Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":false,\"recipientAccountId\":\"280443500820\",\"requestID\":\"84fe1797-0fa3-4c28-a84b-318328f0ff1f\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceAccount\":\"280443500820\",\"sourceArn\":\"arn:aws:logs:us-west-2:280443500820:log-group:/aws/events/cloudwatchEventsTest:*\"},\"resources\":[{\"ARN\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\"}],\"responseElements\":null,\"sharedEventID\":\"779c751a-2152-4151-93b9-254d90b5819a\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"userIdentity\":{\"invokedBy\":\"logs.amazonaws.com\",\"type\":\"AWSService\"}},\"detail-type\":\"AWS API Call via CloudTrail\",\"id\":\"e8954201-f3c4-54cd-9665-dee6ab22bf5a\",\"region\":\"us-west-2\",\"resources\":[],\"source\":\"aws.lambda\",\"time\":\"2023-07-13T09:52:58Z\",\"version\":\"0\"}" + var data events.CloudWatchEvent + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudWatchEvents(data) + var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} + expectedLMEvent := ingest.Log{ + Message: "{\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder:$LATEST\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"e34805e1-c975-40ff-96e9-8fb01c4bd5ec\",\"eventName\":\"Invoke\",\"eventSource\":\"lambda.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:58Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":false,\"recipientAccountId\":\"280443500820\",\"requestID\":\"84fe1797-0fa3-4c28-a84b-318328f0ff1f\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceAccount\":\"280443500820\",\"sourceArn\":\"arn:aws:logs:us-west-2:280443500820:log-group:/aws/events/cloudwatchEventsTest:*\"},\"resources\":[{\"ARN\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\"}],\"responseElements\":null,\"sharedEventID\":\"779c751a-2152-4151-93b9-254d90b5819a\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"userIdentity\":{\"invokedBy\":\"logs.amazonaws.com\",\"type\":\"AWSService\"}}", + Timestamp: time.Date(2023, time.July, 13, 15, 22, 58, 0, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} + +func TestCloudWatchEventsEC2Lanuch(t *testing.T) { + var s = "{\"version\":\"0\",\"id\":\"1681ab87-4a09-459f-95a2-7fa09403c4b7\",\"detail-type\":\"EC2InstanceLaunchUnsuccessful\",\"source\":\"aws.autoscaling\",\"account\":\"123456789012\",\"time\":\"2015-11-11T21:42:36Z\",\"region\":\"us-east-1\",\"resources\":[\"arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:528ffce5-ef9f-4c1d-8d18-5d005b4a438c:autoScalingGroupName/sampleBrokenASG\",\"arn:aws:ec2:us-east-1:123456789012:instance/\"],\"detail\":{\"StatusCode\":\"Failed\",\"AutoScalingGroupName\":\"brokenASG\",\"ActivityId\":\"06076c51-4874-487d-b15b-7895a713ab55\",\"Details\":{\"AvailabilityZone\":\"us-east-1e\",\"SubnetID\":\"subnet-16c5df2c\"},\"RequestId\":\"06076c51-4874-487d-b15b-7895a713ab55\",\"EndTime\":\"2015-11-11T21:42:36.000Z\",\"EC2InstanceId\":\"\",\"StartTime\":\"2015-11-11T21:42:36.698Z\",\"Cause\":\"At2015-11-11T21:42:09ZauserrequestupdateofAutoScalingGroupconstraintstomin:0,max:10,desired:2changingthedesiredcapacityfrom0to2.At2015-11-11T21:42:35Zaninstancewasstartedinresponsetoadifferencebetweendesiredandactualcapacity,increasingthecapacityfrom0to2.\"}}" + var data events.CloudWatchEvent + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudWatchEvents(data) + + assert.Len(t, logs, 0) +} From 4444b9b257b723336a6bed024227dfe57ecbaa7b Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Fri, 14 Jul 2023 18:01:32 +0530 Subject: [PATCH 024/102] DEV-136869:Fixing broken tests --- code/parse.go | 9 +++------ code/parse_test.go | 16 ++++++++-------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/code/parse.go b/code/parse.go index 7d0f208..52869bd 100644 --- a/code/parse.go +++ b/code/parse.go @@ -225,10 +225,9 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { lmBatch := make([]ingest.Log, 0) for _, event := range data.LogEvents { - var resoureIDMap = make(map[string]string) metadataMap := extractMetadataForCloudTrail(event.Message) - resoureIDMap = processResourceMapping(event.Message, data.Owner) + resoureIDMap := processResourceMapping(event.Message, data.Owner) lmEv := ingest.Log{ Message: event.Message, @@ -410,12 +409,10 @@ func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { } event := string(detailStr) - var resoureIDMap = make(map[string]string) - metadataMap := make(map[string]string) if request.DetailType == "AWS API Call via CloudTrail" { - metadataMap = extractMetadataForCloudTrail(event) - resoureIDMap = processResourceMapping(event, request.AccountID) + metadataMap := extractMetadataForCloudTrail(event) + resoureIDMap := processResourceMapping(event, request.AccountID) lmEv := ingest.Log{ Message: event, ResourceID: resoureIDMap, diff --git a/code/parse_test.go b/code/parse_test.go index 87c7c02..5c945ae 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -207,7 +207,7 @@ func TestRDSEnhancedLogs(t *testing.T) { time := time.Unix(0, 1596671721000*1000000) expectedLMEvent := ingest.Log{ - Message: "{\"engine\":\"MYSQL\",\"instanceID\":\"database-2\",\"instanceResourceID\":\"db-3AA6AU62HV6KOH2W6IU7IN6I4Q\",\"timestamp\":\"2020-08-05T23:55:21Z\",\"version\":1,\"uptime\":\"00:20:17\",\"numVCPUs\":1,\"cpuUtilization\":{\"guest\":0.0,\"irq\":0.0,\"system\":0.8,\"wait\":0.2,\"idle\":97.3,\"user\":1.6,\"total\":2.7,\"steal\":0.1,\"nice\":0.0},\"loadAverageMinute\":{\"one\":0.0,\"five\":0.0,\"fifteen\":0.0},\"memory\":{\"writeback\":0,\"hugePagesFree\":0,\"hugePagesRsvd\":0,\"hugePagesSurp\":0,\"cached\":435728,\"hugePagesSize\":2048,\"free\":100836,\"hugePagesTotal\":0,\"inactive\":294920,\"pageTables\":3476,\"dirty\":280,\"mapped\":61940,\"active\":524112,\"total\":1019328,\"slab\":42776,\"buffers\":25824},\"tasks\":{\"sleeping\":96,\"zombie\":0,\"running\":0,\"stopped\":0,\"total\":96,\"blocked\":0},\"swap\":{\"cached\":0,\"total\":4095996,\"free\":4095996,\"in\":0.0,\"out\":0.0},\"network\":[{\"interface\":\"eth0\",\"rx\":654.28,\"tx\":2893.35}],\"diskIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":0.17,\"await\":0.71,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.04,\"avgQueueLen\":0.0,\"tps\":1.4,\"readKb\":40,\"device\":\"rdsdev\",\"writeKb\":308,\"avgReqSz\":8.29,\"wrqmPS\":0.0,\"writeIOsPS\":1.23},{\"writeKbPS\":27.4,\"readIOsPS\":0.17,\"await\":0.32,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":2.53,\"readKb\":40,\"device\":\"filesystem\",\"writeKb\":1644,\"avgReqSz\":22.16,\"wrqmPS\":2.27,\"writeIOsPS\":2.37}],\"physicalDeviceIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":1.17,\"await\":0.48,\"readKbPS\":4.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":1.67,\"readKb\":280,\"device\":\"xvdg\",\"writeKb\":308,\"avgReqSz\":11.76,\"wrqmPS\":0.68,\"writeIOsPS\":0.5}],\"fileSys\":[{\"used\":379496,\"name\":\"\",\"usedFiles\":210,\"usedFilePercent\":0.02,\"maxFiles\":1310720,\"mountPoint\":\"/rdsdbdata\",\"total\":20496340,\"usedPercent\":1.85},{\"used\":2172928,\"name\":\"\",\"usedFiles\":75334,\"usedFilePercent\":11.5,\"maxFiles\":655360,\"mountPoint\":\"/\",\"total\":10190104,\"usedPercent\":21.32}],\"processList\":[{\"vss\":760392,\"name\":\"OS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":3.67,\"cpuUsedPc\":0.02,\"id\":0,\"rss\":37452,\"vmlimit\":0},{\"vss\":2148212,\"name\":\"RDS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":26.49,\"cpuUsedPc\":1.47,\"id\":0,\"rss\":270036,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4745,\"rss\":154532,\"vmlimit\":\"unlimited\"},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4748,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4749,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4750,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4751,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4752,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4753,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4754,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4755,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4756,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4757,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4758,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.15,\"id\":4759,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4760,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4761,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4762,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4763,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"nam + Message: "{\"engine\":\"MYSQL\",\"instanceID\":\"database-2\",\"instanceResourceID\":\"db-3AA6AU62HV6KOH2W6IU7IN6I4Q\",\"timestamp\":\"2020-08-05T23:55:21Z\",\"version\":1,\"uptime\":\"00:20:17\",\"numVCPUs\":1,\"cpuUtilization\":{\"guest\":0.0,\"irq\":0.0,\"system\":0.8,\"wait\":0.2,\"idle\":97.3,\"user\":1.6,\"total\":2.7,\"steal\":0.1,\"nice\":0.0},\"loadAverageMinute\":{\"one\":0.0,\"five\":0.0,\"fifteen\":0.0},\"memory\":{\"writeback\":0,\"hugePagesFree\":0,\"hugePagesRsvd\":0,\"hugePagesSurp\":0,\"cached\":435728,\"hugePagesSize\":2048,\"free\":100836,\"hugePagesTotal\":0,\"inactive\":294920,\"pageTables\":3476,\"dirty\":280,\"mapped\":61940,\"active\":524112,\"total\":1019328,\"slab\":42776,\"buffers\":25824},\"tasks\":{\"sleeping\":96,\"zombie\":0,\"running\":0,\"stopped\":0,\"total\":96,\"blocked\":0},\"swap\":{\"cached\":0,\"total\":4095996,\"free\":4095996,\"in\":0.0,\"out\":0.0},\"network\":[{\"interface\":\"eth0\",\"rx\":654.28,\"tx\":2893.35}],\"diskIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":0.17,\"await\":0.71,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.04,\"avgQueueLen\":0.0,\"tps\":1.4,\"readKb\":40,\"device\":\"rdsdev\",\"writeKb\":308,\"avgReqSz\":8.29,\"wrqmPS\":0.0,\"writeIOsPS\":1.23},{\"writeKbPS\":27.4,\"readIOsPS\":0.17,\"await\":0.32,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":2.53,\"readKb\":40,\"device\":\"filesystem\",\"writeKb\":1644,\"avgReqSz\":22.16,\"wrqmPS\":2.27,\"writeIOsPS\":2.37}],\"physicalDeviceIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":1.17,\"await\":0.48,\"readKbPS\":4.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":1.67,\"readKb\":280,\"device\":\"xvdg\",\"writeKb\":308,\"avgReqSz\":11.76,\"wrqmPS\":0.68,\"writeIOsPS\":0.5}],\"fileSys\":[{\"used\":379496,\"name\":\"\",\"usedFiles\":210,\"usedFilePercent\":0.02,\"maxFiles\":1310720,\"mountPoint\":\"/rdsdbdata\",\"total\":20496340,\"usedPercent\":1.85},{\"used\":2172928,\"name\":\"\",\"usedFiles\":75334,\"usedFilePercent\":11.5,\"maxFiles\":655360,\"mountPoint\":\"/\",\"total\":10190104,\"usedPercent\":21.32}],\"processList\":[{\"vss\":760392,\"name\":\"OS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":3.67,\"cpuUsedPc\":0.02,\"id\":0,\"rss\":37452,\"vmlimit\":0},{\"vss\":2148212,\"name\":\"RDS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":26.49,\"cpuUsedPc\":1.47,\"id\":0,\"rss\":270036,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4745,\"rss\":154532,\"vmlimit\":\"unlimited\"},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4748,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4749,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4750,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4751,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4752,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4753,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4754,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4755,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4756,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4757,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4758,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.15,\"id\":4759,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4760,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4761,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4762,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4763,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4764,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4765,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4766,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4767,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4780,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4782,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4784,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4785,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4786,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4788,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4789,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4790,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4791,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4795,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4796,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4797,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4798,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4799,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4814,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4867,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.05,\"id\":5100,\"rss\":154532,\"vmlimit\":0}]}", Timestamp: time, ResourceID: map[string]string{"system.aws.arn": "arn:aws:rds::664833354492:db:database-2"}, Metadata: metadataMap, @@ -221,7 +221,7 @@ func TestLambdaLogs(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ - Data: "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 + Data: "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", }, } @@ -347,7 +347,7 @@ func TestParseCloudfrontlogs(t *testing.T) { func TestParseCloudtrailLogs(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ - Data: "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 + Data: "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", }, } @@ -435,7 +435,7 @@ func TestElbGzipLogs(t *testing.T) { func TestParseKinesisFirehoseLogs(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ - Data: "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 + Data: "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", }, } @@ -488,7 +488,7 @@ func TestKinesisFirehoseErrorLog(t *testing.T) { func TestKinesisDataStreamLog(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ - Data: "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 + Data: "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", }, } @@ -515,7 +515,7 @@ func TestKinesisDataStreamLog(t *testing.T) { func TestECSLog(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ - Data: "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 + Data: "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", }, } var metadataMap = map[string]string{"_integration": "aws", "_type": "ecs.amazonaws.com"} @@ -720,7 +720,7 @@ func TestCloudWatchEventsS3(t *testing.T) { var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"additionalEventData\":{\"AuthenticationMethod\":\"AuthHeader\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"SignatureVersion\":\"SigV4\",\"bytesTransferredIn\":0,\"bytesTransferredOut\":0,\"x-amz-id-2\":\"UJNZntIyly1aAdiFVSPCwh14QRbyGaVQsbTjtgaNHRYgy0gl4p8c2Uu8Iu498icXe/3JHf9VFHo=\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"b9d131b3-70c7-4f74-a203-bddda20b7469\",\"eventName\":\"HeadBucket\",\"eventSource\":\"s3.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:54Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":true,\"recipientAccountId\":\"280443500820\",\"requestID\":\"J9ZE535Z4A4RVWZF\",\"requestParameters\":{\"Host\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"bucketName\":\"sagemaker-studio-280443500820-6jk579yrjdw\"},\"resources\":[{\"ARNPrefix\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw/\",\"type\":\"AWS::S3::Object\"},{\"ARN\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw\",\"accountId\":\"1234567\",\"type\":\"AWS::S3::Bucket\"}],\"responseElements\":null,\"sourceIPAddress\":\"10.54.148.148\",\"tlsDetails\":{\"cipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"clientProvidedHostHeader\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"tlsVersion\":\"TLSv1.2\"},\"userAgent\":\"[aws-sdk-java/1.12.498Linux/5.10.178-162.673.amzn2.x86_64OpenJDK_64-Bit_Server_VM/17.0.7+7-LTSjava/17.0.7vendor/Amazon.com_Inc.cfg/retry-mode/legacy]\",\"userIdentity\":{\"accessKeyId\":\"ASIAUCS54HEKCWHITL6Z\",\"accountId\":\"1234567\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/aws-test-pooja-role/LMAssumeRoleSession\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ:LMAssumeRoleSession\",\"sessionContext\":{\"attributes\":{\"creationDate\":\"2023-07-13T09:06:17Z\",\"mfaAuthenticated\":\"false\"},\"sessionIssuer\":{\"accountId\":\"1234567\",\"arn\":\"arn:aws:iam::280443500820:role/aws-test-pooja-role\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ\",\"type\":\"Role\",\"userName\":\"aws-test-pooja-role\"}},\"type\":\"AssumedRole\"},\"vpcEndpointId\":\"vpce-051f8c152e5ab9b9d\"}", - Timestamp: time.Date(2023, time.July, 13, 15, 22, 54, 0, time.Local), + Timestamp: time.Date(2023, time.July, 13, 9, 52, 54, 0, time.Local), ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw"}, Metadata: metadataMap, } @@ -738,7 +738,7 @@ func TestCloudWatchEventsLambda(t *testing.T) { var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder:$LATEST\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"e34805e1-c975-40ff-96e9-8fb01c4bd5ec\",\"eventName\":\"Invoke\",\"eventSource\":\"lambda.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:58Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":false,\"recipientAccountId\":\"280443500820\",\"requestID\":\"84fe1797-0fa3-4c28-a84b-318328f0ff1f\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceAccount\":\"280443500820\",\"sourceArn\":\"arn:aws:logs:us-west-2:280443500820:log-group:/aws/events/cloudwatchEventsTest:*\"},\"resources\":[{\"ARN\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\"}],\"responseElements\":null,\"sharedEventID\":\"779c751a-2152-4151-93b9-254d90b5819a\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"userIdentity\":{\"invokedBy\":\"logs.amazonaws.com\",\"type\":\"AWSService\"}}", - Timestamp: time.Date(2023, time.July, 13, 15, 22, 58, 0, time.Local), + Timestamp: time.Date(2023, time.July, 13, 9, 52, 58, 0, time.Local), ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder"}, Metadata: metadataMap, } From d0059f52c95802dbe2b9dab8440fe00d4a3a8051 Mon Sep 17 00:00:00 2001 From: Pooja Choudhary Date: Tue, 18 Jul 2023 09:45:33 +0530 Subject: [PATCH 025/102] DEV-136869:Addressing review comments --- code/aws.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/aws.go b/code/aws.go index 0dee79c..aa5480d 100644 --- a/code/aws.go +++ b/code/aws.go @@ -61,11 +61,11 @@ func convertToS3Event(m interface{}) events.S3Event { func convertToCloudWatchEvent(m interface{}) events.CloudWatchEvent { data, err := json.Marshal(m) - handleFatalError("failed to marshal s3 event", err) + handleFatalError("failed to marshal cloudWatch event", err) var result events.CloudWatchEvent err = json.Unmarshal(data, &result) - handleFatalError("failed to unmarshal s3 event", err) + handleFatalError("failed to unmarshal cloudWatch event", err) return result } From 2e40f26c41f18ee75b6fc75ad344d38ca64a5ff8 Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Tue, 1 Aug 2023 13:43:12 +0530 Subject: [PATCH 026/102] DEV-136615 Add bearer token support. Add Rules in template. Create secret resources conditionally based on mode of authentication. --- cloudformation.yaml | 55 ++++++++++++++++++++++++++++++++--------- code/aws.go | 3 +++ code/aws_test.go | 12 +++++++++ code/go.mod | 6 ++--- code/go.sum | 35 ++++++++++---------------- code/helper.go | 8 ++---- code/lambda.go | 11 +++------ code/version.properties | 2 +- 8 files changed, 82 insertions(+), 50 deletions(-) create mode 100644 code/aws_test.go diff --git a/cloudformation.yaml b/cloudformation.yaml index 4cfe20b..5b73083 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to Logic Monitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.0.6 + Version: 1.1.0 Parameters: LMCompanyName: Type: String @@ -20,11 +20,16 @@ Parameters: NoEcho: true Default: "" Description: The LM API tokens access key + LMBearerToken: + Type: String + NoEcho: true + Default: "" + Description: The LM API Bearer token. (You must specify LMBearerToken if not providing LMAccessId, LMAccessKey. In case you provide all, LMAccessId and LMAccessKey will be used to authenticate with Logicmonitor. ) Metadata: Type: CommaDelimitedList Description: Metadata if any Default: awsRegion, arn - AllowedValues: + AllowedValues: - awsRegion - arn FunctionName: @@ -49,6 +54,17 @@ Parameters: Type: String Default: "" Description: ARN for the Permissions Boundary Policy + +Rules: + NoAccessIdKeyProvided: + RuleCondition: !Or [!Equals [!Ref LMAccessId, ""], !Equals [!Ref LMAccessKey, ""]] + Assertions: + - AssertDescription: Please specify either LMAccessId, LMAccessKey both or LMBearerToken to authenticate with Logicmonitor. + Assert: !Not + - !Equals + - !Ref LMBearerToken + - "" + Resources: Forwarder: Type: AWS::Serverless::Function @@ -61,7 +77,7 @@ Resources: MemorySize: Ref: FunctionMemorySize Runtime: go1.x - CodeUri: + CodeUri: Bucket: !Ref ForwarderZipsBucket Key: main.zip Timeout: @@ -71,10 +87,9 @@ Resources: LM_COMPANY_NAME: Ref: LMCompanyName METADATA: !Join [",", !Ref Metadata] - LM_ACCESS_ID_ARN: - Ref: AccessIdSecret - LM_ACCESS_KEY_ARN: - Ref: AccessKeySecret + LM_ACCESS_ID_ARN: !If [UseLMV1ForAuth,!Ref AccessIdSecret, "" ] + LM_ACCESS_KEY_ARN: !If [UseLMV1ForAuth,!Ref AccessKeySecret, "" ] + LM_BEARER_TOKEN_ARN: !If [MustUseBearerTokenForAuth, !Ref BearerTokenSecret, ""] LM_SCRUB_REGEX: Ref: LMRegexScrub Policies: @@ -90,8 +105,9 @@ Resources: Action: - secretsmanager:GetSecretValue Resource: - - Ref: AccessKeySecret - - Ref: AccessIdSecret + - !If [UseLMV1ForAuth, !Ref AccessIdSecret, !Ref AWS::NoValue] + - !If [UseLMV1ForAuth, !Ref AccessKeySecret, !Ref AWS::NoValue] + - !If [MustUseBearerTokenForAuth, !Ref BearerTokenSecret, !Ref AWS::NoValue] CloudWatchLogsPermission: Type: AWS::Lambda::Permission Properties: @@ -144,10 +160,10 @@ Resources: import boto3 import urllib.request import os - + logger = logging.getLogger() logger.setLevel(logging.INFO) - + def send_cfn_resp(event, context, response_status): resp_body = json.dumps({ 'Status': response_status, @@ -220,6 +236,7 @@ Resources: Variables: LM_FORWARDER_VERSION: !FindInMap [Constants, LMForwarder, Version] AccessKeySecret: + Condition: UseLMV1ForAuth Type: AWS::SecretsManager::Secret Properties: Description: Logic Monitor Access Key @@ -227,16 +244,31 @@ Resources: Ref: LMAccessKey AccessIdSecret: Type: AWS::SecretsManager::Secret + Condition: UseLMV1ForAuth Properties: Description: Logic Monitor Access Id SecretString: Ref: LMAccessId + BearerTokenSecret: + Type: AWS::SecretsManager::Secret + Condition: MustUseBearerTokenForAuth + Properties: + Description: Logic Monitor Bearer Token + SecretString: + Ref: LMBearerToken Conditions: SetPermissionsBoundary: Fn::Not: - Fn::Equals: - Ref: PermissionsBoundaryArn - "" + AccessIdEmpty: !Equals [!Ref LMAccessId, ""] + AccessKeyEmpty: !Equals [!Ref LMAccessKey, ""] + MustUseBearerTokenForAuth: !Or + - !Condition AccessIdEmpty + - !Condition AccessKeyEmpty + UseLMV1ForAuth: !Not [!Condition MustUseBearerTokenForAuth] + Outputs: LMForwarderArn: Description: Logic Monitor Forwarder Lambda Function ARN @@ -257,6 +289,7 @@ Metadata: - LMCompanyName - LMAccessId - LMAccessKey + - LMBearerToken - LMRegexScrub - Label: default: Lambda Function (Optional) diff --git a/code/aws.go b/code/aws.go index aa5480d..c831105 100644 --- a/code/aws.go +++ b/code/aws.go @@ -13,6 +13,9 @@ import ( type GetContentFromS3Bucket func(string, string) string func getSecretValue(secretArn string) string { + if len(secretArn) < 1 { + return "" + } session := session.Must(session.NewSession()) secManager := secretsmanager.New(session) secretValueOutput, err := secManager.GetSecretValue(&secretsmanager.GetSecretValueInput{ diff --git a/code/aws_test.go b/code/aws_test.go new file mode 100644 index 0000000..ce2132e --- /dev/null +++ b/code/aws_test.go @@ -0,0 +1,12 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestReturnEmptySecretValueOnEmptyInput(t *testing.T) { + secret := getSecretValue("") + assert.Equal(t, secret, "") +} diff --git a/code/go.mod b/code/go.mod index 1438f0d..c93274d 100644 --- a/code/go.mod +++ b/code/go.mod @@ -3,9 +3,9 @@ module lm-logs-aws go 1.14 require ( - github.com/aws/aws-lambda-go v1.19.1 + github.com/aws/aws-lambda-go v1.41.0 github.com/aws/aws-sdk-go v1.35.14 github.com/google/uuid v1.1.2 // indirect - github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9 - github.com/stretchr/testify v1.6.1 + github.com/logicmonitor/lm-logs-sdk-go v0.1.0 + github.com/stretchr/testify v1.8.4 ) diff --git a/code/go.sum b/code/go.sum index a1738e6..9df1493 100644 --- a/code/go.sum +++ b/code/go.sum @@ -1,11 +1,7 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-lambda-go v1.19.1 h1:5iUHbIZ2sG6Yq/J1IN3sWm3+vAB1CWwhI21NffLNuNI= -github.com/aws/aws-lambda-go v1.19.1/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XOkbv4w9SGLU= +github.com/aws/aws-lambda-go v1.41.0 h1:l/5fyVb6Ud9uYd411xdHZzSf2n86TakxzpvIoz7l+3Y= +github.com/aws/aws-lambda-go v1.41.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM= github.com/aws/aws-sdk-go v1.35.14 h1:nucVVXXjAr9UkmYCBWxQWRuYa5KOlaXjuJGg2ulW0K0= github.com/aws/aws-sdk-go v1.35.14/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -15,22 +11,19 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20201026123256-fc4c3571fda0 h1:MZlO6xE6VR0OVCpf1HOaNLbGUgzAAcf8NveRQWZqnrY= -github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20201026123256-fc4c3571fda0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= -github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20210301071118-44b910823a84 h1:Optt1OctnFBWgZgH0hpYmWV6CtGgfU+VDyoOybnURiQ= -github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20210301071118-44b910823a84/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= -github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9 h1:it9zY3OrwBgbed12/kt3bLGzSR4Rl9ig9QoGQc8jhsk= -github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= +github.com/logicmonitor/lm-logs-sdk-go v0.1.0 h1:RefIgMkZncWbcEI1CZWjkXisHtvWid0bTgCJqiNwTtA= +github.com/logicmonitor/lm-logs-sdk-go v0.1.0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -39,10 +32,8 @@ golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/code/helper.go b/code/helper.go index 187a9c8..90c53e4 100644 --- a/code/helper.go +++ b/code/helper.go @@ -12,14 +12,10 @@ func ExtractEnvironmentVariables() { awsRegion = os.Getenv("AWS_REGION") accessKey = getSecretValue(os.Getenv("LM_ACCESS_KEY_ARN")) - if accessKey == "" { - log.Fatalf("missing LM_ACCESS_KEY_ARN env var") - } accessID = getSecretValue(os.Getenv("LM_ACCESS_ID_ARN")) - if accessID == "" { - log.Fatalf("missing LM_ACCESS_ID_ARN env var") - } + + bearerToken = getSecretValue((os.Getenv("LM_BEARER_TOKEN_ARN"))) lmHost = os.Getenv("LM_HOST") companyName = os.Getenv("LM_COMPANY_NAME") diff --git a/code/lambda.go b/code/lambda.go index 27c4a25..f77ba27 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -14,7 +14,7 @@ import ( ) var lmHost, awsRegion, scrubRegex, logSource, versionID string -var accessID, accessKey, companyName string +var accessID, accessKey, bearerToken, companyName string var debug bool func getCompany() string { @@ -33,12 +33,9 @@ func SendLogs(logs []ingest.Log) { return } - lmIngest := ingest.Ingest{ - CompanyName: getCompany(), - AccessID: accessID, - AccessKey: accessKey, - LogSource: logSource, - VersionID: versionID, + lmIngest, err := ingest.NewLogIngester(getCompany(), accessID, accessKey, bearerToken, logSource, versionID) + if err != nil { + log.Fatalf("Error while setting up LM Log Ingestion client. Error : %s", err) } // Send logs to Logic Monitor diff --git a/code/version.properties b/code/version.properties index 99d0635..de652db 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.0.6 \ No newline at end of file +version=1.1.0 From 2fed6a948532a6487cf8ea8f153feecb92a54efc Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 1 Aug 2023 20:17:16 +0530 Subject: [PATCH 027/102] DEV-138493: Adding secret manager cache and environment variables for LM credentials --- cloudformation.yaml | 109 +++++++++++++++++++++++++++++++++++++------- code/aws.go | 46 +++++++++++++++---- code/go.mod | 4 +- code/go.sum | 45 ++++++++++++++++++ code/helper.go | 31 ++++++++++--- code/lambda.go | 6 ++- 6 files changed, 205 insertions(+), 36 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 4cfe20b..89b0d6b 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -5,6 +5,67 @@ Mappings: Constants: LMForwarder: Version: 1.0.6 + RegionToLayerArnMap: + us-east-1: + "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + us-east-2: + "LayerArn": "arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-west-1: + "LayerArn": "arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-west-2: + "LayerArn": "arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-west-3: + "LayerArn": "arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + us-west-2: + "LayerArn": "arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + us-west-1: + "LayerArn": "arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ca-central-1: + "LayerArn": "arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-central-1: + "LayerArn": "arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-central-2: + "LayerArn": "arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1" + eu-north-1: + "LayerArn": "arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-south-1: + "LayerArn": "arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + eu-south-2: + "LayerArn": "arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1" + cn-north-1: + "LayerArn": "arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + cn-northwest-1: + "LayerArn": "arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-east-1: + "LayerArn": "arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-south-2: + "LayerArn": "arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1" + ap-northeast-1: + "LayerArn": "arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-northeast-3: + "LayerArn": "arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-northeast-2: + "LayerArn": "arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-southeast-1: + "LayerArn": "arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-southeast-2: + "LayerArn": "arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-southeast-3: + "LayerArn": "arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-south-1: + "LayerArn": "arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + sa-east-1: + "LayerArn": "arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + af-south-1: + "LayerArn": "arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + me-central-1: + "LayerArn": "arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + me-south-1: + "LayerArn": "arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + us-gov-east-1: + "LayerArn": "arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + us-gov-west-1: + "LayerArn": "arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" Parameters: LMCompanyName: Type: String @@ -24,9 +85,14 @@ Parameters: Type: CommaDelimitedList Description: Metadata if any Default: awsRegion, arn - AllowedValues: + AllowedValues: - awsRegion - arn + UseSecretManagerForStoringSecrets: + Type: String + Description: If true it will use secrets manager and cache the credentials which can incur cost to secrets manager.If false it will use enviromental variables + AllowedValues: [true, false] + Default: "false" FunctionName: Type: String Default: LMLogsForwarder @@ -43,7 +109,7 @@ Parameters: Description: The memory size for the LM Forwarder lambda function FunctionTimeoutInSeconds: Type: Number - Default: 120 + Default: 360 Description: The timeout for the LM Forwarder lambda function PermissionsBoundaryArn: Type: String @@ -61,22 +127,27 @@ Resources: MemorySize: Ref: FunctionMemorySize Runtime: go1.x - CodeUri: + CodeUri: Bucket: !Ref ForwarderZipsBucket Key: main.zip Timeout: Ref: FunctionTimeoutInSeconds + Layers: + - Fn::If: + - CreateSecretManager + - !FindInMap [RegionToLayerArnMap, !Ref "AWS::Region", LayerArn] + - Ref: AWS::NoValue Environment: Variables: LM_COMPANY_NAME: Ref: LMCompanyName METADATA: !Join [",", !Ref Metadata] - LM_ACCESS_ID_ARN: - Ref: AccessIdSecret - LM_ACCESS_KEY_ARN: - Ref: AccessKeySecret + LM_ACCESS_ID: !If [CreateSecretManager, !Ref AccessIdSecret, !Ref LMAccessId] + LM_ACCESS_KEY: !If [CreateSecretManager, !Ref AccessKeySecret, !Ref LMAccessKey] LM_SCRUB_REGEX: Ref: LMRegexScrub + USE_SECRET_MANAGER: + Ref: UseSecretManagerForStoringSecrets Policies: - Version: "2012-10-17" Statement: @@ -84,14 +155,15 @@ Resources: Action: - s3:Get* Resource: "*" - - Version: "2012-10-17" - Statement: - - Effect: Allow - Action: - - secretsmanager:GetSecretValue - Resource: - - Ref: AccessKeySecret - - Ref: AccessIdSecret + - Fn::If: + - CreateSecretManager + - Effect: Allow + Action: + - secretsmanager:GetSecretValue + Resource: + - Ref: AccessKeySecret + - Ref: AccessIdSecret + - Ref: AWS::NoValue CloudWatchLogsPermission: Type: AWS::Lambda::Permission Properties: @@ -144,10 +216,10 @@ Resources: import boto3 import urllib.request import os - + logger = logging.getLogger() logger.setLevel(logging.INFO) - + def send_cfn_resp(event, context, response_status): resp_body = json.dumps({ 'Status': response_status, @@ -220,12 +292,14 @@ Resources: Variables: LM_FORWARDER_VERSION: !FindInMap [Constants, LMForwarder, Version] AccessKeySecret: + Condition: CreateSecretManager Type: AWS::SecretsManager::Secret Properties: Description: Logic Monitor Access Key SecretString: Ref: LMAccessKey AccessIdSecret: + Condition: CreateSecretManager Type: AWS::SecretsManager::Secret Properties: Description: Logic Monitor Access Id @@ -237,6 +311,7 @@ Conditions: - Fn::Equals: - Ref: PermissionsBoundaryArn - "" + CreateSecretManager: !Equals [!Ref UseSecretManagerForStoringSecrets, true] Outputs: LMForwarderArn: Description: Logic Monitor Forwarder Lambda Function ARN diff --git a/code/aws.go b/code/aws.go index aa5480d..f9dbfca 100644 --- a/code/aws.go +++ b/code/aws.go @@ -2,26 +2,54 @@ package main import ( "encoding/json" + "fmt" + "io" + "net/http" + "os" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" - "github.com/aws/aws-sdk-go/service/secretsmanager" + "github.com/aws/aws-secretsmanager-caching-go/secretcache" +) + +var ( + secretCache, _ = secretcache.New() ) type GetContentFromS3Bucket func(string, string) string func getSecretValue(secretArn string) string { - session := session.Must(session.NewSession()) - secManager := secretsmanager.New(session) - secretValueOutput, err := secManager.GetSecretValue(&secretsmanager.GetSecretValueInput{ - SecretId: aws.String(secretArn), - }) - - handleFatalError("error in extracting secret value", err) - return *secretValueOutput.SecretString + secrets_extension_endpoint := "http://localhost:2773/secretsmanager/get?secretId=" + secretArn + + req, err := http.NewRequest("GET", secrets_extension_endpoint, nil) + if err != nil { + fmt.Println("Error creating HTTP request to secrets extension: ", err) + return "" + } + req.Header.Add("X-Aws-Parameters-Secrets-Token", os.Getenv("AWS_SESSION_TOKEN")) + resp, err := http.DefaultClient.Do(req) + if err != nil { + fmt.Println("Error sending HTTP request to secrets extension: ", err) + return "" + } + + // Read the response body + body, err := io.ReadAll(resp.Body) + if err != nil { + fmt.Println("Error reading HTTP response body:", err) + return "" + } + var objmap map[string]interface{} + + if err := json.Unmarshal(body, &objmap); err != nil { + fmt.Println(err) + } + + str := fmt.Sprintf("%v", objmap["SecretString"]) + return str } func getContentsFromS3Bucket(bucketName string, fileName string) string { diff --git a/code/go.mod b/code/go.mod index 1438f0d..c6735d2 100644 --- a/code/go.mod +++ b/code/go.mod @@ -4,8 +4,10 @@ go 1.14 require ( github.com/aws/aws-lambda-go v1.19.1 - github.com/aws/aws-sdk-go v1.35.14 + github.com/aws/aws-sdk-go v1.44.287 + github.com/aws/aws-secretsmanager-caching-go v1.1.2 // indirect github.com/google/uuid v1.1.2 // indirect github.com/logicmonitor/lm-logs-sdk-go v0.0.0-20230330103256-8277e47656f9 github.com/stretchr/testify v1.6.1 + ) diff --git a/code/go.sum b/code/go.sum index a1738e6..70eb5fd 100644 --- a/code/go.sum +++ b/code/go.sum @@ -3,6 +3,10 @@ github.com/aws/aws-lambda-go v1.19.1 h1:5iUHbIZ2sG6Yq/J1IN3sWm3+vAB1CWwhI21NffLN github.com/aws/aws-lambda-go v1.19.1/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XOkbv4w9SGLU= github.com/aws/aws-sdk-go v1.35.14 h1:nucVVXXjAr9UkmYCBWxQWRuYa5KOlaXjuJGg2ulW0K0= github.com/aws/aws-sdk-go v1.35.14/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= +github.com/aws/aws-sdk-go v1.44.287 h1:CUq2/h0gZ2LOCF61AgQSEMPMfas4gTiQfHBO88gGET0= +github.com/aws/aws-sdk-go v1.44.287/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-secretsmanager-caching-go v1.1.2 h1:tY3pRhAkaohm75KFpGHoqjWrnRpznqrc8iX/wTLVpH0= +github.com/aws/aws-secretsmanager-caching-go v1.1.2/go.mod h1:s3Or+O0O8obPyDJz6875Rg1WApAbQ64L0WTBwYNnKLo= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= @@ -31,12 +35,53 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= diff --git a/code/helper.go b/code/helper.go index 187a9c8..ed8009e 100644 --- a/code/helper.go +++ b/code/helper.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "fmt" "io" "log" "os" @@ -11,14 +12,30 @@ import ( func ExtractEnvironmentVariables() { awsRegion = os.Getenv("AWS_REGION") - accessKey = getSecretValue(os.Getenv("LM_ACCESS_KEY_ARN")) - if accessKey == "" { - log.Fatalf("missing LM_ACCESS_KEY_ARN env var") - } + useSecretManager = os.Getenv("USE_SECRET_MANAGER") + + if useSecretManager == "true" { + fmt.Println("Using Secrets Manager to store LM credentials") + accessKey = getSecretValue(os.Getenv("LM_ACCESS_KEY")) + if accessKey == "" { + log.Fatalf("missing LM_ACCESS_KEY env var") + } + + accessID = getSecretValue(os.Getenv("LM_ACCESS_ID")) + if accessID == "" { + log.Fatalf("missing LM_ACCESS_ID env var") + } + } else { + fmt.Println("Using Environmental Variables to store LM credentials") + accessKey = os.Getenv("LM_ACCESS_KEY") + if accessKey == "" { + log.Fatalf("missing LM_ACCESS_KEY env var") + } - accessID = getSecretValue(os.Getenv("LM_ACCESS_ID_ARN")) - if accessID == "" { - log.Fatalf("missing LM_ACCESS_ID_ARN env var") + accessID = os.Getenv("LM_ACCESS_ID") + if accessID == "" { + log.Fatalf("missing LM_ACCESS_ID env var") + } } lmHost = os.Getenv("LM_HOST") diff --git a/code/lambda.go b/code/lambda.go index 27c4a25..edfcde0 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -13,7 +13,7 @@ import ( "github.com/logicmonitor/lm-logs-sdk-go/ingest" ) -var lmHost, awsRegion, scrubRegex, logSource, versionID string +var lmHost, awsRegion, scrubRegex, logSource, versionID, useSecretManager string var accessID, accessKey, companyName string var debug bool @@ -122,13 +122,15 @@ func ExtractLogs(data interface{}) []ingest.Log { // Lambda handler func handler(request interface{}) { + ExtractEnvironmentVariables() + logs := ExtractLogs(request) ScrubLogsWithRegex(logs) SendLogs(logs) } func main() { - ExtractEnvironmentVariables() http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: false} lambda.Start(handler) + } From 51ce1a87b7b28f0a4ec0e7e578e6a33b3fe9f455 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 2 Aug 2023 18:25:22 +0530 Subject: [PATCH 028/102] DEV-138493:Adding test cases --- code/aws_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/code/aws_test.go b/code/aws_test.go index ce2132e..bed2bc5 100644 --- a/code/aws_test.go +++ b/code/aws_test.go @@ -1,6 +1,8 @@ package main import ( + "os" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -10,3 +12,15 @@ func TestReturnEmptySecretValueOnEmptyInput(t *testing.T) { secret := getSecretValue("") assert.Equal(t, secret, "") } + +func TestAccessSecret(t *testing.T) { + t.Setenv("LM_ACCESS_KEY", "arn:aws:secretsmanager:region:key") + t.Setenv("LM_ACCESS_ID", "arn:aws:secretsmanager:region:id") + t.Setenv("USE_SECRET_MANAGER", "true") + + useSecretManager := os.Getenv("USE_SECRET_MANAGER") + assert.Equal(t, "true", useSecretManager) + assert.True(t, strings.Contains(os.Getenv("LM_ACCESS_KEY"), "arn")) + assert.True(t, strings.Contains(os.Getenv("LM_ACCESS_ID"), "arn")) + +} From ad7a1ab094834fa0e6060129452fc029c53cc39e Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 3 Aug 2023 10:28:00 +0530 Subject: [PATCH 029/102] DEV-138493:Updating the version --- cloudformation.yaml | 2 +- code/version.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 4042c5c..f86c143 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to Logic Monitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.0.6 + Version: 1.2.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/version.properties b/code/version.properties index de652db..1bf5794 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.1.0 +version=1.2.0 From d697ba1f73acff915199e525372d54078050b1a7 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Fri, 4 Aug 2023 10:40:30 +0530 Subject: [PATCH 030/102] DEV-138493:Removing unused varibles --- code/aws.go | 5 ----- code/go.mod | 1 - code/go.sum | 2 -- 3 files changed, 8 deletions(-) diff --git a/code/aws.go b/code/aws.go index 9332174..8887687 100644 --- a/code/aws.go +++ b/code/aws.go @@ -11,11 +11,6 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" - "github.com/aws/aws-secretsmanager-caching-go/secretcache" -) - -var ( - secretCache, _ = secretcache.New() ) type GetContentFromS3Bucket func(string, string) string diff --git a/code/go.mod b/code/go.mod index 28628d2..3242a9c 100644 --- a/code/go.mod +++ b/code/go.mod @@ -8,5 +8,4 @@ require ( github.com/google/uuid v1.1.2 // indirect github.com/logicmonitor/lm-logs-sdk-go v0.1.0 github.com/stretchr/testify v1.8.4 - github.com/aws/aws-secretsmanager-caching-go v1.1.2 // indirect ) diff --git a/code/go.sum b/code/go.sum index 47c1723..7235bfc 100644 --- a/code/go.sum +++ b/code/go.sum @@ -4,8 +4,6 @@ github.com/aws/aws-sdk-go v1.35.14 h1:nucVVXXjAr9UkmYCBWxQWRuYa5KOlaXjuJGg2ulW0K github.com/aws/aws-sdk-go v1.35.14/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go v1.44.287 h1:CUq2/h0gZ2LOCF61AgQSEMPMfas4gTiQfHBO88gGET0= github.com/aws/aws-sdk-go v1.44.287/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-secretsmanager-caching-go v1.1.2 h1:tY3pRhAkaohm75KFpGHoqjWrnRpznqrc8iX/wTLVpH0= -github.com/aws/aws-secretsmanager-caching-go v1.1.2/go.mod h1:s3Or+O0O8obPyDJz6875Rg1WApAbQ64L0WTBwYNnKLo= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= From 16cf3ea952b0b016050900a858a4ed3145d31e71 Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Fri, 25 Aug 2023 23:10:26 +0530 Subject: [PATCH 031/102] DEV-141039 Add custom metadata support for json logs. Add parameter for comma seperated custom metadata json keys. Use gojsonq library for getting values using jsonpath. Add logGroup, logStream in metadata controlled by an ENV variable set to true Add unit tests. Upgrade lm-logs-sdk-go to 1.0.0. --- cloudformation.yaml | 9 ++++- code/go.mod | 5 ++- code/go.sum | 40 +++++--------------- code/helper.go | 19 +++++++++- code/lambda.go | 2 +- code/parse.go | 54 +++++++++++++++++++++++---- code/parse_test.go | 82 ++++++++++++++++++++++++++++------------- code/version.properties | 2 +- 8 files changed, 143 insertions(+), 70 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index f86c143..3dcf361 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to Logic Monitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.2.0 + Version: 1.3.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" @@ -93,6 +93,10 @@ Parameters: AllowedValues: - awsRegion - arn + MetadataKeysForJsonLogs: + Type: CommaDelimitedList + Description: Json keys to include in event metadata for cloudtrail logs + UseSecretManagerForStoringSecrets: Type: String Description: If true it will use secrets manager and cache the credentials which can incur cost to secrets manager.If false it will use enviromental variables @@ -165,6 +169,8 @@ Resources: Ref: LMRegexScrub USE_SECRET_MANAGER: Ref: UseSecretManagerForStoringSecrets + JSON_METADATA_KEYS: !Join [",", !Ref MetadataKeysForJsonLogs] + ADD_CLOUDWATCH_METADATA: "true" Policies: - Version: "2012-10-17" Statement: @@ -371,6 +377,7 @@ Metadata: - LMAccessKey - LMBearerToken - LMRegexScrub + - MetadataKeysForJsonLogs - Label: default: Lambda Function (Optional) Parameters: diff --git a/code/go.mod b/code/go.mod index 3242a9c..d81f0f1 100644 --- a/code/go.mod +++ b/code/go.mod @@ -5,7 +5,8 @@ go 1.14 require ( github.com/aws/aws-lambda-go v1.41.0 github.com/aws/aws-sdk-go v1.44.287 - github.com/google/uuid v1.1.2 // indirect - github.com/logicmonitor/lm-logs-sdk-go v0.1.0 + github.com/google/uuid v1.3.1 // indirect + github.com/logicmonitor/lm-logs-sdk-go v1.0.0 github.com/stretchr/testify v1.8.4 + github.com/thedevsaddam/gojsonq/v2 v2.5.2 ) diff --git a/code/go.sum b/code/go.sum index 7235bfc..8e7876e 100644 --- a/code/go.sum +++ b/code/go.sum @@ -1,23 +1,18 @@ github.com/aws/aws-lambda-go v1.41.0 h1:l/5fyVb6Ud9uYd411xdHZzSf2n86TakxzpvIoz7l+3Y= github.com/aws/aws-lambda-go v1.41.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM= -github.com/aws/aws-sdk-go v1.35.14 h1:nucVVXXjAr9UkmYCBWxQWRuYa5KOlaXjuJGg2ulW0K0= -github.com/aws/aws-sdk-go v1.35.14/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= github.com/aws/aws-sdk-go v1.44.287 h1:CUq2/h0gZ2LOCF61AgQSEMPMfas4gTiQfHBO88gGET0= github.com/aws/aws-sdk-go v1.44.287/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/logicmonitor/lm-logs-sdk-go v0.1.0 h1:RefIgMkZncWbcEI1CZWjkXisHtvWid0bTgCJqiNwTtA= -github.com/logicmonitor/lm-logs-sdk-go v0.1.0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= +github.com/logicmonitor/lm-logs-sdk-go v1.0.0 h1:jru4Y4wA2sJIJACRutaIog9t1sZevgKkQtHraY4rvwI= +github.com/logicmonitor/lm-logs-sdk-go v1.0.0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -29,53 +24,36 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0= +github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/code/helper.go b/code/helper.go index d34c7f3..4a83089 100644 --- a/code/helper.go +++ b/code/helper.go @@ -5,6 +5,7 @@ import ( "io" "log" "os" + "strconv" "strings" ) @@ -55,7 +56,17 @@ func ExtractEnvironmentVariables() { logSource = "lm-logs-aws" - versionID = "0.0.1" + versionID = "1.3.0" + + defaultJsonMetadataKeyString := os.Getenv("JSON_METADATA_KEYS") + defaultJsonMetadataKeysRaw := strings.Split(defaultJsonMetadataKeyString, ",") + for _, str := range defaultJsonMetadataKeysRaw { + defaultJsonMetadataKeys = append(defaultJsonMetadataKeys, strings.Trim(str, " ")) + } + addCWM, err := strconv.ParseBool(os.Getenv("ADD_CLOUDWATCH_METADATA")) + if err == nil { + addCloudWatchMetadata = addCWM + } } func readCloserToString(body io.ReadCloser) string { @@ -69,3 +80,9 @@ func handleFatalError(errStr string, err error) { log.Fatalf("%s: %s", errStr, err) } } + +func mergeMaps(m1 map[string]interface{}, m2 map[string]interface{}) { + for k, v := range m2 { + m1[k] = v + } +} diff --git a/code/lambda.go b/code/lambda.go index 0624c51..4ebfe82 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -13,7 +13,7 @@ import ( "github.com/logicmonitor/lm-logs-sdk-go/ingest" ) -var lmHost, awsRegion, scrubRegex, logSource, versionID ,useSecretManager string +var lmHost, awsRegion, scrubRegex, logSource, versionID, useSecretManager string var accessID, accessKey, bearerToken, companyName string var debug bool diff --git a/code/parse.go b/code/parse.go index 52869bd..c677c22 100644 --- a/code/parse.go +++ b/code/parse.go @@ -12,6 +12,7 @@ import ( "github.com/aws/aws-lambda-go/events" "github.com/logicmonitor/lm-logs-sdk-go/ingest" + jsonq "github.com/thedevsaddam/gojsonq/v2" ) var s3Regex, _ = regexp.Compile(`("bucketName":")(?P[^/][^,][^"]*)|("ARN":")(?P[^/][^,][^"]*)`) @@ -22,6 +23,9 @@ var awsARNRegex, _ = regexp.Compile(`("arn":")(?P[^/][^,][^"]*)`) var sqsRegex, _ = regexp.Compile(`("queueName":")(?P[^/][^,][^"]*)|("queueUrl":")(?P[^/][^,][^"]*)`) var metadataArray []string var ec2Regex, _ = regexp.Compile(`("instanceId":")(?P[^/][^"]*)`) +var goJsonQ = jsonq.New() +var defaultJsonMetadataKeys []string +var addCloudWatchMetadata = false func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { lmBatch := make([]ingest.Log, 0) @@ -105,8 +109,7 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS } func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { - var metadataMap = map[string]string{} - + var metadataMap = map[string]interface{}{} lmBatch := make([]ingest.Log, 0) d, err := request.AWSLogs.Parse() var resourceValue string @@ -183,6 +186,9 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { handleFatalError("failed to parse cloudwatch event", err) + cloudWatchEventMetadata := make(map[string]interface{}) + addCloudWatchEventMetadata(cloudWatchEventMetadata, &d) + for _, event := range d.LogEvents { if strings.TrimSpace(event.Message) != "" { if isEC2NetworkInterface && resourceValue == "" { @@ -193,6 +199,8 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, ec2InstanceID), "ec2.amazonaws.com") } + addCustomMetadataFromRawJson(metadataMap, event.Message, defaultJsonMetadataKeys) + mergeMaps(metadataMap, cloudWatchEventMetadata) lmEv := ingest.Log{ Message: event.Message, @@ -224,9 +232,12 @@ func decompressGzip(content string) string { func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { lmBatch := make([]ingest.Log, 0) + cloudWatchMetadata := make(map[string]interface{}) + addCloudWatchEventMetadata(cloudWatchMetadata, &data) + fmt.Printf("inside parsecloudtrail logs cloudwatchMetadata : %s \n", cloudWatchMetadata) for _, event := range data.LogEvents { metadataMap := extractMetadataForCloudTrail(event.Message) - + mergeMaps(metadataMap, cloudWatchMetadata) resoureIDMap := processResourceMapping(event.Message, data.Owner) lmEv := ingest.Log{ @@ -246,8 +257,8 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } -func extractMetadataForCloudTrail(message string) map[string]string { - var metadataMap = make(map[string]string) +func extractMetadataForCloudTrail(message string) map[string]interface{} { + var metadataMap = make(map[string]interface{}) metadataMap["_integration"] = "aws" for _, str := range metadataArray { if strings.TrimSpace(str) == "awsRegion" { @@ -269,11 +280,12 @@ func extractMetadataForCloudTrail(message string) map[string]string { if len(eventSourceRegexArray) > 0 && eventSourceRegex != 0 { metadataMap["_type"] = fmt.Sprintf(eventSourceRegexArray[eventSourceRegex]) } + addCustomMetadataFromRawJson(metadataMap, message, defaultJsonMetadataKeys) return metadataMap } -func extractMetadata(region string, arn string, eventsource string) map[string]string { - var metadataMap = make(map[string]string) +func extractMetadata(region string, arn string, eventsource string) map[string]interface{} { + var metadataMap = make(map[string]interface{}) metadataMap["_integration"] = "aws" for _, str := range metadataArray { if strings.TrimSpace(str) == "awsRegion" { @@ -287,6 +299,34 @@ func extractMetadata(region string, arn string, eventsource string) map[string]s return metadataMap } +func addCustomMetadataFromRawJson(initialMap map[string]interface{}, rawMessage string, jsonKeys []string) { + + if len(jsonKeys) < 1 { + return + } + if !json.Valid([]byte(rawMessage)) { + return + } + for _, str := range jsonKeys { + val := goJsonQ.FromString(rawMessage).Find(str) + if val != nil { + initialMap[str] = val + } + } +} + +func addCloudWatchEventMetadata(initialMap map[string]interface{}, logData *events.CloudwatchLogsData) { + if !addCloudWatchMetadata { + return + } + if len(logData.LogGroup) > 0 { + initialMap["logGroup"] = logData.LogGroup + } + if len(logData.LogStream) > 0 { + initialMap["logStream"] = logData.LogStream + } +} + func processResourceMapping(message string, accountId string) map[string]string { eventSourceRegex, _ := regexp.Compile(`("eventSource":")([^",]*)`) eventSourceArray := eventSourceRegex.FindStringSubmatch(message) diff --git a/code/parse_test.go b/code/parse_test.go index 5c945ae..d3357aa 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -16,7 +16,7 @@ import ( ) func TestParseELBlogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "elb.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "elb.amazonaws.com"} t.Run("parse elb log without prefix", func(t *testing.T) { message := "2020-05-11T09:24:27.754579Z test 78.82.62.133:64107 172.40.0.85:80 0.00005 0.000852 0.000027 304 304 0 0 \"GET http://test-56808838.eu-west-1.elb.amazonaws.com:80/ HTTP/1.1\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\" - -" @@ -107,7 +107,7 @@ func TestParseELBlogs(t *testing.T) { func TestParseS3logs(t *testing.T) { // Data preparation - var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.aws"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.aws"} time, _ := time.Parse(time.RFC3339, "2020-04-08T13:08:34+00:00") record := events.S3EventRecord{ @@ -152,7 +152,7 @@ func TestParseS3logs(t *testing.T) { } func TestParseCloudWatchlogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ec2.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -174,7 +174,7 @@ func TestParseCloudWatchlogs(t *testing.T) { } func TestRDSLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "rds.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "rds.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAALVSzY7aMBB+FctSpV0pwMSJQ2KEVNpSLqx6gKqHFVqZZEitTeLUNiC04t07G4T2AarePN+fZ8Z+4y16r2vcXnrkin9bbBcvT8vNZrFa8ojbc4eO4CxL8yRJZJoWguDG1itnjz0xE332E1f5iel80F2Jk0oHvdceR/Gktz7UDv2f5mbaBIe6JdeHZgxE+ePel870wdjuu2kCOs/VM1/rdl/pm+kloA+jZkD4bkhbnrAL78I3bioKTWQGEhIAKHIBcZpDMY2TOC9kAaIASGUihYRM5HI6lXlapELkpKIGgqE1BN3SRLEsMiKnWUpB0X09FC9AwAjyEaRMJCrNFB1+br8q9Vk9SzGVO7X+sVKMlb+xfO2t6QKjSBdMVyv2fgG/Rv/Wafz/Oi1t2zcYULGzswFZzPbHw4HegT3AGD49zhiwX4s1O5gGH/wj01WFVUSgw9ae7sfyUjZYzSjDBJzDOIaY+Yj5S1dSBbcq2KAbKhOQzM8Gcoj18zhije1qmu9DrU/oaKo7MGOVuf2zeSZlkrHXLxEjg2l1GCCZE8Svu+tfg3YiCdoCAAA=", @@ -195,7 +195,7 @@ func TestRDSLogs(t *testing.T) { } func TestRDSEnhancedLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "rds.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "rds.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -217,7 +217,7 @@ func TestRDSEnhancedLogs(t *testing.T) { } func TestLambdaLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "lambda.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -239,7 +239,7 @@ func TestLambdaLogs(t *testing.T) { } func TestEC2FlowLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ec2.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAL3RUUsjMRAA4L8S8ly3mcnMJPGtaE8OkRPaN5Fju6ayaHfL7mo5xP/ubEW04MPB0XubZIaZfJkXu8l9X97n5Z9ttqf2fLac/b6aLxazi7md2HbX5E6vIQVgJGKOQa8f2/uLrn3aamZa7vpprnDa5GHXdg8/myF367LK72WLocvlRutyU5+4AOuVphBdFOfBn5RVlbeDlvZPq77q6u1Qt82P+lF79Pb0xq73YVNusr3d95s/52YYUy+2vtO2XhxJAgdMCQlJILFEx8BBopCTSCDCTJQCMnrGyJAk6sihVvpQblQBAuJT8szOucnHl2h7fbOEVYCYGaG6W5MP5utfmG9ZhrEASAUiFOINuAI8FUHPZIi8IR4jMRCNSEzmc/xHSEBmdnY2v16aX5f2dfJv2nRc7YHvkP4uHc2qZeNFoyNrgzuyVkIRoFBmcof08bloENWKJsajQ+E/rvVAPRL3Vl2qob+A3r6+AaSOCSloBAAA", @@ -260,7 +260,7 @@ func TestEC2FlowLogs(t *testing.T) { } func TestNATFlowLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "natGateway.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "natGateway.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAL2Wb2/aMBDGv4qV1zT4zr6z3XeoZWiapk2Cd1M1ZdStopWAknSoqvrdd4FSAdW2F3Mi/og4jn0/7rnz85ytYtMU93HxtInZZXY9WUy+f57O55PZNBtl620VaxmG4IDQWiLvZPhhfT+r148buTMuts24KtpZ0cZt8TSuYrtd1z8/Vm2s74pl3M+et3UsVjI9VuUFMGi6o+KiWC7jppUZzeOPZlmXm7ZcVx/KB3m0yS6/ZUV2s3t6+itWbTfynJW3sohh7YJnSxoMQgiBGdEY0jaANj44MoHlI5dA4LwJ5INxLDu1pfC2xUpClzCcd06W0lqPDv+DLI/qGFcdh6xA52BsDjmwOVxQDl4rMB4VsWZQrEBZGXnb4PBT5qjJ1dX060J9+ZS9jP6Px/XLg2CDMs4DDwXk0wFhjgZOgSw565W1RnCYFUo40DtSSJkjRDxDAnL4igROYZCvnom8Tkf0KrRjvI5lT9VpjrB3HOgJZy/AHQ450oIjAMFy70CYAIgkegg5uJzsmeIEyGjkwfJjUufnhG2PMmwB2TQJkjebvBPUeX7YGLc7hFCZgNQ7EPUOhKTdcBXUr0/ogEC2sQOdqj6hTfhLh8MBBZfQJ0Aewikdy6GtyAY/WIISeoSzBLFEjNKwnRRQ199Aud7LJyQxCOxFXZR7zs07XyqC09bCYEAJLcIf+oFFdkPJLaQwCOcn6lvvlurhoU12SOgR3veD7tWJTYRn/01y8/Ibd82p5VIPAAA=", @@ -281,7 +281,7 @@ func TestNATFlowLogs(t *testing.T) { } func TestParseCloudfrontlogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "cloudFront.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "cloudFront.amazonaws.com"} // Data preparation time, _ := time.Parse(time.RFC3339, "2020-04-08T13:08:34+00:00") @@ -351,7 +351,7 @@ func TestParseCloudtrailLogs(t *testing.T) { }, } - var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ec2.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) @@ -367,7 +367,7 @@ func TestParseCloudtrailLogs(t *testing.T) { } func TestElbGzipLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "elb.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "elb.amazonaws.com"} message := "2020-05-11T09:24:27.754579Z test 78.82.62.133:64107 172.40.0.85:80 0.00005 0.000852 0.000027 304 304 0 0 \"GET http://test-56808838.eu-west-1.elb.amazonaws.com:80/ HTTP/1.1\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\" - -" fileName := "AWSLogs/123123123123/elasticloadbalancing/us-west-1/2020/06/02/123123123123_elasticloadbalancing_us-west-1_test_20200511T0925Z_34.242.46.46_4jtxqo72.gz" time, _ := time.Parse(time.RFC3339, "2020-04-08T15:08:34+02:00") @@ -431,7 +431,7 @@ func TestElbGzipLogs(t *testing.T) { assert.Equal(t, expectedLMEvent, lmEvents[0]) } -//Test case for AWS kinesis logs from cloudtrail +// Test case for AWS kinesis logs from cloudtrail func TestParseKinesisFirehoseLogs(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -439,7 +439,7 @@ func TestParseKinesisFirehoseLogs(t *testing.T) { }, } - var metadataMap = map[string]string{"_integration": "aws", "_type": "firehose.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "firehose.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) @@ -460,7 +460,7 @@ func TestParseKinesisFirehoseLogs(t *testing.T) { } func TestKinesisFirehoseErrorLog(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "firehose.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "firehose.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAADWPQW7CMBBFrxJ5jZTYHtsxu0gNbNpVsqtQ5RITrJI48piiCnH3Di0s/fxm5v8rmzyiG33/s3i2Zi9N33y8tV3XbFu2YvEy+0SYW8OVAFCqNoRPcdymeF7op3QXLL/C7DHgISR/jOjLwWW3eTz+9S4n7ybyBySA50/cp7DkEOdNOGWfkK3fmduz3Z/dfvs539GVhYGGpOYcVAWmri1UWlAUIQ0IS7kMKC2VEbbWQmqj7shaY4WGik7lQAWzmygr19yCrKCSgtvVszit78koXuNYHGIqHl2KZxl2291+AT15qVomAQAA", @@ -492,7 +492,7 @@ func TestKinesisDataStreamLog(t *testing.T) { }, } - var metadataMap = map[string]string{"_integration": "aws", "_type": "kinesis.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "kinesis.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) @@ -518,7 +518,7 @@ func TestECSLog(t *testing.T) { Data: "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", }, } - var metadataMap = map[string]string{"_integration": "aws", "_type": "ecs.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ecs.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) localTime := time.Local @@ -538,7 +538,7 @@ func TestECSLog(t *testing.T) { } func TestELBlowLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "networkInterfaceId.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "networkInterfaceId.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -565,7 +565,7 @@ func TestELBlowLogs(t *testing.T) { } func TestRDSFlowLogs(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "rds.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "rds.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -592,7 +592,7 @@ func TestRDSFlowLogs(t *testing.T) { } func TestFargateLog(t *testing.T) { - var metadataMap = map[string]string{"_integration": "aws", "_type": "fargate.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "fargate.amazonaws.com"} cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ Data: "H4sIAAAAAAAAAH3SS2/bMAwA4L8S+Nyk4ksUcyu2pqed0p2GopBjuTCaF2ynxVD0v4/JMGDdksIXixTET6Teqk0ZhvxU7n/uSzWvvt7c3zx+u10ub+5uq6tq97otvYeBU2KLahDUw+vd012/O+w9c51fh+s29095LL8zy7EveeOptt9tpu36ULbjtO7G6fOhLrOX3M9802y1246589MH/z1sx9I/NqXNh/X4eFpP21YlNyVrxiZKSzVLHepmldu2ZiyQAVMgjK2J1ivQhoiaOgOrNGw1H6s4aDjUw6rv9mO32y66tdcZqvmPKlcPJ+zti+uOkbeqa9xMMaZEaoRECsEXkgxO1xdRQ9BggckAlRFVIxCnGJJXGjtv5Zg33hWILBApoRLD1Z8W+/GCYT5Z9N1kUeoJpEmQueg86OT7/ZcJBsTq/epfCUs0PhICRg7Ry2JgDyEnEwLExMEEWZUloFyQJGL8KIFzkvSZJKYACjEoR4qmJpYEOEZNKUVvGBpZPN3ZP8YLEr8RfZTgOYl9JrFAoBbEmC0EBp+Hp5BMQRwDUYRjUjgOjZnOSyj8J6EzEgifSBiOQzGBUwv8KaI/FxKL4hOz48iiEEUMvof8oVyQ+CvijxI+J4G/JA/vvwBKpFa1vAMAAA==", @@ -620,7 +620,7 @@ func TestParseCloudtrailLogsS3(t *testing.T) { }, } - var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) expectedLMEvent := ingest.Log{ @@ -640,7 +640,7 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { }, } - var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "lambda.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"logs.amazonaws.com\"},\"eventTime\":\"2023-03-08T10:59:01Z\",\"eventSource\":\"lambda.amazonaws.com\",\"eventName\":\"Invoke\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceArn\":\"arn:aws:logs:us-east-1:280443500820:log-group:/aws/cloudtrail:*\",\"sourceAccount\":\"280443500820\"},\"responseElements\":null,\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder:$LATEST\"},\"requestID\":\"fe232070-e23a-4a51-bef4-ab16a95e7b8c\",\"eventID\":\"d833caf0-489d-4692-a286-55dc26e76c5a\",\"readOnly\":false,\"resources\":[{\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\",\"ARN\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":false,\"recipientAccountId\":\"280443500820\",\"sharedEventID\":\"6d1d2f9c-d3d7-4932-9c1a-52555a843990\",\"eventCategory\":\"Data\"}", @@ -660,7 +660,7 @@ func TestCloudTrailLogsEC2(t *testing.T) { fmt.Println("error in unmarshal") } logs := parseCloudTrailLogs(data) - var metadataMap = map[string]string{"_integration": "aws", "_type": "ec2.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ec2.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"123456678\",\"accessKeyId\":\"ASIAUCS54HEKDHXBQTVJ\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"123456678\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-23T05:07:33Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-23T05:36:11Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceAttribute\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.217.191\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"instanceId\":\"i-0d51cd459226160ac\",\"attribute\":\"disableApiTermination\"},\"responseElements\":null,\"requestID\":\"468e0670-30d9-4ef7-ab75-648c03d63371\",\"eventID\":\"78294249-5828-4dde-8b53-49f81d715b95\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"123456678\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), @@ -678,7 +678,7 @@ func TestCloudTrailLogsSQS(t *testing.T) { fmt.Println("error in unmarshal") } logs := parseCloudTrailLogs(data) - var metadataMap = map[string]string{"_integration": "aws", "_type": "sqs.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "sqs.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"123456678\",\"accessKeyId\":\"ASIAUCS54HEKPPHDNOGC\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"123456678\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-03T08:34:17Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-03T09:16:01Z\",\"eventSource\":\"sqs.amazonaws.com\",\"eventName\":\"CreateQueue\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.235.15\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"attribute\":{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Id\\\":\\\"__default_policy_ID\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"__owner_statement\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"AWS\\\":\\\"123456678\\\"},\\\"Action\\\":[\\\"SQS:*\\\"],\\\"Resource\\\":\\\"arn:aws:sqs:us-west-2:123456678:TestPoojaNew\\\"}]}\",\"ReceiveMessageWaitTimeSeconds\":\"0\",\"SqsManagedSseEnabled\":\"true\",\"DelaySeconds\":\"0\",\"KmsMasterKeyId\":\"\",\"RedrivePolicy\":\"\",\"MessageRetentionPeriod\":\"345600\",\"MaximumMessageSize\":\"262144\",\"VisibilityTimeout\":\"30\",\"RedriveAllowPolicy\":\"\"},\"tags\":{\"test\":\"true\"}},\"responseElements\":{\"queueUrl\":\"https://sqs.us-west-2.amazonaws.com/123456678/TestPoojaNew\"},\"requestID\":\"7c41e87a-a828-5717-8eb2-b4b680b92479\",\"eventID\":\"85297ed4-f144-4afb-84ce-63e9e58556b4\",\"readOnly\":false,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"123456678\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), @@ -697,7 +697,7 @@ func TestParseCloudtrailLogsS3ForARN(t *testing.T) { } logs := parseCloudTrailLogs(data) - var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"cloudtrail.amazonaws.com\"},\"eventTime\":\"2023-03-03T07:30:04Z\",\"eventSource\":\"s3.amazonaws.com\",\"eventName\":\"GetBucketAcl\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"cloudtrail.amazonaws.com\",\"userAgent\":\"cloudtrail.amazonaws.com\",\"requestParameters\":{\"Host\":\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\",\"acl\":\"\"},\"responseElements\":null,\"additionalEventData\":{\"SignatureVersion\":\"SigV4\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"bytesTransferredIn\":0,\"AuthenticationMethod\":\"AuthHeader\",\"x-amz-id-2\":\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\",\"bytesTransferredOut\":568},\"requestID\":\"TAQNDGTZC32834P4\",\"eventID\":\"2514d9c5-5365-4b24-ac86-241dea825ad6\",\"readOnly\":true,\"resources\":[{\"accountId\":\"700010466334\",\"type\":\"AWS::S3::Bucket\",\"ARN\":\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"700010466334\",\"sharedEventID\":\"59523b9c-953d-4110-b4d5-b8209621af88\",\"eventCategory\":\"Management\"}", @@ -717,7 +717,7 @@ func TestCloudWatchEventsS3(t *testing.T) { fmt.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) - var metadataMap = map[string]string{"_integration": "aws", "_type": "s3.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"additionalEventData\":{\"AuthenticationMethod\":\"AuthHeader\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"SignatureVersion\":\"SigV4\",\"bytesTransferredIn\":0,\"bytesTransferredOut\":0,\"x-amz-id-2\":\"UJNZntIyly1aAdiFVSPCwh14QRbyGaVQsbTjtgaNHRYgy0gl4p8c2Uu8Iu498icXe/3JHf9VFHo=\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"b9d131b3-70c7-4f74-a203-bddda20b7469\",\"eventName\":\"HeadBucket\",\"eventSource\":\"s3.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:54Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":true,\"recipientAccountId\":\"280443500820\",\"requestID\":\"J9ZE535Z4A4RVWZF\",\"requestParameters\":{\"Host\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"bucketName\":\"sagemaker-studio-280443500820-6jk579yrjdw\"},\"resources\":[{\"ARNPrefix\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw/\",\"type\":\"AWS::S3::Object\"},{\"ARN\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw\",\"accountId\":\"1234567\",\"type\":\"AWS::S3::Bucket\"}],\"responseElements\":null,\"sourceIPAddress\":\"10.54.148.148\",\"tlsDetails\":{\"cipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"clientProvidedHostHeader\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"tlsVersion\":\"TLSv1.2\"},\"userAgent\":\"[aws-sdk-java/1.12.498Linux/5.10.178-162.673.amzn2.x86_64OpenJDK_64-Bit_Server_VM/17.0.7+7-LTSjava/17.0.7vendor/Amazon.com_Inc.cfg/retry-mode/legacy]\",\"userIdentity\":{\"accessKeyId\":\"ASIAUCS54HEKCWHITL6Z\",\"accountId\":\"1234567\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/aws-test-pooja-role/LMAssumeRoleSession\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ:LMAssumeRoleSession\",\"sessionContext\":{\"attributes\":{\"creationDate\":\"2023-07-13T09:06:17Z\",\"mfaAuthenticated\":\"false\"},\"sessionIssuer\":{\"accountId\":\"1234567\",\"arn\":\"arn:aws:iam::280443500820:role/aws-test-pooja-role\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ\",\"type\":\"Role\",\"userName\":\"aws-test-pooja-role\"}},\"type\":\"AssumedRole\"},\"vpcEndpointId\":\"vpce-051f8c152e5ab9b9d\"}", Timestamp: time.Date(2023, time.July, 13, 9, 52, 54, 0, time.Local), @@ -735,7 +735,7 @@ func TestCloudWatchEventsLambda(t *testing.T) { fmt.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) - var metadataMap = map[string]string{"_integration": "aws", "_type": "lambda.amazonaws.com"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "lambda.amazonaws.com"} expectedLMEvent := ingest.Log{ Message: "{\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder:$LATEST\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"e34805e1-c975-40ff-96e9-8fb01c4bd5ec\",\"eventName\":\"Invoke\",\"eventSource\":\"lambda.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:58Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":false,\"recipientAccountId\":\"280443500820\",\"requestID\":\"84fe1797-0fa3-4c28-a84b-318328f0ff1f\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceAccount\":\"280443500820\",\"sourceArn\":\"arn:aws:logs:us-west-2:280443500820:log-group:/aws/events/cloudwatchEventsTest:*\"},\"resources\":[{\"ARN\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\"}],\"responseElements\":null,\"sharedEventID\":\"779c751a-2152-4151-93b9-254d90b5819a\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"userIdentity\":{\"invokedBy\":\"logs.amazonaws.com\",\"type\":\"AWSService\"}}", Timestamp: time.Date(2023, time.July, 13, 9, 52, 58, 0, time.Local), @@ -756,3 +756,33 @@ func TestCloudWatchEventsEC2Lanuch(t *testing.T) { assert.Len(t, logs, 0) } + +func TestCustomMetadataFromJsonEvent(t *testing.T) { + testString := "{\"account\":\"280443500820\",\"detail\":{\"additionalEventData\":{\"AuthenticationMethod\":\"AuthHeader\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"SignatureVersion\":\"SigV4\",\"bytesTransferredIn\":0,\"bytesTransferredOut\":0,\"x-amz-id-2\":\"UJNZntIyly1aAdiFVSPCwh14QRbyGaVQsbTjtgaNHRYgy0gl4p8c2Uu8Iu498icXe/3JHf9VFHo=\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"b9d131b3-70c7-4f74-a203-bddda20b7469\",\"eventName\":\"HeadBucket\",\"eventSource\":\"s3.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:54Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":true,\"recipientAccountId\":\"280443500820\",\"requestID\":\"J9ZE535Z4A4RVWZF\",\"requestParameters\":{\"Host\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"bucketName\":\"sagemaker-studio-280443500820-6jk579yrjdw\"},\"resources\":[{\"ARNPrefix\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw/\",\"type\":\"AWS::S3::Object\"},{\"ARN\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw\",\"accountId\":\"1234567\",\"type\":\"AWS::S3::Bucket\"}],\"responseElements\":null,\"sourceIPAddress\":\"10.54.148.148\",\"tlsDetails\":{\"cipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"clientProvidedHostHeader\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"tlsVersion\":\"TLSv1.2\"},\"userAgent\":\"[aws-sdk-java/1.12.498Linux/5.10.178-162.673.amzn2.x86_64OpenJDK_64-Bit_Server_VM/17.0.7+7-LTSjava/17.0.7vendor/Amazon.com_Inc.cfg/retry-mode/legacy]\",\"userIdentity\":{\"accessKeyId\":\"ASIAUCS54HEKCWHITL6Z\",\"accountId\":\"1234567\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/aws-test-pooja-role/LMAssumeRoleSession\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ:LMAssumeRoleSession\",\"sessionContext\":{\"attributes\":{\"creationDate\":\"2023-07-13T09:06:17Z\",\"mfaAuthenticated\":\"false\"},\"sessionIssuer\":{\"accountId\":\"1234567\",\"arn\":\"arn:aws:iam::280443500820:role/aws-test-pooja-role\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ\",\"type\":\"Role\",\"userName\":\"aws-test-pooja-role\"}},\"type\":\"AssumedRole\"},\"vpcEndpointId\":\"vpce-051f8c152e5ab9b9d\"},\"detail-type\":\"AWS API Call via CloudTrail\",\"id\":\"0cc13242-9685-6b5a-4881-e970d28cc19c\",\"region\":\"us-west-2\",\"resources\":[],\"source\":\"aws.s3\",\"time\":\"2023-07-13T09:52:54Z\",\"version\":\"0\"}" + jsonKeys := []string{"account", "detail.additionalEventData.AuthenticationMethod", "detail.resources.[0].type"} + customMetadataMap := make(map[string]interface{}) + addCustomMetadataFromRawJson(customMetadataMap, testString, jsonKeys) + fmt.Println(customMetadataMap) + assert.Equal(t, customMetadataMap["account"], "280443500820") + assert.Equal(t, customMetadataMap["detail.additionalEventData.AuthenticationMethod"], "AuthHeader") + assert.Equal(t, customMetadataMap["detail.resources.[0].type"], "AWS::S3::Object") + +} + +func TestCloudWatchLogMetadataExtraction(t *testing.T) { + addCloudWatchMetadata = true + cloudWatchLogData1 := events.CloudwatchLogsData{ + Owner: "dummy", + LogGroup: "dummyloggroup", + LogStream: "dummyLogStream", + SubscriptionFilters: []string{"abc", "def"}, + MessageType: "dummyMessageType", + LogEvents: []events.CloudwatchLogsLogEvent{}, + } + + cloudWatchLogMetaDataMap := make(map[string]interface{}) + addCloudWatchEventMetadata(cloudWatchLogMetaDataMap, &cloudWatchLogData1) + assert.Equal(t, cloudWatchLogMetaDataMap["logGroup"], "dummyloggroup") + assert.Equal(t, cloudWatchLogMetaDataMap["logStream"], "dummyLogStream") + +} diff --git a/code/version.properties b/code/version.properties index 1bf5794..78d97e4 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.2.0 +version=1.3.0 From 4689fc64dfe1397c6b9c7b73c841ed18261316e4 Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Mon, 28 Aug 2023 10:31:52 +0530 Subject: [PATCH 032/102] DEV-141039 Improve gojsonq logic and avoid serialization overhead. --- code/parse.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index c677c22..c5e4922 100644 --- a/code/parse.go +++ b/code/parse.go @@ -307,8 +307,10 @@ func addCustomMetadataFromRawJson(initialMap map[string]interface{}, rawMessage if !json.Valid([]byte(rawMessage)) { return } + jsonQRead := goJsonQ.FromString(rawMessage) for _, str := range jsonKeys { - val := goJsonQ.FromString(rawMessage).Find(str) + val := jsonQRead.Find(str) + jsonQRead.Reset() if val != nil { initialMap[str] = val } From 9b4a4bab5c3d114e7edfffda08f93c43cb980b7b Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Mon, 28 Aug 2023 11:26:29 +0530 Subject: [PATCH 033/102] DEV-141039 Remove unwanted logs. --- cloudformation.yaml | 2 +- code/parse.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 3dcf361..1386820 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -95,7 +95,7 @@ Parameters: - arn MetadataKeysForJsonLogs: Type: CommaDelimitedList - Description: Json keys to include in event metadata for cloudtrail logs + Description: Json keys to include in event metadata for cloudtaril logs and cloudwatch logs of json type UseSecretManagerForStoringSecrets: Type: String diff --git a/code/parse.go b/code/parse.go index c5e4922..3eb4f1b 100644 --- a/code/parse.go +++ b/code/parse.go @@ -234,7 +234,6 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { cloudWatchMetadata := make(map[string]interface{}) addCloudWatchEventMetadata(cloudWatchMetadata, &data) - fmt.Printf("inside parsecloudtrail logs cloudwatchMetadata : %s \n", cloudWatchMetadata) for _, event := range data.LogEvents { metadataMap := extractMetadataForCloudTrail(event.Message) mergeMaps(metadataMap, cloudWatchMetadata) From 6df0fff3a90832c9444ff8a52a07876d876af67a Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Fri, 8 Sep 2023 11:05:39 +0530 Subject: [PATCH 034/102] DEV-143214:Adding support for event types other than AWS_API_CALL_VIA_CLOUDTRAIL --- code/parse.go | 59 +++++++++++++++++++++++++++++----------------- code/parse_test.go | 40 +++++++++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 23 deletions(-) diff --git a/code/parse.go b/code/parse.go index 3eb4f1b..e406086 100644 --- a/code/parse.go +++ b/code/parse.go @@ -21,11 +21,13 @@ var awsRegionRegex, _ = regexp.Compile(`("awsRegion":")(?P[^/][^,][^" var awsEventSourceRegex, _ = regexp.Compile(`("eventSource":")(?P[^/][^,][^"]*)`) var awsARNRegex, _ = regexp.Compile(`("arn":")(?P[^/][^,][^"]*)`) var sqsRegex, _ = regexp.Compile(`("queueName":")(?P[^/][^,][^"]*)|("queueUrl":")(?P[^/][^,][^"]*)`) -var metadataArray []string var ec2Regex, _ = regexp.Compile(`("instanceId":")(?P[^/][^"]*)`) -var goJsonQ = jsonq.New() +var cloudwatchResourceRegex, _ = regexp.Compile(`("resources":\[")(?P[^/][^,][^"]*)`) + var defaultJsonMetadataKeys []string var addCloudWatchMetadata = false +var metadataArray []string +var goJsonQ = jsonq.New() func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { lmBatch := make([]ingest.Log, 0) @@ -443,31 +445,46 @@ func processResourceMapping(message string, accountId string) map[string]string func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { lmBatch := make([]ingest.Log, 0) + var resoureIDMap = make(map[string]string) + var metadataMap map[string]interface{} + var event string + if request.DetailType == "AWS API Call via CloudTrail" { + detailStr, err := json.Marshal(&request.Detail) + if err != nil { + panic(err) + } - detailStr, err := json.Marshal(&request.Detail) - if err != nil { - panic(err) - } - - event := string(detailStr) + event = string(detailStr) + metadataMap = extractMetadataForCloudTrail(event) + resoureIDMap = processResourceMapping(event, request.AccountID) - if request.DetailType == "AWS API Call via CloudTrail" { - metadataMap := extractMetadataForCloudTrail(event) - resoureIDMap := processResourceMapping(event, request.AccountID) - lmEv := ingest.Log{ - Message: event, - ResourceID: resoureIDMap, - Timestamp: request.Time.Local(), - Metadata: metadataMap, + } else { + requestStr, err := json.Marshal(&request) + if err != nil { + panic(err) } + event = string(requestStr) + // the other detail-types for cloudwatch events have different json format and hence processing it separately - if debug { - fmt.Printf("request generated to lm-logs api: %s\n", lmEv) + cloudwatchResourceRegexArray := cloudwatchResourceRegex.FindStringSubmatch(event) + cloudwatchResource := cloudwatchResourceRegex.SubexpIndex("resources") + if len(cloudwatchResourceRegexArray) > 0 && cloudwatchResource != 0 { + resoureIDMap["system.aws.arn"] = fmt.Sprintf(cloudwatchResourceRegexArray[cloudwatchResource]) } + metadataMap = extractMetadata(request.Region, fmt.Sprintf(cloudwatchResourceRegexArray[cloudwatchResource]), request.Source) - lmBatch = append(lmBatch, lmEv) - } else { - return nil // for now we will ignore the other detail-types for cloudwatch events + } + + lmEv := ingest.Log{ + Message: event, + ResourceID: resoureIDMap, + Timestamp: request.Time.Local(), + Metadata: metadataMap, + } + lmBatch = append(lmBatch, lmEv) + + if debug { + fmt.Printf("request generated to lm-logs api: %s\n", lmEv) } return lmBatch diff --git a/code/parse_test.go b/code/parse_test.go index d3357aa..1e8107f 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -745,7 +745,7 @@ func TestCloudWatchEventsLambda(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } -func TestCloudWatchEventsEC2Lanuch(t *testing.T) { +func TestCloudWatchEventsEC2Launch(t *testing.T) { var s = "{\"version\":\"0\",\"id\":\"1681ab87-4a09-459f-95a2-7fa09403c4b7\",\"detail-type\":\"EC2InstanceLaunchUnsuccessful\",\"source\":\"aws.autoscaling\",\"account\":\"123456789012\",\"time\":\"2015-11-11T21:42:36Z\",\"region\":\"us-east-1\",\"resources\":[\"arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:528ffce5-ef9f-4c1d-8d18-5d005b4a438c:autoScalingGroupName/sampleBrokenASG\",\"arn:aws:ec2:us-east-1:123456789012:instance/\"],\"detail\":{\"StatusCode\":\"Failed\",\"AutoScalingGroupName\":\"brokenASG\",\"ActivityId\":\"06076c51-4874-487d-b15b-7895a713ab55\",\"Details\":{\"AvailabilityZone\":\"us-east-1e\",\"SubnetID\":\"subnet-16c5df2c\"},\"RequestId\":\"06076c51-4874-487d-b15b-7895a713ab55\",\"EndTime\":\"2015-11-11T21:42:36.000Z\",\"EC2InstanceId\":\"\",\"StartTime\":\"2015-11-11T21:42:36.698Z\",\"Cause\":\"At2015-11-11T21:42:09ZauserrequestupdateofAutoScalingGroupconstraintstomin:0,max:10,desired:2changingthedesiredcapacityfrom0to2.At2015-11-11T21:42:35Zaninstancewasstartedinresponsetoadifferencebetweendesiredandactualcapacity,increasingthecapacityfrom0to2.\"}}" var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) @@ -754,7 +754,7 @@ func TestCloudWatchEventsEC2Lanuch(t *testing.T) { } logs := parseCloudWatchEvents(data) - assert.Len(t, logs, 0) + assert.Len(t, logs, 1) } func TestCustomMetadataFromJsonEvent(t *testing.T) { @@ -786,3 +786,39 @@ func TestCloudWatchLogMetadataExtraction(t *testing.T) { assert.Equal(t, cloudWatchLogMetaDataMap["logStream"], "dummyLogStream") } + +func TestCloudWatchEventsS3Else(t *testing.T) { + var s = "{\"version\":\"0\",\"id\":\"17793124-05d4-b198-2fde-7ededc63b103\",\"detail-type\":\"ObjectCreated\",\"source\":\"aws.s3\",\"account\":\"123456789012\",\"time\":\"2021-11-12T00:00:00Z\",\"region\":\"ca-central-1\",\"resources\":[\"arn:aws:s3:::example-bucket\"],\"detail\":{\"version\":\"0\",\"bucket\":{\"name\":\"example-bucket\"},\"object\":{\"key\":\"example-key\",\"size\":5,\"etag\":\"b1946ac92492d2347c6235b4d2611184\",\"version-id\":\"IYV3p45BT0ac8hjHg1houSdS1a.Mro8e\",\"sequencer\":\"00617F08299329D189\"},\"request-id\":\"N4N7GDK58NMKJ12R\",\"requester\":\"123456789012\",\"source-ip-address\":\"1.2.3.4\",\"reason\":\"PutObject\"}}" + var data events.CloudWatchEvent + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudWatchEvents(data) + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.s3"} + expectedLMEvent := ingest.Log{ + Message: "{\"version\":\"0\",\"id\":\"17793124-05d4-b198-2fde-7ededc63b103\",\"detail-type\":\"ObjectCreated\",\"source\":\"aws.s3\",\"account\":\"123456789012\",\"time\":\"2021-11-12T00:00:00Z\",\"region\":\"ca-central-1\",\"resources\":[\"arn:aws:s3:::example-bucket\"],\"detail\":{\"version\":\"0\",\"bucket\":{\"name\":\"example-bucket\"},\"object\":{\"key\":\"example-key\",\"size\":5,\"etag\":\"b1946ac92492d2347c6235b4d2611184\",\"version-id\":\"IYV3p45BT0ac8hjHg1houSdS1a.Mro8e\",\"sequencer\":\"00617F08299329D189\"},\"request-id\":\"N4N7GDK58NMKJ12R\",\"requester\":\"123456789012\",\"source-ip-address\":\"1.2.3.4\",\"reason\":\"PutObject\"}}", + Timestamp: time.Date(2021, time.November, 12, 0, 0, 0, 0, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::example-bucket"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} + +func TestCloudWatchEventsEC2Else(t *testing.T) { + var s = "{\"account\":\"280443500820\",\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"},\"detail-type\":\"EC2InstanceState-changeNotification\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"source\":\"aws.ec2\",\"time\":\"2023-09-04T10:45:46Z\",\"version\":\"0\"}" + var data events.CloudWatchEvent + err := json.Unmarshal([]byte(s), &data) + if err != nil { + fmt.Println("error in unmarshal") + } + logs := parseCloudWatchEvents(data) + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.ec2"} + expectedLMEvent := ingest.Log{ + Message: "{\"version\":\"0\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"detail-type\":\"EC2InstanceState-changeNotification\",\"source\":\"aws.ec2\",\"account\":\"280443500820\",\"time\":\"2023-09-04T10:45:46Z\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"}}", + Timestamp: time.Date(2023, time.September, 4, 10, 45, 46, 0, time.Local), + ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} From 5b09667a31973d47dbb3992075c165b7cb33e6db Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 14 Sep 2023 13:17:16 +0530 Subject: [PATCH 035/102] DEV-133928: Refactoring, removing unwanted variables, logging, removing redundant code --- code/aws.go | 35 ++++++------ code/helper.go | 15 +++--- code/lambda.go | 19 +++---- code/parse.go | 131 ++++++++++++++++++++------------------------- code/parse_test.go | 28 +++++----- 5 files changed, 107 insertions(+), 121 deletions(-) diff --git a/code/aws.go b/code/aws.go index 8887687..3f6acf5 100644 --- a/code/aws.go +++ b/code/aws.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io" + "log" "net/http" "os" @@ -16,6 +17,8 @@ import ( type GetContentFromS3Bucket func(string, string) string func getSecretValue(secretArn string) string { + var objmap map[string]interface{} + if len(secretArn) < 1 { return "" } @@ -23,26 +26,26 @@ func getSecretValue(secretArn string) string { req, err := http.NewRequest("GET", secrets_extension_endpoint, nil) if err != nil { - fmt.Println("Error creating HTTP request to secrets extension: ", err) + log.Println("Error creating HTTP request to secrets extension: ", err) return "" } req.Header.Add("X-Aws-Parameters-Secrets-Token", os.Getenv("AWS_SESSION_TOKEN")) + resp, err := http.DefaultClient.Do(req) if err != nil { - fmt.Println("Error sending HTTP request to secrets extension: ", err) + log.Println("Error sending HTTP request to secrets extension: ", err) return "" } // Read the response body body, err := io.ReadAll(resp.Body) if err != nil { - fmt.Println("Error reading HTTP response body:", err) + log.Println("Error reading HTTP response body:", err) return "" } - var objmap map[string]interface{} if err := json.Unmarshal(body, &objmap); err != nil { - fmt.Println(err) + log.Println(err) } str := fmt.Sprintf("%v", objmap["SecretString"]) @@ -50,7 +53,6 @@ func getSecretValue(secretArn string) string { } func getContentsFromS3Bucket(bucketName string, fileName string) string { - session := session.Must(session.NewSession()) s3Manager := s3.New(session) s3ObjectOutput, err := s3Manager.GetObject(&s3.GetObjectInput{ @@ -63,34 +65,37 @@ func getContentsFromS3Bucket(bucketName string, fileName string) string { } func convertToCloudWatchLogsEvent(m interface{}) events.CloudwatchLogsEvent { - data, err := json.Marshal(m) - handleFatalError("failed to marshal s3 event", err) + data, _ := marshalEvent(m) var result events.CloudwatchLogsEvent - err = json.Unmarshal(data, &result) + var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal s3 event", err) return result } func convertToS3Event(m interface{}) events.S3Event { - data, err := json.Marshal(m) - handleFatalError("failed to marshal s3 event", err) + data, _ := marshalEvent(m) var result events.S3Event - err = json.Unmarshal(data, &result) + var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal s3 event", err) return result } func convertToCloudWatchEvent(m interface{}) events.CloudWatchEvent { - data, err := json.Marshal(m) - handleFatalError("failed to marshal cloudWatch event", err) + data, _ := marshalEvent(m) var result events.CloudWatchEvent - err = json.Unmarshal(data, &result) + var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal cloudWatch event", err) return result } + +func marshalEvent(m interface{}) ([]byte, error) { + data, err := json.Marshal(m) + handleFatalError("failed to marshal s3 event", err) + return data, err +} diff --git a/code/helper.go b/code/helper.go index 4a83089..fa7ca28 100644 --- a/code/helper.go +++ b/code/helper.go @@ -14,6 +14,12 @@ func ExtractEnvironmentVariables() { useSecretManager = os.Getenv("USE_SECRET_MANAGER") + if os.Getenv("DEBUG") == "true" { + debug = true + } else { + debug = false + } + if useSecretManager == "true" { if debug { log.Println("Using Secrets Manager to store LM credentials") @@ -36,22 +42,15 @@ func ExtractEnvironmentVariables() { } - lmHost = os.Getenv("LM_HOST") companyName = os.Getenv("LM_COMPANY_NAME") defaultMetadata := os.Getenv("METADATA") metadataArray = strings.Split(defaultMetadata, ",") - if lmHost == "" && companyName == "" { + if companyName == "" { log.Fatalf("missing company name") } - if os.Getenv("DEBUG") == "true" { - debug = true - } else { - debug = false - } - scrubRegex = os.Getenv("LM_SCRUB_REGEX") logSource = "lm-logs-aws" diff --git a/code/lambda.go b/code/lambda.go index 4ebfe82..904be36 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -3,7 +3,6 @@ package main import ( "crypto/tls" "encoding/json" - "fmt" "log" "net/http" "regexp" @@ -13,8 +12,7 @@ import ( "github.com/logicmonitor/lm-logs-sdk-go/ingest" ) -var lmHost, awsRegion, scrubRegex, logSource, versionID, useSecretManager string -var accessID, accessKey, bearerToken, companyName string +var awsRegion, scrubRegex, logSource, versionID, useSecretManager, accessID, accessKey, bearerToken, companyName string var debug bool func getCompany() string { @@ -22,9 +20,7 @@ func getCompany() string { return companyName } - r := regexp.MustCompile(`https://([^\.]*).logicmonitor.com`) - result := r.FindStringSubmatch(lmHost) - return result[1] + return "" } func SendLogs(logs []ingest.Log) { @@ -44,8 +40,8 @@ func SendLogs(logs []ingest.Log) { if debug || !ingestResponse.Success { json, _ := json.Marshal(ingestResponse) - fmt.Printf("Response: %s\n", string(json)) - fmt.Println(string(json)) + log.Printf("Response: %s\n", string(json)) + log.Println(string(json)) } } @@ -93,8 +89,8 @@ func ExtractLogs(data interface{}) []ingest.Log { if debug { json, _ := json.Marshal(data) - fmt.Printf("Event Recieved: %s\n", string(json)) - fmt.Printf("Source: %s\n", source) + log.Printf("Event Recieved: %s\n", string(json)) + log.Printf("Source: %s\n", source) } switch source { @@ -108,7 +104,7 @@ func ExtractLogs(data interface{}) []ingest.Log { s3Event := convertToS3Event(data) logs, err = parseELBlogs(s3Event, getContentsFromS3Bucket) if err != nil { - fmt.Printf("WARN failed to parse elb logs %s\n", err) + log.Printf("WARN failed to parse elb logs %s\n", err) } case "cloudwatchEvents": cloudwatchEvents := convertToCloudWatchEvent(data) @@ -120,6 +116,7 @@ func ExtractLogs(data interface{}) []ingest.Log { // Lambda handler func handler(request interface{}) { ExtractEnvironmentVariables() + logs := ExtractLogs(request) ScrubLogsWithRegex(logs) SendLogs(logs) diff --git a/code/parse.go b/code/parse.go index e406086..09c85c3 100644 --- a/code/parse.go +++ b/code/parse.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "log" "net/http" "regexp" "strings" @@ -15,15 +16,6 @@ import ( jsonq "github.com/thedevsaddam/gojsonq/v2" ) -var s3Regex, _ = regexp.Compile(`("bucketName":")(?P[^/][^,][^"]*)|("ARN":")(?P[^/][^,][^"]*)`) -var lambdaRegex, _ = regexp.Compile(`("functionName":")(?P[^/][^,][^"]*)|("resource":")(?P[^/][^,][^"]*)|("functionVersion":")(?P[^/][^,][^"]*)`) -var awsRegionRegex, _ = regexp.Compile(`("awsRegion":")(?P[^/][^,][^"]*)`) -var awsEventSourceRegex, _ = regexp.Compile(`("eventSource":")(?P[^/][^,][^"]*)`) -var awsARNRegex, _ = regexp.Compile(`("arn":")(?P[^/][^,][^"]*)`) -var sqsRegex, _ = regexp.Compile(`("queueName":")(?P[^/][^,][^"]*)|("queueUrl":")(?P[^/][^,][^"]*)`) -var ec2Regex, _ = regexp.Compile(`("instanceId":")(?P[^/][^"]*)`) -var cloudwatchResourceRegex, _ = regexp.Compile(`("resources":\[")(?P[^/][^,][^"]*)`) - var defaultJsonMetadataKeys []string var addCloudWatchMetadata = false var metadataArray []string @@ -43,15 +35,13 @@ func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFrom keySplit := strings.Split(key, "_") - re := regexp.MustCompile(`AWSLogs\/(.*)\/elasticloadbalancing`) - accountIDMatches := re.FindStringSubmatch(keySplit[0]) + accountIDMatches := regexCompile(elbAccountId).FindStringSubmatch(keySplit[0]) if len(accountIDMatches) < 2 { return lmBatch, fmt.Errorf("failed to parse accountId for: %s", key) } accountId := accountIDMatches[1] - re = regexp.MustCompile(`\/elasticloadbalancing\/(.*?)\/`) - regionMatches := re.FindStringSubmatch(keySplit[0]) + regionMatches := regexCompile(elbRegion).FindStringSubmatch(keySplit[0]) if len(regionMatches) < 2 { return lmBatch, fmt.Errorf("failed to parse region for: %s", key) } @@ -82,6 +72,7 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS var arn string bucketName := request.Records[0].S3.Bucket.Name fileName := request.Records[0].S3.Object.Key + lmBatch := make([]ingest.Log, 0) content := getContentsFromS3Bucket(bucketName, fileName) @@ -95,8 +86,6 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS arn = fmt.Sprintf("arn:aws:s3:::%s", bucketName) } - lmBatch := make([]ingest.Log, 0) - metadataMap := extractMetadata(request.Records[0].AWSRegion, arn, request.Records[0].EventSource) lmEv := ingest.Log{ Message: content, @@ -126,7 +115,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { rdsInstance := rdsEnhancedEvent["instanceID"] resourceValue = fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance) resoureProp[resourceProperty] = resourceValue - metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance), "rds.amazonaws.com") + metadataMap = extractMetadata(awsRegion, resourceValue, "rds.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/rds") { splitLogGroup := strings.Split(d.LogGroup, "/") if splitLogGroup[len(splitLogGroup)-1] == "networkInterface" { @@ -137,12 +126,11 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { metadataMap = extractMetadata(awsRegion, "", "rds.amazonaws.com") } else { - re1, _ := regexp.Compile(`/aws/rds/(instance|cluster)/([^/]*)`) - result := re1.FindStringSubmatch(d.LogGroup) + result := regexCompile(rdsInstanceRegex).FindStringSubmatch(d.LogGroup) rdsInstance := result[2] resourceValue = fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance) resoureProp[resourceProperty] = resourceValue - metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:rds:%s:%s:db:%s", awsRegion, d.Owner, rdsInstance), "rds.amazonaws.com") + metadataMap = extractMetadata(awsRegion, resourceValue, "rds.amazonaws.com") } } else if d.LogGroup != "/aws/lambda/lm" && strings.Contains(d.LogGroup, "/aws/lambda") { @@ -151,7 +139,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { lambdaName := result[1] resourceValue = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, d.Owner, lambdaName) resoureProp[resourceProperty] = resourceValue - metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, d.Owner, lambdaName), "lambda.amazonaws.com") + metadataMap = extractMetadata(awsRegion, resourceValue, "lambda.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/ec2/networkInterface") { isEC2NetworkInterface = true } else if strings.Contains(d.LogGroup, "/aws/natGateway/networkInterface") { @@ -163,9 +151,9 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { } else if strings.Contains(d.LogGroup, "/aws/kinesisfirehose") { splitLogGroup := strings.Split(d.LogGroup, "/") - resourceValue = splitLogGroup[3] - resoureProp[resourceProperty] = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, d.Owner, resourceValue) - metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, d.Owner, resourceValue), "firehose.amazonaws.com") + resourceValue = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, d.Owner, splitLogGroup[3]) + resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, resourceValue, "firehose.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/elb/networkInterface") { resourceProperty = "system.aws.networkInterfaceId" splitLogStream := strings.Split(d.LogStream, "-") @@ -182,7 +170,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue - metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream), "ec2.amazonaws.com") + metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") } @@ -198,7 +186,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { ec2InstanceID := splitEventMessage[0] resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, ec2InstanceID) resoureProp[resourceProperty] = resourceValue - metadataMap = extractMetadata(awsRegion, fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, ec2InstanceID), "ec2.amazonaws.com") + metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") } addCustomMetadataFromRawJson(metadataMap, event.Message, defaultJsonMetadataKeys) @@ -249,7 +237,7 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { } if debug { - fmt.Printf("request generated to lm-logs api: %s\n", lmEv) + log.Printf("request generated to lm-logs api: %s\n", lmEv) } lmBatch = append(lmBatch, lmEv) } @@ -263,21 +251,21 @@ func extractMetadataForCloudTrail(message string) map[string]interface{} { metadataMap["_integration"] = "aws" for _, str := range metadataArray { if strings.TrimSpace(str) == "awsRegion" { - regionRegexArray := awsRegionRegex.FindStringSubmatch(message) - awsRegion := awsRegionRegex.SubexpIndex("awsRegion") + regionRegexArray := regexCompile(awsRegionRegex).FindStringSubmatch(message) + awsRegion := regexCompile(awsRegionRegex).SubexpIndex("awsRegion") if len(regionRegexArray) > 0 && awsRegion != 0 { metadataMap["region"] = fmt.Sprintf(regionRegexArray[awsRegion]) } } else if strings.TrimSpace(str) == "arn" { - arnRegexArray := awsARNRegex.FindStringSubmatch(message) - awsARN := awsARNRegex.SubexpIndex("arn") + arnRegexArray := regexCompile(awsARNRegex).FindStringSubmatch(message) + awsARN := regexCompile(awsARNRegex).SubexpIndex("arn") if len(arnRegexArray) > 0 && awsARN != 0 { metadataMap["arn"] = fmt.Sprintf(arnRegexArray[awsARN]) } } } - eventSourceRegexArray := awsEventSourceRegex.FindStringSubmatch(message) - eventSourceRegex := awsEventSourceRegex.SubexpIndex("eventSource") + eventSourceRegexArray := regexCompile(awsEventSourceRegex).FindStringSubmatch(message) + eventSourceRegex := regexCompile(awsEventSourceRegex).SubexpIndex("eventSource") if len(eventSourceRegexArray) > 0 && eventSourceRegex != 0 { metadataMap["_type"] = fmt.Sprintf(eventSourceRegexArray[eventSourceRegex]) } @@ -331,57 +319,54 @@ func addCloudWatchEventMetadata(initialMap map[string]interface{}, logData *even } func processResourceMapping(message string, accountId string) map[string]string { - eventSourceRegex, _ := regexp.Compile(`("eventSource":")([^",]*)`) - eventSourceArray := eventSourceRegex.FindStringSubmatch(message) + eventSourceArray := regexCompile(eventSourceRegex).FindStringSubmatch(message) eventSource := eventSourceArray[2] var lambdaMapping string accountLevelLog := true var resoureIDMap = make(map[string]string) + var resourceProperty string = "system.aws.arn" - if eventSource == "firehose.amazonaws.com" { - kinesisFirehoseRegex, _ := regexp.Compile(`("deliveryStreamName":"|"deliveryStreamName": "|:deliverystream/)([^/][^,][^"]*)`) - deliveryStreamArray := kinesisFirehoseRegex.FindStringSubmatch(message) + if strings.Contains(eventSource, "firehose") { + deliveryStreamArray := regexCompile(kinesisFirehoseRegex).FindStringSubmatch(message) if len(deliveryStreamArray) > 2 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, accountId, deliveryStreamArray[2]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:firehose:%s:%s:deliverystream/%s", awsRegion, accountId, deliveryStreamArray[2]) accountLevelLog = false } - } else if eventSource == "kinesis.amazonaws.com" { - kinesisDataStreamRegex, _ := regexp.Compile(`("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)`) - dataStreamArray := kinesisDataStreamRegex.FindStringSubmatch(message) + } else if strings.Contains(eventSource, "kinesis") { + dataStreamArray := regexCompile(kinesisDataStreamRegex).FindStringSubmatch(message) if len(dataStreamArray) > 2 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:kinesis:%s:%s:stream/%s", awsRegion, accountId, dataStreamArray[2]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:kinesis:%s:%s:stream/%s", awsRegion, accountId, dataStreamArray[2]) accountLevelLog = false } - } else if eventSource == "ecs.amazonaws.com" { - ecsStreamRegex, _ := regexp.Compile(`("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)`) - ecsStreamArray := ecsStreamRegex.FindStringSubmatch(message) + } else if strings.Contains(eventSource, "ecs") { + ecsStreamArray := regexCompile(ecsStreamRegex).FindStringSubmatch(message) if len(ecsStreamArray) > 2 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ecs:%s:%s:cluster/%s", awsRegion, accountId, ecsStreamArray[2]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ecs:%s:%s:cluster/%s", awsRegion, accountId, ecsStreamArray[2]) accountLevelLog = false } - } else if eventSource == "s3.amazonaws.com" { - s3RegexArray := s3Regex.FindStringSubmatch(message) + } else if strings.Contains(eventSource, "s3") { + s3RegexArray := regexCompile(s3Regex).FindStringSubmatch(message) - s3Arn := s3Regex.SubexpIndex("arn") - s3Bucket := s3Regex.SubexpIndex("bucketName") + s3Arn := regexCompile(s3Regex).SubexpIndex("arn") + s3Bucket := regexCompile(s3Regex).SubexpIndex("bucketName") if len(s3RegexArray) > 0 { if s3RegexArray[s3Bucket] != "" { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) accountLevelLog = false } else if s3RegexArray[s3Arn] != "" { - resoureIDMap["system.aws.arn"] = fmt.Sprintf(s3RegexArray[s3Arn]) + resoureIDMap[resourceProperty] = fmt.Sprintf(s3RegexArray[s3Arn]) accountLevelLog = false } } - } else if eventSource == "lambda.amazonaws.com" { + } else if strings.Contains(eventSource, "lambda") { - lambdaRegexArray := lambdaRegex.FindStringSubmatch(message) + lambdaRegexArray := regexCompile(lambdaRegex).FindStringSubmatch(message) if len(lambdaRegexArray) > 0 { - lambdaFunctionName := lambdaRegex.SubexpIndex("functionName") - lambdaResourceName := lambdaRegex.SubexpIndex("resource") - lambdaFunctionWithVersion := lambdaRegex.SubexpIndex("functionVersion") + lambdaFunctionName := regexCompile(lambdaRegex).SubexpIndex("functionName") + lambdaResourceName := regexCompile(lambdaRegex).SubexpIndex("resource") + lambdaFunctionWithVersion := regexCompile(lambdaRegex).SubexpIndex("functionVersion") functionNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaFunctionName]) resourceNameStr := fmt.Sprintf("%v", lambdaRegexArray[lambdaResourceName]) @@ -397,39 +382,39 @@ func processResourceMapping(message string, accountId string) map[string]string if lambdaMapping != "" { accountLevelLog = false if strings.Contains(lambdaMapping, "arn:aws:lambda") && !strings.Contains(lambdaMapping, ":$") { - resoureIDMap["system.aws.arn"] = lambdaMapping + resoureIDMap[resourceProperty] = lambdaMapping } else if !strings.Contains(lambdaMapping, "arn:aws:lambda") { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, accountId, lambdaMapping) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:lambda:%s:%s:function:%s", awsRegion, accountId, lambdaMapping) } else if strings.Contains(lambdaMapping, ":$") { - resoureIDMap["system.aws.arn"] = strings.Split(lambdaMapping, ":$")[0] + resoureIDMap[resourceProperty] = strings.Split(lambdaMapping, ":$")[0] } else { accountLevelLog = true } } } - } else if eventSource == "ec2.amazonaws.com" { - ec2RegexArray := ec2Regex.FindAllStringSubmatch(message, -1) + } else if strings.Contains(eventSource, "ec2") { + ec2RegexArray := regexCompile(ec2Regex).FindAllStringSubmatch(message, -1) if len(ec2RegexArray) == 1 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) accountLevelLog = false } - } else if eventSource == "sqs.amazonaws.com" { - sqsRegexArray := sqsRegex.FindStringSubmatch(message) + } else if strings.Contains(eventSource, "sqs") { + sqsRegexArray := regexCompile(sqsRegex).FindStringSubmatch(message) - sqsName := sqsRegex.SubexpIndex("queueName") - sqsUrl := sqsRegex.SubexpIndex("queueUrl") + sqsName := regexCompile(sqsRegex).SubexpIndex("queueName") + sqsUrl := regexCompile(sqsRegex).SubexpIndex("queueUrl") if len(sqsRegexArray) > 0 { if sqsRegexArray[sqsName] != "" { - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, accountId, sqsRegexArray[sqsName]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, accountId, sqsRegexArray[sqsName]) accountLevelLog = false } else if sqsRegexArray[sqsUrl] != "" { subStr := strings.Split(sqsRegexArray[sqsUrl], "/") - resoureIDMap["system.aws.arn"] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, accountId, subStr[len(subStr)-1]) + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:sqs:%s:%s:%s", awsRegion, accountId, subStr[len(subStr)-1]) accountLevelLog = false } } @@ -448,7 +433,7 @@ func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { var resoureIDMap = make(map[string]string) var metadataMap map[string]interface{} var event string - if request.DetailType == "AWS API Call via CloudTrail" { + if strings.EqualFold(request.DetailType, "AWS API Call via CloudTrail") { detailStr, err := json.Marshal(&request.Detail) if err != nil { panic(err) @@ -466,8 +451,8 @@ func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { event = string(requestStr) // the other detail-types for cloudwatch events have different json format and hence processing it separately - cloudwatchResourceRegexArray := cloudwatchResourceRegex.FindStringSubmatch(event) - cloudwatchResource := cloudwatchResourceRegex.SubexpIndex("resources") + cloudwatchResourceRegexArray := regexCompile(cloudwatchResourceRegex).FindStringSubmatch(event) + cloudwatchResource := regexCompile(cloudwatchResourceRegex).SubexpIndex("resources") if len(cloudwatchResourceRegexArray) > 0 && cloudwatchResource != 0 { resoureIDMap["system.aws.arn"] = fmt.Sprintf(cloudwatchResourceRegexArray[cloudwatchResource]) } @@ -484,7 +469,7 @@ func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { lmBatch = append(lmBatch, lmEv) if debug { - fmt.Printf("request generated to lm-logs api: %s\n", lmEv) + log.Printf("request generated to lm-logs api: %s\n", lmEv) } return lmBatch diff --git a/code/parse_test.go b/code/parse_test.go index 1e8107f..0c9d46d 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -3,7 +3,7 @@ package main import ( "compress/gzip" "encoding/json" - "fmt" + "log" "os" "strings" "testing" @@ -313,7 +313,7 @@ func TestParseCloudfrontlogs(t *testing.T) { w := gzip.NewWriter(f) _, err := w.Write([]byte(logMsg)) if err != nil { - fmt.Println("Error in writing log in file") + log.Println("Error in writing log in file") } w.Close() @@ -322,7 +322,7 @@ func TestParseCloudfrontlogs(t *testing.T) { result := make([]byte, 100) _, err = f.Read(result) if err != nil { - fmt.Println("Error in reading from file") + log.Println("Error in reading from file") } defer f.Close() @@ -398,7 +398,7 @@ func TestElbGzipLogs(t *testing.T) { w := gzip.NewWriter(f) _, err := w.Write([]byte(logMsg)) if err != nil { - fmt.Println("Error in writing log in file") + log.Println("Error in writing log in file") } w.Close() @@ -407,7 +407,7 @@ func TestElbGzipLogs(t *testing.T) { result := make([]byte, 512) _, err = f.Read(result) if err != nil { - fmt.Println("Error in reading from file") + log.Println("Error in reading from file") } defer f.Close() @@ -657,7 +657,7 @@ func TestCloudTrailLogsEC2(t *testing.T) { var data events.CloudwatchLogsData err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudTrailLogs(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ec2.amazonaws.com"} @@ -675,7 +675,7 @@ func TestCloudTrailLogsSQS(t *testing.T) { var data events.CloudwatchLogsData err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudTrailLogs(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "sqs.amazonaws.com"} @@ -693,7 +693,7 @@ func TestParseCloudtrailLogsS3ForARN(t *testing.T) { var data events.CloudwatchLogsData err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudTrailLogs(data) @@ -714,7 +714,7 @@ func TestCloudWatchEventsS3(t *testing.T) { var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} @@ -732,7 +732,7 @@ func TestCloudWatchEventsLambda(t *testing.T) { var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "lambda.amazonaws.com"} @@ -750,7 +750,7 @@ func TestCloudWatchEventsEC2Launch(t *testing.T) { var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) @@ -762,7 +762,7 @@ func TestCustomMetadataFromJsonEvent(t *testing.T) { jsonKeys := []string{"account", "detail.additionalEventData.AuthenticationMethod", "detail.resources.[0].type"} customMetadataMap := make(map[string]interface{}) addCustomMetadataFromRawJson(customMetadataMap, testString, jsonKeys) - fmt.Println(customMetadataMap) + log.Println(customMetadataMap) assert.Equal(t, customMetadataMap["account"], "280443500820") assert.Equal(t, customMetadataMap["detail.additionalEventData.AuthenticationMethod"], "AuthHeader") assert.Equal(t, customMetadataMap["detail.resources.[0].type"], "AWS::S3::Object") @@ -792,7 +792,7 @@ func TestCloudWatchEventsS3Else(t *testing.T) { var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.s3"} @@ -810,7 +810,7 @@ func TestCloudWatchEventsEC2Else(t *testing.T) { var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) if err != nil { - fmt.Println("error in unmarshal") + log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.ec2"} From bd3af398d3c831b2b3705260bd3e6aaf7901e89a Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 14 Sep 2023 13:40:58 +0530 Subject: [PATCH 036/102] DEV-133928:Typos in description of variabls --- cloudformation.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 1386820..98e3441 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -1,6 +1,6 @@ AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 -Description: Pushes logs from AWS to Logic Monitor logs endpoint. +Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: @@ -75,17 +75,17 @@ Parameters: Type: String NoEcho: true Default: "" - Description: The LM API tokens access ID + Description: The LogicMonitor API tokens access ID LMAccessKey: Type: String NoEcho: true Default: "" - Description: The LM API tokens access key + Description: The LogicMonitor API tokens access key LMBearerToken: Type: String NoEcho: true Default: "" - Description: The LM API Bearer token. (You must specify LMBearerToken if not providing LMAccessId, LMAccessKey. In case you provide all, LMAccessId and LMAccessKey will be used to authenticate with Logicmonitor. ) + Description: The LogicMonitor API Bearer token. (You must specify LMBearerToken if not providing LMAccessId, LMAccessKey. In case you provide all, LMAccessId and LMAccessKey will be used to authenticate with Logicmonitor. ) Metadata: Type: CommaDelimitedList Description: Metadata if any @@ -319,21 +319,21 @@ Resources: Type: AWS::SecretsManager::Secret Condition: CreateSecretAccess Properties: - Description: Logic Monitor Access Key + Description: LogicMonitor Access Key SecretString: Ref: LMAccessKey AccessIdSecret: Type: AWS::SecretsManager::Secret Condition: CreateSecretAccess Properties: - Description: Logic Monitor Access Id + Description: LogicMonitor Access Id SecretString: Ref: LMAccessId BearerTokenSecret: Type: AWS::SecretsManager::Secret Condition: CreateSecretBearerToken Properties: - Description: Logic Monitor Bearer Token + Description: LogicMonitor Bearer Token SecretString: Ref: LMBearerToken Conditions: @@ -357,7 +357,7 @@ Conditions: - !Condition CreateSecretManager Outputs: LMForwarderArn: - Description: Logic Monitor Forwarder Lambda Function ARN + Description: LogicMonitor Forwarder Lambda Function ARN Value: Fn::GetAtt: - Forwarder From a7d996bc746ef492ea93407b7a2211aa2e453120 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 14 Sep 2023 16:18:35 +0530 Subject: [PATCH 037/102] DEV-133928:Addressing review comments --- code/aws.go | 6 ++---- code/lambda.go | 7 ++++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/aws.go b/code/aws.go index 3f6acf5..a1a14e4 100644 --- a/code/aws.go +++ b/code/aws.go @@ -10,7 +10,6 @@ import ( "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" ) @@ -53,12 +52,12 @@ func getSecretValue(secretArn string) string { } func getContentsFromS3Bucket(bucketName string, fileName string) string { - session := session.Must(session.NewSession()) - s3Manager := s3.New(session) + s3ObjectOutput, err := s3Manager.GetObject(&s3.GetObjectInput{ Bucket: aws.String(bucketName), Key: aws.String(fileName), }) + handleFatalError("could not get s3 logs object", err) return readCloserToString(s3ObjectOutput.Body) @@ -76,7 +75,6 @@ func convertToCloudWatchLogsEvent(m interface{}) events.CloudwatchLogsEvent { func convertToS3Event(m interface{}) events.S3Event { data, _ := marshalEvent(m) - var result events.S3Event var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal s3 event", err) diff --git a/code/lambda.go b/code/lambda.go index 904be36..9edc87c 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -9,11 +9,15 @@ import ( "strings" "github.com/aws/aws-lambda-go/lambda" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3" "github.com/logicmonitor/lm-logs-sdk-go/ingest" ) var awsRegion, scrubRegex, logSource, versionID, useSecretManager, accessID, accessKey, bearerToken, companyName string var debug bool +var sessionNew *session.Session +var s3Manager *s3.S3 func getCompany() string { if companyName != "" { @@ -116,7 +120,8 @@ func ExtractLogs(data interface{}) []ingest.Log { // Lambda handler func handler(request interface{}) { ExtractEnvironmentVariables() - + sessionNew = session.Must(session.NewSession()) + s3Manager = s3.New(sessionNew) logs := ExtractLogs(request) ScrubLogsWithRegex(logs) SendLogs(logs) From df7394d59442e72b40adf1d2d2be8eee4dea7fb0 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Fri, 15 Sep 2023 10:25:39 +0530 Subject: [PATCH 038/102] DEV-133928: Adding a missed file for regex constants --- code/regex_constants.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 code/regex_constants.go diff --git a/code/regex_constants.go b/code/regex_constants.go new file mode 100644 index 0000000..19c248c --- /dev/null +++ b/code/regex_constants.go @@ -0,0 +1,24 @@ +package main + +import "regexp" + +var s3Regex = `("bucketName":")(?P[^/][^,][^"]*)|("ARN":")(?P[^/][^,][^"]*)` +var lambdaRegex = `("functionName":")(?P[^/][^,][^"]*)|("resource":")(?P[^/][^,][^"]*)|("functionVersion":")(?P[^/][^,][^"]*)` +var awsRegionRegex = `("awsRegion":")(?P[^/][^,][^"]*)` +var awsEventSourceRegex = `("eventSource":")(?P[^/][^,][^"]*)` +var awsARNRegex = `("arn":")(?P[^/][^,][^"]*)` +var sqsRegex = `("queueName":")(?P[^/][^,][^"]*)|("queueUrl":")(?P[^/][^,][^"]*)` +var ec2Regex = `("instanceId":")(?P[^/][^"]*)` +var cloudwatchResourceRegex = `("resources":\[")(?P[^/][^,][^"]*)` +var elbAccountId = `AWSLogs\/(.*)\/elasticloadbalancing` +var elbRegion = `\/elasticloadbalancing\/(.*?)\/` +var rdsInstanceRegex = `/aws/rds/(instance|cluster)/([^/]*)` +var eventSourceRegex = `("eventSource":")([^",]*)` +var kinesisFirehoseRegex = `("deliveryStreamName":"|"deliveryStreamName": "|:deliverystream/)([^/][^,][^"]*)` +var kinesisDataStreamRegex = `("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)` +var ecsStreamRegex = `("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)` + +func regexCompile(regexStr string) *regexp.Regexp { + var regex, _ = regexp.Compile(regexStr) + return regex +} From 14e1149b33c0272d19168cbeb449934eb4deb067 Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Wed, 25 Oct 2023 10:36:00 +0530 Subject: [PATCH 039/102] Update build steps for migrating aws lambda go runtime to provided.al2 --- Dockerfile | 6 +++--- cloudformation.yaml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 10a8270..05f897d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,8 +9,8 @@ RUN go mod download COPY code/* /code/ FROM base as build -RUN go build -o main *.go \ - && zip lambda.zip main +RUN go build -o bootstrap *.go \ + && zip lambda.zip bootstrap FROM base as test RUN go test @@ -21,4 +21,4 @@ RUN golangci-lint run . FROM alpine as release WORKDIR /code COPY --from=build /code/lambda.zip /code/ -VOLUME /code \ No newline at end of file +VOLUME /code diff --git a/cloudformation.yaml b/cloudformation.yaml index 98e3441..e5a0263 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -143,10 +143,10 @@ Resources: FunctionName: Ref: FunctionName Description: Pushes aws logs to Logic Monitor log endpoint. - Handler: main + Handler: bootstrap MemorySize: Ref: FunctionMemorySize - Runtime: go1.x + Runtime: provided.al2 CodeUri: Bucket: !Ref ForwarderZipsBucket Key: main.zip From 28101dcc74db857f230148e3d0b6f84469ca2520 Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:39:05 +0530 Subject: [PATCH 040/102] Bump up version due to build method change --- cloudformation.yaml | 2 +- code/version.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index e5a0263..a240778 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.3.0 + Version: 1.4.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/version.properties b/code/version.properties index 78d97e4..7dc9496 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.3.0 +version=1.4.0 From 50f4981042ba0de28ce38e6861d7feeaa7bc54f9 Mon Sep 17 00:00:00 2001 From: Siddharth Kulkarni <36110391+siddharthck@users.noreply.github.com> Date: Thu, 9 Nov 2023 09:43:10 +0530 Subject: [PATCH 041/102] Add encryption aes256 with copier lambda while uploading source code to destination s3. --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index a240778..c84d620 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -265,7 +265,7 @@ Resources: s3 = boto3.client('s3') filename = "main.zip" with urllib.request.urlopen(source_zip_url) as data: - s3.upload_fileobj(data, dest_zips_bucket, filename) + s3.upload_fileobj(data, dest_zips_bucket, filename, ExtraArgs={'ServerSideEncryption':'AES256'}) def timeout(event, context): logger.error('Execution is about to time out, sending failure response to CloudFormation') send_cfn_resp(event, context, 'FAILED') From 1c8ccdda39a6ef308bd53e706e74a63e753a22bb Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 29 Nov 2023 19:01:56 +0530 Subject: [PATCH 042/102] DEV-150953: Adding support for tenant.id in metadata --- cloudformation.yaml | 9 ++++++++- code/helper.go | 2 ++ code/parse.go | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 98e3441..1570aee 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -96,7 +96,11 @@ Parameters: MetadataKeysForJsonLogs: Type: CommaDelimitedList Description: Json keys to include in event metadata for cloudtaril logs and cloudwatch logs of json type - + Default: "" + LMTenantIdentifier: + Type: String + Description: LogicMonitor Tenant Identifier send in the metadata with logs to LogicMonitor portal + Default: "" UseSecretManagerForStoringSecrets: Type: String Description: If true it will use secrets manager and cache the credentials which can incur cost to secrets manager.If false it will use enviromental variables @@ -171,6 +175,8 @@ Resources: Ref: UseSecretManagerForStoringSecrets JSON_METADATA_KEYS: !Join [",", !Ref MetadataKeysForJsonLogs] ADD_CLOUDWATCH_METADATA: "true" + LM_TENANT_IDENTIFIER: + Ref: LMTenantIdentifier Policies: - Version: "2012-10-17" Statement: @@ -378,6 +384,7 @@ Metadata: - LMBearerToken - LMRegexScrub - MetadataKeysForJsonLogs + - LMTenantIdentifier - Label: default: Lambda Function (Optional) Parameters: diff --git a/code/helper.go b/code/helper.go index fa7ca28..b4c2c49 100644 --- a/code/helper.go +++ b/code/helper.go @@ -66,6 +66,8 @@ func ExtractEnvironmentVariables() { if err == nil { addCloudWatchMetadata = addCWM } + + lmTenantID = os.Getenv("LM_TENANT_IDENTIFIER") } func readCloserToString(body io.ReadCloser) string { diff --git a/code/parse.go b/code/parse.go index 09c85c3..2798a98 100644 --- a/code/parse.go +++ b/code/parse.go @@ -19,6 +19,7 @@ import ( var defaultJsonMetadataKeys []string var addCloudWatchMetadata = false var metadataArray []string +var lmTenantID string var goJsonQ = jsonq.New() func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { @@ -270,6 +271,9 @@ func extractMetadataForCloudTrail(message string) map[string]interface{} { metadataMap["_type"] = fmt.Sprintf(eventSourceRegexArray[eventSourceRegex]) } addCustomMetadataFromRawJson(metadataMap, message, defaultJsonMetadataKeys) + if strings.TrimSpace(lmTenantID) != "" { + metadataMap["_lm.tenantId"] = lmTenantID + } return metadataMap } @@ -285,6 +289,10 @@ func extractMetadata(region string, arn string, eventsource string) map[string]i } } metadataMap["_type"] = eventsource + if strings.TrimSpace(lmTenantID) != "" { + metadataMap["_lm.tenantId"] = lmTenantID + } + return metadataMap } From dcafa379c2818af68c1a36c035b09e4efea5c28b Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 30 Nov 2023 11:44:06 +0530 Subject: [PATCH 043/102] DEV-150953:Adding test case --- code/parse_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/parse_test.go b/code/parse_test.go index 0c9d46d..1182bde 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -19,6 +19,7 @@ func TestParseELBlogs(t *testing.T) { var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "elb.amazonaws.com"} t.Run("parse elb log without prefix", func(t *testing.T) { + message := "2020-05-11T09:24:27.754579Z test 78.82.62.133:64107 172.40.0.85:80 0.00005 0.000852 0.000027 304 304 0 0 \"GET http://test-56808838.eu-west-1.elb.amazonaws.com:80/ HTTP/1.1\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\" - -" fileName := "AWSLogs/123123123123/elasticloadbalancing/us-west-1/2020/06/02/123123123123_elasticloadbalancing_us-west-1_test_20200511T0925Z_34.242.46.46_4jtxqo72.txt" time, _ := time.Parse(time.RFC3339, "2020-04-08T15:08:34+02:00") @@ -806,6 +807,9 @@ func TestCloudWatchEventsS3Else(t *testing.T) { } func TestCloudWatchEventsEC2Else(t *testing.T) { + t.Setenv("LM_TENANT_IDENTIFIER", "123456") + t.Setenv("LM_COMPANY_NAME", "test") + ExtractEnvironmentVariables() var s = "{\"account\":\"280443500820\",\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"},\"detail-type\":\"EC2InstanceState-changeNotification\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"source\":\"aws.ec2\",\"time\":\"2023-09-04T10:45:46Z\",\"version\":\"0\"}" var data events.CloudWatchEvent err := json.Unmarshal([]byte(s), &data) @@ -813,7 +817,7 @@ func TestCloudWatchEventsEC2Else(t *testing.T) { log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) - var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.ec2"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.ec2", "_lm.tenantId": "123456"} expectedLMEvent := ingest.Log{ Message: "{\"version\":\"0\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"detail-type\":\"EC2InstanceState-changeNotification\",\"source\":\"aws.ec2\",\"account\":\"280443500820\",\"time\":\"2023-09-04T10:45:46Z\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"}}", Timestamp: time.Date(2023, time.September, 4, 10, 45, 46, 0, time.Local), From 18ffa51850ebf5611196ec77e63426c3dbe61594 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 30 Nov 2023 12:27:57 +0530 Subject: [PATCH 044/102] DEV-150953:Moving metadata to Optional parameter label --- cloudformation.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 1570aee..0c9030a 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -383,10 +383,13 @@ Metadata: - LMAccessKey - LMBearerToken - LMRegexScrub - - MetadataKeysForJsonLogs - - LMTenantIdentifier + - UseSecretManagerForStoringSecrets - Label: default: Lambda Function (Optional) Parameters: + - Metadata + - MetadataKeysForJsonLogs + - LMTenantIdentifier - FunctionMemorySize - FunctionTimeoutInSeconds + From 679a39e9fea9438f82e7e2a75b7531d83855d2ad Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 20 Dec 2023 13:56:42 +0530 Subject: [PATCH 045/102] DEV-152175: Migrating from lm-logs-sdk-go to lm-data-sdk-go --- cloudformation.yaml | 8 +- code/aws_test.go | 8 +- code/go.mod | 2 +- code/go.sum | 1109 +++++++++++++++++++++++++++++++++++++++++++ code/helper.go | 18 +- code/lambda.go | 62 ++- code/parse.go | 58 +-- code/parse_test.go | 174 ++++--- 8 files changed, 1276 insertions(+), 163 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index d44dc44..13dc397 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -163,12 +163,12 @@ Resources: - Ref: AWS::NoValue Environment: Variables: - LM_COMPANY_NAME: + LM_ACCOUNT: Ref: LMCompanyName METADATA: !Join [",", !Ref Metadata] - LM_ACCESS_ID: !If [UseLMV1ForAuth, !If [CreateSecretManager, !Ref AccessIdSecret, !Ref LMAccessId], ""] #!Ref AccessIdSecret, !If [UseLMV1ForAuth, !Ref LMAccessId, "" ] - LM_ACCESS_KEY: !If [UseLMV1ForAuth, !If [CreateSecretManager, !Ref AccessKeySecret, !Ref LMAccessKey], ""] - LM_BEARER_TOKEN: !If [MustUseBearerTokenForAuth, !If [CreateSecretManager, !Ref BearerTokenSecret, !Ref LMBearerToken], ""] + LOGICMONITOR_ACCESS_ID: !If [UseLMV1ForAuth, !If [CreateSecretManager, !Ref AccessIdSecret, !Ref LMAccessId], ""] #!Ref AccessIdSecret, !If [UseLMV1ForAuth, !Ref LMAccessId, "" ] + LOGICMONITOR_ACCESS_KEY: !If [UseLMV1ForAuth, !If [CreateSecretManager, !Ref AccessKeySecret, !Ref LMAccessKey], ""] + LOGICMONITOR_BEARER_TOKEN: !If [MustUseBearerTokenForAuth, !If [CreateSecretManager, !Ref BearerTokenSecret, !Ref LMBearerToken], ""] LM_SCRUB_REGEX: Ref: LMRegexScrub USE_SECRET_MANAGER: diff --git a/code/aws_test.go b/code/aws_test.go index bed2bc5..db1f519 100644 --- a/code/aws_test.go +++ b/code/aws_test.go @@ -14,13 +14,13 @@ func TestReturnEmptySecretValueOnEmptyInput(t *testing.T) { } func TestAccessSecret(t *testing.T) { - t.Setenv("LM_ACCESS_KEY", "arn:aws:secretsmanager:region:key") - t.Setenv("LM_ACCESS_ID", "arn:aws:secretsmanager:region:id") + t.Setenv("LOGICMONITOR_ACCESS_KEY", "arn:aws:secretsmanager:region:key") + t.Setenv("LOGICMONITOR_ACCESS_ID", "arn:aws:secretsmanager:region:id") t.Setenv("USE_SECRET_MANAGER", "true") useSecretManager := os.Getenv("USE_SECRET_MANAGER") assert.Equal(t, "true", useSecretManager) - assert.True(t, strings.Contains(os.Getenv("LM_ACCESS_KEY"), "arn")) - assert.True(t, strings.Contains(os.Getenv("LM_ACCESS_ID"), "arn")) + assert.True(t, strings.Contains(os.Getenv("LOGICMONITOR_ACCESS_KEY"), "arn")) + assert.True(t, strings.Contains(os.Getenv("LOGICMONITOR_ACCESS_ID"), "arn")) } diff --git a/code/go.mod b/code/go.mod index d81f0f1..7db914a 100644 --- a/code/go.mod +++ b/code/go.mod @@ -6,7 +6,7 @@ require ( github.com/aws/aws-lambda-go v1.41.0 github.com/aws/aws-sdk-go v1.44.287 github.com/google/uuid v1.3.1 // indirect - github.com/logicmonitor/lm-logs-sdk-go v1.0.0 github.com/stretchr/testify v1.8.4 github.com/thedevsaddam/gojsonq/v2 v2.5.2 + github.com/logicmonitor/lm-data-sdk-go v1.0.0 ) diff --git a/code/go.sum b/code/go.sum index 8e7876e..3299680 100644 --- a/code/go.sum +++ b/code/go.sum @@ -1,64 +1,1173 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/aws/aws-lambda-go v1.41.0 h1:l/5fyVb6Ud9uYd411xdHZzSf2n86TakxzpvIoz7l+3Y= github.com/aws/aws-lambda-go v1.41.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM= github.com/aws/aws-sdk-go v1.44.287 h1:CUq2/h0gZ2LOCF61AgQSEMPMfas4gTiQfHBO88gGET0= github.com/aws/aws-sdk-go v1.44.287/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/logicmonitor/lm-data-sdk-go v1.0.0 h1:2eiz7kq3G0rLc/hqVpsk1c2B0PMjp6nLhHzc5SmTn80= +github.com/logicmonitor/lm-data-sdk-go v1.0.0/go.mod h1:XvYS9xp/0WrPpc6ge2O3ZPn2dgbKO46PnfCfbKaeUu8= github.com/logicmonitor/lm-logs-sdk-go v1.0.0 h1:jru4Y4wA2sJIJACRutaIog9t1sZevgKkQtHraY4rvwI= github.com/logicmonitor/lm-logs-sdk-go v1.0.0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0= github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/collector/pdata v1.0.0-rc6 h1:qsFpsJWwpvUDg5GgaADa67mQpHoF2k7Yap6utad7kaI= +go.opentelemetry.io/collector/pdata v1.0.0-rc6/go.mod h1:Eud2ehoJr3n4RclhcYfhrlRIbl/nxwTl4w2D/Fyzp20= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/code/helper.go b/code/helper.go index b4c2c49..a3ed4b8 100644 --- a/code/helper.go +++ b/code/helper.go @@ -24,25 +24,25 @@ func ExtractEnvironmentVariables() { if debug { log.Println("Using Secrets Manager to store LM credentials") } - accessKey = getSecretValue(os.Getenv("LM_ACCESS_KEY")) + accessKey = getSecretValue(os.Getenv("LOGICMONITOR_ACCESS_KEY")) - accessID = getSecretValue(os.Getenv("LM_ACCESS_ID")) + accessID = getSecretValue(os.Getenv("LOGICMONITOR_ACCESS_ID")) - bearerToken = getSecretValue((os.Getenv("LM_BEARER_TOKEN"))) + bearerToken = getSecretValue((os.Getenv("LOGICMONITOR_BEARER_TOKEN"))) } else { if debug { log.Println("Using Environmental Variables to store LM credentials") } - accessKey = os.Getenv("LM_ACCESS_KEY") + accessKey = os.Getenv("LOGICMONITOR_ACCESS_KEY") - accessID = os.Getenv("LM_ACCESS_ID") + accessID = os.Getenv("LOGICMONITOR_ACCESS_ID") - bearerToken = os.Getenv("LM_BEARER_TOKEN") + bearerToken = os.Getenv("LOGICMONITOR_BEARER_TOKEN") } - companyName = os.Getenv("LM_COMPANY_NAME") + companyName = os.Getenv("LM_ACCOUNT") defaultMetadata := os.Getenv("METADATA") metadataArray = strings.Split(defaultMetadata, ",") @@ -53,10 +53,6 @@ func ExtractEnvironmentVariables() { scrubRegex = os.Getenv("LM_SCRUB_REGEX") - logSource = "lm-logs-aws" - - versionID = "1.3.0" - defaultJsonMetadataKeyString := os.Getenv("JSON_METADATA_KEYS") defaultJsonMetadataKeysRaw := strings.Split(defaultJsonMetadataKeyString, ",") for _, str := range defaultJsonMetadataKeysRaw { diff --git a/code/lambda.go b/code/lambda.go index 9edc87c..4c3505c 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -1,8 +1,10 @@ package main import ( + "context" "crypto/tls" "encoding/json" + "fmt" "log" "net/http" "regexp" @@ -11,35 +13,27 @@ import ( "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" - "github.com/logicmonitor/lm-logs-sdk-go/ingest" + "github.com/logicmonitor/lm-data-sdk-go/api/logs" + "github.com/logicmonitor/lm-data-sdk-go/model" + "github.com/logicmonitor/lm-data-sdk-go/utils" ) -var awsRegion, scrubRegex, logSource, versionID, useSecretManager, accessID, accessKey, bearerToken, companyName string +var awsRegion, scrubRegex, useSecretManager, accessID, accessKey, bearerToken, companyName string + var debug bool var sessionNew *session.Session var s3Manager *s3.S3 -func getCompany() string { - if companyName != "" { - return companyName - } - - return "" -} - -func SendLogs(logs []ingest.Log) { - - if len(logs) == 0 { +func SendLogs(logInput []model.LogInput, lmLog *logs.LMLogIngest) { + if len(logInput) == 0 { return } - lmIngest, err := ingest.NewLogIngester(getCompany(), accessID, accessKey, bearerToken, logSource, versionID) + ingestResponse, err := lmLog.SendLogs(context.Background(), logInput) if err != nil { - log.Fatalf("Error while setting up LM Log Ingestion client. Error : %s", err) + fmt.Println("Error in sending log to LM : ", err) } - // Send logs to Logic Monitor - ingestResponse, err := lmIngest.SendLogs(logs) handleFatalError("Request failed", err) if debug || !ingestResponse.Success { @@ -49,13 +43,13 @@ func SendLogs(logs []ingest.Log) { } } -func ScrubLogsWithRegex(lmBatch []ingest.Log) { +func ScrubLogsWithRegex(lmBatch []model.LogInput) { if scrubRegex != "" { reg := regexp.MustCompile(scrubRegex) for _, event := range lmBatch { - log.Print(event.Message) - event.Message = reg.ReplaceAllString(event.Message, "") - log.Print(event.Message) + log.Printf("%s", fmt.Sprintf("%s", event.Message)) + event.Message = reg.ReplaceAllString(fmt.Sprintf("%s", event.Message), "") + log.Printf("%s", fmt.Sprintf("%s", event.Message)) } } } @@ -86,8 +80,8 @@ func ParseEventType(requests interface{}) string { return "" } -func ExtractLogs(data interface{}) []ingest.Log { - logs := []ingest.Log{} +func ExtractLogs(data interface{}) []model.LogInput { + logs := []model.LogInput{} var err error source := ParseEventType(data) @@ -122,9 +116,25 @@ func handler(request interface{}) { ExtractEnvironmentVariables() sessionNew = session.Must(session.NewSession()) s3Manager = s3.New(sessionNew) - logs := ExtractLogs(request) - ScrubLogsWithRegex(logs) - SendLogs(logs) + log := ExtractLogs(request) + ScrubLogsWithRegex(log) + + auth := utils.AuthParams{AccessID: accessID, + AccessKey: accessKey, + BearerToken: bearerToken, + CollectorCredentials: ""} + + options := []logs.Option{ + logs.WithLogBatchingDisabled(), + logs.WithAuthentication(auth), + } + + lmLog, err := logs.NewLMLogIngest(context.Background(), options...) + if err != nil { + fmt.Println("Error in initilaizing log ingest ", err) + return + } + SendLogs(log, lmLog) } func main() { diff --git a/code/parse.go b/code/parse.go index 2798a98..465cdad 100644 --- a/code/parse.go +++ b/code/parse.go @@ -12,7 +12,7 @@ import ( "time" "github.com/aws/aws-lambda-go/events" - "github.com/logicmonitor/lm-logs-sdk-go/ingest" + "github.com/logicmonitor/lm-data-sdk-go/model" jsonq "github.com/thedevsaddam/gojsonq/v2" ) @@ -22,8 +22,8 @@ var metadataArray []string var lmTenantID string var goJsonQ = jsonq.New() -func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]ingest.Log, error) { - lmBatch := make([]ingest.Log, 0) +func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]model.LogInput, error) { + lmBatch := make([]model.LogInput, 0) bucketName := request.Records[0].S3.Bucket.Name key := request.Records[0].S3.Object.Key @@ -57,10 +57,10 @@ func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFrom metadataMap := extractMetadata(region, arn, "elb.amazonaws.com") for _, message := range allMessages { - log := ingest.Log{ + log := model.LogInput{ Message: message, - ResourceID: map[string]string{"system.aws.arn": arn}, - Timestamp: request.Records[0].EventTime, + ResourceID: map[string]interface{}{"system.aws.arn": arn}, + Timestamp: request.Records[0].EventTime.String(), Metadata: metadataMap, } @@ -69,11 +69,11 @@ func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFrom return lmBatch, nil } -func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) []ingest.Log { +func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) []model.LogInput { var arn string bucketName := request.Records[0].S3.Bucket.Name fileName := request.Records[0].S3.Object.Key - lmBatch := make([]ingest.Log, 0) + lmBatch := make([]model.LogInput, 0) content := getContentsFromS3Bucket(bucketName, fileName) @@ -88,10 +88,10 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS } metadataMap := extractMetadata(request.Records[0].AWSRegion, arn, request.Records[0].EventSource) - lmEv := ingest.Log{ + lmEv := model.LogInput{ Message: content, - ResourceID: map[string]string{"system.aws.arn": arn}, - Timestamp: request.Records[0].EventTime, + ResourceID: map[string]interface{}{"system.aws.arn": arn}, + Timestamp: request.Records[0].EventTime.String(), Metadata: metadataMap, } @@ -100,15 +100,15 @@ func parseS3logs(request events.S3Event, getContentsFromS3Bucket GetContentFromS return lmBatch } -func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { - var metadataMap = map[string]interface{}{} - lmBatch := make([]ingest.Log, 0) +func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { + + var metadataMap = make(map[string]interface{}) + lmBatch := make([]model.LogInput, 0) d, err := request.AWSLogs.Parse() var resourceValue string - var resoureProp = make(map[string]string) + var resoureProp = make(map[string]interface{}) var isEC2NetworkInterface bool = false var resourceProperty string = "system.aws.arn" - if d.LogGroup == "RDSOSMetrics" { rdsEnhancedEvent := make(map[string]interface{}) err := json.Unmarshal([]byte(d.LogEvents[0].Message), &rdsEnhancedEvent) @@ -193,10 +193,10 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []ingest.Log { addCustomMetadataFromRawJson(metadataMap, event.Message, defaultJsonMetadataKeys) mergeMaps(metadataMap, cloudWatchEventMetadata) - lmEv := ingest.Log{ + lmEv := model.LogInput{ Message: event.Message, ResourceID: resoureProp, - Timestamp: time.Unix(0, event.Timestamp*1000000), + Timestamp: time.Unix(0, event.Timestamp*1000000).String(), Metadata: metadataMap, } lmBatch = append(lmBatch, lmEv) @@ -220,8 +220,8 @@ func decompressGzip(content string) string { return string(strContent) } -func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { - lmBatch := make([]ingest.Log, 0) +func parseCloudTrailLogs(data events.CloudwatchLogsData) []model.LogInput { + lmBatch := make([]model.LogInput, 0) cloudWatchMetadata := make(map[string]interface{}) addCloudWatchEventMetadata(cloudWatchMetadata, &data) @@ -230,10 +230,10 @@ func parseCloudTrailLogs(data events.CloudwatchLogsData) []ingest.Log { mergeMaps(metadataMap, cloudWatchMetadata) resoureIDMap := processResourceMapping(event.Message, data.Owner) - lmEv := ingest.Log{ + lmEv := model.LogInput{ Message: event.Message, ResourceID: resoureIDMap, - Timestamp: time.Unix(0, event.Timestamp*1000000), + Timestamp: time.Unix(0, event.Timestamp*1000000).String(), Metadata: metadataMap, } @@ -326,12 +326,12 @@ func addCloudWatchEventMetadata(initialMap map[string]interface{}, logData *even } } -func processResourceMapping(message string, accountId string) map[string]string { +func processResourceMapping(message string, accountId string) map[string]interface{} { eventSourceArray := regexCompile(eventSourceRegex).FindStringSubmatch(message) eventSource := eventSourceArray[2] var lambdaMapping string accountLevelLog := true - var resoureIDMap = make(map[string]string) + var resoureIDMap = make(map[string]interface{}) var resourceProperty string = "system.aws.arn" if strings.Contains(eventSource, "firehose") { @@ -436,9 +436,9 @@ func processResourceMapping(message string, accountId string) map[string]string return resoureIDMap } -func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { - lmBatch := make([]ingest.Log, 0) - var resoureIDMap = make(map[string]string) +func parseCloudWatchEvents(request events.CloudWatchEvent) []model.LogInput { + lmBatch := make([]model.LogInput, 0) + var resoureIDMap = make(map[string]interface{}) var metadataMap map[string]interface{} var event string if strings.EqualFold(request.DetailType, "AWS API Call via CloudTrail") { @@ -468,10 +468,10 @@ func parseCloudWatchEvents(request events.CloudWatchEvent) []ingest.Log { } - lmEv := ingest.Log{ + lmEv := model.LogInput{ Message: event, ResourceID: resoureIDMap, - Timestamp: request.Time.Local(), + Timestamp: request.Time.String(), Metadata: metadataMap, } lmBatch = append(lmBatch, lmEv) diff --git a/code/parse_test.go b/code/parse_test.go index 1182bde..c1a8855 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -9,9 +9,8 @@ import ( "testing" "time" - "github.com/logicmonitor/lm-logs-sdk-go/ingest" - "github.com/aws/aws-lambda-go/events" + "github.com/logicmonitor/lm-data-sdk-go/model" "github.com/stretchr/testify/assert" ) @@ -52,10 +51,10 @@ func TestParseELBlogs(t *testing.T) { lmEvents, _ := parseELBlogs(s3Event, getContentsFromS3BucketMock) //Assertion - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: message, - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, Metadata: metadataMap, } @@ -95,10 +94,10 @@ func TestParseELBlogs(t *testing.T) { lmEvents, _ := parseELBlogs(s3Event, getContentsFromS3BucketMock) //Assertion - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: message, - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, Metadata: metadataMap, } @@ -142,10 +141,10 @@ func TestParseS3logs(t *testing.T) { //Assertion - expectedlmEvent := ingest.Log{ + expectedlmEvent := model.LogInput{ Message: "a OriginBucket c", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::OriginBucket"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:s3:::OriginBucket"}, Metadata: metadataMap, } @@ -164,10 +163,10 @@ func TestParseCloudWatchlogs(t *testing.T) { lmEvents := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1586351314000*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "Apr 8 13:08:34 ip-172-40-0-227 dhclient[2221]: XMT: Solicit on eth0, interval 71330ms.", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::664833354492:instance/i-01fb3c5139e4b27bb"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:ec2::664833354492:instance/i-01fb3c5139e4b27bb"}, Metadata: metadataMap, } @@ -185,10 +184,10 @@ func TestRDSLogs(t *testing.T) { lmEvents := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1596584764000*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "2020-08-04 23:46:04 UTC::@:[5275]:LOG: checkpoint starting: time", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:rds::664833354492:db:database-1"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:rds::664833354492:db:database-1"}, Metadata: metadataMap, } @@ -207,10 +206,10 @@ func TestRDSEnhancedLogs(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1596671721000*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"engine\":\"MYSQL\",\"instanceID\":\"database-2\",\"instanceResourceID\":\"db-3AA6AU62HV6KOH2W6IU7IN6I4Q\",\"timestamp\":\"2020-08-05T23:55:21Z\",\"version\":1,\"uptime\":\"00:20:17\",\"numVCPUs\":1,\"cpuUtilization\":{\"guest\":0.0,\"irq\":0.0,\"system\":0.8,\"wait\":0.2,\"idle\":97.3,\"user\":1.6,\"total\":2.7,\"steal\":0.1,\"nice\":0.0},\"loadAverageMinute\":{\"one\":0.0,\"five\":0.0,\"fifteen\":0.0},\"memory\":{\"writeback\":0,\"hugePagesFree\":0,\"hugePagesRsvd\":0,\"hugePagesSurp\":0,\"cached\":435728,\"hugePagesSize\":2048,\"free\":100836,\"hugePagesTotal\":0,\"inactive\":294920,\"pageTables\":3476,\"dirty\":280,\"mapped\":61940,\"active\":524112,\"total\":1019328,\"slab\":42776,\"buffers\":25824},\"tasks\":{\"sleeping\":96,\"zombie\":0,\"running\":0,\"stopped\":0,\"total\":96,\"blocked\":0},\"swap\":{\"cached\":0,\"total\":4095996,\"free\":4095996,\"in\":0.0,\"out\":0.0},\"network\":[{\"interface\":\"eth0\",\"rx\":654.28,\"tx\":2893.35}],\"diskIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":0.17,\"await\":0.71,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.04,\"avgQueueLen\":0.0,\"tps\":1.4,\"readKb\":40,\"device\":\"rdsdev\",\"writeKb\":308,\"avgReqSz\":8.29,\"wrqmPS\":0.0,\"writeIOsPS\":1.23},{\"writeKbPS\":27.4,\"readIOsPS\":0.17,\"await\":0.32,\"readKbPS\":0.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":2.53,\"readKb\":40,\"device\":\"filesystem\",\"writeKb\":1644,\"avgReqSz\":22.16,\"wrqmPS\":2.27,\"writeIOsPS\":2.37}],\"physicalDeviceIO\":[{\"writeKbPS\":5.13,\"readIOsPS\":1.17,\"await\":0.48,\"readKbPS\":4.67,\"rrqmPS\":0.0,\"util\":0.08,\"avgQueueLen\":0.0,\"tps\":1.67,\"readKb\":280,\"device\":\"xvdg\",\"writeKb\":308,\"avgReqSz\":11.76,\"wrqmPS\":0.68,\"writeIOsPS\":0.5}],\"fileSys\":[{\"used\":379496,\"name\":\"\",\"usedFiles\":210,\"usedFilePercent\":0.02,\"maxFiles\":1310720,\"mountPoint\":\"/rdsdbdata\",\"total\":20496340,\"usedPercent\":1.85},{\"used\":2172928,\"name\":\"\",\"usedFiles\":75334,\"usedFilePercent\":11.5,\"maxFiles\":655360,\"mountPoint\":\"/\",\"total\":10190104,\"usedPercent\":21.32}],\"processList\":[{\"vss\":760392,\"name\":\"OS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":3.67,\"cpuUsedPc\":0.02,\"id\":0,\"rss\":37452,\"vmlimit\":0},{\"vss\":2148212,\"name\":\"RDS processes\",\"tgid\":0,\"parentID\":0,\"memoryUsedPc\":26.49,\"cpuUsedPc\":1.47,\"id\":0,\"rss\":270036,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4745,\"rss\":154532,\"vmlimit\":\"unlimited\"},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4748,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4749,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4750,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4751,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4752,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4753,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4754,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4755,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4756,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4757,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4758,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.15,\"id\":4759,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4760,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4761,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4762,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4763,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4764,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4765,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4766,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4767,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4780,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4782,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4784,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4785,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4786,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4788,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4789,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4790,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4791,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.02,\"id\":4795,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4796,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4797,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4798,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4799,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4814,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.0,\"id\":4867,\"rss\":154532,\"vmlimit\":0},{\"vss\":720284,\"name\":\"mysqld\",\"tgid\":4745,\"parentID\":4741,\"memoryUsedPc\":15.16,\"cpuUsedPc\":0.05,\"id\":5100,\"rss\":154532,\"vmlimit\":0}]}", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:rds::664833354492:db:database-2"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:rds::664833354492:db:database-2"}, Metadata: metadataMap, } @@ -229,10 +228,10 @@ func TestLambdaLogs(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1598517709043*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "START RequestId: b8cf7efa-a997-4a31-a1ff-881feee2273e Version: $LATEST\n", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda::197152445587:function:observatory-worker"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:lambda::197152445587:function:observatory-worker"}, Metadata: metadataMap, } @@ -250,10 +249,10 @@ func TestEC2FlowLogs(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1616399355000*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "i-067b718e521cdf437 197152445587 eni-071fbace220860313 52.119.221.63 10.134.7.224 443 45224 6 18 6689 1616399355 1616399414 ACCEPT OK", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::197152445587:instance/i-067b718e521cdf437"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:ec2::197152445587:instance/i-067b718e521cdf437"}, Metadata: metadataMap, } @@ -271,10 +270,10 @@ func TestNATFlowLogs(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1617877079000*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "2 197152445587 eni-16105f5a 10.134.1.163 10.134.5.180 1382 56061 6 1 40 1617877079 1617877138 ACCEPT OK", - Timestamp: time, - ResourceID: map[string]string{"system.aws.networkInterfaceId": "eni-16105f5a"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.networkInterfaceId": "eni-16105f5a"}, Metadata: metadataMap, } @@ -335,10 +334,10 @@ func TestParseCloudfrontlogs(t *testing.T) { lmEvents := parseS3logs(s3Event, getContentsFromS3BucketMock) - expectedlmEvent := ingest.Log{ + expectedlmEvent := model.LogInput{ Message: "Test the Cloudfront logs", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::CloudfrontLogBucket"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:s3:::CloudfrontLogBucket"}, Metadata: metadataMap, } @@ -357,10 +356,10 @@ func TestParseCloudtrailLogs(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) time := time.Unix(0, 1618555235714*1000000) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/LogicMonitor_119/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJVBZZRIN7\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4\",\"arn\":\"arn:aws:iam::197152445587:role/LogicMonitor_119\",\"accountId\":\"197152445587\",\"userName\":\"LogicMonitor_119\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-16T06:03:12Z\"}}},\"eventTime\":\"2021-04-16T06:27:05Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceStatus\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.221.10.3\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"errorCode\":\"Client.RequestLimitExceeded\",\"errorMessage\":\"Request limit exceeded.\",\"requestParameters\":{\"instancesSet\":{\"items\":[{\"instanceId\":\"i-0d345eec77c8a08b1\"}]},\"filterSet\":{},\"includeAllInstances\":false},\"responseElements\":null,\"requestID\":\"23b2ea29-b7b1-449f-a584-035f485f05cf\",\"eventID\":\"703a3ad3-3d3d-4bd1-8637-3692f850e857\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::197152445587:instance/i-0d345eec77c8a08b1"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:ec2::197152445587:instance/i-0d345eec77c8a08b1"}, Metadata: metadataMap, } @@ -422,10 +421,10 @@ func TestElbGzipLogs(t *testing.T) { lmEvents, _ := parseELBlogs(s3Event, getContentsFromS3BucketMock) //Assertion - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: message, - Timestamp: time, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, + Timestamp: time.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:elasticloadbalancing:us-west-1:123123123123:loadbalancer/test"}, Metadata: metadataMap, } @@ -450,10 +449,10 @@ func TestParseKinesisFirehoseLogs(t *testing.T) { timeValue = time.Date(2021, time.April, 26, 5, 45, 15, 228000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/LogicMonitor_119/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJ5UWDCK2J\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJZC36CRUZ4\",\"arn\":\"arn:aws:iam::197152445587:role/LogicMonitor_119\",\"accountId\":\"197152445587\",\"userName\":\"LogicMonitor_119\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-26T05:23:11Z\"}}},\"eventTime\":\"2021-04-26T05:30:50Z\",\"eventSource\":\"firehose.amazonaws.com\",\"eventName\":\"DescribeDeliveryStream\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.214.159.46\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"errorCode\":\"ResourceNotFoundException\",\"errorMessage\":\"Firehose firehosedelievery under account 197152445587 not found.\",\"requestParameters\":{\"deliveryStreamName\":\"firehosedelievery\"},\"responseElements\":null,\"requestID\":\"dd1d624c-66ab-9056-841d-300639f2b022\",\"eventID\":\"f25e9886-5059-4b07-90d1-d29a965c0a0f\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:firehose::197152445587:deliverystream/firehosedelievery"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:firehose::197152445587:deliverystream/firehosedelievery"}, Metadata: metadataMap, } @@ -476,10 +475,10 @@ func TestKinesisFirehoseErrorLog(t *testing.T) { timeValue = time.Date(2021, time.April, 26, 9, 46, 43, 219000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "Test Log for kinesis firehose", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:firehose::197152445587:deliverystream/dataFirehose"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:firehose::197152445587:deliverystream/dataFirehose"}, Metadata: metadataMap, } @@ -503,10 +502,10 @@ func TestKinesisDataStreamLog(t *testing.T) { timeValue = time.Date(2021, time.April, 27, 8, 55, 50, 324000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJTJMESL5PU:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/BhushanPuriPortal/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJV4QL3KY6\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJTJMESL5PU\",\"arn\":\"arn:aws:iam::197152445587:role/BhushanPuriPortal\",\"accountId\":\"197152445587\",\"userName\":\"BhushanPuriPortal\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-27T08:34:28Z\"}}},\"eventTime\":\"2021-04-27T08:39:15Z\",\"eventSource\":\"kinesis.amazonaws.com\",\"eventName\":\"ListTagsForStream\",\"awsRegion\":\"ap-northeast-1\",\"sourceIPAddress\":\"34.220.47.95\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"requestParameters\":{\"streamName\":\"kinesisTestSream\"},\"responseElements\":null,\"requestID\":\"f85f8e09-9fda-a448-a15e-41fa3263205e\",\"eventID\":\"d815bd8e-1016-46a6-8f68-608a42b9b7d3\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:kinesis::197152445587:stream/kinesisTestSream"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:kinesis::197152445587:stream/kinesisTestSream"}, Metadata: metadataMap, } @@ -528,10 +527,10 @@ func TestECSLog(t *testing.T) { timeValue = time.Date(2021, time.April, 30, 8, 47, 41, 663000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAS3ZZTSSJQUWVOXM6Y:LMAssumeRoleSession\",\"arn\":\"arn:aws:sts::197152445587:assumed-role/lmngstockholm/LMAssumeRoleSession\",\"accountId\":\"197152445587\",\"accessKeyId\":\"ASIAS3ZZTSSJ57ASTCJ6\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAS3ZZTSSJQUWVOXM6Y\",\"arn\":\"arn:aws:iam::197152445587:role/lmngstockholm\",\"accountId\":\"197152445587\",\"userName\":\"lmngstockholm\"},\"webIdFederationData\":{},\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2021-04-30T08:30:58Z\"}}},\"eventTime\":\"2021-04-30T08:39:02Z\",\"eventSource\":\"ecs.amazonaws.com\",\"eventName\":\"ListTagsForResource\",\"awsRegion\":\"us-west-1\",\"sourceIPAddress\":\"34.219.122.65\",\"userAgent\":\"aws-sdk-java/1.11.918 Linux/4.14.193-149.317.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.3+7-LTS java/11.0.3 vendor/Amazon.com_Inc.\",\"requestParameters\":{\"resourceArn\":\"arn:aws:ecs:us-west-1:197152445587:cluster/CVTestCluster\"},\"responseElements\":{\"tags\":[{\"key\":\"testKey\",\"value\":\"testValue\"}]},\"requestID\":\"ad778dc0-1c40-4599-a1d6-5bbbee2d17c2\",\"eventID\":\"f53bf60c-3b8b-4304-9a80-cacd7b02a275\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"eventCategory\":\"Management\",\"recipientAccountId\":\"197152445587\"}", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ecs::197152445587:cluster/CVTestCluster"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:ecs::197152445587:cluster/CVTestCluster"}, Metadata: metadataMap, } @@ -555,10 +554,10 @@ func TestELBlowLogs(t *testing.T) { timeValue = time.Date(2021, time.June, 03, 9, 48, 58, 000000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "2 197152445587 eni-0c6023b6cde8706ea 162.142.125.148 10.134.5.120 51125 12196 6 1 44 1622713738 1622713738 ACCEPT OK", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.networkInterfaceId": "eni-0c6023b6cde8706ea"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.networkInterfaceId": "eni-0c6023b6cde8706ea"}, Metadata: metadataMap, } @@ -582,10 +581,10 @@ func TestRDSFlowLogs(t *testing.T) { timeValue = time.Date(2021, time.July, 22, 07, 9, 10, 000000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "2 148849679107 eni-09c6cfd662c38fd4d - - - - - - - 1626937750 1626937809 - NODATA", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.networkInterfaceId": "eni-09c6cfd662c38fd4d"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.networkInterfaceId": "eni-09c6cfd662c38fd4d"}, Metadata: metadataMap, } @@ -605,10 +604,10 @@ func TestFargateLog(t *testing.T) { if strings.Contains(localTime.String(), "UTC") { //Test case is running at system with time.Local as UTC timeValue = time.Date(2022, time.February, 18, 5, 57, 07, 341000000, time.Local) } - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "520: Fri Feb 18 05:57:07 UTC 2022", - Timestamp: timeValue, - ResourceID: map[string]string{"system.aws.accountid": "148849679107", "system.cloud.category": "AWS/LMAccount"}, + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.accountid": "148849679107", "system.cloud.category": "AWS/LMAccount"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -624,10 +623,10 @@ func TestParseCloudtrailLogsS3(t *testing.T) { var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"cloudtrail.amazonaws.com\"},\"eventTime\":\"2023-03-03T07:30:04Z\",\"eventSource\":\"s3.amazonaws.com\",\"eventName\":\"GetBucketAcl\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"cloudtrail.amazonaws.com\",\"userAgent\":\"cloudtrail.amazonaws.com\",\"requestParameters\":{\"bucketName\":\"aws-cloudtrail-logs-700010466334-8d075b05\",\"Host\":\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\",\"acl\":\"\"},\"responseElements\":null,\"additionalEventData\":{\"SignatureVersion\":\"SigV4\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"bytesTransferredIn\":0,\"AuthenticationMethod\":\"AuthHeader\",\"x-amz-id-2\":\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\",\"bytesTransferredOut\":568},\"requestID\":\"TAQNDGTZC32834P4\",\"eventID\":\"2514d9c5-5365-4b24-ac86-241dea825ad6\",\"readOnly\":true,\"resources\":[{\"accountId\":\"700010466334\",\"type\":\"AWS::S3::Bucket\",\"ARN\":\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"700010466334\",\"sharedEventID\":\"59523b9c-953d-4110-b4d5-b8209621af88\",\"eventCategory\":\"Management\"}", - Timestamp: time.Date(2023, time.March, 3, 7, 30, 27, 87000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, + Timestamp: time.Date(2023, time.March, 3, 7, 30, 27, 87000000, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, Metadata: metadataMap, } @@ -643,10 +642,10 @@ func TestParseCloudtrailLogsLambda(t *testing.T) { var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "lambda.amazonaws.com"} logs := parseCloudWatchLogs(cloudWatchEvent) - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"logs.amazonaws.com\"},\"eventTime\":\"2023-03-08T10:59:01Z\",\"eventSource\":\"lambda.amazonaws.com\",\"eventName\":\"Invoke\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceArn\":\"arn:aws:logs:us-east-1:280443500820:log-group:/aws/cloudtrail:*\",\"sourceAccount\":\"280443500820\"},\"responseElements\":null,\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder:$LATEST\"},\"requestID\":\"fe232070-e23a-4a51-bef4-ab16a95e7b8c\",\"eventID\":\"d833caf0-489d-4692-a286-55dc26e76c5a\",\"readOnly\":false,\"resources\":[{\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\",\"ARN\":\"arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":false,\"recipientAccountId\":\"280443500820\",\"sharedEventID\":\"6d1d2f9c-d3d7-4932-9c1a-52555a843990\",\"eventCategory\":\"Data\"}", - Timestamp: time.Date(2023, time.March, 8, 11, 4, 20, 239000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder"}, + Timestamp: time.Date(2023, time.March, 8, 11, 4, 20, 239000000, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:lambda:us-east-1:280443500820:function:LMLogsForwarder"}, Metadata: metadataMap, } @@ -662,10 +661,10 @@ func TestCloudTrailLogsEC2(t *testing.T) { } logs := parseCloudTrailLogs(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "ec2.amazonaws.com"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"123456678\",\"accessKeyId\":\"ASIAUCS54HEKDHXBQTVJ\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"123456678\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-23T05:07:33Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-23T05:36:11Z\",\"eventSource\":\"ec2.amazonaws.com\",\"eventName\":\"DescribeInstanceAttribute\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.217.191\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"instanceId\":\"i-0d51cd459226160ac\",\"attribute\":\"disableApiTermination\"},\"responseElements\":null,\"requestID\":\"468e0670-30d9-4ef7-ab75-648c03d63371\",\"eventID\":\"78294249-5828-4dde-8b53-49f81d715b95\",\"readOnly\":true,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"123456678\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", - Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2::123456678:instance/i-0d51cd459226160ac"}, + Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:ec2::123456678:instance/i-0d51cd459226160ac"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -680,10 +679,10 @@ func TestCloudTrailLogsSQS(t *testing.T) { } logs := parseCloudTrailLogs(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "sqs.amazonaws.com"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAUCS54HEKDKHAECU5N:pooja.choudhary@logicmonitor.com\",\"arn\":\"arn:aws:sts::123456678:assumed-role/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6/pooja.choudhary@logicmonitor.com\",\"accountId\":\"123456678\",\"accessKeyId\":\"ASIAUCS54HEKPPHDNOGC\",\"sessionContext\":{\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAUCS54HEKDKHAECU5N\",\"arn\":\"arn:aws:iam::123456678:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\",\"accountId\":\"123456678\",\"userName\":\"AWSReservedSSO_LM-Developer-Policy_c0615b7abc4ebbd6\"},\"webIdFederationData\":{},\"attributes\":{\"creationDate\":\"2023-05-03T08:34:17Z\",\"mfaAuthenticated\":\"false\"}}},\"eventTime\":\"2023-05-03T09:16:01Z\",\"eventSource\":\"sqs.amazonaws.com\",\"eventName\":\"CreateQueue\",\"awsRegion\":\"us-west-2\",\"sourceIPAddress\":\"49.207.235.15\",\"userAgent\":\"AWSInternal\",\"requestParameters\":{\"attribute\":{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Id\\\":\\\"__default_policy_ID\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"__owner_statement\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"AWS\\\":\\\"123456678\\\"},\\\"Action\\\":[\\\"SQS:*\\\"],\\\"Resource\\\":\\\"arn:aws:sqs:us-west-2:123456678:TestPoojaNew\\\"}]}\",\"ReceiveMessageWaitTimeSeconds\":\"0\",\"SqsManagedSseEnabled\":\"true\",\"DelaySeconds\":\"0\",\"KmsMasterKeyId\":\"\",\"RedrivePolicy\":\"\",\"MessageRetentionPeriod\":\"345600\",\"MaximumMessageSize\":\"262144\",\"VisibilityTimeout\":\"30\",\"RedriveAllowPolicy\":\"\"},\"tags\":{\"test\":\"true\"}},\"responseElements\":{\"queueUrl\":\"https://sqs.us-west-2.amazonaws.com/123456678/TestPoojaNew\"},\"requestID\":\"7c41e87a-a828-5717-8eb2-b4b680b92479\",\"eventID\":\"85297ed4-f144-4afb-84ce-63e9e58556b4\",\"readOnly\":false,\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"123456678\",\"eventCategory\":\"Management\",\"sessionCredentialFromConsole\":\"true\"}", - Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:sqs::123456678:TestPoojaNew"}, + Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:sqs::123456678:TestPoojaNew"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -700,10 +699,10 @@ func TestParseCloudtrailLogsS3ForARN(t *testing.T) { var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"eventVersion\":\"1.08\",\"userIdentity\":{\"type\":\"AWSService\",\"invokedBy\":\"cloudtrail.amazonaws.com\"},\"eventTime\":\"2023-03-03T07:30:04Z\",\"eventSource\":\"s3.amazonaws.com\",\"eventName\":\"GetBucketAcl\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"cloudtrail.amazonaws.com\",\"userAgent\":\"cloudtrail.amazonaws.com\",\"requestParameters\":{\"Host\":\"aws-cloudtrail-logs-700010466334-8d075b05.s3.us-east-1.amazonaws.com\",\"acl\":\"\"},\"responseElements\":null,\"additionalEventData\":{\"SignatureVersion\":\"SigV4\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"bytesTransferredIn\":0,\"AuthenticationMethod\":\"AuthHeader\",\"x-amz-id-2\":\"La8vQCxEf9pcqy/H8Y7Rs7aULfw0Qkc0EI+uKOFTyuMu8of/2a/yvPO6hKck3V5YaGneBCVwzkw=\",\"bytesTransferredOut\":568},\"requestID\":\"TAQNDGTZC32834P4\",\"eventID\":\"2514d9c5-5365-4b24-ac86-241dea825ad6\",\"readOnly\":true,\"resources\":[{\"accountId\":\"700010466334\",\"type\":\"AWS::S3::Bucket\",\"ARN\":\"arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05\"}],\"eventType\":\"AwsApiCall\",\"managementEvent\":true,\"recipientAccountId\":\"700010466334\",\"sharedEventID\":\"59523b9c-953d-4110-b4d5-b8209621af88\",\"eventCategory\":\"Management\"}", - Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, + Timestamp: time.Date(1970, time.January, 2, 10, 17, 36, 789000000, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:s3:::aws-cloudtrail-logs-700010466334-8d075b05"}, Metadata: metadataMap, } @@ -719,10 +718,10 @@ func TestCloudWatchEventsS3(t *testing.T) { } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "s3.amazonaws.com"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"additionalEventData\":{\"AuthenticationMethod\":\"AuthHeader\",\"CipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"SignatureVersion\":\"SigV4\",\"bytesTransferredIn\":0,\"bytesTransferredOut\":0,\"x-amz-id-2\":\"UJNZntIyly1aAdiFVSPCwh14QRbyGaVQsbTjtgaNHRYgy0gl4p8c2Uu8Iu498icXe/3JHf9VFHo=\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"b9d131b3-70c7-4f74-a203-bddda20b7469\",\"eventName\":\"HeadBucket\",\"eventSource\":\"s3.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:54Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":true,\"recipientAccountId\":\"280443500820\",\"requestID\":\"J9ZE535Z4A4RVWZF\",\"requestParameters\":{\"Host\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"bucketName\":\"sagemaker-studio-280443500820-6jk579yrjdw\"},\"resources\":[{\"ARNPrefix\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw/\",\"type\":\"AWS::S3::Object\"},{\"ARN\":\"arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw\",\"accountId\":\"1234567\",\"type\":\"AWS::S3::Bucket\"}],\"responseElements\":null,\"sourceIPAddress\":\"10.54.148.148\",\"tlsDetails\":{\"cipherSuite\":\"ECDHE-RSA-AES128-GCM-SHA256\",\"clientProvidedHostHeader\":\"sagemaker-studio-280443500820-6jk579yrjdw.s3.us-west-2.amazonaws.com\",\"tlsVersion\":\"TLSv1.2\"},\"userAgent\":\"[aws-sdk-java/1.12.498Linux/5.10.178-162.673.amzn2.x86_64OpenJDK_64-Bit_Server_VM/17.0.7+7-LTSjava/17.0.7vendor/Amazon.com_Inc.cfg/retry-mode/legacy]\",\"userIdentity\":{\"accessKeyId\":\"ASIAUCS54HEKCWHITL6Z\",\"accountId\":\"1234567\",\"arn\":\"arn:aws:sts::280443500820:assumed-role/aws-test-pooja-role/LMAssumeRoleSession\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ:LMAssumeRoleSession\",\"sessionContext\":{\"attributes\":{\"creationDate\":\"2023-07-13T09:06:17Z\",\"mfaAuthenticated\":\"false\"},\"sessionIssuer\":{\"accountId\":\"1234567\",\"arn\":\"arn:aws:iam::280443500820:role/aws-test-pooja-role\",\"principalId\":\"AROAUCS54HEKLBZ4YGEZZ\",\"type\":\"Role\",\"userName\":\"aws-test-pooja-role\"}},\"type\":\"AssumedRole\"},\"vpcEndpointId\":\"vpce-051f8c152e5ab9b9d\"}", - Timestamp: time.Date(2023, time.July, 13, 9, 52, 54, 0, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw"}, + Timestamp: time.Date(2023, time.July, 13, 9, 52, 54, 0, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:s3:::sagemaker-studio-280443500820-6jk579yrjdw"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -737,10 +736,10 @@ func TestCloudWatchEventsLambda(t *testing.T) { } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "lambda.amazonaws.com"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"additionalEventData\":{\"functionVersion\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder:$LATEST\"},\"awsRegion\":\"us-west-2\",\"eventCategory\":\"Data\",\"eventID\":\"e34805e1-c975-40ff-96e9-8fb01c4bd5ec\",\"eventName\":\"Invoke\",\"eventSource\":\"lambda.amazonaws.com\",\"eventTime\":\"2023-07-13T09:52:58Z\",\"eventType\":\"AwsApiCall\",\"eventVersion\":\"1.08\",\"managementEvent\":false,\"readOnly\":false,\"recipientAccountId\":\"280443500820\",\"requestID\":\"84fe1797-0fa3-4c28-a84b-318328f0ff1f\",\"requestParameters\":{\"functionName\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"invocationType\":\"Event\",\"sourceAccount\":\"280443500820\",\"sourceArn\":\"arn:aws:logs:us-west-2:280443500820:log-group:/aws/events/cloudwatchEventsTest:*\"},\"resources\":[{\"ARN\":\"arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder\",\"accountId\":\"280443500820\",\"type\":\"AWS::Lambda::Function\"}],\"responseElements\":null,\"sharedEventID\":\"779c751a-2152-4151-93b9-254d90b5819a\",\"sourceIPAddress\":\"logs.amazonaws.com\",\"userAgent\":\"logs.amazonaws.com\",\"userIdentity\":{\"invokedBy\":\"logs.amazonaws.com\",\"type\":\"AWSService\"}}", - Timestamp: time.Date(2023, time.July, 13, 9, 52, 58, 0, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder"}, + Timestamp: time.Date(2023, time.July, 13, 9, 52, 58, 0, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:lambda:us-west-2:280443500820:function:LMLogsForwarder"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -763,7 +762,6 @@ func TestCustomMetadataFromJsonEvent(t *testing.T) { jsonKeys := []string{"account", "detail.additionalEventData.AuthenticationMethod", "detail.resources.[0].type"} customMetadataMap := make(map[string]interface{}) addCustomMetadataFromRawJson(customMetadataMap, testString, jsonKeys) - log.Println(customMetadataMap) assert.Equal(t, customMetadataMap["account"], "280443500820") assert.Equal(t, customMetadataMap["detail.additionalEventData.AuthenticationMethod"], "AuthHeader") assert.Equal(t, customMetadataMap["detail.resources.[0].type"], "AWS::S3::Object") @@ -797,10 +795,10 @@ func TestCloudWatchEventsS3Else(t *testing.T) { } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.s3"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"version\":\"0\",\"id\":\"17793124-05d4-b198-2fde-7ededc63b103\",\"detail-type\":\"ObjectCreated\",\"source\":\"aws.s3\",\"account\":\"123456789012\",\"time\":\"2021-11-12T00:00:00Z\",\"region\":\"ca-central-1\",\"resources\":[\"arn:aws:s3:::example-bucket\"],\"detail\":{\"version\":\"0\",\"bucket\":{\"name\":\"example-bucket\"},\"object\":{\"key\":\"example-key\",\"size\":5,\"etag\":\"b1946ac92492d2347c6235b4d2611184\",\"version-id\":\"IYV3p45BT0ac8hjHg1houSdS1a.Mro8e\",\"sequencer\":\"00617F08299329D189\"},\"request-id\":\"N4N7GDK58NMKJ12R\",\"requester\":\"123456789012\",\"source-ip-address\":\"1.2.3.4\",\"reason\":\"PutObject\"}}", - Timestamp: time.Date(2021, time.November, 12, 0, 0, 0, 0, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:s3:::example-bucket"}, + Timestamp: time.Date(2021, time.November, 12, 0, 0, 0, 0, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:s3:::example-bucket"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) @@ -808,7 +806,7 @@ func TestCloudWatchEventsS3Else(t *testing.T) { func TestCloudWatchEventsEC2Else(t *testing.T) { t.Setenv("LM_TENANT_IDENTIFIER", "123456") - t.Setenv("LM_COMPANY_NAME", "test") + t.Setenv("LM_ACCOUNT", "test") ExtractEnvironmentVariables() var s = "{\"account\":\"280443500820\",\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"},\"detail-type\":\"EC2InstanceState-changeNotification\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"source\":\"aws.ec2\",\"time\":\"2023-09-04T10:45:46Z\",\"version\":\"0\"}" var data events.CloudWatchEvent @@ -818,10 +816,10 @@ func TestCloudWatchEventsEC2Else(t *testing.T) { } logs := parseCloudWatchEvents(data) var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.ec2", "_lm.tenantId": "123456"} - expectedLMEvent := ingest.Log{ + expectedLMEvent := model.LogInput{ Message: "{\"version\":\"0\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"detail-type\":\"EC2InstanceState-changeNotification\",\"source\":\"aws.ec2\",\"account\":\"280443500820\",\"time\":\"2023-09-04T10:45:46Z\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"}}", - Timestamp: time.Date(2023, time.September, 4, 10, 45, 46, 0, time.Local), - ResourceID: map[string]string{"system.aws.arn": "arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac"}, + Timestamp: time.Date(2023, time.September, 4, 10, 45, 46, 0, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac"}, Metadata: metadataMap, } assert.Equal(t, expectedLMEvent, logs[0]) From 557597a04703693eff0a6108df3ee7aa0e819335 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 4 Jan 2024 12:11:49 +0530 Subject: [PATCH 046/102] DEV-152175:Minor change to append Bearer for BearerToken --- code/helper.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/helper.go b/code/helper.go index a3ed4b8..ef2d258 100644 --- a/code/helper.go +++ b/code/helper.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "fmt" "io" "log" "os" @@ -42,6 +43,10 @@ func ExtractEnvironmentVariables() { } + if bearerToken != "" { + bearerToken = fmt.Sprintf("Bearer %s", bearerToken) + } + companyName = os.Getenv("LM_ACCOUNT") defaultMetadata := os.Getenv("METADATA") From 0452b4faf7fc2fb10092de48483530102abc1fd4 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 28 Feb 2024 15:31:09 +0530 Subject: [PATCH 047/102] DEV-153473:adding user-agent in header --- cloudformation.yaml | 2 +- code/go.mod | 3 +- code/go.sum | 1160 ++++++++++++++++++++++++++++++++++++++- code/lambda.go | 5 +- code/version.properties | 2 +- 5 files changed, 1144 insertions(+), 28 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 13dc397..5606d8f 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -237,7 +237,7 @@ Resources: Properties: Description: Copies Logic Monitor Forwarder zip to the destination S3 bucket Handler: index.handler - Runtime: python3.7 + Runtime: python3.12 Timeout: 300 InlineCode: | import json diff --git a/code/go.mod b/code/go.mod index 7db914a..c11ee59 100644 --- a/code/go.mod +++ b/code/go.mod @@ -5,8 +5,7 @@ go 1.14 require ( github.com/aws/aws-lambda-go v1.41.0 github.com/aws/aws-sdk-go v1.44.287 - github.com/google/uuid v1.3.1 // indirect + github.com/logicmonitor/lm-data-sdk-go v1.3.0 github.com/stretchr/testify v1.8.4 github.com/thedevsaddam/gojsonq/v2 v2.5.2 - github.com/logicmonitor/lm-data-sdk-go v1.0.0 ) diff --git a/code/go.sum b/code/go.sum index 3299680..45322c9 100644 --- a/code/go.sum +++ b/code/go.sum @@ -35,47 +35,165 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= +cloud.google.com/go/accessapproval v1.7.2/go.mod h1:/gShiq9/kK/h8T/eEn1BTzalDvk0mZxJlhfw0p+Xuc0= +cloud.google.com/go/accessapproval v1.7.3/go.mod h1:4l8+pwIxGTNqSf4T3ds8nLO94NQf0W/KnMNuQ9PbnP8= +cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= +cloud.google.com/go/accesscontextmanager v1.8.2/go.mod h1:E6/SCRM30elQJ2PKtFMs2YhfJpZSNcJyejhuzoId4Zk= +cloud.google.com/go/accesscontextmanager v1.8.3/go.mod h1:4i/JkF2JiFbhLnnpnfoTX5vRXfhf9ukhU1ANOTALTOQ= +cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.50.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.1/go.mod h1:kY3nIMAVQOK2XDqDPHaOuD9e+FdMA6OOpfBjsvaFSOo= +cloud.google.com/go/aiplatform v1.51.2/go.mod h1:hCqVYB3mY45w99TmetEoe8eCQEwZEp9WHxeZdcv9phw= +cloud.google.com/go/aiplatform v1.54.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.4/go.mod h1:zZgNCxLCy8b2rKKVfC1YkC2vTrpfZmeRCySM3aUbskA= +cloud.google.com/go/analytics v0.21.5/go.mod h1:BQtOBHWTlJ96axpPPnw5CvGJ6i3Ve/qX2fTxR8qWyr8= +cloud.google.com/go/analytics v0.21.6/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= +cloud.google.com/go/apigateway v1.6.2/go.mod h1:CwMC90nnZElorCW63P2pAYm25AtQrHfuOkbRSHj0bT8= +cloud.google.com/go/apigateway v1.6.3/go.mod h1:k68PXWpEs6BVDTtnLQAyG606Q3mz8pshItwPXjgv44Y= +cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= +cloud.google.com/go/apigeeconnect v1.6.2/go.mod h1:s6O0CgXT9RgAxlq3DLXvG8riw8PYYbU/v25jqP3Dy18= +cloud.google.com/go/apigeeconnect v1.6.3/go.mod h1:peG0HFQ0si2bN15M6QSjEW/W7Gy3NYkWGz7pFz13cbo= +cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= +cloud.google.com/go/apigeeregistry v0.7.2/go.mod h1:9CA2B2+TGsPKtfi3F7/1ncCCsL62NXBRfM6iPoGSM+8= +cloud.google.com/go/apigeeregistry v0.8.1/go.mod h1:MW4ig1N4JZQsXmBSwH4rwpgDonocz7FPBSw6XPGHmYw= +cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= +cloud.google.com/go/appengine v1.8.2/go.mod h1:WMeJV9oZ51pvclqFN2PqHoGnys7rK0rz6s3Mp6yMvDo= +cloud.google.com/go/appengine v1.8.3/go.mod h1:2oUPZ1LVZ5EXi+AF1ihNAF+S8JrzQ3till5m9VQkrsk= +cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= +cloud.google.com/go/area120 v0.8.2/go.mod h1:a5qfo+x77SRLXnCynFWPUZhnZGeSgvQ+Y0v1kSItkh4= +cloud.google.com/go/area120 v0.8.3/go.mod h1:5zj6pMzVTH+SVHljdSKC35sriR/CVvQZzG/Icdyriw0= +cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= +cloud.google.com/go/artifactregistry v1.14.2/go.mod h1:Xk+QbsKEb0ElmyeMfdHAey41B+qBq3q5R5f5xD4XT3U= +cloud.google.com/go/artifactregistry v1.14.3/go.mod h1:A2/E9GXnsyXl7GUvQ/2CjHA+mVRoWAXC0brg2os+kNI= +cloud.google.com/go/artifactregistry v1.14.4/go.mod h1:SJJcZTMv6ce0LDMUnihCN7WSrI+kBSFV0KIKo8S8aYU= +cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= +cloud.google.com/go/asset v1.15.0/go.mod h1:tpKafV6mEut3+vN9ScGvCHXHj7FALFVta+okxFECHcg= +cloud.google.com/go/asset v1.15.1/go.mod h1:yX/amTvFWRpp5rcFq6XbCxzKT8RJUam1UoboE179jU4= +cloud.google.com/go/asset v1.15.2/go.mod h1:B6H5tclkXvXz7PD22qCA2TDxSVQfasa3iDlM89O2NXs= +cloud.google.com/go/asset v1.15.3/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= +cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4= +cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs= +cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= +cloud.google.com/go/automl v1.13.2/go.mod h1:gNY/fUmDEN40sP8amAX3MaXkxcqPIn7F1UIIPZpy4Mg= +cloud.google.com/go/automl v1.13.3/go.mod h1:Y8KwvyAZFOsMAPqUCfNu1AyclbC6ivCUF/MTwORymyY= +cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= +cloud.google.com/go/baremetalsolution v1.2.0/go.mod h1:68wi9AwPYkEWIUT4SvSGS9UJwKzNpshjHsH4lzk8iOw= +cloud.google.com/go/baremetalsolution v1.2.1/go.mod h1:3qKpKIw12RPXStwQXcbhfxVj1dqQGEvcmA+SX/mUR88= +cloud.google.com/go/baremetalsolution v1.2.2/go.mod h1:O5V6Uu1vzVelYahKfwEWRMaS3AbCkeYHy3145s1FkhM= +cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= +cloud.google.com/go/batch v1.4.1/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.0/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.1/go.mod h1:RpBuIYLkQu8+CWDk3dFD/t/jOCGuUpkpX+Y0n1Xccs8= +cloud.google.com/go/batch v1.6.1/go.mod h1:urdpD13zPe6YOK+6iZs/8/x2VBRofvblLpx0t57vM98= +cloud.google.com/go/batch v1.6.3/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.1/go.mod h1:zl/rWWAFVeV+kx+X2Javly7o1EIQThU4WlkynffL/lk= +cloud.google.com/go/beyondcorp v1.0.2/go.mod h1:m8cpG7caD+5su+1eZr+TSvF6r21NdLJk4f9u4SP2Ntc= +cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -85,26 +203,83 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.55.0/go.mod h1:9Y5I3PN9kQWuid6183JFhOGOW3GcirA5LpsKCUn+2ec= +cloud.google.com/go/bigquery v1.56.0/go.mod h1:KDcsploXTEY7XT3fDQzMUZlpQLHzE4itubHrnmhUrZA= +cloud.google.com/go/bigquery v1.57.1/go.mod h1:iYzC0tGVWt1jqSzBHqCr3lrRn0u13E8e+AqowBsDgug= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= +cloud.google.com/go/billing v1.17.0/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.1/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.2/go.mod h1:u/AdV/3wr3xoRBk5xvUzYMS1IawOAPwQMuHgHMdljDg= +cloud.google.com/go/billing v1.17.3/go.mod h1:z83AkoZ7mZwBGT3yTnt6rSGI1OOsHSIi6a5M3mJ8NaU= +cloud.google.com/go/billing v1.17.4/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= +cloud.google.com/go/binaryauthorization v1.7.0/go.mod h1:Zn+S6QqTMn6odcMU1zDZCJxPjU2tZPV1oDl45lWY154= +cloud.google.com/go/binaryauthorization v1.7.1/go.mod h1:GTAyfRWYgcbsP3NJogpV3yeunbUIjx2T9xVeYovtURE= +cloud.google.com/go/binaryauthorization v1.7.2/go.mod h1:kFK5fQtxEp97m92ziy+hbu+uKocka1qRRL8MVJIgjv0= +cloud.google.com/go/binaryauthorization v1.7.3/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= +cloud.google.com/go/certificatemanager v1.7.2/go.mod h1:15SYTDQMd00kdoW0+XY5d9e+JbOPjp24AvF48D8BbcQ= +cloud.google.com/go/certificatemanager v1.7.3/go.mod h1:T/sZYuC30PTag0TLo28VedIRIj1KPGcOQzjWAptHa00= +cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= +cloud.google.com/go/channel v1.17.0/go.mod h1:RpbhJsGi/lXWAUM1eF4IbQGbsfVlg2o8Iiy2/YLfVT0= +cloud.google.com/go/channel v1.17.1/go.mod h1:xqfzcOZAcP4b/hUDH0GkGg1Sd5to6di1HOJn/pi5uBQ= +cloud.google.com/go/channel v1.17.2/go.mod h1:aT2LhnftnyfQceFql5I/mP8mIbiiJS4lWqgXA815zMk= +cloud.google.com/go/channel v1.17.3/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.1/go.mod h1:K7wGc/3zfvmYWOWwYTgF/d/UVJhS4pu+HAy7PL7mCsU= +cloud.google.com/go/cloudbuild v1.14.2/go.mod h1:Bn6RO0mBYk8Vlrt+8NLrru7WXlQ9/RDWz2uo5KG1/sg= +cloud.google.com/go/cloudbuild v1.15.0/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= +cloud.google.com/go/clouddms v1.7.0/go.mod h1:MW1dC6SOtI/tPNCciTsXtsGNEM0i0OccykPvv3hiYeM= +cloud.google.com/go/clouddms v1.7.1/go.mod h1:o4SR8U95+P7gZ/TX+YbJxehOCsM+fe6/brlrFquiszk= +cloud.google.com/go/clouddms v1.7.2/go.mod h1:Rk32TmWmHo64XqDvW7jgkFQet1tUKNVzs7oajtJT3jU= +cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.2/go.mod h1:A7nYkjNlW2gUoROg1kvJrQGhJP/38UaWwsnuBDOBVUk= +cloud.google.com/go/cloudtasks v1.12.3/go.mod h1:GPVXhIOSGEaR+3xT4Fp72ScI+HjHffSS4B8+BaBB5Ys= +cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -117,224 +292,704 @@ cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.21.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.11.0/go.mod h1:hutBdImE4XNZ1NV4vbPJKSFOnQruhC5Lj9bZqWMTKiU= +cloud.google.com/go/contactcenterinsights v1.11.1/go.mod h1:FeNP3Kg8iteKM80lMwSk3zZZKVxr+PGnAId6soKuXwE= +cloud.google.com/go/contactcenterinsights v1.11.2/go.mod h1:A9PIR5ov5cRcd28KlDbmmXE8Aay+Gccer2h4wzkYFso= +cloud.google.com/go/contactcenterinsights v1.12.0/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.26.0/go.mod h1:YJCmRet6+6jnYYRS000T6k0D0xUXQgBSaJ7VwI8FBj4= +cloud.google.com/go/container v1.26.1/go.mod h1:5smONjPRUxeEpDG7bMKWfDL4sauswqEtnBK1/KKpR04= +cloud.google.com/go/container v1.26.2/go.mod h1:YlO84xCt5xupVbLaMY4s3XNE79MUJ+49VmkInr6HvF4= +cloud.google.com/go/container v1.28.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= +cloud.google.com/go/containeranalysis v0.11.0/go.mod h1:4n2e99ZwpGxpNcz+YsFT1dfOHPQFGcAC8FN2M2/ne/U= +cloud.google.com/go/containeranalysis v0.11.1/go.mod h1:rYlUOM7nem1OJMKwE1SadufX0JP3wnXj844EtZAwWLY= +cloud.google.com/go/containeranalysis v0.11.2/go.mod h1:xibioGBC1MD2j4reTyV1xY1/MvKaz+fyM9ENWhmIeP8= +cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.17.1/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.0/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.1/go.mod h1:TzAWaz+ON1tkNr4MOcak8EBHX7wIRX/gZKM+yTVsv+A= +cloud.google.com/go/datacatalog v1.18.2/go.mod h1:SPVgWW2WEMuWHA+fHodYjmxPiMqcOiWfhc9OD5msigk= +cloud.google.com/go/datacatalog v1.19.0/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= +cloud.google.com/go/dataflow v0.9.2/go.mod h1:vBfdBZ/ejlTaYIGB3zB4T08UshH70vbtZeMD+urnUSo= +cloud.google.com/go/dataflow v0.9.3/go.mod h1:HI4kMVjcHGTs3jTHW/kv3501YW+eloiJSLxkJa/vqFE= +cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= +cloud.google.com/go/dataform v0.8.2/go.mod h1:X9RIqDs6NbGPLR80tnYoPNiO1w0wenKTb8PxxlhTMKM= +cloud.google.com/go/dataform v0.8.3/go.mod h1:8nI/tvv5Fso0drO3pEjtowz58lodx8MVkdV2q0aPlqg= +cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= +cloud.google.com/go/datafusion v1.7.2/go.mod h1:62K2NEC6DRlpNmI43WHMWf9Vg/YvN6QVi8EVwifElI0= +cloud.google.com/go/datafusion v1.7.3/go.mod h1:eoLt1uFXKGBq48jy9LZ+Is8EAVLnmn50lNncLzwYokE= +cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= +cloud.google.com/go/datalabeling v0.8.2/go.mod h1:cyDvGHuJWu9U/cLDA7d8sb9a0tWLEletStu2sTmg3BE= +cloud.google.com/go/datalabeling v0.8.3/go.mod h1:tvPhpGyS/V7lqjmb3V0TaDdGvhzgR1JoW7G2bpi2UTI= +cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.10.1/go.mod h1:1MzmBv8FvjYfc7vDdxhnLFNskikkB+3vl475/XdCDhs= +cloud.google.com/go/dataplex v1.10.2/go.mod h1:xdC8URdTrCrZMW6keY779ZT1cTOfV8KEPNsw+LTRT1Y= +cloud.google.com/go/dataplex v1.11.2/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= +cloud.google.com/go/dataproc/v2 v2.2.0/go.mod h1:lZR7AQtwZPvmINx5J87DSOOpTfof9LVZju6/Qo4lmcY= +cloud.google.com/go/dataproc/v2 v2.2.1/go.mod h1:QdAJLaBjh+l4PVlVZcmrmhGccosY/omC1qwfQ61Zv/o= +cloud.google.com/go/dataproc/v2 v2.2.2/go.mod h1:aocQywVmQVF4i8CL740rNI/ZRpsaaC1Wh2++BJ7HEJ4= +cloud.google.com/go/dataproc/v2 v2.3.0/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= +cloud.google.com/go/dataqna v0.8.2/go.mod h1:KNEqgx8TTmUipnQsScOoDpq/VlXVptUqVMZnt30WAPs= +cloud.google.com/go/dataqna v0.8.3/go.mod h1:wXNBW2uvc9e7Gl5k8adyAMnLush1KVV6lZUhB+rqNu4= +cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.1/go.mod h1:7ngSYwnw95YFyTd5tOGBxHlOZiL+OtpjheqU7t2/s/c= +cloud.google.com/go/datastream v1.10.2/go.mod h1:W42TFgKAs/om6x/CdXX5E4oiAsKlH+e8MTGy81zdYt0= +cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.1/go.mod h1:8jeadyLkH9qu9xgO3hVWw8jVr29N1mnW42gRJT8GY6g= +cloud.google.com/go/deploy v1.14.1/go.mod h1:N8S0b+aIHSEeSr5ORVoC0+/mOPUysVt8ae4QkZYolAw= +cloud.google.com/go/deploy v1.15.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.43.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.1/go.mod h1:n/h+/N2ouKOO+rbe/ZnI186xImpqvCVj2DdsWS/0EAk= +cloud.google.com/go/dialogflow v1.44.2/go.mod h1:QzFYndeJhpVPElnFkUXxdlptx0wPnBWLCBT9BvtC3/c= +cloud.google.com/go/dialogflow v1.44.3/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= +cloud.google.com/go/dlp v1.10.2/go.mod h1:ZbdKIhcnyhILgccwVDzkwqybthh7+MplGC3kZVZsIOQ= +cloud.google.com/go/dlp v1.10.3/go.mod h1:iUaTc/ln8I+QT6Ai5vmuwfw8fqTk2kaz0FvCwhLCom0= +cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.1/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.0/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.2/go.mod h1:Q/wcRT+qnuXOpjAkvOV4A+IeQl04q2/ReT7SSbytLSo= +cloud.google.com/go/documentai v1.23.4/go.mod h1:4MYAaEMnADPN1LPN5xboDR5QVB6AgsaxgFdJhitlE2Y= +cloud.google.com/go/documentai v1.23.5/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= +cloud.google.com/go/domains v0.9.2/go.mod h1:3YvXGYzZG1Temjbk7EyGCuGGiXHJwVNmwIf+E/cUp5I= +cloud.google.com/go/domains v0.9.3/go.mod h1:29k66YNDLDY9LCFKpGFeh6Nj9r62ZKm5EsUJxAl84KU= +cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= +cloud.google.com/go/edgecontainer v1.1.2/go.mod h1:wQRjIzqxEs9e9wrtle4hQPSR1Y51kqN75dgF7UllZZ4= +cloud.google.com/go/edgecontainer v1.1.3/go.mod h1:Ll2DtIABzEfaxaVSbwj3QHFaOOovlDFiWVDu349jSsA= +cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= +cloud.google.com/go/essentialcontacts v1.6.3/go.mod h1:yiPCD7f2TkP82oJEFXFTou8Jl8L6LBRPeBEkTaO0Ggo= +cloud.google.com/go/essentialcontacts v1.6.4/go.mod h1:iju5Vy3d9tJUg0PYMd1nHhjV7xoCXaOAVabrwLaPBEM= +cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.1/go.mod h1:EqBxmGHFrruIara4FUQ3RHlgfCn7yo1HYsu2Hpt/C3Y= +cloud.google.com/go/eventarc v1.13.2/go.mod h1:X9A80ShVu19fb4e5sc/OLV7mpFUKZMwfJFeeWhcIObM= +cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= +cloud.google.com/go/filestore v1.7.2/go.mod h1:TYOlyJs25f/omgj+vY7/tIG/E7BX369triSPzE4LdgE= +cloud.google.com/go/filestore v1.7.3/go.mod h1:Qp8WaEERR3cSkxToxFPHh/b8AACkSut+4qlCjAmKTV0= +cloud.google.com/go/filestore v1.8.0/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= +cloud.google.com/go/functions v1.15.2/go.mod h1:CHAjtcR6OU4XF2HuiVeriEdELNcnvRZSk1Q8RMqy4lE= +cloud.google.com/go/functions v1.15.3/go.mod h1:r/AMHwBheapkkySEhiZYLDBwVJCdlRwsm4ieJu35/Ug= +cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.1/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.2/go.mod h1:OMZbXzEJloyXMC7gqdSB+EOEQ1AKcpGYvO3s1ec5ixk= +cloud.google.com/go/gkebackup v1.3.3/go.mod h1:eMk7/wVV5P22KBakhQnJxWSVftL1p4VBFLpv0kIft7I= +cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= +cloud.google.com/go/gkeconnect v0.8.2/go.mod h1:6nAVhwchBJYgQCXD2pHBFQNiJNyAd/wyxljpaa6ZPrY= +cloud.google.com/go/gkeconnect v0.8.3/go.mod h1:i9GDTrfzBSUZGCe98qSu1B8YB8qfapT57PenIb820Jo= +cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= +cloud.google.com/go/gkehub v0.14.2/go.mod h1:iyjYH23XzAxSdhrbmfoQdePnlMj2EWcvnR+tHdBQsCY= +cloud.google.com/go/gkehub v0.14.3/go.mod h1:jAl6WafkHHW18qgq7kqcrXYzN08hXeK/Va3utN8VKg8= +cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.1/go.mod h1:AcrGoin6VLKT/fwZEYuqvVominLriQBCKmbjtnbMjG8= +cloud.google.com/go/gkemulticloud v1.0.2/go.mod h1:+ee5VXxKb3H1l4LZAcgWB/rvI16VTNTrInWxDjAGsGo= +cloud.google.com/go/gkemulticloud v1.0.3/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= +cloud.google.com/go/gsuiteaddons v1.6.2/go.mod h1:K65m9XSgs8hTF3X9nNTPi8IQueljSdYo9F+Mi+s4MyU= +cloud.google.com/go/gsuiteaddons v1.6.3/go.mod h1:sCFJkZoMrLZT3JTb8uJqgKPNshH2tfXeCwTFRebTq48= +cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= +cloud.google.com/go/iap v1.9.0/go.mod h1:01OFxd1R+NFrg78S+hoPV5PxEzv22HXaNqUUlmNHFuY= +cloud.google.com/go/iap v1.9.1/go.mod h1:SIAkY7cGMLohLSdBR25BuIxO+I4fXJiL06IBL7cy/5Q= +cloud.google.com/go/iap v1.9.2/go.mod h1:GwDTOs047PPSnwRD0Us5FKf4WDRcVvHg1q9WVkKBhdI= +cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= +cloud.google.com/go/ids v1.4.2/go.mod h1:3vw8DX6YddRu9BncxuzMyWn0g8+ooUjI2gslJ7FH3vk= +cloud.google.com/go/ids v1.4.3/go.mod h1:9CXPqI3GedjmkjbMWCUhMZ2P2N7TUMzAkVXYEH2orYU= +cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= +cloud.google.com/go/iot v1.7.2/go.mod h1:q+0P5zr1wRFpw7/MOgDXrG/HVA+l+cSwdObffkrpnSg= +cloud.google.com/go/iot v1.7.3/go.mod h1:t8itFchkol4VgNbHnIq9lXoOOtHNR3uAACQMYbN9N4I= +cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUEhbT/w= +cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ= +cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= +cloud.google.com/go/language v1.11.0/go.mod h1:uDx+pFDdAKTY8ehpWbiXyQdz8tDSYLJbQcXsCkjYyvQ= +cloud.google.com/go/language v1.11.1/go.mod h1:Xyid9MG9WOX3utvDbpX7j3tXDmmDooMyMDqgUVpH17U= +cloud.google.com/go/language v1.12.1/go.mod h1:zQhalE2QlQIxbKIZt54IASBzmZpN/aDASea5zl1l+J4= +cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= +cloud.google.com/go/lifesciences v0.9.2/go.mod h1:QHEOO4tDzcSAzeJg7s2qwnLM2ji8IRpQl4p6m5Z9yTA= +cloud.google.com/go/lifesciences v0.9.3/go.mod h1:gNGBOJV80IWZdkd+xz4GQj4mbqaz737SCLHn2aRhQKM= +cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= +cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= +cloud.google.com/go/managedidentities v1.6.2/go.mod h1:5c2VG66eCa0WIq6IylRk3TBW83l161zkFvCj28X7jn8= +cloud.google.com/go/managedidentities v1.6.3/go.mod h1:tewiat9WLyFN0Fi7q1fDD5+0N4VUoL0SCX0OTCthZq4= +cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.1/go.mod h1:BxSa0BnW1g2U2gNdbq5zikLlHUuHW0GFWh7sgML2kIY= +cloud.google.com/go/maps v1.5.1/go.mod h1:NPMZw1LJwQZYCfz4y+EIw+SI+24A4bpdFJqdKVr0lt4= +cloud.google.com/go/maps v1.6.1/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= +cloud.google.com/go/mediatranslation v0.8.2/go.mod h1:c9pUaDRLkgHRx3irYE5ZC8tfXGrMYwNZdmDqKMSfFp8= +cloud.google.com/go/mediatranslation v0.8.3/go.mod h1:F9OnXTy336rteOEywtY7FOqCk+J43o2RF638hkOQl4Y= +cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= +cloud.google.com/go/memcache v1.10.2/go.mod h1:f9ZzJHLBrmd4BkguIAa/l/Vle6uTHzHokdnzSWOdQ6A= +cloud.google.com/go/memcache v1.10.3/go.mod h1:6z89A41MT2DVAW0P4iIRdu5cmRTsbsFn4cyiIx8gbwo= +cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.13.0/go.mod h1:URDhpG6XLeh5K+Glq0NOt74OfrPKTwS62gEPZzb5SOk= +cloud.google.com/go/metastore v1.13.1/go.mod h1:IbF62JLxuZmhItCppcIfzBBfUFq0DIB9HPDoLgWrVOU= +cloud.google.com/go/metastore v1.13.2/go.mod h1:KS59dD+unBji/kFebVp8XU/quNSyo8b6N6tPGspKszA= +cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= +cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY= +cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4= +cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc= +cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= +cloud.google.com/go/networkconnectivity v1.13.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.1/go.mod h1:LyGPXR742uQcDxZ/wv4EI0Vu5N6NKJ77ZYVnDe69Zug= +cloud.google.com/go/networkconnectivity v1.14.2/go.mod h1:5UFlwIisZylSkGG1AdwK/WZUaoz12PKu6wODwIbFzJo= +cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= +cloud.google.com/go/networkmanagement v1.9.0/go.mod h1:UTUaEU9YwbCAhhz3jEOHr+2/K/MrBk2XxOLS89LQzFw= +cloud.google.com/go/networkmanagement v1.9.1/go.mod h1:CCSYgrQQvW73EJawO2QamemYcOb57LvrDdDU51F0mcI= +cloud.google.com/go/networkmanagement v1.9.2/go.mod h1:iDGvGzAoYRghhp4j2Cji7sF899GnfGQcQRQwgVOWnDw= +cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= +cloud.google.com/go/networksecurity v0.9.2/go.mod h1:jG0SeAttWzPMUILEHDUvFYdQTl8L/E/KC8iZDj85lEI= +cloud.google.com/go/networksecurity v0.9.3/go.mod h1:l+C0ynM6P+KV9YjOnx+kk5IZqMSLccdBqW6GUoF4p/0= +cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= +cloud.google.com/go/notebooks v1.10.0/go.mod h1:SOPYMZnttHxqot0SGSFSkRrwE29eqnKPBJFqgWmiK2k= +cloud.google.com/go/notebooks v1.10.1/go.mod h1:5PdJc2SgAybE76kFQCWrTfJolCOUQXF97e+gteUUA6A= +cloud.google.com/go/notebooks v1.11.1/go.mod h1:V2Zkv8wX9kDCGRJqYoI+bQAaoVeE5kSiz4yYHd2yJwQ= +cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= +cloud.google.com/go/optimization v1.5.0/go.mod h1:evo1OvTxeBRBu6ydPlrIRizKY/LJKo/drDMMRKqGEUU= +cloud.google.com/go/optimization v1.5.1/go.mod h1:NC0gnUD5MWVAF7XLdoYVPmYYVth93Q6BUzqAq3ZwtV8= +cloud.google.com/go/optimization v1.6.1/go.mod h1:hH2RYPTTM9e9zOiTaYPTiGPcGdNZVnBSBxjIAJzUkqo= +cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= +cloud.google.com/go/orchestration v1.8.2/go.mod h1:T1cP+6WyTmh6LSZzeUhvGf0uZVmJyTx7t8z7Vg87+A0= +cloud.google.com/go/orchestration v1.8.3/go.mod h1:xhgWAYqlbYjlz2ftbFghdyqENYW+JXuhBx9KsjMoGHs= +cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= +cloud.google.com/go/orgpolicy v1.11.2/go.mod h1:biRDpNwfyytYnmCRWZWxrKF22Nkz9eNVj9zyaBdpm1o= +cloud.google.com/go/orgpolicy v1.11.3/go.mod h1:oKAtJ/gkMjum5icv2aujkP4CxROxPXsBbYGCDbPO8MM= +cloud.google.com/go/orgpolicy v1.11.4/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= +cloud.google.com/go/osconfig v1.12.2/go.mod h1:eh9GPaMZpI6mEJEuhEjUJmaxvQ3gav+fFEJon1Y8Iw0= +cloud.google.com/go/osconfig v1.12.3/go.mod h1:L/fPS8LL6bEYUi1au832WtMnPeQNT94Zo3FwwV1/xGM= +cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= +cloud.google.com/go/oslogin v1.11.0/go.mod h1:8GMTJs4X2nOAUVJiPGqIWVcDaF0eniEto3xlOxaboXE= +cloud.google.com/go/oslogin v1.11.1/go.mod h1:OhD2icArCVNUxKqtK0mcSmKL7lgr0LVlQz+v9s1ujTg= +cloud.google.com/go/oslogin v1.12.1/go.mod h1:VfwTeFJGbnakxAY236eN8fsnglLiVXndlbcNomY4iZU= +cloud.google.com/go/oslogin v1.12.2/go.mod h1:CQ3V8Jvw4Qo4WRhNPF0o+HAM4DiLuE27Ul9CX9g2QdY= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= +cloud.google.com/go/phishingprotection v0.8.2/go.mod h1:LhJ91uyVHEYKSKcMGhOa14zMMWfbEdxG032oT6ECbC8= +cloud.google.com/go/phishingprotection v0.8.3/go.mod h1:3B01yO7T2Ra/TMojifn8EoGd4G9jts/6cIO0DgDY9J8= +cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= +cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= +cloud.google.com/go/policytroubleshooter v1.9.0/go.mod h1:+E2Lga7TycpeSTj2FsH4oXxTnrbHJGRlKhVZBLGgU64= +cloud.google.com/go/policytroubleshooter v1.9.1/go.mod h1:MYI8i0bCrL8cW+VHN1PoiBTyNZTstCg2WUw2eVC4c4U= +cloud.google.com/go/policytroubleshooter v1.10.1/go.mod h1:5C0rhT3TDZVxAu8813bwmTvd57Phbl8mr9F4ipOsxEs= +cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= +cloud.google.com/go/privatecatalog v0.9.2/go.mod h1:RMA4ATa8IXfzvjrhhK8J6H4wwcztab+oZph3c6WmtFc= +cloud.google.com/go/privatecatalog v0.9.3/go.mod h1:K5pn2GrVmOPjXz3T26mzwXLcKivfIJ9R5N79AFCF9UE= +cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.0/go.mod h1:QuE8EdU9dEnesG8/kG3XuJyNsjEqMlMzg3v3scCJ46c= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.1/go.mod h1:JZYZJOeZjgSSTGP4uz7NlQ4/d1w5hGmksVgM0lbEij0= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.2/go.mod h1:kpaDBOpkwD4G0GVMzG1W6Doy1tFFC97XAV3xy+Rd/pw= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.4/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= +cloud.google.com/go/recommendationengine v0.8.2/go.mod h1:QIybYHPK58qir9CV2ix/re/M//Ty10OxjnnhWdaKS1Y= +cloud.google.com/go/recommendationengine v0.8.3/go.mod h1:m3b0RZV02BnODE9FeSvGv1qibFo8g0OnmB/RMwYy4V8= +cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= +cloud.google.com/go/recommender v1.11.0/go.mod h1:kPiRQhPyTJ9kyXPCG6u/dlPLbYfFlkwHNRwdzPVAoII= +cloud.google.com/go/recommender v1.11.1/go.mod h1:sGwFFAyI57v2Hc5LbIj+lTwXipGu9NW015rkaEM5B18= +cloud.google.com/go/recommender v1.11.2/go.mod h1:AeoJuzOvFR/emIcXdVFkspVXVTYpliRCmKNYDnyBv6Y= +cloud.google.com/go/recommender v1.11.3/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= +cloud.google.com/go/redis v1.13.2/go.mod h1:0Hg7pCMXS9uz02q+LoEVl5dNHUkIQv+C/3L76fandSA= +cloud.google.com/go/redis v1.13.3/go.mod h1:vbUpCKUAZSYzFcWKmICnYgRAhTFg9r+djWqFxDYXi4U= +cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= +cloud.google.com/go/resourcemanager v1.9.2/go.mod h1:OujkBg1UZg5lX2yIyMo5Vz9O5hf7XQOSV7WxqxxMtQE= +cloud.google.com/go/resourcemanager v1.9.3/go.mod h1:IqrY+g0ZgLsihcfcmqSe+RKp1hzjXwG904B92AwBz6U= +cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= +cloud.google.com/go/resourcesettings v1.6.2/go.mod h1:mJIEDd9MobzunWMeniaMp6tzg4I2GvD3TTmPkc8vBXk= +cloud.google.com/go/resourcesettings v1.6.3/go.mod h1:pno5D+7oDYkMWZ5BpPsb4SO0ewg3IXcmmrUZaMJrFic= +cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= +cloud.google.com/go/retail v1.14.2/go.mod h1:W7rrNRChAEChX336QF7bnMxbsjugcOCPU44i5kbLiL8= +cloud.google.com/go/retail v1.14.3/go.mod h1:Omz2akDHeSlfCq8ArPKiBxlnRpKEBjUH386JYFLUvXo= +cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= +cloud.google.com/go/run v1.3.0/go.mod h1:S/osX/4jIPZGg+ssuqh6GNgg7syixKe3YnprwehzHKU= +cloud.google.com/go/run v1.3.1/go.mod h1:cymddtZOzdwLIAsmS6s+Asl4JoXIDm/K1cpZTxV4Q5s= +cloud.google.com/go/run v1.3.2/go.mod h1:SIhmqArbjdU/D9M6JoHaAqnAMKLFtXaVdNeq04NjnVE= +cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= +cloud.google.com/go/scheduler v1.10.2/go.mod h1:O3jX6HRH5eKCA3FutMw375XHZJudNIKVonSCHv7ropY= +cloud.google.com/go/scheduler v1.10.3/go.mod h1:8ANskEM33+sIbpJ+R4xRfw/jzOG+ZFE8WVLy7/yGvbc= +cloud.google.com/go/scheduler v1.10.5/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= +cloud.google.com/go/secretmanager v1.11.2/go.mod h1:MQm4t3deoSub7+WNwiC4/tRYgDBHJgJPvswqQVB1Vss= +cloud.google.com/go/secretmanager v1.11.3/go.mod h1:0bA2o6FabmShrEy328i67aV+65XoUFFSmVeLBn/51jI= +cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= +cloud.google.com/go/security v1.15.2/go.mod h1:2GVE/v1oixIRHDaClVbHuPcZwAqFM28mXuAKCfMgYIg= +cloud.google.com/go/security v1.15.3/go.mod h1:gQ/7Q2JYUZZgOzqKtw9McShH+MjNvtDpL40J1cT+vBs= +cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= +cloud.google.com/go/securitycenter v1.23.1/go.mod h1:w2HV3Mv/yKhbXKwOCu2i8bCuLtNP1IMHuiYQn4HJq5s= +cloud.google.com/go/securitycenter v1.24.1/go.mod h1:3h9IdjjHhVMXdQnmqzVnM7b0wMn/1O/U20eWVpMpZjI= +cloud.google.com/go/securitycenter v1.24.2/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.1/go.mod h1:tJywXimEWzNzw9FvtNjsQxxJ3/41jseeILgwU/QLrGI= +cloud.google.com/go/servicedirectory v1.11.2/go.mod h1:KD9hCLhncWRV5jJphwIpugKwM5bn1x0GyVVD4NO8mGg= +cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= +cloud.google.com/go/shell v1.7.2/go.mod h1:KqRPKwBV0UyLickMn0+BY1qIyE98kKyI216sH/TuHmc= +cloud.google.com/go/shell v1.7.3/go.mod h1:cTTEz/JdaBsQAeTQ3B6HHldZudFoYBOqjteev07FbIc= +cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= +cloud.google.com/go/spanner v1.49.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.50.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0= +cloud.google.com/go/spanner v1.53.0/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.1/go.mod h1:WcuaWz/3hOlzPFOVo9DUsblMIHwxP589y6ZMtaG+iAA= +cloud.google.com/go/speech v1.19.2/go.mod h1:2OYFfj+Ch5LWjsaSINuCZsre/789zlcCI3SY4oAi2oI= +cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -344,55 +999,163 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= +cloud.google.com/go/storagetransfer v1.10.1/go.mod h1:rS7Sy0BtPviWYTTJVWCSV4QrbBitgPeuK4/FKa4IdLs= +cloud.google.com/go/storagetransfer v1.10.2/go.mod h1:meIhYQup5rg9juQJdyppnA/WLQCOguxtk1pr3/vBWzA= +cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= +cloud.google.com/go/talent v1.6.3/go.mod h1:xoDO97Qd4AK43rGjJvyBHMskiEf3KulgYzcH6YWOVoo= +cloud.google.com/go/talent v1.6.4/go.mod h1:QsWvi5eKeh6gG2DlBkpMaFYZYrYUnIpo34f6/V5QykY= +cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= +cloud.google.com/go/texttospeech v1.7.2/go.mod h1:VYPT6aTOEl3herQjFHYErTlSZJ4vB00Q2ZTmuVgluD4= +cloud.google.com/go/texttospeech v1.7.3/go.mod h1:Av/zpkcgWfXlDLRYob17lqMstGZ3GqlvJXqKMp2u8so= +cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= +cloud.google.com/go/tpu v1.6.2/go.mod h1:NXh3NDwt71TsPZdtGWgAG5ThDfGd32X1mJ2cMaRlVgU= +cloud.google.com/go/tpu v1.6.3/go.mod h1:lxiueqfVMlSToZY1151IaZqp89ELPSrk+3HIQ5HRkbY= +cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= +cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA= +cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY= +cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.0/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.1/go.mod h1:TWIgDZknq2+JD4iRcojgeDtqGEp154HN/uL6hMvylS8= +cloud.google.com/go/translate v1.9.2/go.mod h1:E3Tc6rUTsQkVrXW6avbUhKJSr7ZE3j7zNmqzXKHqRrY= +cloud.google.com/go/translate v1.9.3/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.20.0/go.mod h1:U3G3FTnsvAGqglq9LxgqzOiBc/Nt8zis8S+850N2DUM= +cloud.google.com/go/video v1.20.1/go.mod h1:3gJS+iDprnj8SY6pe0SwLeC5BUW80NjhwX7INWEuWGU= +cloud.google.com/go/video v1.20.2/go.mod h1:lrixr5JeKNThsgfM9gqtwb6Okuqzfo4VrY2xynaViTA= +cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= +cloud.google.com/go/videointelligence v1.11.2/go.mod h1:ocfIGYtIVmIcWk1DsSGOoDiXca4vaZQII1C85qtoplc= +cloud.google.com/go/videointelligence v1.11.3/go.mod h1:tf0NUaGTjU1iS2KEkGWvO5hRHeCkFK3nPo0/cOZhZAo= +cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= +cloud.google.com/go/vision/v2 v2.7.3/go.mod h1:V0IcLCY7W+hpMKXK1JYE0LV5llEqVmj+UJChjvA1WsM= +cloud.google.com/go/vision/v2 v2.7.4/go.mod h1:ynDKnsDN/0RtqkKxQZ2iatv3Dm9O+HfRb5djl7l4Vvw= +cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= +cloud.google.com/go/vmmigration v1.7.2/go.mod h1:iA2hVj22sm2LLYXGPT1pB63mXHhrH1m/ruux9TwWLd8= +cloud.google.com/go/vmmigration v1.7.3/go.mod h1:ZCQC7cENwmSWlwyTrZcWivchn78YnFniEQYRWQ65tBo= +cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.1/go.mod h1:aT3Xsm5sNx0QShk1Jc1B8OddrxAScYLwzVoaiXfdzzk= +cloud.google.com/go/vmwareengine v1.0.2/go.mod h1:xMSNjIk8/itYrz1JA8nV3Ajg4L4n3N+ugP8JKzk3OaA= +cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= +cloud.google.com/go/vpcaccess v1.7.2/go.mod h1:mmg/MnRHv+3e8FJUjeSibVFvQF1cCy2MsFaFqxeY1HU= +cloud.google.com/go/vpcaccess v1.7.3/go.mod h1:YX4skyfW3NC8vI3Fk+EegJnlYFatA+dXK4o236EUCUc= +cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= +cloud.google.com/go/webrisk v1.9.2/go.mod h1:pY9kfDgAqxUpDBOrG4w8deLfhvJmejKB0qd/5uQIPBc= +cloud.google.com/go/webrisk v1.9.3/go.mod h1:RUYXe9X/wBDXhVilss7EDLW9ZNa06aowPuinUOPCXH8= +cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= +cloud.google.com/go/websecurityscanner v1.6.2/go.mod h1:7YgjuU5tun7Eg2kpKgGnDuEOXWIrh8x8lWrJT4zfmas= +cloud.google.com/go/websecurityscanner v1.6.3/go.mod h1:x9XANObUFR+83Cya3g/B9M/yoHVqzxPnFtgF8yYGAXw= +cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= +cloud.google.com/go/workflows v1.12.0/go.mod h1:PYhSk2b6DhZ508tj8HXKaBh+OFe+xdl0dHF/tJdzPQM= +cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCwLM1P1tBRGHM= +cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= +cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/aws/aws-lambda-go v1.41.0 h1:l/5fyVb6Ud9uYd411xdHZzSf2n86TakxzpvIoz7l+3Y= github.com/aws/aws-lambda-go v1.41.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM= github.com/aws/aws-sdk-go v1.44.287 h1:CUq2/h0gZ2LOCF61AgQSEMPMfas4gTiQfHBO88gGET0= github.com/aws/aws-sdk-go v1.44.287/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= @@ -415,10 +1178,16 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -429,20 +1198,43 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -468,11 +1260,14 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -488,11 +1283,16 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -509,13 +1309,24 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -526,6 +1337,11 @@ github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -544,26 +1360,47 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/logicmonitor/lm-data-sdk-go v1.0.0 h1:2eiz7kq3G0rLc/hqVpsk1c2B0PMjp6nLhHzc5SmTn80= -github.com/logicmonitor/lm-data-sdk-go v1.0.0/go.mod h1:XvYS9xp/0WrPpc6ge2O3ZPn2dgbKO46PnfCfbKaeUu8= -github.com/logicmonitor/lm-logs-sdk-go v1.0.0 h1:jru4Y4wA2sJIJACRutaIog9t1sZevgKkQtHraY4rvwI= -github.com/logicmonitor/lm-logs-sdk-go v1.0.0/go.mod h1:CL/s31hARWqG3TsIX4wkBouv3wqbS/grm/jV+avXDQY= +github.com/logicmonitor/lm-data-sdk-go v1.3.0 h1:Obrexk35IKupFQezngkesR/kMfHQdAEUR1zYbJrOrzg= +github.com/logicmonitor/lm-data-sdk-go v1.3.0/go.mod h1:nIHr4uOPfg6AM7mG1rewg3L4O3rfge34o7UYB7joBM4= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= @@ -572,9 +1409,18 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= @@ -582,6 +1428,7 @@ github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcD github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -592,6 +1439,7 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0= @@ -601,7 +1449,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -610,15 +1461,13 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector/pdata v1.0.0-rc6 h1:qsFpsJWwpvUDg5GgaADa67mQpHoF2k7Yap6utad7kaI= -go.opentelemetry.io/collector/pdata v1.0.0-rc6/go.mod h1:Eud2ehoJr3n4RclhcYfhrlRIbl/nxwTl4w2D/Fyzp20= +go.opentelemetry.io/collector/pdata v1.0.0 h1:ECP2jnLztewsHmL1opL8BeMtWVc7/oSlKNhfY9jP8ec= +go.opentelemetry.io/collector/pdata v1.0.0/go.mod h1:TsDFgs4JLNG7t6x9D8kGswXUz4mme+MyNChHx8zSF6k= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -628,18 +1477,45 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -664,8 +1540,13 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -703,6 +1584,8 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -715,12 +1598,23 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -747,6 +1641,13 @@ golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -760,8 +1661,12 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -775,6 +1680,7 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -795,6 +1701,7 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -811,6 +1718,8 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -827,17 +1736,41 @@ golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -848,18 +1781,28 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -872,6 +1815,7 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -901,6 +1845,7 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -912,8 +1857,14 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -922,6 +1873,14 @@ golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -973,6 +1932,20 @@ google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91 google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1086,13 +2059,90 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920183334-c177e329c48b/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1130,8 +2180,18 @@ google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1147,11 +2207,14 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1168,6 +2231,59 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/code/lambda.go b/code/lambda.go index 4c3505c..64edbc1 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -121,12 +121,12 @@ func handler(request interface{}) { auth := utils.AuthParams{AccessID: accessID, AccessKey: accessKey, - BearerToken: bearerToken, - CollectorCredentials: ""} + BearerToken: bearerToken} options := []logs.Option{ logs.WithLogBatchingDisabled(), logs.WithAuthentication(auth), + logs.WithUserAgent("lm-logs-aws"), } lmLog, err := logs.NewLMLogIngest(context.Background(), options...) @@ -135,6 +135,7 @@ func handler(request interface{}) { return } SendLogs(log, lmLog) + } func main() { diff --git a/code/version.properties b/code/version.properties index 7dc9496..3ea894b 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.4.0 +version=1.5.0 From 0de6faae66f233cd75c86a431fd1b5c82b10d0cc Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 7 Mar 2024 16:09:43 +0530 Subject: [PATCH 048/102] DEV-160031:Missed updating the version in cloudformation template --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 5606d8f..89abfbc 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.4.0 + Version: 1.5.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" From 2dc8cf81e715685543410e86eae7e6699344f649 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 14 Mar 2024 18:20:26 +0530 Subject: [PATCH 049/102] DEV-160131:Adding Account Level Subcription Support --- cloudformation.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/cloudformation.yaml b/cloudformation.yaml index 89abfbc..c721565 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -128,6 +128,15 @@ Parameters: Type: String Default: "" Description: ARN for the Permissions Boundary Policy + AccountLevelSubscription: + Type: String + AllowedValues: [true, false] + Default: "false" + Description: If true it will enable account level subscription to forward logs to the LMLogsForwarder lambda. + FilterPattern: + Type: String + Description: Specify the log event structure and any filter conditions to apply on your log data as it gets streamed to LMLogsForwarder lambda. Only applicable if AccountLevelSubscription is true. + Default: "" Rules: NoAccessIdKeyProvided: @@ -342,6 +351,15 @@ Resources: Description: LogicMonitor Bearer Token SecretString: Ref: LMBearerToken + AccountPolicy: + Condition: IsAccountLevel + Type: AWS::Logs::AccountPolicy + DependsOn: Forwarder + Properties: + PolicyName: test-subscriptionfilter-policy + PolicyDocument: !Sub "{\"DestinationArn\":\"arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}\", \"FilterPattern\": \"${FilterPattern}\"}" + PolicyType: "SUBSCRIPTION_FILTER_POLICY" + Scope: "ALL" Conditions: SetPermissionsBoundary: Fn::Not: @@ -361,6 +379,7 @@ Conditions: CreateSecretBearerToken: !And - !Condition MustUseBearerTokenForAuth - !Condition CreateSecretManager + IsAccountLevel: !Equals [!Ref AccountLevelSubscription, 'true'] Outputs: LMForwarderArn: Description: LogicMonitor Forwarder Lambda Function ARN @@ -392,4 +411,6 @@ Metadata: - LMTenantIdentifier - FunctionMemorySize - FunctionTimeoutInSeconds + - AccountLevelSubscription + - FilterPattern From 1bc3190cc7b6a758c23ffc08729ddebe513bd2b9 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Fri, 15 Mar 2024 14:15:26 +0530 Subject: [PATCH 050/102] DEV-160131:Adding changes for version update --- cloudformation.yaml | 2 +- code/version.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index c721565..f2f8d95 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.0 + Version: 1.5.1 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/version.properties b/code/version.properties index 3ea894b..c5cc09c 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.0 +version=1.5.1 From 46c2e2b1524c83b4223612cc572f2fc81e53ced6 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 19 Mar 2024 15:54:40 +0530 Subject: [PATCH 051/102] DEV-160131:Adding selection criteria for log groups --- cloudformation.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index f2f8d95..c284151 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -137,6 +137,10 @@ Parameters: Type: String Description: Specify the log event structure and any filter conditions to apply on your log data as it gets streamed to LMLogsForwarder lambda. Only applicable if AccountLevelSubscription is true. Default: "" + SelectionCriteria: + Type: String + Description: Use this parameter to apply a subscription filter policy to a subset of log groups in the account. The string can be up to 25KB in length + Default: "LogGroupName NOT IN [\"MyLogGroup\", \"MyAnotherLogGroup\"]" Rules: NoAccessIdKeyProvided: @@ -356,10 +360,15 @@ Resources: Type: AWS::Logs::AccountPolicy DependsOn: Forwarder Properties: - PolicyName: test-subscriptionfilter-policy + PolicyName: account-subscriptionfilter-policy PolicyDocument: !Sub "{\"DestinationArn\":\"arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}\", \"FilterPattern\": \"${FilterPattern}\"}" PolicyType: "SUBSCRIPTION_FILTER_POLICY" Scope: "ALL" + SelectionCriteria: + Fn::If: + - HasSelectionCriteria + - Ref: SelectionCriteria + - Ref: AWS::NoValue Conditions: SetPermissionsBoundary: Fn::Not: @@ -380,6 +389,7 @@ Conditions: - !Condition MustUseBearerTokenForAuth - !Condition CreateSecretManager IsAccountLevel: !Equals [!Ref AccountLevelSubscription, 'true'] + HasSelectionCriteria: !Not [!Equals [!Ref SelectionCriteria, ""]] Outputs: LMForwarderArn: Description: LogicMonitor Forwarder Lambda Function ARN @@ -413,4 +423,5 @@ Metadata: - FunctionTimeoutInSeconds - AccountLevelSubscription - FilterPattern + - HasSelectionCriteria From 6eb00eb168789afc5cbb817273bfac442ac12973 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 19 Mar 2024 16:34:03 +0530 Subject: [PATCH 052/102] DEV-160131:Changing description for log groups --- cloudformation.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index c284151..f62351a 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -139,8 +139,8 @@ Parameters: Default: "" SelectionCriteria: Type: String - Description: Use this parameter to apply a subscription filter policy to a subset of log groups in the account. The string can be up to 25KB in length - Default: "LogGroupName NOT IN [\"MyLogGroup\", \"MyAnotherLogGroup\"]" + Description: Use this parameter to apply a subscription filter policy to a subset of log groups in the account. The string can be up to 25KB in length. Example LogGroupName NOT IN ["MyLogGroup", "MyAnotherLogGroup"] + Default: "" Rules: NoAccessIdKeyProvided: @@ -423,5 +423,5 @@ Metadata: - FunctionTimeoutInSeconds - AccountLevelSubscription - FilterPattern - - HasSelectionCriteria + - SelectionCriteria From d057c12cdc0e585c3dd88aa14aea34b3b9684472 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 20 Mar 2024 14:59:28 +0530 Subject: [PATCH 053/102] DEV-160131:Adding missing dependency on CloudwatchLogsPermission --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index f62351a..601b07a 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -358,7 +358,7 @@ Resources: AccountPolicy: Condition: IsAccountLevel Type: AWS::Logs::AccountPolicy - DependsOn: Forwarder + DependsOn: [Forwarder, CloudWatchLogsPermission, S3Permission] Properties: PolicyName: account-subscriptionfilter-policy PolicyDocument: !Sub "{\"DestinationArn\":\"arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}\", \"FilterPattern\": \"${FilterPattern}\"}" From 96b03354f587a026dbfc9b0f526c80be3721b69b Mon Sep 17 00:00:00 2001 From: Ankit Gautam Date: Wed, 15 May 2024 13:11:09 +0530 Subject: [PATCH 054/102] DEV-166777: DEV-166777 | Adding-resource_type in metadata --- cloudformation.yaml | 7 +++++++ code/helper.go | 1 + code/parse.go | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/cloudformation.yaml b/cloudformation.yaml index 601b07a..ff48d9e 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -141,6 +141,10 @@ Parameters: Type: String Description: Use this parameter to apply a subscription filter policy to a subset of log groups in the account. The string can be up to 25KB in length. Example LogGroupName NOT IN ["MyLogGroup", "MyAnotherLogGroup"] Default: "" + ResourceType: + Type: String + Description: Type of platform in which services are deployed. + Default: "AWS" Rules: NoAccessIdKeyProvided: @@ -190,6 +194,8 @@ Resources: ADD_CLOUDWATCH_METADATA: "true" LM_TENANT_IDENTIFIER: Ref: LMTenantIdentifier + RESOURCE_TYPE: + Ref: ResourceType Policies: - Version: "2012-10-17" Statement: @@ -424,4 +430,5 @@ Metadata: - AccountLevelSubscription - FilterPattern - SelectionCriteria + - ResourceType diff --git a/code/helper.go b/code/helper.go index ef2d258..81ad503 100644 --- a/code/helper.go +++ b/code/helper.go @@ -69,6 +69,7 @@ func ExtractEnvironmentVariables() { } lmTenantID = os.Getenv("LM_TENANT_IDENTIFIER") + resourceType = os.Getenv("RESOURCE_TYPE") } func readCloserToString(body io.ReadCloser) string { diff --git a/code/parse.go b/code/parse.go index 465cdad..705d8b7 100644 --- a/code/parse.go +++ b/code/parse.go @@ -20,6 +20,7 @@ var defaultJsonMetadataKeys []string var addCloudWatchMetadata = false var metadataArray []string var lmTenantID string +var resourceType string var goJsonQ = jsonq.New() func parseELBlogs(request events.S3Event, getContentsFromS3Bucket GetContentFromS3Bucket) ([]model.LogInput, error) { @@ -274,6 +275,9 @@ func extractMetadataForCloudTrail(message string) map[string]interface{} { if strings.TrimSpace(lmTenantID) != "" { metadataMap["_lm.tenantId"] = lmTenantID } + if strings.TrimSpace(resourceType) != "" { + metadataMap["_lm.resourceType"] = resourceType + } return metadataMap } @@ -292,6 +296,9 @@ func extractMetadata(region string, arn string, eventsource string) map[string]i if strings.TrimSpace(lmTenantID) != "" { metadataMap["_lm.tenantId"] = lmTenantID } + if strings.TrimSpace(resourceType) != "" { + metadataMap["_lm.resourceType"] = resourceType + } return metadataMap } From df09d7603177a9fb9ba83d52790ce0d01b1dad48 Mon Sep 17 00:00:00 2001 From: Ankit Gautam Date: Fri, 17 May 2024 20:30:00 +0530 Subject: [PATCH 055/102] DEV-166777: Refactoring --- cloudformation.yaml | 2 +- code/parse.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index ff48d9e..2099a44 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -143,7 +143,7 @@ Parameters: Default: "" ResourceType: Type: String - Description: Type of platform in which services are deployed. + Description: Type of platform from where logs are coming. Default: "AWS" Rules: diff --git a/code/parse.go b/code/parse.go index 705d8b7..78487e3 100644 --- a/code/parse.go +++ b/code/parse.go @@ -276,7 +276,7 @@ func extractMetadataForCloudTrail(message string) map[string]interface{} { metadataMap["_lm.tenantId"] = lmTenantID } if strings.TrimSpace(resourceType) != "" { - metadataMap["_lm.resourceType"] = resourceType + metadataMap["resourceType"] = resourceType } return metadataMap } @@ -297,7 +297,7 @@ func extractMetadata(region string, arn string, eventsource string) map[string]i metadataMap["_lm.tenantId"] = lmTenantID } if strings.TrimSpace(resourceType) != "" { - metadataMap["_lm.resourceType"] = resourceType + metadataMap["_resourceType"] = resourceType } return metadataMap From 679dfd4dcaf4e44982da549336fea5920d895894 Mon Sep 17 00:00:00 2001 From: Ankit Gautam Date: Mon, 20 May 2024 12:20:29 +0530 Subject: [PATCH 056/102] DEV-166777: Bumped version to 1.5.2 which I missed --- cloudformation.yaml | 2 +- code/version.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 2099a44..803e7a7 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.1 + Version: 1.5.2 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/version.properties b/code/version.properties index c5cc09c..99453ff 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.1 +version=1.5.2 From 1db259e64582133cb09851e73937afbf0af64bca Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 17 Jul 2024 15:49:57 +0530 Subject: [PATCH 057/102] DEV-173005:adding changes for log-ingest timeout configuration --- code/helper.go | 19 +++++++++++++++++++ code/lambda.go | 12 +++++++++++- code/version.properties | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/code/helper.go b/code/helper.go index 81ad503..17cc363 100644 --- a/code/helper.go +++ b/code/helper.go @@ -70,6 +70,25 @@ func ExtractEnvironmentVariables() { lmTenantID = os.Getenv("LM_TENANT_IDENTIFIER") resourceType = os.Getenv("RESOURCE_TYPE") + + ingestTimeoutStr, exists := os.LookupEnv("LOG_INGEST_TIMEOUT") + + if exists { + ingestTimeout, err = strconv.Atoi(ingestTimeoutStr) + if err != nil { + if debug{ + log.Println("Error converting %s to integer: %v\n", ingestTimeout, err) + } + ingestTimeout = 0 + } + } + + if ingestTimeout == 0 { + if debug { + log.Println("Environmental variable LOG_INGEST_TIMEOUT not set. Using default as 10sec") + } + ingestTimeout = 10 + } } func readCloserToString(body io.ReadCloser) string { diff --git a/code/lambda.go b/code/lambda.go index 64edbc1..de71cc6 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -9,6 +9,7 @@ import ( "net/http" "regexp" "strings" + "time" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-sdk-go/aws/session" @@ -19,7 +20,7 @@ import ( ) var awsRegion, scrubRegex, useSecretManager, accessID, accessKey, bearerToken, companyName string - +var ingestTimeout int var debug bool var sessionNew *session.Session var s3Manager *s3.S3 @@ -119,6 +120,7 @@ func handler(request interface{}) { log := ExtractLogs(request) ScrubLogsWithRegex(log) + client := Client() auth := utils.AuthParams{AccessID: accessID, AccessKey: accessKey, BearerToken: bearerToken} @@ -127,6 +129,7 @@ func handler(request interface{}) { logs.WithLogBatchingDisabled(), logs.WithAuthentication(auth), logs.WithUserAgent("lm-logs-aws"), + logs.WithHTTPClient(client), } lmLog, err := logs.NewLMLogIngest(context.Background(), options...) @@ -138,6 +141,13 @@ func handler(request interface{}) { } +func Client() *http.Client { + transport := http.DefaultTransport.(*http.Transport).Clone() + transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: false, MinVersion: tls.VersionTLS12} + clientTransport := (http.RoundTripper)(transport) + return &http.Client{Transport: clientTransport, Timeout: time.Duration(ingestTimeout) * time.Second} +} + func main() { http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: false} lambda.Start(handler) diff --git a/code/version.properties b/code/version.properties index 99453ff..39b3f38 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.2 +version=1.5.3 From d90403de1bf4daf6fd6c70043f901218fcc94a84 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Thu, 18 Jul 2024 11:22:48 +0530 Subject: [PATCH 058/102] DEV-173005:Fixing buildfailure due to logging --- code/helper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/helper.go b/code/helper.go index 17cc363..bd4c3c2 100644 --- a/code/helper.go +++ b/code/helper.go @@ -77,7 +77,7 @@ func ExtractEnvironmentVariables() { ingestTimeout, err = strconv.Atoi(ingestTimeoutStr) if err != nil { if debug{ - log.Println("Error converting %s to integer: %v\n", ingestTimeout, err) + log.Printf("Error converting LOG_INGEST_TIMEOUT value %s to integer: %v\n", strconv.Itoa(ingestTimeout), err) } ingestTimeout = 0 } From b2536e44a5cee442586ffb3bb94d8bd555ce6157 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Fri, 19 Jul 2024 15:00:58 +0530 Subject: [PATCH 059/102] DEV-173005:Updating version for cloudforation --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 803e7a7..6b1cee0 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.2 + Version: 1.5.3 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" From c0a4476c59209fdbad60f63828c4b7cb5db2ec9b Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 27 Aug 2024 11:54:37 +0530 Subject: [PATCH 060/102] DEV-176822:Partial commit --- code/aws.go | 2 +- code/parse.go | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/code/aws.go b/code/aws.go index a1a14e4..baab865 100644 --- a/code/aws.go +++ b/code/aws.go @@ -88,7 +88,7 @@ func convertToCloudWatchEvent(m interface{}) events.CloudWatchEvent { var result events.CloudWatchEvent var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal cloudWatch event", err) - + log.Printf("cloudwatch event reiceved ", result) return result } diff --git a/code/parse.go b/code/parse.go index 78487e3..530b0bf 100644 --- a/code/parse.go +++ b/code/parse.go @@ -109,6 +109,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { var resourceValue string var resoureProp = make(map[string]interface{}) var isEC2NetworkInterface bool = false + var isBedrockModelLogs bool = false var resourceProperty string = "system.aws.arn" if d.LogGroup == "RDSOSMetrics" { rdsEnhancedEvent := make(map[string]interface{}) @@ -169,7 +170,17 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - } else { + }else if strings.Contains(d.LogGroup, "bedrock"){ + if (strings.Contains(d.LogStream, "modelinvocations")){ + fmt.Println("msg from modelincovation") + isBedrockModelLogs = true + } + } else if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs"){ + fmt.Println("event from bedrock knowledge base") + resoureProp["system.aws.accountid"] = d.Owner + resoureProp["system.cloud.category"] = "AWS/LMAccount" + metadataMap = extractMetadata(awsRegion, "", "bedrock.amazonaws.com") + }else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") @@ -190,6 +201,15 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") + } + if isBedrockModelLogs && resourceValue == "" { + var messageJson map[string]interface{} + json.Unmarshal([]byte(event.Message ), &messageJson) + fmt.Println("bedrock msg ",messageJson) + resourceValue = messageJson["modelId"] + resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, resourceValue, "bedrock.amazonaws.com") + } addCustomMetadataFromRawJson(metadataMap, event.Message, defaultJsonMetadataKeys) mergeMaps(metadataMap, cloudWatchEventMetadata) From 7507e5e7abb7907455a6014b33d4aee9b5d85268 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 27 Aug 2024 12:39:35 +0530 Subject: [PATCH 061/102] DEV-19056:Adding support for python3.11 for aws govcloud --- cloudformation.yaml | 4 ++-- code/version.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 6b1cee0..6308219 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.3 + Version: 1.5.4 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" @@ -256,7 +256,7 @@ Resources: Properties: Description: Copies Logic Monitor Forwarder zip to the destination S3 bucket Handler: index.handler - Runtime: python3.12 + Runtime: python3.11 Timeout: 300 InlineCode: | import json diff --git a/code/version.properties b/code/version.properties index 39b3f38..eaf8d2e 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.3 +version=1.5.4 From 00333e142cfdda8da7c1d646764bca52702d41f9 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Fri, 30 Aug 2024 00:16:07 +0530 Subject: [PATCH 062/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- code/parse.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/parse.go b/code/parse.go index 78487e3..3d207ce 100644 --- a/code/parse.go +++ b/code/parse.go @@ -169,6 +169,10 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) + } else if strings.Contains(d.LogGroup, "eks"){ + resoureProp["system.aws.accountid"] = d.Owner + resoureProp["system.cloud.category"] = "AWS/LMAccount" + metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue From 30de722ac2d05d0588c10cca014ea78dc41440cf Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Fri, 30 Aug 2024 20:32:29 +0530 Subject: [PATCH 063/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- cloudformation.yaml | 2 +- code/parse_test.go | 22 ++++++++++++++++++++++ code/version.properties | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 6308219..e9706b9 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.4 + Version: 1.5.5 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/parse_test.go b/code/parse_test.go index c1a8855..197d6a6 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -613,6 +613,28 @@ func TestFargateLog(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } +func TestEKSLog(t *testing.T) { + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "eks.amazonaws.com"} + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAA/+3YW2/bNhQA4L8i8CUvlszDOwUUWIAlxYBtKJY8LQ4CSqRsIrIoiFTcLsh/L6w0bZA1D0m9tQX0SPqQPIfip4tv0dbFaNbu/EPvUIl+PT4/vvrj5Ozs+O0JWqCw69yASkQUZoxyjBXBaIHasH47hLFHJVqaXVzWoUvGd27wXfTrTYrLGx83ps3bsM7ddVyavm99bZIP3f3wszQ4s0Ul8n0OkuQUcopzILgYY75zMeWkqMO2H5MrfJfc0Jk2fzRLcWOGog3r4vPSsWja0XUpr3zKN93OVldma/4JXV63YbQ7k+rN1aMQJRtJOTBpq0YoapjjRgopdKWtttbWVivXSCMMmEqBrmqjK2pYY62usGP71dECxbGK9eD7fVKnvk1uiKi8QMnFlFJCl1O1JzeuS/v+W+QtKhFVTEimBdFMcaVAMKw05lgzSinDQDgRknGmsVKSS0JAcqIoQQuU/NbFZLY9KkESphkBDRzD4uFCohLdrqawFSpXiGDCcqxyos+BlVSUFAqOQQutpP57hRYrFKdrMUXHZN0wTL1X/dRzOjXasJ5aF/vpllgtic4eprvMLtwwhOEyuwhj6sdUPtrwNqzj03aBL7N3Y/r9YV+y43e/ZYOLfeiss9nOp002zfjm6C8XwzjU7s+QTsPY2ZP3tZu2+miRfar3zdH5xmWxd7VvvLNZG9bZfUWZDS5mXUiZe+9jKo6mUq7Hyg2dSy6uUHm7Qn2wV535tFtPj9A0Yv9r7E3tvsT962RNgfupvJ0CBDW1aqzORUUgZ9iRXFOpcsJpo3AtAbSdxmxCTNOIF0CYBn4++F/Lfoqwob52w0NG33renyy6MXFzXykmDAMwyjgp7PVQuHp4lPv9Tpld3Fex3N8LQhXdcGMq3/r0YX/7yJsw5F9y/yVuDOGixEZWGhuloRYNa5RTFVQGwGnVEFEBpoJDg1ltDQdHZaWwUgJkxcCQqqmfJOy3Zu3+m4xLUlBSkGKPAwsiV+juDt0tvoJdAYAEzvbJE6a54IxIpagmioCkEkBJIiWlhOnnsZOXYScYA8jvZ/3U+NbZLIUsuu4eqJvgzx5njz+LR44P6ZErzWeQM8gZ5OtBwiFBaqzYDwNyxjhj/N4YKSimpcCCgqZMcs6UoIxoAIYZ5VxQDppTLrDWVGrxDEbCxQs+TUnBBVBNODvI05HMn6Yz9hn7wbHLw2FnDFN+kCfv67DPr8IzyJ8fpDokSI7FDHIGOYP8BpDP/Xn7KpCKYvhhQM4YZ4z/N8bLu488sRq3px4AAA==", + }, + } + logs := parseCloudWatchLogs(cloudWatchEvent) + localTime := time.Local + timeValue := time.Date(2024, time.August, 29, 20, 06, 31, 501000000, time.Local) + if strings.Contains(localTime.String(), "UTC") { //Test case is running at system with time.Local as UTC + timeValue = time.Date(2024, time.August, 29, 14, 36, 31, 501000000, time.Local) + } + expectedLMEvent := model.LogInput{ + Message: "{\"time\":\"2024-08-29T14:36:31.501969879Z\",\"stream\":\"stderr\",\"_p\":\"F\",\"log\":\"[2024/08/29 14:36:31] [error] [output:cloudwatch_logs:cloudwatch_logs.0] PutLogEvents API responded with error='ResourceNotFoundException', message='The specified log stream does not exist.'\",\"kubernetes\":{\"pod_name\":\"fluent-bit-hnwdb\",\"namespace_name\":\"amazon-cloudwatch\",\"pod_id\":\"63ac8fd9-6b21-40e2-9378-253f80c7119d\",\"host\":\"ip-172-31-30-120.us-west-2.compute.internal\",\"container_name\":\"fluent-bit\",\"docker_id\":\"87f735147dbf683a4e5a76769b9d9dddcd98ef7a6a1ab819bca9b3a4fdd9b0e4\",\"container_hash\":\"602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/observability/aws-for-fluent-bit@sha256:0a7b90a891c6f4f8e8b1ba11e98f26b103651f04cda51e37b8088617b41a2bfc\",\"container_image\":\"602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/observability/aws-for-fluent-bit:2.32.2.20240627\"}}", + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.accountid": "280443500820", "system.cloud.category": "AWS/LMAccount"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} + func TestParseCloudtrailLogsS3(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ diff --git a/code/version.properties b/code/version.properties index eaf8d2e..be05c9f 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.4 +version=1.5.5 From 0723fd1a481b225e7e398b13521dd0b7c9941df8 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Mon, 2 Sep 2024 11:59:14 +0530 Subject: [PATCH 064/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- code/parse.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/parse.go b/code/parse.go index 3d207ce..5cf1eab 100644 --- a/code/parse.go +++ b/code/parse.go @@ -169,10 +169,10 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - } else if strings.Contains(d.LogGroup, "eks"){ - resoureProp["system.aws.accountid"] = d.Owner - resoureProp["system.cloud.category"] = "AWS/LMAccount" - metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") + } else if strings.Contains(d.LogGroup, "eks") { + resoureProp["system.aws.accountid"] = d.Owner + resoureProp["system.cloud.category"] = "AWS/LMAccount" + metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue From 6fea5f19f0cc700b0c0777fe11134fa41a76e22b Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Mon, 2 Sep 2024 16:04:13 +0530 Subject: [PATCH 065/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- code/parse.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index 5cf1eab..b7d506c 100644 --- a/code/parse.go +++ b/code/parse.go @@ -169,7 +169,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - } else if strings.Contains(d.LogGroup, "eks") { + } else if strings.Contains(d.LogGroup, "eks") || strings.Contains(d.LogGroup, "containerInsights") { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") From 25a2fccc642c97f2babf872e271446101bac80be Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Mon, 2 Sep 2024 18:39:43 +0530 Subject: [PATCH 066/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- code/parse.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index b7d506c..737ae7a 100644 --- a/code/parse.go +++ b/code/parse.go @@ -169,7 +169,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - } else if strings.Contains(d.LogGroup, "eks") || strings.Contains(d.LogGroup, "containerInsights") { + } else if strings.Contains(d.LogGroup, "/aws/eks") || strings.Contains(d.LogGroup, "/aws/containerInsights") { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") From 84834366173bbf1e3e370e762e74937d3bf8b96e Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 3 Sep 2024 14:25:49 +0530 Subject: [PATCH 067/102] DEV-176822:Adding changes for bedrock logs --- code/aws.go | 1 - code/lambda.go | 1 - code/parse.go | 28 ++++++++++++----------- code/parse_test.go | 55 ++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 68 insertions(+), 17 deletions(-) diff --git a/code/aws.go b/code/aws.go index baab865..fa12f7a 100644 --- a/code/aws.go +++ b/code/aws.go @@ -88,7 +88,6 @@ func convertToCloudWatchEvent(m interface{}) events.CloudWatchEvent { var result events.CloudWatchEvent var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal cloudWatch event", err) - log.Printf("cloudwatch event reiceved ", result) return result } diff --git a/code/lambda.go b/code/lambda.go index de71cc6..c5feaec 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -85,7 +85,6 @@ func ExtractLogs(data interface{}) []model.LogInput { logs := []model.LogInput{} var err error source := ParseEventType(data) - if debug { json, _ := json.Marshal(data) log.Printf("Event Recieved: %s\n", string(json)) diff --git a/code/parse.go b/code/parse.go index 530b0bf..f3a98c3 100644 --- a/code/parse.go +++ b/code/parse.go @@ -170,23 +170,20 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - }else if strings.Contains(d.LogGroup, "bedrock"){ - if (strings.Contains(d.LogStream, "modelinvocations")){ - fmt.Println("msg from modelincovation") - isBedrockModelLogs = true - } - } else if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs"){ - fmt.Println("event from bedrock knowledge base") + } else if strings.Contains(d.LogGroup, "bedrock"){ + if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs"){ resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "bedrock.amazonaws.com") - }else { + } else if (strings.Contains(d.LogStream, "modelinvocations")){ + isBedrockModelLogs = true + } + } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") - } - + handleFatalError("failed to parse cloudwatch event", err) cloudWatchEventMetadata := make(map[string]interface{}) @@ -204,9 +201,14 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { } if isBedrockModelLogs && resourceValue == "" { var messageJson map[string]interface{} - json.Unmarshal([]byte(event.Message ), &messageJson) - fmt.Println("bedrock msg ",messageJson) - resourceValue = messageJson["modelId"] + if err :=json.Unmarshal([]byte(event.Message ), &messageJson); err != nil { + fmt.Println("err while unmarshalling event message ",err) + } + if(strings.Contains(messageJson["modelId"].(string), "arn:aws:bedrock")){ + resourceValue = messageJson["modelId"].(string) + }else{ + resourceValue =fmt.Sprintf("arn:aws:bedrock:%s::foundation-model/%s", awsRegion, messageJson["modelId"].(string)) + } resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "bedrock.amazonaws.com") diff --git a/code/parse_test.go b/code/parse_test.go index c1a8855..ad50aa3 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -8,7 +8,6 @@ import ( "strings" "testing" "time" - "github.com/aws/aws-lambda-go/events" "github.com/logicmonitor/lm-data-sdk-go/model" "github.com/stretchr/testify/assert" @@ -161,7 +160,6 @@ func TestParseCloudWatchlogs(t *testing.T) { } lmEvents := parseCloudWatchLogs(cloudWatchEvent) - time := time.Unix(0, 1586351314000*1000000) expectedLMEvent := model.LogInput{ Message: "Apr 8 13:08:34 ip-172-40-0-227 dhclient[2221]: XMT: Solicit on eth0, interval 71330ms.", @@ -824,3 +822,56 @@ func TestCloudWatchEventsEC2Else(t *testing.T) { } assert.Equal(t, expectedLMEvent, logs[0]) } + + +func TestCloudWatchEventsBedrockModel(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "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", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + localTime := time.Local + timeValue :=time.Date(2024, time.August, 28, 18, 30, 10, 0, time.Local) + if strings.Contains(localTime.String(), "UTC") { //Test case is running at system with time.Local as UTC + timeValue = time.Date(2024, time.August, 28, 13, 00, 10, 0, time.Local) + } + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/bedrock/modelinvocate", "logStream": "aws/bedrock/modelinvocations", "_lm.tenantId": "123456"} + expectedLMEvent := model.LogInput{ + Message: "{\"schemaType\":\"ModelInvocationLog\",\"schemaVersion\":\"1.0\",\"timestamp\":\"2024-08-28T13:00:10Z\",\"accountId\":\"280443500820\",\"identity\":{\"arn\":\"arn:aws:sts::280443500820:assumed-role/AmazonBedrockExecutionRoleForKnowledgeBase_3br46/BedrockKnowledgeBaseCPSession-RTWLKRR7XH\"},\"region\":\"us-west-2\",\"requestId\":\"e3ecd7d5-6afe-44ce-aa50-3f4d03f4124e\",\"operation\":\"InvokeModel\",\"modelId\":\"arn:aws:bedrock:us-west-2::foundation-model/cohere.embed-english-v3\",\"input\":{\"inputContentType\":\"application/json\",\"inputBodyJson\":{\"texts\":[\"test\"],\"input_type\":\"search_query\",\"truncate\":\"NONE\"},\"inputTokenCount\":1},\"output\":{\"outputContentType\":\"application/json\",\"outputBodyJson\":{\"id\":\"e3ecd7d5-6afe-44ce-aa50-3f4d03f4124e\",\"texts\":[\"test\"],\"embeddings\":[[-0.0037117004,-0.024276733,-0.040039062,-0.053253174,-0.038848877,-0.005870819,-0.029403687,0.0368042,-0.021606445,0.03475952,-0.029525757,0.001168251,8.1443787E-4,-0.0077323914,0.014884949,-0.049591064,0.044952393,-0.01109314,-0.013389587,-0.013412476,0.010353088,0.02432251,-0.0440979,0.03366089,0.022720337,0.08239746,-0.01802063,0.0020885468,-0.05456543,-0.065979004,0.012931824,0.03668213,0.015274048,0.037872314,-0.031402588,0.04159546,-0.0033779144,-0.015464783,0.010368347,0.005378723,0.009399414,-0.016983032,-0.022033691,-0.032836914,-0.025436401,-0.018478394,0.01574707,-0.021331787,0.07312012,0.0357666,0.033996582,0.031799316,0.009750366,-6.8712234E-4,-0.017044067,0.017486572,-0.05532837,-0.0017375946,0.026733398,-0.015945435,-0.007904053,0.0146865845,0.044433594,0.03945923,0.021087646,-0.005756378,0.009185791,0.006149292,0.032592773,0.0029907227,-0.0018444061,-0.024002075,0.013122559,-0.05114746,-0.014213562,0.013946533,-0.0044784546,-0.008964539,0.005874634,-0.020553589,0.0014476776,-0.049591064,-0.01335144,0.03137207,-0.019729614,0.055267334,0.004371643,-0.02532959,0.010566711,-0.02810669,0.017059326,0.06549072,-0.015853882,-9.021759E-4,-0.029373169,-0.034057617,-0.0015487671,-0.013267517,-6.995201E-4,-0.015609741,-0.017349243,-0.022598267,0.0032749176,-0.017822266,-0.022766113,0.01146698,-0.0040397644,0.018997192,0.0042800903,0.045715332,-0.033081055,0.021759033,-0.018249512,-0.011047363,-0.037841797,0.009254456,-0.038085938,0.026428223,0.0017518997,0.042022705,0.0058937073,0.028823853,0.027236938,-0.011405945,0.0067329407,1.1789799E-4,9.403229E-4,-0.06341553,0.011726379,-0.0036945343,-0.010108948,0.058898926,-0.07696533,-0.016845703,-0.028381348,-0.00198555,-0.036254883,-0.02003479,-0.025009155,0.042419434,0.034057617,-0.037322998,0.049591064,0.01550293,-0.024734497,0.07733154,0.03152466,-0.037628174,3.6263466E-4,-0.054748535,-0.025772095,-0.031173706,0.0065193176,0.07165527,-0.050628662,0.05038452,-0.07543945,0.033325195,0.035217285,0.030532837,-0.017868042,0.018966675,0.041381836,0.0011472702,-0.024032593,5.6505203E-4,0.042266846,0.018951416,0.02319336,0.016281128,-0.03036499,0.017501831,0.115234375,0.056030273,-0.010871887,-0.0011043549,-0.023208618,0.025985718,0.018859863,0.061431885,0.027786255,-0.029724121,-0.010261536,0.020065308,0.019454956,-0.06640625,0.01398468,-0.021118164,0.01361084,0.026306152,-0.010101318,0.01134491,-0.00969696,-0.03778076,0.035095215,0.0070228577,-0.070007324,-0.014007568,-0.0034732819,-0.021347046,-0.004337311,-0.014709473,0.036621094,-0.014022827,-0.005168915,-0.044647217,0.0051956177,-0.0041923523,0.013999939,-0.013916016,-9.0646744E-4,-0.04748535,7.56979E-6,-0.029251099,-0.036071777,0.016921997,0.0132369995,-0.055908203,6.713867E-4,4.3845177E-4,0.016555786,0.023788452,-0.0390625,0.05444336,-0.012214661,0.016281128,-0.032165527,0.024169922,-0.007019043,-0.007522583,0.05227661,0.010765076,0.029159546,0.022064209,-0.002286911,0.014175415,0.017288208,-0.04220581,-0.0024089813,0.025375366,0.022735596,0.0077552795,-0.022842407,-0.019088745,0.06567383,0.058654785,0.057006836,-0.03024292,0.012687683,0.06555176,0.024551392,-0.004634857,0.01398468,0.008384705,-0.004432678,0.01626587,-0.032043457,-0.009391785,0.022857666,-0.019058228,-0.009399414,-0.022903442,4.10676E-5,-0.010925293,-0.0052337646,-0.02281189,-0.016296387,0.00333786,-0.02406311,-1.3303757E-4,0.01927185,-0.04269409,-0.02809143,0.0077552795,0.1083374,0.021591187,-0.089660645,-0.006187439,0.029785156,0.014289856,-0.0031795502,0.047424316,0.0128479,-0.010421753,0.018005371,0.06585693,-0.002122879,-0.023345947,-0.0129776,0.003791809,0.039611816,0.005584717,-0.029144287,0.014060974,5.9986115E-4,-0.028884888,0.054626465,0.023757935,-0.0021629333,-0.066833496,0.011184692,0.012954712,-0.041870117,-0.010658264,0.00806427,-0.019042969,0.0345459,0.010910034,0.016616821,-0.019546509,-0.007205963,0.01335907,0.03161621,2.9993057E-4,0.010116577,0.002653122,-0.01776123,0.0149383545,-0.064941406,-0.0043754578,0.022277832,-0.003227234,-0.0519104,-0.016281128,-0.027160645,0.026107788,-0.054382324,-0.026672363,-0.08544922,0.006565094,0.06100464,-0.0055656433,0.015464783,0.014205933,0.004371643,0.02784729,0.03213501,-0.022415161,-1.7523766E-4,-0.024856567,0.037261963,0.022079468,0.009033203,-0.008560181,-0.007785797,0.021514893,-0.05517578,0.029541016,-0.035217285,-0.04333496,0.004966736,-0.057250977,0.003376007,0.00223732,0.05038452,-0.017807007,-0.01612854,0.037475586,0.057922363,-0.024261475,0.01448822,-0.020751953,5.955696E-4,0.05645752,-0.03439331,-0.032318115,-0.009399414,0.041259766,0.05822754,0.05291748,0.0715332,0.0076065063,-0.030349731,-0.008857727,-0.022659302,-0.070129395,-0.008781433,-0.07122803,0.0090408325,-0.011657715,-0.015510559,-0.0032253265,0.018829346,0.008506775,0.040405273,0.064819336,0.036010742,0.044433594,0.023727417,-0.030685425,-0.024124146,0.04348755,-0.026046753,-0.027786255,-0.017745972,-0.019058228,-0.00705719,0.03488159,-0.038024902,-0.0049095154,0.03378296,0.007610321,-0.0178833,-0.0013065338,-0.04888916,0.015823364,0.0017910004,-0.012168884,0.00944519,0.07550049,-0.0071258545,-0.0109939575,-0.0020275116,-0.01940918,-0.0024089813,0.026000977,0.03591919,-0.020004272,0.014724731,-0.0046844482,0.008666992,0.0070266724,0.02760315,0.033081055,0.014785767,0.037078857,0.014175415,-0.044036865,0.09564209,0.014389038,0.0020503998,-0.011764526,-0.019882202,-0.023498535,0.0029678345,0.08496094,-0.013931274,0.06378174,0.010116577,-0.024169922,0.04034424,0.045776367,0.02003479,-0.0018024445,-0.014175415,-0.017532349,0.043151855,0.052337646,-0.04006958,0.009925842,-0.06311035,0.015777588,0.0047569275,0.055847168,-0.016921997,0.05456543,0.0619812,0.047454834,0.05038452,-0.024642944,-0.030960083,-0.023651123,-0.03189087,0.004360199,0.01399231,0.03677368,8.172989E-4,0.028945923,-0.01902771,-0.006778717,0.04574585,-0.04321289,0.0013618469,-0.012069702,0.056365967,0.033935547,-0.06549072,-0.04296875,0.003648758,0.046417236,-0.016189575,0.020462036,-0.0039634705,-0.014793396,-0.029769897,0.018066406,-0.04864502,-0.0362854,0.034240723,0.03237915,0.04272461,-0.013366699,0.050933838,-0.009788513,-0.017410278,-0.0140686035,-0.013633728,0.0090408325,-0.0107421875,-0.07006836,-0.03765869,-0.005344391,0.037719727,0.020004272,0.015388489,-0.03604126,-0.038879395,0.0025310516,0.056152344,0.023986816,-0.0076828003,-0.009559631,-0.0072631836,0.010902405,-0.026000977,0.051513672,0.0018749237,-0.0078125,0.016357422,-0.021347046,0.030166626,-4.2557716E-4,0.08856201,0.023284912,-0.047424316,0.017669678,0.027709961,-0.023864746,-0.02406311,-0.0418396,0.032928467,0.021392822,-0.0056762695,0.0027561188,0.0024547577,0.036224365,-0.036743164,-0.021499634,-0.0027446747,0.016220093,-0.04650879,-0.031463623,0.018035889,0.0413208,0.034210205,0.003129959,0.019821167,0.03463745,-0.008010864,0.052459717,-0.035827637,-0.03805542,-0.007484436,-0.0045814514,8.587837E-4,0.040649414,-0.0287323,-0.010108948,-0.023727417,0.04434204,0.0012893677,-0.014221191,-0.00440979,-0.0064849854,0.033050537,0.023132324,0.025619507,-0.060668945,0.0043296814,0.032684326,-0.0054740906,-0.016555786,-0.004917145,-0.039367676,-0.028137207,-0.032684326,0.004798889,0.010292053,0.01991272,0.014518738,0.011917114,0.021331787,-0.010269165,0.04397583,0.01600647,0.07354736,-0.06567383,0.03503418,-0.027008057,0.01348114,-0.020050049,-0.014038086,0.024398804,0.009613037,-0.019821167,-0.026062012,0.0066184998,-0.05404663,0.043518066,-0.01828003,-0.07623291,0.016342163,0.0050086975,-0.03173828,0.07196045,0.027511597,-0.025848389,-0.02482605,0.02154541,-0.004245758,0.007663727,-0.025115967,-0.052337646,0.048736572,-0.036010742,-0.019195557,0.031921387,0.031707764,-0.0014257431,-0.060058594,-0.009178162,0.0045776367,0.020889282,0.018203735,0.012588501,-0.02848816,-0.014816284,-0.030059814,-0.012535095,0.018997192,-0.0368042,-2.5320053E-4,-0.04244995,-0.0501709,-0.021835327,0.030929565,-0.0036678314,-0.05407715,-0.028045654,0.019424438,0.002664566,0.020523071,-0.00737381,-0.025009155,0.015007019,-0.021987915,-0.016571045,-0.04006958,-5.2165985E-4,-0.003440857,0.07116699,0.021453857,-0.051239014,0.029373169,0.050109863,-0.0021972656,0.016677856,0.08508301,-0.032196045,-0.008407593,0.009597778,0.037719727,-0.02722168,-0.025100708,0.009902954,0.01826477,0.04446411,0.0027542114,0.013023376,-0.014411926,-0.0236969,0.025894165,-0.058441162,-0.0423584,-0.03842163,0.012130737,0.046844482,0.037597656,0.0023612976,-0.03189087,0.0016994476,-0.0060539246,0.028366089,0.014015198,-0.046722412,0.048828125,0.0016174316,0.0023593903,-0.033996582,-0.006336212,-0.021484375,0.036499023,-0.033203125,0.018157959,0.012527466,-0.047912598,-0.017807007,0.03439331,-0.03744507,0.0015096664,0.01109314,0.010665894,0.0138168335,-0.012046814,7.953644E-4,0.020690918,-0.009307861,0.004306793,-0.02696228,0.00223732,0.0046081543,0.058288574,-0.054901123,-0.01902771,0.013046265,0.015914917,0.04901123,-0.0013542175,-0.009407043,0.022369385,0.0044555664,-0.03149414,0.06774902,-0.009002686,0.051605225,-9.717941E-4,0.0039100647,-0.003692627,0.00920105,-0.020721436,0.045166016,-0.02281189,-0.031311035,0.029830933,0.0069847107,0.0236969,0.012687683,0.038513184,0.01033783,-0.023757935,-0.061462402,-0.020996094,0.031234741,0.0033836365,-0.0070495605,0.052642822,0.022125244,0.029190063,0.016830444,0.013244629,0.0256958,-0.0019626617,-0.030838013,0.038116455,0.030822754,0.048461914,0.028900146,0.005256653,-0.041229248,-0.016235352,-0.060668945,-0.0093688965,-0.010231018,0.058685303,0.022064209,0.06451416,-0.0019340515,-0.005016327,0.022354126,-0.016860962,0.014434814,0.0019397736,-7.736683E-5,9.75132E-4,0.05291748,0.024841309,0.0098724365,-2.527237E-4,0.008110046,0.0155181885,-0.026992798,0.041748047,-0.045959473,-0.0051116943,-0.035491943,-0.0015363693,0.009239197,0.047332764,-0.034454346,1.4412403E-4,0.012931824,0.057403564,-0.031799316,0.021377563,-0.015129089,-0.030090332,-0.020965576,-0.017410278,0.016204834,-0.053833008,-0.018081665,-0.028121948,-0.0050239563,0.02406311,-0.0066490173,0.024810791,0.031021118,0.0022201538,-0.0126571655,0.0418396,-0.0014791489,0.035217285,-0.0024967194,-0.042266846,-0.05102539,-0.0022144318,0.06512451,1.232624E-4,0.0014228821,-0.07098389,0.017166138,0.057250977,0.016067505,0.005092621,-0.004425049,0.008491516,0.036743164,-0.04260254,-0.007095337,-0.008003235,0.023162842,0.007858276,0.026062012,0.06732178,0.058532715,-0.03451538,-0.036865234,-0.032043457,0.038482666,0.0060539246,-0.006401062,-0.014915466,-0.015541077,-0.0059127808,-0.0138168335,-0.02746582,0.0064811707,-0.0020580292,0.052764893,0.05557251,-0.002714157,0.010101318,-0.006729126,-0.0135650635,0.02406311,0.068603516,0.0149383545,-0.0021800995,-0.004009247,0.028182983,0.03390503,0.03692627,0.04647827,-0.017456055,0.031051636,-0.0049362183,-0.016448975,0.0044059753,-0.022872925,-0.039520264,-0.0014333725,0.047210693,-9.832382E-4,-0.022079468,-0.02432251,0.0013456345,0.024856567,0.0011844635,0.0056037903,0.07104492,-0.038391113,0.011772156,0.030441284,-0.01625061,-0.019226074,-0.052246094,0.00141716,0.0019321442,0.018112183,0.0016050339,-0.0033683777,-0.053253174,-0.015029907,-0.009918213,0.029663086,0.07757568,-0.01928711,-0.0057029724,-0.064331055,0.00894165,-0.043518066,-0.024459839,0.03262329,-0.07196045,0.015701294,0.0047721863,0.032073975,-0.008041382,-0.040618896,-0.045135498,0.030441284,-0.02067566,0.012519836,0.040649414,-0.016403198,-0.024871826,-0.039611816,-0.015914917,0.025314331,0.014381409,-0.02645874,0.035186768,-1.02579594E-4,-0.03866577,-0.032440186,0.010124207,0.022018433,-0.052856445,-0.039489746,0.024276733,0.016067505,-0.03881836,-0.057800293,-0.060455322,-0.003194809,-0.03375244,0.0026817322,-0.017669678,-0.016586304,-0.0024051666,-0.016143799,0.012229919,-0.012794495,0.008834839,-0.027313232,0.052703857,0.0049095154,0.0038757324,-0.010726929,-0.011932373,0.0017251968,-0.013519287,-0.06549072,0.014541626,-0.016525269,0.032592773,-0.046142578,-0.016189575,0.028961182,0.05999756,6.303787E-4,0.0057754517,0.015731812,0.022125244,-0.04171753,3.4856796E-4,-0.02708435,-0.007461548,-0.025817871,0.005569458,-0.009925842,-0.033203125,0.0049705505,-0.08508301,-0.024017334,-0.017547607,0.01876831,-0.006603241,-0.005634308,-0.015281677,-0.0256958,0.043151855,-0.0030670166,-0.052734375,-0.055267334,0.0859375,-0.04421997,-0.014427185,-7.519722E-4,0.0317688,-0.008674622,0.020980835,-0.011779785,0.037963867,-0.023544312,-0.019180298,0.03164673,-0.046966553,0.015670776,0.0024795532,-0.012870789,-0.039154053,0.0093307495,-0.058380127,0.027801514,-0.03314209,-0.0010881424,0.022705078,0.027572632,0.06750488,0.01133728,0.012336731,0.013114929,-0.03378296,0.013183594,-0.019012451,-1.0955334E-4,-0.007701874,0.015380859,-0.04837036,0.012313843,0.06173706,-0.005924225,0.041870117]],\"response_type\":\"embeddings_floats\"}}}", + Timestamp: timeValue.String(), + ResourceID: map[string]interface{}{"system.aws.arn": "arn:aws:bedrock:us-west-2::foundation-model/cohere.embed-english-v3"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} + +func TestCloudWatchEventsBedrockKB(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAA/5WSX2/aMBTFv8t9DsUJCQl+iyjNaPkniEalpbIMuUDWECPbAVWI7z7FBLaxiXWvVz8fn3PuPcIWleJrjD92CBQewzhkw95sFkY9sEAcCpRAwQmI67Y8QgKHgAW5WEdSlDug0OQH1dxjkWKai7VqLjCVYvnefC/EIcd0jY0FV9gMJ5NBvxvG/fGIDcbRrDmN54OX6dR//XLWm2mJfAsU/hCo3qtKGyxQ5UItZbbTmSieslyjVEC/gUal4c3o9PZY6Gp4hCwFCq3AbXuuS9rEbvlO4Hm23+n4bsd3Pcf3q1huJ+h4TtC2fdK27VbHdx3fpNTZFpXm2x1Q23fcwCPEtontW5fOgMIxAax+ZFc4uaVrIgF6TCAr1qgq9+y7WLAsTYAmEA1Hw+j1pfc1SsBKIOWaMyVKucQLQUZkGD2P4+7cEL+rKM11qQzXnYbzQX8Use54OBn04t6j4a9dsqpMxmVhaC4Lyg+K1pXTUjUOqHTDob/um96s8ufmjLbE2mplI1M6W6pz1KLcLlAysWIXRLFyl3KNVSZi/Z04R7uLqOUG0zLHlK2ErCU/jV+r+/SLLWpuVvLPn1LM8b71Q6Y3t4L3+BXP8v/owhios51Ol8tje5TqPE3AfiBmbfXVfuzQjGeaS92/dPMsFg8zc1XdDS/WlQMrgRz3mBu6P3oaJ3CC09vpBzfnOvJBBAAA", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + epochMillis := int64(1724850011017) + + var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/vendedlogs/bedrock/knowledge-base/APPLICATION_LOGS/RTWLKRR7XH", "logStream": "bedrock/knowledgebaseslogs", "_lm.tenantId": "123456"} + expectedLMEvent := model.LogInput{ + Message: "{\"event_timestamp\":1724850011017,\"event\":{\"ingestion_job_id\":\"GMNMGXKEVG\",\"data_source_id\":\"0N0MGJOTCW\",\"ingestion_job_status\":\"CRAWLING_COMPLETED\",\"knowledge_base_arn\":\"arn:aws:bedrock:us-west-2:280443500820:knowledge-base/RTWLKRR7XH\",\"resource_statistics\":{\"number_of_resources_updated\":0,\"number_of_resources_ingested\":0,\"number_of_resources_scheduled_for_update\":0,\"number_of_resources_scheduled_for_ingestion\":0,\"number_of_resources_scheduled_for_metadata_update\":0,\"number_of_resources_deleted\":0,\"number_of_resources_with_metadata_updated\":0,\"number_of_resources_failed\":0,\"number_of_resources_scheduled_for_deletion\":0}},\"event_version\":\"1.0\",\"event_type\":\"StartIngestionJob.StatusChanged\",\"level\":\"INFO\"}", + Timestamp: parseTime(epochMillis).String(),// time.Date(2024, time.August, 28, 18, 30, 11, 017, time.Local).String(), + ResourceID: map[string]interface{}{"system.aws.accountid": "280443500820", "system.cloud.category": "AWS/LMAccount"}, + Metadata: metadataMap, + } + assert.Equal(t, expectedLMEvent, logs[0]) +} + + +func parseTime(epochMillis int64) time.Time{ + epochSeconds := epochMillis / 1000 + nanoseconds := (epochMillis % 1000) * 1000000 + + parsedTime := time.Unix(epochSeconds, nanoseconds).In(time.Local) + return parsedTime +} From 78015c9d2dbdf9292256614d62b2406df86c1484 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 3 Sep 2024 14:31:03 +0530 Subject: [PATCH 068/102] DEV-176822:Increasing version --- cloudformation.yaml | 2 +- code/aws.go | 1 + code/lambda.go | 1 + code/parse.go | 2 +- code/parse_test.go | 4 ++-- code/version.properties | 2 +- 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 6b1cee0..b211941 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.3 + Version: 1.5.6 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/aws.go b/code/aws.go index fa12f7a..af9d446 100644 --- a/code/aws.go +++ b/code/aws.go @@ -88,6 +88,7 @@ func convertToCloudWatchEvent(m interface{}) events.CloudWatchEvent { var result events.CloudWatchEvent var err = json.Unmarshal(data, &result) handleFatalError("failed to unmarshal cloudWatch event", err) + return result } diff --git a/code/lambda.go b/code/lambda.go index c5feaec..be75e21 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -85,6 +85,7 @@ func ExtractLogs(data interface{}) []model.LogInput { logs := []model.LogInput{} var err error source := ParseEventType(data) + if debug { json, _ := json.Marshal(data) log.Printf("Event Recieved: %s\n", string(json)) diff --git a/code/parse.go b/code/parse.go index f3a98c3..256b540 100644 --- a/code/parse.go +++ b/code/parse.go @@ -183,7 +183,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") } - + handleFatalError("failed to parse cloudwatch event", err) cloudWatchEventMetadata := make(map[string]interface{}) diff --git a/code/parse_test.go b/code/parse_test.go index ad50aa3..de1de46 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -8,6 +8,7 @@ import ( "strings" "testing" "time" + "github.com/aws/aws-lambda-go/events" "github.com/logicmonitor/lm-data-sdk-go/model" "github.com/stretchr/testify/assert" @@ -160,6 +161,7 @@ func TestParseCloudWatchlogs(t *testing.T) { } lmEvents := parseCloudWatchLogs(cloudWatchEvent) + time := time.Unix(0, 1586351314000*1000000) expectedLMEvent := model.LogInput{ Message: "Apr 8 13:08:34 ip-172-40-0-227 dhclient[2221]: XMT: Solicit on eth0, interval 71330ms.", @@ -823,7 +825,6 @@ func TestCloudWatchEventsEC2Else(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } - func TestCloudWatchEventsBedrockModel(t *testing.T) { cloudWatchEvent := events.CloudwatchLogsEvent{ AWSLogs: events.CloudwatchLogsRawData{ @@ -867,7 +868,6 @@ func TestCloudWatchEventsBedrockKB(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } - func parseTime(epochMillis int64) time.Time{ epochSeconds := epochMillis / 1000 nanoseconds := (epochMillis % 1000) * 1000000 diff --git a/code/version.properties b/code/version.properties index 39b3f38..7c0cf54 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.3 +version=1.5.6 From 907c0a85f25c59c8c555246a8195a9d07c94fa61 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 3 Sep 2024 16:55:13 +0530 Subject: [PATCH 069/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 4a5ce5b..b424588 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,19 @@ To send Lambda logs to LogicMonitor, go to cloudwatch and find lambda's log grou 1. Go to Cloudwatch, select the lambda's log group of which you want to forward logs , under Actions > Create Lambda subscription filter 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. +### Forwarding EKS logs +Foward EKS logs to cloudwatch using [application metrics to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) +These steps create 5 different log groups into cloudwatch as below: +1. /aws/containerInsights//application +2. /aws/containerInsights//host +3. /aws/containerInsights//performance +4. /aws/containerInsights//dataplane +5. /aws/eks//cluster + +To forward EKS logs to LogicMonitor, follow these steps for the specific log group you want to send: +1. Go to Cloudwatch, select the EKS's log group of which you want to forward logs , under Actions > Create Lambda subscription filter +2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. + ### Send flow logs from EC2 1. Add below lines in permissions of lambda's role policy: "logs:CreateLogGroup", From 659044557a9c943ad94c5516677d75c0df339701 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 4 Sep 2024 12:15:40 +0530 Subject: [PATCH 070/102] DEV-176822:Adding Readme changes for Bedrock --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index b424588..326406b 100644 --- a/README.md +++ b/README.md @@ -177,3 +177,11 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be 5. Go to /aws/rds/networkInterface log group. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. 6. Logs will start to propagate through lambda to LogIngest. +### Send Bedrock logs +1. There are two types of logs supported by AWS Bedrock that can be sent to AWS Cloudwatch. 1. Model invocation logging 2. Knowledge Base Logging +2. For setting up the Model Invocation Logging follow https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html. For sending logs from the Knowledge base to Cloudwatch follow https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-bases-logging.html +3. A Log group in cloud watch should be created with name that contains "bedrock" in it. +4. To differentiate between modelInvocation logs and knowledge-base logs, for knowledge-base logs the Log group name should contain "knowledge-base" or "vendedlogs" (this is by default present so no need to modify it). For modelinvocation logs, the logstreams by default contain string "modelinvocations" in it. +5. Go to Log Group created by bedrock as above. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. +6. Logs will start to propagate through lambda to LogIngest. +7. The Model Invocation logs will be mapped to the Bedrock model resource created in Logicmonitor and the knowledge-base logs will be mapped to the AWS account resource created in Logicmonitor. \ No newline at end of file From ec638b4398472ede70b009e2fd62c4161e6e41a2 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 4 Sep 2024 19:50:04 +0530 Subject: [PATCH 071/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- code/parse.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index 44c58ff..fbea704 100644 --- a/code/parse.go +++ b/code/parse.go @@ -170,7 +170,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - } else if strings.Contains(d.LogGroup, "/aws/eks") || strings.Contains(d.LogGroup, "/aws/containerInsights") { + } else if strings.Contains(d.LogGroup, "/aws/eks") || strings.Contains(d.LogGroup, "/aws/containerinsights") { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") From 4d06332221df64b8d71b234020f5d3e03002dc00 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 10 Sep 2024 10:37:14 +0530 Subject: [PATCH 072/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b424588..bedf463 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,9 @@ To send Lambda logs to LogicMonitor, go to cloudwatch and find lambda's log grou 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. ### Forwarding EKS logs -Foward EKS logs to cloudwatch using [application metrics to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) +Add a "Amazon CloudWatch Observability" plugin to existing or new cluster. OR +Foward EKS logs to cloudwatch using [application metrics to cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) + These steps create 5 different log groups into cloudwatch as below: 1. /aws/containerInsights//application 2. /aws/containerInsights//host From 32e36c20df78e2d9787072781a4033f762207e15 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 10 Sep 2024 11:05:07 +0530 Subject: [PATCH 073/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm-mas --- README.md | 13 +++++++++++++ cloudformation.yaml | 2 +- code/parse.go | 4 ++++ code/version.properties | 2 +- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4a5ce5b..9afb06e 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,19 @@ To send Lambda logs to LogicMonitor, go to cloudwatch and find lambda's log grou 1. Go to Cloudwatch, select the lambda's log group of which you want to forward logs , under Actions > Create Lambda subscription filter 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. +### Forwarding EKS logs +Add a "Amazon CloudWatch Observability" plugin to existing or new cluster, OR Foward EKS logs to cloudwatch using [application metrics to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) +These steps create 5 different log groups into cloudwatch as below: +1. /aws/containerInsights//application +2. /aws/containerInsights//host +3. /aws/containerInsights//performance +4. /aws/containerInsights//dataplane +5. /aws/eks//cluster + +To forward EKS logs to LogicMonitor, follow these steps for the specific log group you want to send: +1. Go to Cloudwatch, select the EKS's log group of which you want to forward logs , under Actions > Create Lambda subscription filter +2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. + ### Send flow logs from EC2 1. Add below lines in permissions of lambda's role policy: "logs:CreateLogGroup", diff --git a/cloudformation.yaml b/cloudformation.yaml index 6308219..e9706b9 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.4 + Version: 1.5.5 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/parse.go b/code/parse.go index 78487e3..ef76ccb 100644 --- a/code/parse.go +++ b/code/parse.go @@ -169,6 +169,10 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) + } else if strings.Contains(d.LogGroup, "/aws/eks") || strings.Contains(d.LogGroup, "/aws/containerinsights") { + resoureProp["system.aws.accountid"] = d.Owner + resoureProp["system.cloud.category"] = "AWS/LMAccount" + metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue diff --git a/code/version.properties b/code/version.properties index eaf8d2e..be05c9f 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.4 +version=1.5.5 From 7cc963da6ef9ae4e99b21874936b29cfbb1ba1f8 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 10 Sep 2024 11:07:58 +0530 Subject: [PATCH 074/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bedf463..0eddbe8 100644 --- a/README.md +++ b/README.md @@ -78,8 +78,8 @@ To send Lambda logs to LogicMonitor, go to cloudwatch and find lambda's log grou 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. ### Forwarding EKS logs -Add a "Amazon CloudWatch Observability" plugin to existing or new cluster. OR -Foward EKS logs to cloudwatch using [application metrics to cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) +Add an "Amazon CloudWatch Observability" plugin to existing or new cluster, OR +Forward EKS logs to cloudwatch using [application metrics to cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) These steps create 5 different log groups into cloudwatch as below: 1. /aws/containerInsights//application From 83c13fdd0b2f352c7af5217c6b39baa15e3fc994 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 10 Sep 2024 11:08:57 +0530 Subject: [PATCH 075/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm-mas --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9afb06e..858f527 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ To send Lambda logs to LogicMonitor, go to cloudwatch and find lambda's log grou 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. ### Forwarding EKS logs -Add a "Amazon CloudWatch Observability" plugin to existing or new cluster, OR Foward EKS logs to cloudwatch using [application metrics to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) +Add an "Amazon CloudWatch Observability" plugin to existing or new cluster, OR Forward EKS logs to cloudwatch using [application metrics to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) These steps create 5 different log groups into cloudwatch as below: 1. /aws/containerInsights//application 2. /aws/containerInsights//host From 21077dfd52865acb6651ce2385cdd10f33ff884a Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 11 Sep 2024 11:43:00 +0530 Subject: [PATCH 076/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm-mas --- README.md | 12 ------------ cloudformation.yaml | 2 +- code/parse.go | 4 ---- code/version.properties | 2 +- 4 files changed, 2 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 858f527..01c04e9 100644 --- a/README.md +++ b/README.md @@ -90,18 +90,6 @@ To forward EKS logs to LogicMonitor, follow these steps for the specific log gro 1. Go to Cloudwatch, select the EKS's log group of which you want to forward logs , under Actions > Create Lambda subscription filter 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. -### Send flow logs from EC2 -1. Add below lines in permissions of lambda's role policy: - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" -2. Add below line in the Trust Relationship part of the role in the Service tag: - "vpc-flow-logs.amazonaws.com" -3. A Log group in cloud watch should be created with name /aws/ec2/networkInterface -4. Use the instance id of your EC2 instance to search in Network interfaces page. Select that Network interface row and create a flow log. In create flow log Destination log group should be /aws/ec2/networkInterface and IAM role should be the role created in 1st and 2nd step. -5. In Log record format, select Custom Format. Log format should have first value as instance-id. Rest of the values can be as per your requirements. For details on different fields please refer to Available fields section on https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html. -6. Go to /aws/ec2/networkInterface log group. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. - ### Send flow logs from NAT Gateway 1. Add below lines in permissions of lambda's role policy: "logs:CreateLogGroup", diff --git a/cloudformation.yaml b/cloudformation.yaml index e9706b9..6308219 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.5 + Version: 1.5.4 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/parse.go b/code/parse.go index ef76ccb..78487e3 100644 --- a/code/parse.go +++ b/code/parse.go @@ -169,10 +169,6 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, "", "fargate.amazonaws.com") } else if strings.Contains(d.LogGroup, "/aws/cloudtrail") { return parseCloudTrailLogs(d) - } else if strings.Contains(d.LogGroup, "/aws/eks") || strings.Contains(d.LogGroup, "/aws/containerinsights") { - resoureProp["system.aws.accountid"] = d.Owner - resoureProp["system.cloud.category"] = "AWS/LMAccount" - metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue diff --git a/code/version.properties b/code/version.properties index be05c9f..eaf8d2e 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.5 +version=1.5.4 From be4996dc6bd93fc7f4507d8c65a01a0762b9e8b1 Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Wed, 11 Sep 2024 11:54:41 +0530 Subject: [PATCH 077/102] minor readme changes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 326406b..99a880b 100644 --- a/README.md +++ b/README.md @@ -178,8 +178,8 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be 6. Logs will start to propagate through lambda to LogIngest. ### Send Bedrock logs -1. There are two types of logs supported by AWS Bedrock that can be sent to AWS Cloudwatch. 1. Model invocation logging 2. Knowledge Base Logging -2. For setting up the Model Invocation Logging follow https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html. For sending logs from the Knowledge base to Cloudwatch follow https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-bases-logging.html +1. There are two types of logs supported by AWS Bedrock that can be sent to AWS Cloudwatch: Model invocation logging and Knowledge Base Logging +2. For setting up the Model Invocation Logging follow [model invocation logging] (https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html). For sending logs from the Knowledge base to Cloudwatch follow [Knowledge base logging] (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-bases-logging.html) 3. A Log group in cloud watch should be created with name that contains "bedrock" in it. 4. To differentiate between modelInvocation logs and knowledge-base logs, for knowledge-base logs the Log group name should contain "knowledge-base" or "vendedlogs" (this is by default present so no need to modify it). For modelinvocation logs, the logstreams by default contain string "modelinvocations" in it. 5. Go to Log Group created by bedrock as above. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. From 2d039ea252f782bd4836fe448611ad716f94a49e Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 11 Sep 2024 11:55:17 +0530 Subject: [PATCH 078/102] DEV-176765: DEV-176765-aws-log-integration-support-aws-eks-logs-in-lm-mas --- README.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 01c04e9..4a5ce5b 100644 --- a/README.md +++ b/README.md @@ -77,18 +77,17 @@ To send Lambda logs to LogicMonitor, go to cloudwatch and find lambda's log grou 1. Go to Cloudwatch, select the lambda's log group of which you want to forward logs , under Actions > Create Lambda subscription filter 2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. -### Forwarding EKS logs -Add an "Amazon CloudWatch Observability" plugin to existing or new cluster, OR Forward EKS logs to cloudwatch using [application metrics to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-metrics.html) and [application logs to cloudwatch] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) using [Fluenbit] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) -These steps create 5 different log groups into cloudwatch as below: -1. /aws/containerInsights//application -2. /aws/containerInsights//host -3. /aws/containerInsights//performance -4. /aws/containerInsights//dataplane -5. /aws/eks//cluster - -To forward EKS logs to LogicMonitor, follow these steps for the specific log group you want to send: -1. Go to Cloudwatch, select the EKS's log group of which you want to forward logs , under Actions > Create Lambda subscription filter -2. In Create Lambda subscription filter , select "Lambda Function" and choose "LMLogsForwarder" (or, whatever you named the Lambda function during stack creation) and click Start streaming. +### Send flow logs from EC2 +1. Add below lines in permissions of lambda's role policy: + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" +2. Add below line in the Trust Relationship part of the role in the Service tag: + "vpc-flow-logs.amazonaws.com" +3. A Log group in cloud watch should be created with name /aws/ec2/networkInterface +4. Use the instance id of your EC2 instance to search in Network interfaces page. Select that Network interface row and create a flow log. In create flow log Destination log group should be /aws/ec2/networkInterface and IAM role should be the role created in 1st and 2nd step. +5. In Log record format, select Custom Format. Log format should have first value as instance-id. Rest of the values can be as per your requirements. For details on different fields please refer to Available fields section on https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html. +6. Go to /aws/ec2/networkInterface log group. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. ### Send flow logs from NAT Gateway 1. Add below lines in permissions of lambda's role policy: From 75a9ec18a4d20ca84d15a51ba04e518f54d5dddf Mon Sep 17 00:00:00 2001 From: choudharypooja Date: Tue, 19 Nov 2024 17:48:57 +0530 Subject: [PATCH 079/102] DEV-183955:Removing public configuration for s3 bucket --- cloudformation.yaml | 7 +------ code/version.properties | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 98ab4b7..9441587 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.6 + Version: 1.5.7 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" @@ -234,11 +234,6 @@ Resources: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 - PublicAccessBlockConfiguration: - BlockPublicAcls: true - BlockPublicPolicy: true - IgnorePublicAcls: true - RestrictPublicBuckets: true ForwarderZip: Type: Custom::ForwarderZip Properties: diff --git a/code/version.properties b/code/version.properties index 7c0cf54..a43fcda 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.6 +version=1.5.7 From d0d62aadc3ca390f6f9f425a7bdb2e24f5f6d506 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 26 Nov 2024 00:52:52 +0530 Subject: [PATCH 080/102] added-govcloud: added-govcloud-domain-support --- README.md | 9 ++++++++- cloudformation.yaml | 16 ++++++++-------- code/helper.go | 11 ++++++++--- code/lambda.go | 7 +++++-- code/parse.go | 4 ++-- code/version.properties | 2 +- 6 files changed, 32 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 17959ac..c94ca80 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ You will need to supply the following LogicMonitor credentials when configuring * LM Access ID * LM Access Key * LM Account Name +* LM Account Domain +**NOTE**: If the LM Account Domain is not specified, it defaults to "logicmonitor.com". ### Deploying lambda using CloudFormation [![Launch Stack](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png)](https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=lm-forwarder&templateURL=https://logicmonitor-logs-forwarder.s3.us-west-1.amazonaws.com/source/latest.yaml) @@ -27,6 +29,10 @@ variable "lm_company_name" { description = "LogicMonitor Account Name" } +variable "lm_company_domain" { + description = "LogicMonitor Account Domain" +} + # LogicMonitor Logs forwarder resource "aws_cloudformation_stack" "lm_forwarder" { name = "lm-forwarder" @@ -36,13 +42,14 @@ resource "aws_cloudformation_stack" "lm_forwarder" { LMAccessId = var.lm_access_id LMAccessKey = var.lm_access_key LMCompanyName = var.lm_company_name + LMCompanyDomain = var.lm_company_domain LMRegexScrub = "" PermissionsBoundaryArn = "" } template_url = "https://logicmonitor-logs-forwarder.s3.us-west-1.amazonaws.com/source/latest.yaml" } ``` -`terraform apply --var 'lm_access_id=' --var 'lm_access_key=' --var 'lm_company_name='` +`terraform apply --var 'lm_access_id=' --var 'lm_access_key=' --var 'lm_company_name=' --var 'lm_company_domain='` ### Forwarding EC2 Instances logs Forward EC2 logs to CloudWatch, using the [CloudWatch Logs Agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html). diff --git a/cloudformation.yaml b/cloudformation.yaml index 9441587..269bf78 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.7 + Version: 1.5.8 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" @@ -71,6 +71,10 @@ Parameters: Type: String Default: "" Description: The LogicMonitor acccount name. + LMCompanyDomain: + Type: String + Default: "logicmonitor.com" + Description: The LogicMonitor acccount domain. LMAccessId: Type: String NoEcho: true @@ -141,10 +145,6 @@ Parameters: Type: String Description: Use this parameter to apply a subscription filter policy to a subset of log groups in the account. The string can be up to 25KB in length. Example LogGroupName NOT IN ["MyLogGroup", "MyAnotherLogGroup"] Default: "" - ResourceType: - Type: String - Description: Type of platform from where logs are coming. - Default: "AWS" Rules: NoAccessIdKeyProvided: @@ -182,6 +182,8 @@ Resources: Variables: LM_ACCOUNT: Ref: LMCompanyName + LM_ACCOUNT_DOMAIN: + Ref: LMCompanyDomain METADATA: !Join [",", !Ref Metadata] LOGICMONITOR_ACCESS_ID: !If [UseLMV1ForAuth, !If [CreateSecretManager, !Ref AccessIdSecret, !Ref LMAccessId], ""] #!Ref AccessIdSecret, !If [UseLMV1ForAuth, !Ref LMAccessId, "" ] LOGICMONITOR_ACCESS_KEY: !If [UseLMV1ForAuth, !If [CreateSecretManager, !Ref AccessKeySecret, !Ref LMAccessKey], ""] @@ -194,8 +196,6 @@ Resources: ADD_CLOUDWATCH_METADATA: "true" LM_TENANT_IDENTIFIER: Ref: LMTenantIdentifier - RESOURCE_TYPE: - Ref: ResourceType Policies: - Version: "2012-10-17" Statement: @@ -409,6 +409,7 @@ Metadata: Parameters: - FunctionName - LMCompanyName + - LMCompanyDomain - LMAccessId - LMAccessKey - LMBearerToken @@ -425,5 +426,4 @@ Metadata: - AccountLevelSubscription - FilterPattern - SelectionCriteria - - ResourceType diff --git a/code/helper.go b/code/helper.go index bd4c3c2..b2d9a53 100644 --- a/code/helper.go +++ b/code/helper.go @@ -48,6 +48,7 @@ func ExtractEnvironmentVariables() { } companyName = os.Getenv("LM_ACCOUNT") + companyDomain = os.Getenv("LM_ACCOUNT_DOMAIN") defaultMetadata := os.Getenv("METADATA") metadataArray = strings.Split(defaultMetadata, ",") @@ -55,6 +56,10 @@ func ExtractEnvironmentVariables() { if companyName == "" { log.Fatalf("missing company name") } + if companyDomain == "" { + companyDomain = "logicmonitor.com" + log.Println("Company domain is missing, using the default domain as logicmonitor.com") + } scrubRegex = os.Getenv("LM_SCRUB_REGEX") @@ -69,14 +74,14 @@ func ExtractEnvironmentVariables() { } lmTenantID = os.Getenv("LM_TENANT_IDENTIFIER") - resourceType = os.Getenv("RESOURCE_TYPE") + resourceType = "AWS" ingestTimeoutStr, exists := os.LookupEnv("LOG_INGEST_TIMEOUT") if exists { ingestTimeout, err = strconv.Atoi(ingestTimeoutStr) if err != nil { - if debug{ + if debug { log.Printf("Error converting LOG_INGEST_TIMEOUT value %s to integer: %v\n", strconv.Itoa(ingestTimeout), err) } ingestTimeout = 0 @@ -84,7 +89,7 @@ func ExtractEnvironmentVariables() { } if ingestTimeout == 0 { - if debug { + if debug { log.Println("Environmental variable LOG_INGEST_TIMEOUT not set. Using default as 10sec") } ingestTimeout = 10 diff --git a/code/lambda.go b/code/lambda.go index be75e21..d1085a5 100644 --- a/code/lambda.go +++ b/code/lambda.go @@ -19,7 +19,7 @@ import ( "github.com/logicmonitor/lm-data-sdk-go/utils" ) -var awsRegion, scrubRegex, useSecretManager, accessID, accessKey, bearerToken, companyName string +var awsRegion, scrubRegex, useSecretManager, accessID, accessKey, bearerToken, companyName, companyDomain string var ingestTimeout int var debug bool var sessionNew *session.Session @@ -85,7 +85,7 @@ func ExtractLogs(data interface{}) []model.LogInput { logs := []model.LogInput{} var err error source := ParseEventType(data) - + if debug { json, _ := json.Marshal(data) log.Printf("Event Recieved: %s\n", string(json)) @@ -125,11 +125,14 @@ func handler(request interface{}) { AccessKey: accessKey, BearerToken: bearerToken} + url := fmt.Sprintf("https://%s.%s/rest", companyName, companyDomain) + fmt.Println("ingest URL:", url) options := []logs.Option{ logs.WithLogBatchingDisabled(), logs.WithAuthentication(auth), logs.WithUserAgent("lm-logs-aws"), logs.WithHTTPClient(client), + logs.WithEndpoint(url), } lmLog, err := logs.NewLMLogIngest(context.Background(), options...) diff --git a/code/parse.go b/code/parse.go index fbea704..066232c 100644 --- a/code/parse.go +++ b/code/parse.go @@ -302,7 +302,7 @@ func extractMetadataForCloudTrail(message string) map[string]interface{} { metadataMap["_lm.tenantId"] = lmTenantID } if strings.TrimSpace(resourceType) != "" { - metadataMap["resourceType"] = resourceType + metadataMap["_resource.type"] = resourceType } return metadataMap } @@ -323,7 +323,7 @@ func extractMetadata(region string, arn string, eventsource string) map[string]i metadataMap["_lm.tenantId"] = lmTenantID } if strings.TrimSpace(resourceType) != "" { - metadataMap["_resourceType"] = resourceType + metadataMap["_resource.type"] = resourceType } return metadataMap diff --git a/code/version.properties b/code/version.properties index a43fcda..f9d25e9 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.7 +version=1.5.8 From 150289e2ff78c053b411df4dc162552d0a90ce13 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 26 Nov 2024 10:46:35 +0530 Subject: [PATCH 081/102] added-govcloud: added-govcloud-domain-support --- code/helper.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/helper.go b/code/helper.go index b2d9a53..a9eeedf 100644 --- a/code/helper.go +++ b/code/helper.go @@ -58,7 +58,9 @@ func ExtractEnvironmentVariables() { } if companyDomain == "" { companyDomain = "logicmonitor.com" - log.Println("Company domain is missing, using the default domain as logicmonitor.com") + if debug { + log.Println("Company domain is missing, using the default domain as logicmonitor.com") + } } scrubRegex = os.Getenv("LM_SCRUB_REGEX") From e0592f2760d8c4163d93a9f67ee23aeb351c0db0 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 27 Nov 2024 13:08:53 +0530 Subject: [PATCH 082/102] added-govcloud: added-govcloud-domain-support --- README.md | 1 + cloudformation.yaml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c94ca80..5d7e3df 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ You will need to supply the following LogicMonitor credentials when configuring * LM Access Key * LM Account Name * LM Account Domain + **NOTE**: If the LM Account Domain is not specified, it defaults to "logicmonitor.com". ### Deploying lambda using CloudFormation diff --git a/cloudformation.yaml b/cloudformation.yaml index 269bf78..3ff91c3 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -73,8 +73,9 @@ Parameters: Description: The LogicMonitor acccount name. LMCompanyDomain: Type: String - Default: "logicmonitor.com" Description: The LogicMonitor acccount domain. + AllowedValues: [ logicmonitor.com, lmgov.us, qa-lmgov.us ] + Default: "logicmonitor.com" LMAccessId: Type: String NoEcho: true From 55233a7b1367e245d9c8bdb9ea94cf73cbf518d4 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 27 Nov 2024 13:19:27 +0530 Subject: [PATCH 083/102] added-govcloud: added-govcloud-domain-support --- code/parse_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/parse_test.go b/code/parse_test.go index c86c11e..f6ecb50 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -880,7 +880,7 @@ func TestCloudWatchEventsBedrockKB(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) epochMillis := int64(1724850011017) - var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/vendedlogs/bedrock/knowledge-base/APPLICATION_LOGS/RTWLKRR7XH", "logStream": "bedrock/knowledgebaseslogs", "_lm.tenantId": "123456"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_resource.type":"AWS", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/vendedlogs/bedrock/knowledge-base/APPLICATION_LOGS/RTWLKRR7XH", "logStream": "bedrock/knowledgebaseslogs", "_lm.tenantId": "123456"} expectedLMEvent := model.LogInput{ Message: "{\"event_timestamp\":1724850011017,\"event\":{\"ingestion_job_id\":\"GMNMGXKEVG\",\"data_source_id\":\"0N0MGJOTCW\",\"ingestion_job_status\":\"CRAWLING_COMPLETED\",\"knowledge_base_arn\":\"arn:aws:bedrock:us-west-2:280443500820:knowledge-base/RTWLKRR7XH\",\"resource_statistics\":{\"number_of_resources_updated\":0,\"number_of_resources_ingested\":0,\"number_of_resources_scheduled_for_update\":0,\"number_of_resources_scheduled_for_ingestion\":0,\"number_of_resources_scheduled_for_metadata_update\":0,\"number_of_resources_deleted\":0,\"number_of_resources_with_metadata_updated\":0,\"number_of_resources_failed\":0,\"number_of_resources_scheduled_for_deletion\":0}},\"event_version\":\"1.0\",\"event_type\":\"StartIngestionJob.StatusChanged\",\"level\":\"INFO\"}", Timestamp: parseTime(epochMillis).String(),// time.Date(2024, time.August, 28, 18, 30, 11, 017, time.Local).String(), From 34a4e6aa217154f71a2ba6e49c6d82077d82e4c8 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 27 Nov 2024 14:50:41 +0530 Subject: [PATCH 084/102] added-govcloud: added-govcloud-domain-support --- code/parse_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/parse_test.go b/code/parse_test.go index f6ecb50..a8c88f6 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -837,7 +837,7 @@ func TestCloudWatchEventsEC2Else(t *testing.T) { log.Println("error in unmarshal") } logs := parseCloudWatchEvents(data) - var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "aws.ec2", "_lm.tenantId": "123456"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_resource.type":"AWS", "_type": "aws.ec2", "_lm.tenantId": "123456"} expectedLMEvent := model.LogInput{ Message: "{\"version\":\"0\",\"id\":\"e38aa066-51af-cac4-d0d5-4f649c9f23b7\",\"detail-type\":\"EC2InstanceState-changeNotification\",\"source\":\"aws.ec2\",\"account\":\"280443500820\",\"time\":\"2023-09-04T10:45:46Z\",\"region\":\"us-west-2\",\"resources\":[\"arn:aws:ec2:us-west-2:280443500820:instance/i-0d51cd459226160ac\"],\"detail\":{\"instance-id\":\"i-0d51cd459226160ac\",\"state\":\"pending\"}}", Timestamp: time.Date(2023, time.September, 4, 10, 45, 46, 0, time.Local).String(), @@ -860,7 +860,7 @@ func TestCloudWatchEventsBedrockModel(t *testing.T) { if strings.Contains(localTime.String(), "UTC") { //Test case is running at system with time.Local as UTC timeValue = time.Date(2024, time.August, 28, 13, 00, 10, 0, time.Local) } - var metadataMap = map[string]interface{}{"_integration": "aws", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/bedrock/modelinvocate", "logStream": "aws/bedrock/modelinvocations", "_lm.tenantId": "123456"} + var metadataMap = map[string]interface{}{"_integration": "aws", "_resource.type":"AWS", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/bedrock/modelinvocate", "logStream": "aws/bedrock/modelinvocations", "_lm.tenantId": "123456"} expectedLMEvent := model.LogInput{ Message: "{\"schemaType\":\"ModelInvocationLog\",\"schemaVersion\":\"1.0\",\"timestamp\":\"2024-08-28T13:00:10Z\",\"accountId\":\"280443500820\",\"identity\":{\"arn\":\"arn:aws:sts::280443500820:assumed-role/AmazonBedrockExecutionRoleForKnowledgeBase_3br46/BedrockKnowledgeBaseCPSession-RTWLKRR7XH\"},\"region\":\"us-west-2\",\"requestId\":\"e3ecd7d5-6afe-44ce-aa50-3f4d03f4124e\",\"operation\":\"InvokeModel\",\"modelId\":\"arn:aws:bedrock:us-west-2::foundation-model/cohere.embed-english-v3\",\"input\":{\"inputContentType\":\"application/json\",\"inputBodyJson\":{\"texts\":[\"test\"],\"input_type\":\"search_query\",\"truncate\":\"NONE\"},\"inputTokenCount\":1},\"output\":{\"outputContentType\":\"application/json\",\"outputBodyJson\":{\"id\":\"e3ecd7d5-6afe-44ce-aa50-3f4d03f4124e\",\"texts\":[\"test\"],\"embeddings\":[[-0.0037117004,-0.024276733,-0.040039062,-0.053253174,-0.038848877,-0.005870819,-0.029403687,0.0368042,-0.021606445,0.03475952,-0.029525757,0.001168251,8.1443787E-4,-0.0077323914,0.014884949,-0.049591064,0.044952393,-0.01109314,-0.013389587,-0.013412476,0.010353088,0.02432251,-0.0440979,0.03366089,0.022720337,0.08239746,-0.01802063,0.0020885468,-0.05456543,-0.065979004,0.012931824,0.03668213,0.015274048,0.037872314,-0.031402588,0.04159546,-0.0033779144,-0.015464783,0.010368347,0.005378723,0.009399414,-0.016983032,-0.022033691,-0.032836914,-0.025436401,-0.018478394,0.01574707,-0.021331787,0.07312012,0.0357666,0.033996582,0.031799316,0.009750366,-6.8712234E-4,-0.017044067,0.017486572,-0.05532837,-0.0017375946,0.026733398,-0.015945435,-0.007904053,0.0146865845,0.044433594,0.03945923,0.021087646,-0.005756378,0.009185791,0.006149292,0.032592773,0.0029907227,-0.0018444061,-0.024002075,0.013122559,-0.05114746,-0.014213562,0.013946533,-0.0044784546,-0.008964539,0.005874634,-0.020553589,0.0014476776,-0.049591064,-0.01335144,0.03137207,-0.019729614,0.055267334,0.004371643,-0.02532959,0.010566711,-0.02810669,0.017059326,0.06549072,-0.015853882,-9.021759E-4,-0.029373169,-0.034057617,-0.0015487671,-0.013267517,-6.995201E-4,-0.015609741,-0.017349243,-0.022598267,0.0032749176,-0.017822266,-0.022766113,0.01146698,-0.0040397644,0.018997192,0.0042800903,0.045715332,-0.033081055,0.021759033,-0.018249512,-0.011047363,-0.037841797,0.009254456,-0.038085938,0.026428223,0.0017518997,0.042022705,0.0058937073,0.028823853,0.027236938,-0.011405945,0.0067329407,1.1789799E-4,9.403229E-4,-0.06341553,0.011726379,-0.0036945343,-0.010108948,0.058898926,-0.07696533,-0.016845703,-0.028381348,-0.00198555,-0.036254883,-0.02003479,-0.025009155,0.042419434,0.034057617,-0.037322998,0.049591064,0.01550293,-0.024734497,0.07733154,0.03152466,-0.037628174,3.6263466E-4,-0.054748535,-0.025772095,-0.031173706,0.0065193176,0.07165527,-0.050628662,0.05038452,-0.07543945,0.033325195,0.035217285,0.030532837,-0.017868042,0.018966675,0.041381836,0.0011472702,-0.024032593,5.6505203E-4,0.042266846,0.018951416,0.02319336,0.016281128,-0.03036499,0.017501831,0.115234375,0.056030273,-0.010871887,-0.0011043549,-0.023208618,0.025985718,0.018859863,0.061431885,0.027786255,-0.029724121,-0.010261536,0.020065308,0.019454956,-0.06640625,0.01398468,-0.021118164,0.01361084,0.026306152,-0.010101318,0.01134491,-0.00969696,-0.03778076,0.035095215,0.0070228577,-0.070007324,-0.014007568,-0.0034732819,-0.021347046,-0.004337311,-0.014709473,0.036621094,-0.014022827,-0.005168915,-0.044647217,0.0051956177,-0.0041923523,0.013999939,-0.013916016,-9.0646744E-4,-0.04748535,7.56979E-6,-0.029251099,-0.036071777,0.016921997,0.0132369995,-0.055908203,6.713867E-4,4.3845177E-4,0.016555786,0.023788452,-0.0390625,0.05444336,-0.012214661,0.016281128,-0.032165527,0.024169922,-0.007019043,-0.007522583,0.05227661,0.010765076,0.029159546,0.022064209,-0.002286911,0.014175415,0.017288208,-0.04220581,-0.0024089813,0.025375366,0.022735596,0.0077552795,-0.022842407,-0.019088745,0.06567383,0.058654785,0.057006836,-0.03024292,0.012687683,0.06555176,0.024551392,-0.004634857,0.01398468,0.008384705,-0.004432678,0.01626587,-0.032043457,-0.009391785,0.022857666,-0.019058228,-0.009399414,-0.022903442,4.10676E-5,-0.010925293,-0.0052337646,-0.02281189,-0.016296387,0.00333786,-0.02406311,-1.3303757E-4,0.01927185,-0.04269409,-0.02809143,0.0077552795,0.1083374,0.021591187,-0.089660645,-0.006187439,0.029785156,0.014289856,-0.0031795502,0.047424316,0.0128479,-0.010421753,0.018005371,0.06585693,-0.002122879,-0.023345947,-0.0129776,0.003791809,0.039611816,0.005584717,-0.029144287,0.014060974,5.9986115E-4,-0.028884888,0.054626465,0.023757935,-0.0021629333,-0.066833496,0.011184692,0.012954712,-0.041870117,-0.010658264,0.00806427,-0.019042969,0.0345459,0.010910034,0.016616821,-0.019546509,-0.007205963,0.01335907,0.03161621,2.9993057E-4,0.010116577,0.002653122,-0.01776123,0.0149383545,-0.064941406,-0.0043754578,0.022277832,-0.003227234,-0.0519104,-0.016281128,-0.027160645,0.026107788,-0.054382324,-0.026672363,-0.08544922,0.006565094,0.06100464,-0.0055656433,0.015464783,0.014205933,0.004371643,0.02784729,0.03213501,-0.022415161,-1.7523766E-4,-0.024856567,0.037261963,0.022079468,0.009033203,-0.008560181,-0.007785797,0.021514893,-0.05517578,0.029541016,-0.035217285,-0.04333496,0.004966736,-0.057250977,0.003376007,0.00223732,0.05038452,-0.017807007,-0.01612854,0.037475586,0.057922363,-0.024261475,0.01448822,-0.020751953,5.955696E-4,0.05645752,-0.03439331,-0.032318115,-0.009399414,0.041259766,0.05822754,0.05291748,0.0715332,0.0076065063,-0.030349731,-0.008857727,-0.022659302,-0.070129395,-0.008781433,-0.07122803,0.0090408325,-0.011657715,-0.015510559,-0.0032253265,0.018829346,0.008506775,0.040405273,0.064819336,0.036010742,0.044433594,0.023727417,-0.030685425,-0.024124146,0.04348755,-0.026046753,-0.027786255,-0.017745972,-0.019058228,-0.00705719,0.03488159,-0.038024902,-0.0049095154,0.03378296,0.007610321,-0.0178833,-0.0013065338,-0.04888916,0.015823364,0.0017910004,-0.012168884,0.00944519,0.07550049,-0.0071258545,-0.0109939575,-0.0020275116,-0.01940918,-0.0024089813,0.026000977,0.03591919,-0.020004272,0.014724731,-0.0046844482,0.008666992,0.0070266724,0.02760315,0.033081055,0.014785767,0.037078857,0.014175415,-0.044036865,0.09564209,0.014389038,0.0020503998,-0.011764526,-0.019882202,-0.023498535,0.0029678345,0.08496094,-0.013931274,0.06378174,0.010116577,-0.024169922,0.04034424,0.045776367,0.02003479,-0.0018024445,-0.014175415,-0.017532349,0.043151855,0.052337646,-0.04006958,0.009925842,-0.06311035,0.015777588,0.0047569275,0.055847168,-0.016921997,0.05456543,0.0619812,0.047454834,0.05038452,-0.024642944,-0.030960083,-0.023651123,-0.03189087,0.004360199,0.01399231,0.03677368,8.172989E-4,0.028945923,-0.01902771,-0.006778717,0.04574585,-0.04321289,0.0013618469,-0.012069702,0.056365967,0.033935547,-0.06549072,-0.04296875,0.003648758,0.046417236,-0.016189575,0.020462036,-0.0039634705,-0.014793396,-0.029769897,0.018066406,-0.04864502,-0.0362854,0.034240723,0.03237915,0.04272461,-0.013366699,0.050933838,-0.009788513,-0.017410278,-0.0140686035,-0.013633728,0.0090408325,-0.0107421875,-0.07006836,-0.03765869,-0.005344391,0.037719727,0.020004272,0.015388489,-0.03604126,-0.038879395,0.0025310516,0.056152344,0.023986816,-0.0076828003,-0.009559631,-0.0072631836,0.010902405,-0.026000977,0.051513672,0.0018749237,-0.0078125,0.016357422,-0.021347046,0.030166626,-4.2557716E-4,0.08856201,0.023284912,-0.047424316,0.017669678,0.027709961,-0.023864746,-0.02406311,-0.0418396,0.032928467,0.021392822,-0.0056762695,0.0027561188,0.0024547577,0.036224365,-0.036743164,-0.021499634,-0.0027446747,0.016220093,-0.04650879,-0.031463623,0.018035889,0.0413208,0.034210205,0.003129959,0.019821167,0.03463745,-0.008010864,0.052459717,-0.035827637,-0.03805542,-0.007484436,-0.0045814514,8.587837E-4,0.040649414,-0.0287323,-0.010108948,-0.023727417,0.04434204,0.0012893677,-0.014221191,-0.00440979,-0.0064849854,0.033050537,0.023132324,0.025619507,-0.060668945,0.0043296814,0.032684326,-0.0054740906,-0.016555786,-0.004917145,-0.039367676,-0.028137207,-0.032684326,0.004798889,0.010292053,0.01991272,0.014518738,0.011917114,0.021331787,-0.010269165,0.04397583,0.01600647,0.07354736,-0.06567383,0.03503418,-0.027008057,0.01348114,-0.020050049,-0.014038086,0.024398804,0.009613037,-0.019821167,-0.026062012,0.0066184998,-0.05404663,0.043518066,-0.01828003,-0.07623291,0.016342163,0.0050086975,-0.03173828,0.07196045,0.027511597,-0.025848389,-0.02482605,0.02154541,-0.004245758,0.007663727,-0.025115967,-0.052337646,0.048736572,-0.036010742,-0.019195557,0.031921387,0.031707764,-0.0014257431,-0.060058594,-0.009178162,0.0045776367,0.020889282,0.018203735,0.012588501,-0.02848816,-0.014816284,-0.030059814,-0.012535095,0.018997192,-0.0368042,-2.5320053E-4,-0.04244995,-0.0501709,-0.021835327,0.030929565,-0.0036678314,-0.05407715,-0.028045654,0.019424438,0.002664566,0.020523071,-0.00737381,-0.025009155,0.015007019,-0.021987915,-0.016571045,-0.04006958,-5.2165985E-4,-0.003440857,0.07116699,0.021453857,-0.051239014,0.029373169,0.050109863,-0.0021972656,0.016677856,0.08508301,-0.032196045,-0.008407593,0.009597778,0.037719727,-0.02722168,-0.025100708,0.009902954,0.01826477,0.04446411,0.0027542114,0.013023376,-0.014411926,-0.0236969,0.025894165,-0.058441162,-0.0423584,-0.03842163,0.012130737,0.046844482,0.037597656,0.0023612976,-0.03189087,0.0016994476,-0.0060539246,0.028366089,0.014015198,-0.046722412,0.048828125,0.0016174316,0.0023593903,-0.033996582,-0.006336212,-0.021484375,0.036499023,-0.033203125,0.018157959,0.012527466,-0.047912598,-0.017807007,0.03439331,-0.03744507,0.0015096664,0.01109314,0.010665894,0.0138168335,-0.012046814,7.953644E-4,0.020690918,-0.009307861,0.004306793,-0.02696228,0.00223732,0.0046081543,0.058288574,-0.054901123,-0.01902771,0.013046265,0.015914917,0.04901123,-0.0013542175,-0.009407043,0.022369385,0.0044555664,-0.03149414,0.06774902,-0.009002686,0.051605225,-9.717941E-4,0.0039100647,-0.003692627,0.00920105,-0.020721436,0.045166016,-0.02281189,-0.031311035,0.029830933,0.0069847107,0.0236969,0.012687683,0.038513184,0.01033783,-0.023757935,-0.061462402,-0.020996094,0.031234741,0.0033836365,-0.0070495605,0.052642822,0.022125244,0.029190063,0.016830444,0.013244629,0.0256958,-0.0019626617,-0.030838013,0.038116455,0.030822754,0.048461914,0.028900146,0.005256653,-0.041229248,-0.016235352,-0.060668945,-0.0093688965,-0.010231018,0.058685303,0.022064209,0.06451416,-0.0019340515,-0.005016327,0.022354126,-0.016860962,0.014434814,0.0019397736,-7.736683E-5,9.75132E-4,0.05291748,0.024841309,0.0098724365,-2.527237E-4,0.008110046,0.0155181885,-0.026992798,0.041748047,-0.045959473,-0.0051116943,-0.035491943,-0.0015363693,0.009239197,0.047332764,-0.034454346,1.4412403E-4,0.012931824,0.057403564,-0.031799316,0.021377563,-0.015129089,-0.030090332,-0.020965576,-0.017410278,0.016204834,-0.053833008,-0.018081665,-0.028121948,-0.0050239563,0.02406311,-0.0066490173,0.024810791,0.031021118,0.0022201538,-0.0126571655,0.0418396,-0.0014791489,0.035217285,-0.0024967194,-0.042266846,-0.05102539,-0.0022144318,0.06512451,1.232624E-4,0.0014228821,-0.07098389,0.017166138,0.057250977,0.016067505,0.005092621,-0.004425049,0.008491516,0.036743164,-0.04260254,-0.007095337,-0.008003235,0.023162842,0.007858276,0.026062012,0.06732178,0.058532715,-0.03451538,-0.036865234,-0.032043457,0.038482666,0.0060539246,-0.006401062,-0.014915466,-0.015541077,-0.0059127808,-0.0138168335,-0.02746582,0.0064811707,-0.0020580292,0.052764893,0.05557251,-0.002714157,0.010101318,-0.006729126,-0.0135650635,0.02406311,0.068603516,0.0149383545,-0.0021800995,-0.004009247,0.028182983,0.03390503,0.03692627,0.04647827,-0.017456055,0.031051636,-0.0049362183,-0.016448975,0.0044059753,-0.022872925,-0.039520264,-0.0014333725,0.047210693,-9.832382E-4,-0.022079468,-0.02432251,0.0013456345,0.024856567,0.0011844635,0.0056037903,0.07104492,-0.038391113,0.011772156,0.030441284,-0.01625061,-0.019226074,-0.052246094,0.00141716,0.0019321442,0.018112183,0.0016050339,-0.0033683777,-0.053253174,-0.015029907,-0.009918213,0.029663086,0.07757568,-0.01928711,-0.0057029724,-0.064331055,0.00894165,-0.043518066,-0.024459839,0.03262329,-0.07196045,0.015701294,0.0047721863,0.032073975,-0.008041382,-0.040618896,-0.045135498,0.030441284,-0.02067566,0.012519836,0.040649414,-0.016403198,-0.024871826,-0.039611816,-0.015914917,0.025314331,0.014381409,-0.02645874,0.035186768,-1.02579594E-4,-0.03866577,-0.032440186,0.010124207,0.022018433,-0.052856445,-0.039489746,0.024276733,0.016067505,-0.03881836,-0.057800293,-0.060455322,-0.003194809,-0.03375244,0.0026817322,-0.017669678,-0.016586304,-0.0024051666,-0.016143799,0.012229919,-0.012794495,0.008834839,-0.027313232,0.052703857,0.0049095154,0.0038757324,-0.010726929,-0.011932373,0.0017251968,-0.013519287,-0.06549072,0.014541626,-0.016525269,0.032592773,-0.046142578,-0.016189575,0.028961182,0.05999756,6.303787E-4,0.0057754517,0.015731812,0.022125244,-0.04171753,3.4856796E-4,-0.02708435,-0.007461548,-0.025817871,0.005569458,-0.009925842,-0.033203125,0.0049705505,-0.08508301,-0.024017334,-0.017547607,0.01876831,-0.006603241,-0.005634308,-0.015281677,-0.0256958,0.043151855,-0.0030670166,-0.052734375,-0.055267334,0.0859375,-0.04421997,-0.014427185,-7.519722E-4,0.0317688,-0.008674622,0.020980835,-0.011779785,0.037963867,-0.023544312,-0.019180298,0.03164673,-0.046966553,0.015670776,0.0024795532,-0.012870789,-0.039154053,0.0093307495,-0.058380127,0.027801514,-0.03314209,-0.0010881424,0.022705078,0.027572632,0.06750488,0.01133728,0.012336731,0.013114929,-0.03378296,0.013183594,-0.019012451,-1.0955334E-4,-0.007701874,0.015380859,-0.04837036,0.012313843,0.06173706,-0.005924225,0.041870117]],\"response_type\":\"embeddings_floats\"}}}", Timestamp: timeValue.String(), From 4acc2213c51937856147d1e0f92fc3f3851251b6 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Wed, 15 Jan 2025 11:17:23 +0530 Subject: [PATCH 085/102] aws-logs: aws-logs-not-consistently-mapped-to-ec2 --- code/parse.go | 36 ++++++++++++++++++++++++++---------- code/regex_constants.go | 2 +- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/code/parse.go b/code/parse.go index 066232c..01136a8 100644 --- a/code/parse.go +++ b/code/parse.go @@ -174,12 +174,12 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") - } else if strings.Contains(d.LogGroup, "bedrock"){ - if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs"){ + } else if strings.Contains(d.LogGroup, "bedrock") { + if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs") { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "bedrock.amazonaws.com") - } else if (strings.Contains(d.LogStream, "modelinvocations")){ + } else if strings.Contains(d.LogStream, "modelinvocations") { isBedrockModelLogs = true } } else { @@ -203,15 +203,15 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") } - if isBedrockModelLogs && resourceValue == "" { + if isBedrockModelLogs && resourceValue == "" { var messageJson map[string]interface{} - if err :=json.Unmarshal([]byte(event.Message ), &messageJson); err != nil { - fmt.Println("err while unmarshalling event message ",err) + if err := json.Unmarshal([]byte(event.Message), &messageJson); err != nil { + fmt.Println("err while unmarshalling event message ", err) } - if(strings.Contains(messageJson["modelId"].(string), "arn:aws:bedrock")){ + if strings.Contains(messageJson["modelId"].(string), "arn:aws:bedrock") { resourceValue = messageJson["modelId"].(string) - }else{ - resourceValue =fmt.Sprintf("arn:aws:bedrock:%s::foundation-model/%s", awsRegion, messageJson["modelId"].(string)) + } else { + resourceValue = fmt.Sprintf("arn:aws:bedrock:%s::foundation-model/%s", awsRegion, messageJson["modelId"].(string)) } resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "bedrock.amazonaws.com") @@ -438,7 +438,23 @@ func processResourceMapping(message string, accountId string) map[string]interfa } else if strings.Contains(eventSource, "ec2") { ec2RegexArray := regexCompile(ec2Regex).FindAllStringSubmatch(message, -1) - if len(ec2RegexArray) == 1 { + if len(ec2RegexArray) > 1 { + allInstanceIdsSame := true + firstElement := ec2RegexArray[0][0] + for _, match := range ec2RegexArray { + if match[0] != firstElement { + allInstanceIdsSame = false + break + } + } + if allInstanceIdsSame { + fmt.Println("All instanceIds in ec2RegexArray are the same. Adding arn field.") + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) + accountLevelLog = false + } else { + fmt.Println("Not all instanceIds in ec2RegexArray are the same. Logs will be mapped to account.") + } + } else { resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) accountLevelLog = false } diff --git a/code/regex_constants.go b/code/regex_constants.go index 19c248c..7d4792c 100644 --- a/code/regex_constants.go +++ b/code/regex_constants.go @@ -8,7 +8,7 @@ var awsRegionRegex = `("awsRegion":")(?P[^/][^,][^"]*)` var awsEventSourceRegex = `("eventSource":")(?P[^/][^,][^"]*)` var awsARNRegex = `("arn":")(?P[^/][^,][^"]*)` var sqsRegex = `("queueName":")(?P[^/][^,][^"]*)|("queueUrl":")(?P[^/][^,][^"]*)` -var ec2Regex = `("instanceId":")(?P[^/][^"]*)` +var ec2Regex = `("instanceId":\s*")(?P[^/][^"]*)` var cloudwatchResourceRegex = `("resources":\[")(?P[^/][^,][^"]*)` var elbAccountId = `AWSLogs\/(.*)\/elasticloadbalancing` var elbRegion = `\/elasticloadbalancing\/(.*?)\/` From 2f7bf3f7878ca722660d70e7ecbe07d5ea433f37 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Fri, 17 Jan 2025 22:18:10 +0530 Subject: [PATCH 086/102] aws-logs: aws-logs-not-consistently-mapped-to-ec2 --- cloudformation.yaml | 2 +- code/parse.go | 33 ++++++++++++++++----------------- code/version.properties | 2 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 3ff91c3..834d186 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.8 + Version: 1.5.9 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/parse.go b/code/parse.go index 01136a8..9f6195a 100644 --- a/code/parse.go +++ b/code/parse.go @@ -174,12 +174,12 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "eks.amazonaws.com") - } else if strings.Contains(d.LogGroup, "bedrock") { - if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs") { + } else if strings.Contains(d.LogGroup, "bedrock"){ + if strings.Contains(d.LogGroup, "knowledge-base") || strings.Contains(d.LogGroup, "vendedlogs"){ resoureProp["system.aws.accountid"] = d.Owner resoureProp["system.cloud.category"] = "AWS/LMAccount" metadataMap = extractMetadata(awsRegion, "", "bedrock.amazonaws.com") - } else if strings.Contains(d.LogStream, "modelinvocations") { + } else if (strings.Contains(d.LogStream, "modelinvocations")){ isBedrockModelLogs = true } } else { @@ -203,15 +203,15 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") } - if isBedrockModelLogs && resourceValue == "" { + if isBedrockModelLogs && resourceValue == "" { var messageJson map[string]interface{} - if err := json.Unmarshal([]byte(event.Message), &messageJson); err != nil { - fmt.Println("err while unmarshalling event message ", err) + if err :=json.Unmarshal([]byte(event.Message ), &messageJson); err != nil { + fmt.Println("err while unmarshalling event message ",err) } - if strings.Contains(messageJson["modelId"].(string), "arn:aws:bedrock") { + if(strings.Contains(messageJson["modelId"].(string), "arn:aws:bedrock")){ resourceValue = messageJson["modelId"].(string) - } else { - resourceValue = fmt.Sprintf("arn:aws:bedrock:%s::foundation-model/%s", awsRegion, messageJson["modelId"].(string)) + }else{ + resourceValue =fmt.Sprintf("arn:aws:bedrock:%s::foundation-model/%s", awsRegion, messageJson["modelId"].(string)) } resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "bedrock.amazonaws.com") @@ -438,7 +438,12 @@ func processResourceMapping(message string, accountId string) map[string]interfa } else if strings.Contains(eventSource, "ec2") { ec2RegexArray := regexCompile(ec2Regex).FindAllStringSubmatch(message, -1) - if len(ec2RegexArray) > 1 { + if len(ec2RegexArray) == 1 { + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) + accountLevelLog = false + } + + if (len(ec2RegexArray) > 1) { allInstanceIdsSame := true firstElement := ec2RegexArray[0][0] for _, match := range ec2RegexArray { @@ -448,17 +453,11 @@ func processResourceMapping(message string, accountId string) map[string]interfa } } if allInstanceIdsSame { - fmt.Println("All instanceIds in ec2RegexArray are the same. Adding arn field.") + log.Printf("All instanceIds in log are the same. Adding arn field.") resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) accountLevelLog = false - } else { - fmt.Println("Not all instanceIds in ec2RegexArray are the same. Logs will be mapped to account.") } - } else { - resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, accountId, ec2RegexArray[0][2]) - accountLevelLog = false } - } else if strings.Contains(eventSource, "sqs") { sqsRegexArray := regexCompile(sqsRegex).FindStringSubmatch(message) diff --git a/code/version.properties b/code/version.properties index f9d25e9..40e1bf6 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.8 +version=1.5.9 From fe978a7b5c5a1c4d3221259097b3b90a81a26bc5 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Mon, 7 Apr 2025 16:53:25 +0530 Subject: [PATCH 087/102] q business logs support --- code/parse.go | 7 +++++++ code/parse_test.go | 26 +++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/code/parse.go b/code/parse.go index 9f6195a..fb5b737 100644 --- a/code/parse.go +++ b/code/parse.go @@ -106,6 +106,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { var metadataMap = make(map[string]interface{}) lmBatch := make([]model.LogInput, 0) d, err := request.AWSLogs.Parse() + var resourceValue string var resoureProp = make(map[string]interface{}) var isEC2NetworkInterface bool = false @@ -182,6 +183,12 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { } else if (strings.Contains(d.LogStream, "modelinvocations")){ isBedrockModelLogs = true } + } else if strings.Contains(d.LogGroup, "/aws/vendedlogs/qbusiness/"){ + re1, _ := regexp.Compile(`qbusiness/application/EVENT_LOGS/(.*)`) + instanceId := re1.FindStringSubmatch(d.LogGroup)[1] + resourceValue = fmt.Sprintf("arn:aws:qbusiness:%s:%s:application/%s", awsRegion, d.Owner, instanceId) + resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, resourceValue, "qbusiness.amazonaws.com") } else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue diff --git a/code/parse_test.go b/code/parse_test.go index a8c88f6..ccc95ee 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -879,7 +879,6 @@ func TestCloudWatchEventsBedrockKB(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) epochMillis := int64(1724850011017) - var metadataMap = map[string]interface{}{"_integration": "aws", "_resource.type":"AWS", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/vendedlogs/bedrock/knowledge-base/APPLICATION_LOGS/RTWLKRR7XH", "logStream": "bedrock/knowledgebaseslogs", "_lm.tenantId": "123456"} expectedLMEvent := model.LogInput{ Message: "{\"event_timestamp\":1724850011017,\"event\":{\"ingestion_job_id\":\"GMNMGXKEVG\",\"data_source_id\":\"0N0MGJOTCW\",\"ingestion_job_status\":\"CRAWLING_COMPLETED\",\"knowledge_base_arn\":\"arn:aws:bedrock:us-west-2:280443500820:knowledge-base/RTWLKRR7XH\",\"resource_statistics\":{\"number_of_resources_updated\":0,\"number_of_resources_ingested\":0,\"number_of_resources_scheduled_for_update\":0,\"number_of_resources_scheduled_for_ingestion\":0,\"number_of_resources_scheduled_for_metadata_update\":0,\"number_of_resources_deleted\":0,\"number_of_resources_with_metadata_updated\":0,\"number_of_resources_failed\":0,\"number_of_resources_scheduled_for_deletion\":0}},\"event_version\":\"1.0\",\"event_type\":\"StartIngestionJob.StatusChanged\",\"level\":\"INFO\"}", @@ -890,6 +889,31 @@ func TestCloudWatchEventsBedrockKB(t *testing.T) { assert.Equal(t, expectedLMEvent, logs[0]) } +func TestCloudWatchEventsQBusiness(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAA/42RX2/TMBTFv4q5L7zUxHFuYjsvqEDZJm3A1Aok6BQ5idNGS+IQO63KtO+Omq3T+CPE8z2/e8499w5a45zemNWhN5DCu/lqnl0tlsv52QJmYPedGSAFLhliFDMmOYMZNHZzNtixhxQCvXfBznSlKRu7ccH3fHR1Z5wLdN83daF9bbtg8XnxYZVdfjxbBlUZMZSG0yoqkWKFmqowTyhHyRiPEqyK8sFi6QejW0jh+s1p59ut9sHVQ2KYgRtzVwx1f/R4XzfeDA7Sb3B5dWk3jn4a9K1uenp9isThZlq82JnOH5V3UJeQQiSl4koJVEqFMpFcMc6EQi6EYsgVjxiKhGHIYi5kGMbIBCYcYQa+bo3zuu0hDQUi4zziMXI5O/UKKdyt4VkXWV2uIV3D//SwhtkazDFt9mQ0wZzxmDKkTKxClkYyxfjrJG7sJvOH3kyqx6KmgS4KO3b+5P78odO8sN3ODO6XiIzzMFFC0SpBRVFqTSWPDI3jkplQ5Cws1QS7g/OmzR5PPuEyCWOshKSl0YJiLjjVOY9poZUIC5GrKnnAR2eG32EhVClkXlIT6ogiKqRaCqSxTniFiikt+R/wRG5N0zT2L7mm6blpGvuCXLxsybzVP2xHrmdEd2R+QbRztfO686QabEvmX5avyLndk0J35IJsTdOTgx2Jt6U+vJ7229H3o89a44e6cFntnq7IG1vcmuMplW6c+ad2X/tt1tlMd25vhhNyD/c39z8B64uG+58DAAA=", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + epochMillis := int64(1724850011017) + var metadataMap = map[string]interface {}{"_integration":"aws", "_type":"qbusiness.amazonaws.com"} + expectedLMEvent := model.LogInput{ + Message: "{\"application_id\":\"fd3048e2-f3d4-4f4a-91b6-248002364fcd\",\"event_timestamp\":\"2025-04-07T10:38:45Z\",\"log_type\":\"Message\",\"account_id\":\"280443500820\",\"conversation_id\":\"02216979-f649-48aa-823e-55d0e17b01d9\",\"system_message_id\":\"86154f78-dea7-4b72-ab25-ca971c7b9f69\",\"user_message_id\":\"779d78bd-e1a3-4494-a874-5a62f4909a82\",\"user_message\":\"helllo\",\"system_message\":\"Hello! I'm Amazon Q, an AI assistant from AWS. How can I help you today?\",\"output_metrics_is_message_blocked\":false,\"output_metrics_is_message_with_no_answer\":false}", + Timestamp: parseTime(epochMillis).String(),// time.Date(2024, time.August, 28, 18, 30, 11, 017, time.Local).String(), + ResourceID: map[string]interface {}{"system.aws.arn":"arn:aws:qbusiness::280443500820:application/fd3048e2-f3d4-4f4a-91b6-248002364fcd"}, + Metadata: metadataMap, + } + + + + assert.Equal(t, expectedLMEvent.Message, logs[0].Message) + assert.Equal(t, expectedLMEvent.Metadata, logs[0].Metadata) + assert.Equal(t, expectedLMEvent.ResourceID, logs[0].ResourceID) + +} + func parseTime(epochMillis int64) time.Time{ epochSeconds := epochMillis / 1000 nanoseconds := (epochMillis % 1000) * 1000000 From 9164d9f851669b58df2793a4b0fba1796ee61a0d Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Mon, 7 Apr 2025 16:56:52 +0530 Subject: [PATCH 088/102] fixed parsing changes --- code/parse_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/code/parse_test.go b/code/parse_test.go index ccc95ee..cf17e33 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -879,6 +879,7 @@ func TestCloudWatchEventsBedrockKB(t *testing.T) { logs := parseCloudWatchLogs(cloudWatchEvent) epochMillis := int64(1724850011017) + var metadataMap = map[string]interface{}{"_integration": "aws", "_resource.type":"AWS", "_type": "bedrock.amazonaws.com", "logGroup": "/aws/vendedlogs/bedrock/knowledge-base/APPLICATION_LOGS/RTWLKRR7XH", "logStream": "bedrock/knowledgebaseslogs", "_lm.tenantId": "123456"} expectedLMEvent := model.LogInput{ Message: "{\"event_timestamp\":1724850011017,\"event\":{\"ingestion_job_id\":\"GMNMGXKEVG\",\"data_source_id\":\"0N0MGJOTCW\",\"ingestion_job_status\":\"CRAWLING_COMPLETED\",\"knowledge_base_arn\":\"arn:aws:bedrock:us-west-2:280443500820:knowledge-base/RTWLKRR7XH\",\"resource_statistics\":{\"number_of_resources_updated\":0,\"number_of_resources_ingested\":0,\"number_of_resources_scheduled_for_update\":0,\"number_of_resources_scheduled_for_ingestion\":0,\"number_of_resources_scheduled_for_metadata_update\":0,\"number_of_resources_deleted\":0,\"number_of_resources_with_metadata_updated\":0,\"number_of_resources_failed\":0,\"number_of_resources_scheduled_for_deletion\":0}},\"event_version\":\"1.0\",\"event_type\":\"StartIngestionJob.StatusChanged\",\"level\":\"INFO\"}", From b31644bf5a56a11009dc21ca1dfa3229249a00b6 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Tue, 8 Apr 2025 00:13:04 +0530 Subject: [PATCH 089/102] added readme, updated version, fixed testcase --- README.md | 22 +++++++++++++++++++++- code/parse_test.go | 1 - code/version.properties | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5d7e3df..7ffeb7a 100644 --- a/README.md +++ b/README.md @@ -194,4 +194,24 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be 4. To differentiate between modelInvocation logs and knowledge-base logs, for knowledge-base logs the Log group name should contain "knowledge-base" or "vendedlogs" (this is by default present so no need to modify it). For modelinvocation logs, the logstreams by default contain string "modelinvocations" in it. 5. Go to Log Group created by bedrock as above. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. 6. Logs will start to propagate through lambda to LogIngest. -7. The Model Invocation logs will be mapped to the Bedrock model resource created in Logicmonitor and the knowledge-base logs will be mapped to the AWS account resource created in Logicmonitor. \ No newline at end of file +7. The Model Invocation logs will be mapped to the Bedrock model resource created in Logicmonitor and the knowledge-base logs will be mapped to the AWS account resource created in Logicmonitor. +### Send Q Business Logs + +1. **Types of Logs Supported by AWS Q Business:** + - **User Conversation Logs:** + - **Content:** Records of user interactions, including messages and responses. + - **Purpose:** Analyze user behavior, identify common queries, and assess response quality. + - **Feedback Logs:** + - **Content:** User feedback on responses, such as thumbs-up or thumbs-down ratings. + - **Purpose:** Gauge user satisfaction and identify areas for improvement. + - **API Call Logs:** + - **Content:** Details of API requests made to Amazon Q Business services. + - **Purpose:** Audit API usage, monitor access patterns, and troubleshoot issues. + +2. **Steps to Enable Log Streaming to Amazon CloudWatch:** + - **Amazon CloudWatch Logs Setup:** + - In the **Amazon Q Business console**, navigate to your application environment. + - Go to **Enhancements > Admin Controls and Guardrails**. + - Under **Log delivery**, choose **Add** and select **Amazon CloudWatch Logs**. + - Specify the **destination log group** and configure additional settings as needed. + - **Reference:** [Enabling Amazon Q Business user conversation logging](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/cw-logs-enable-logging.html) diff --git a/code/parse_test.go b/code/parse_test.go index cf17e33..a32159e 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -910,7 +910,6 @@ func TestCloudWatchEventsQBusiness(t *testing.T) { assert.Equal(t, expectedLMEvent.Message, logs[0].Message) - assert.Equal(t, expectedLMEvent.Metadata, logs[0].Metadata) assert.Equal(t, expectedLMEvent.ResourceID, logs[0].ResourceID) } diff --git a/code/version.properties b/code/version.properties index 40e1bf6..aa0b293 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.9 +version=1.5.10 From 77c1eea0b55f5a15217bb68b8d29efae2d74c5d8 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Tue, 8 Apr 2025 13:46:13 +0530 Subject: [PATCH 090/102] fixed readme, fixed version, moved regex to constants --- README.md | 7 ++++++- code/parse.go | 2 +- code/regex_constants.go | 1 + code/version.properties | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7ffeb7a..fc40745 100644 --- a/README.md +++ b/README.md @@ -213,5 +213,10 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be - In the **Amazon Q Business console**, navigate to your application environment. - Go to **Enhancements > Admin Controls and Guardrails**. - Under **Log delivery**, choose **Add** and select **Amazon CloudWatch Logs**. - - Specify the **destination log group** and configure additional settings as needed. + - Specify the **destination log group** , make sure to add **"/aws/vendedlogs/qbusiness/"** to the *Destination Log Group* and configure additional settings as needed. - **Reference:** [Enabling Amazon Q Business user conversation logging](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/cw-logs-enable-logging.html) + +3. **Sending logs from Cloudwatch to LM Portal** + - In the **Log Group** created for QBusiness logs, go to Subscription *Filter -> Create -> Create Lambda Subscription Filter* + - In lambda function select *“LMLogsForwarder”* (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. + - Specify Subscription filter name, and click start streaming. diff --git a/code/parse.go b/code/parse.go index fb5b737..e91369e 100644 --- a/code/parse.go +++ b/code/parse.go @@ -184,7 +184,7 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { isBedrockModelLogs = true } } else if strings.Contains(d.LogGroup, "/aws/vendedlogs/qbusiness/"){ - re1, _ := regexp.Compile(`qbusiness/application/EVENT_LOGS/(.*)`) + re1, _ := regexp.Compile(qbusinessRegex) instanceId := re1.FindStringSubmatch(d.LogGroup)[1] resourceValue = fmt.Sprintf("arn:aws:qbusiness:%s:%s:application/%s", awsRegion, d.Owner, instanceId) resoureProp[resourceProperty] = resourceValue diff --git a/code/regex_constants.go b/code/regex_constants.go index 7d4792c..3f84ddd 100644 --- a/code/regex_constants.go +++ b/code/regex_constants.go @@ -17,6 +17,7 @@ var eventSourceRegex = `("eventSource":")([^",]*)` var kinesisFirehoseRegex = `("deliveryStreamName":"|"deliveryStreamName": "|:deliverystream/)([^/][^,][^"]*)` var kinesisDataStreamRegex = `("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)` var ecsStreamRegex = `("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)` +var qbusinessRegex = `qbusiness/application/EVENT_LOGS/(.*)` func regexCompile(regexStr string) *regexp.Regexp { var regex, _ = regexp.Compile(regexStr) diff --git a/code/version.properties b/code/version.properties index aa0b293..21d8ccd 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.5.10 +version=1.6.0 From 5f6a194f86dd4d051ce77a764005ae17928ded08 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Tue, 8 Apr 2025 15:16:22 +0530 Subject: [PATCH 091/102] updated version in cloudformation.yaml --- cloudformation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 834d186..8f56b51 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.5.9 + Version: 1.6.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" From e87c80de78ceffdae8d9363758d05de4f158edf1 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Wed, 14 May 2025 13:28:27 +0530 Subject: [PATCH 092/102] support for endpoint,trainingJob,processingJob logs --- cloudformation.yaml | 2 +- code/parse.go | 15 +++++++++++++- code/parse_test.go | 45 +++++++++++++++++++++++++++++++++++++++++ code/regex_constants.go | 2 +- code/version.properties | 2 +- 5 files changed, 62 insertions(+), 4 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 8f56b51..6692d34 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.6.0 + Version: 1.6.1 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/parse.go b/code/parse.go index e91369e..579b7bf 100644 --- a/code/parse.go +++ b/code/parse.go @@ -189,7 +189,20 @@ func parseCloudWatchLogs(request events.CloudwatchLogsEvent) []model.LogInput { resourceValue = fmt.Sprintf("arn:aws:qbusiness:%s:%s:application/%s", awsRegion, d.Owner, instanceId) resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "qbusiness.amazonaws.com") - } else { + } else if strings.Contains(d.LogGroup, "/aws/sagemaker"){ + if strings.Contains(d.LogGroup,"aws/sagemaker/TrainingJobs")|| strings.Contains(d.LogGroup,"aws/sagemaker/ProcessingJobs"){ + resoureProp["system.aws.accountid"] = d.Owner + resoureProp["system.cloud.category"] = "AWS/LMAccount" + metadataUrl := strings.Split(d.LogGroup, "/")[3] + ".sagemaker.amazonaws.com" + metadataMap = extractMetadata(awsRegion, "" , metadataUrl) + } else if strings.Contains(d.LogGroup,"/aws/sagemaker/Endpoints"){ + re1, _ := regexp.Compile(sagemakerEndpointRegex) + instanceId := re1.FindStringSubmatch(d.LogGroup)[1] + resourceValue = fmt.Sprintf("arn:aws:sagemaker:%s:%s:endpoint/%s",awsRegion, d.Owner,instanceId) + resoureProp[resourceProperty] = resourceValue + metadataMap = extractMetadata(awsRegion, resourceValue, "sagemaker.endpoint.amazonaws.com") + } + }else { resourceValue = fmt.Sprintf("arn:aws:ec2:%s:%s:instance/%s", awsRegion, d.Owner, d.LogStream) resoureProp[resourceProperty] = resourceValue metadataMap = extractMetadata(awsRegion, resourceValue, "ec2.amazonaws.com") diff --git a/code/parse_test.go b/code/parse_test.go index a32159e..c6f2bac 100644 --- a/code/parse_test.go +++ b/code/parse_test.go @@ -914,6 +914,51 @@ func TestCloudWatchEventsQBusiness(t *testing.T) { } +func TestCloudWatchEventsSagemakerEndpoint(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAA/7XQT2vbQBCH4a+yzFlr7cz+m9VNpIpbaJuCdEtMUOy1vNSWhCQ3hODvXtyQQqH01vPAyzy/VzjFeW672LyMEQr4UDbl45eqrst1BRkMz32coABiZYy2SjEpyOA4dOtpOI9QQN4+z/k1cGq/xymv+t04pH6Z88O561Lf7dttlOPLMkzbg0z9Pk6x30ZJiqxUVqKWiNJ4SUaS0m/teplie4ICyuOxmdr9Pm3zJNXe+zaijZpbfmLnIIP5/DRvpzQuaehv03GJ0wzFPdTv/zRxXhTC5le2+hH75Xp/hbSDAjQHR8b54L31VrPTip01xtrgtA3WeiKD2innjLraHTIFJMhgSac4L+1phAK98ai94aDZZu9zXjf7TWwQC8uFMpljL+4/fb29ExsxDsNRklwOU2x30ojy5qaq68fPd2shRY4urMiaFXpeUWEYmcUDrKtG5GPqO/Gxab7luMIHEKSUUHDJ/mSx4qCsY0RrHaqgDCrDqMmRZ3aaApMmZMNETCb4v7OC0Wz+zQr/j4Vw2Vx+Ats9t/ukAgAA", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + epochMillis := int64(1724850011017) + var metadataMap = map[string]interface {}{"_integration":"aws", "_type":"endpoint.sagemaker.amazonaws.com"} + expectedLMEvent := model.LogInput{ + Message: "2025-05-13T11:58:04,687 [INFO ] pool-2-thread-4 ACCESS_LOG - /169.254.178.2:48188 \"GET /ping HTTP/1.1\" 200 0", + Timestamp: parseTime(epochMillis).String(),// time.Date(2024, time.August, 28, 18, 30, 11, 017, time.Local).String(), + ResourceID: map[string]interface {}{"system.aws.arn":"arn:aws:sagemaker::280443500820:endpoint/huggingface-pytorch-inference-2025-05-13-11-47-24-203"}, + Metadata: metadataMap, + } + + assert.Equal(t, expectedLMEvent.Message, logs[0].Message) + assert.Equal(t, expectedLMEvent.ResourceID, logs[0].ResourceID) + +} + + +func TestCloudWatchEventsSagemakerProcessingJob(t *testing.T) { + cloudWatchEvent := events.CloudwatchLogsEvent{ + AWSLogs: events.CloudwatchLogsRawData{ + Data: "H4sIAAAAAAAA/63SyWrDMBAG4Fcxc7YS7ZYEPhjiBko3at9KKE6qGhNvWEpDCXn3kqTLtTi+Dcww3/AzB2isc0Vp88/egoFFkiev92mWJcsUQuj2rR3AAFWYcyYwVhRDCHVXLodu14OBebF389OCptjaYf40dBvrXNWWt93aXUYzP9iiAQO/Y8htqm3lUW2LoUUUU4GwQIQjLJHACCskOJ8XddkhgkjEI4oF5wJCcLu12wxV76uuvalqbwcH5gXezyXy1nlYndH0w7b+1DtA9QYGmNKSaSU4ETjSRFISEYplJCOqsaRKCEKVoJIKzBjXQktNmJQcQvBVY50vmh7M9y2CMclk+JMdGIjjOLh7XAZ5muVBlifPeRDHMRzD63jxT/4v9sB52wd4NptdjcuROJkCj0bidApcjcTZFLgeifMJ8AiP+ff0YXH59tXxC53B/ChQBAAA", + }, + } + + logs := parseCloudWatchLogs(cloudWatchEvent) + epochMillis := int64(1724850011017) + var metadataMap = map[string]interface {}{"_integration":"aws", "_type":"endpoint.sagemaker.amazonaws.com"} + expectedLMEvent := model.LogInput{ + Message: "=== LOG TEST START ===", + Timestamp: parseTime(epochMillis).String(),// time.Date(2024, time.August, 28, 18, 30, 11, 017, time.Local).String(), + ResourceID: map[string]interface {}{"system.aws.accountid":"280443500820", "system.cloud.category":"AWS/LMAccount"}, + Metadata: metadataMap, + } + + assert.Equal(t, expectedLMEvent.Message, logs[0].Message) + assert.Equal(t, expectedLMEvent.ResourceID, logs[0].ResourceID) + +} + func parseTime(epochMillis int64) time.Time{ epochSeconds := epochMillis / 1000 nanoseconds := (epochMillis % 1000) * 1000000 diff --git a/code/regex_constants.go b/code/regex_constants.go index 3f84ddd..652f83f 100644 --- a/code/regex_constants.go +++ b/code/regex_constants.go @@ -18,7 +18,7 @@ var kinesisFirehoseRegex = `("deliveryStreamName":"|"deliveryStreamName": "|:del var kinesisDataStreamRegex = `("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)` var ecsStreamRegex = `("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)` var qbusinessRegex = `qbusiness/application/EVENT_LOGS/(.*)` - +var sagemakerEndpointRegex = `Endpoints/([^)]*)` func regexCompile(regexStr string) *regexp.Regexp { var regex, _ = regexp.Compile(regexStr) return regex diff --git a/code/version.properties b/code/version.properties index 21d8ccd..5c24438 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.6.0 +version=1.6.1 From 2e0603b520e6f782920247fc4e9c6f11935120af Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Thu, 15 May 2025 12:25:30 +0530 Subject: [PATCH 093/102] add details in readme, fix version add details in readme for sagemaker resolved comments : fixed version update resolved comments : fixed version update --- README.md | 31 +++++++++++++++++++++++++++++++ cloudformation.yaml | 2 +- code/version.properties | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc40745..a188c9a 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,7 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be 5. Go to Log Group created by bedrock as above. In Actions > Subscription filters > Create lambda subscription filter. In lambda function select “LMLogsForwarder” (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. Hit Start Streaming. 6. Logs will start to propagate through lambda to LogIngest. 7. The Model Invocation logs will be mapped to the Bedrock model resource created in Logicmonitor and the knowledge-base logs will be mapped to the AWS account resource created in Logicmonitor. + ### Send Q Business Logs 1. **Types of Logs Supported by AWS Q Business:** @@ -220,3 +221,33 @@ As these logs are filtered from Cloudtrail, all the Cloudtrail steps needs to be - In the **Log Group** created for QBusiness logs, go to Subscription *Filter -> Create -> Create Lambda Subscription Filter* - In lambda function select *“LMLogsForwarder”* (or whatever you named the Lambda function during stack creation) and provide Subscription filter name. - Specify Subscription filter name, and click start streaming. + + + + + +### Send Sagemaker logs + +To send AWS SageMaker logs to AWS CloudWatch, three log types are supported: ` Training Job Logs, Processing Job Logs, and Endpoint Logs `. For each log type, you need to create the corresponding instances, which will generate CloudWatch log groups where the logs will be sent. These log groups include: + +`aws/Sagemaker/TrainingJobs` +`aws/Sagemaker/ProcessingJobs` +`aws/Sagemaker/` + +To set up log forwarding, follow these steps: + + 1. Navigate to the log group created by SageMaker in CloudWatch. + 2. Go to Actions > Subscription Filters > Create Lambda Subscription Filter. + 3. In the Lambda function dropdown, select the function you created (e.g., “LMLogsForwarder”). + 4. Provide a name for the subscription filter and click Start Streaming. + +The logs will now flow through the Lambda function to LogIngest. SageMaker endpoint logs will be mapped to the corresponding endpoint resource in LogicMonitor, while the Training and Processing Job logs will be mapped to the AWS account resource created in LogicMonitor. \ No newline at end of file diff --git a/cloudformation.yaml b/cloudformation.yaml index 6692d34..a9a61b7 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.6.1 + Version: 1.7.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/version.properties b/code/version.properties index 5c24438..be570df 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.6.1 +version=1.7.0 From e7daee4cae695e4e3923316983fa0a317e7c5593 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 12 Aug 2025 17:51:00 +0530 Subject: [PATCH 094/102] DEV-197633: support-for-amazon-q-business-api-call-logs --- README.md | 26 +++++++++++++++++++++++++- cloudformation.yaml | 2 +- code/parse.go | 36 +++++++++++++++++++++++++++++++++++- code/regex_constants.go | 1 + code/version.properties | 2 +- 5 files changed, 63 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a188c9a..5b97902 100644 --- a/README.md +++ b/README.md @@ -250,4 +250,28 @@ To set up log forwarding, follow these steps: 3. In the Lambda function dropdown, select the function you created (e.g., “LMLogsForwarder”). 4. Provide a name for the subscription filter and click Start Streaming. -The logs will now flow through the Lambda function to LogIngest. SageMaker endpoint logs will be mapped to the corresponding endpoint resource in LogicMonitor, while the Training and Processing Job logs will be mapped to the AWS account resource created in LogicMonitor. \ No newline at end of file +The logs will now flow through the Lambda function to LogIngest. SageMaker endpoint logs will be mapped to the corresponding endpoint resource in LogicMonitor, while the Training and Processing Job logs will be mapped to the AWS account resource created in LogicMonitor. + +### Send Q Business API Call Logs using cloudtrail + +To send API call logs from AWS Q Business to LogicMonitor using cloudtrail, follow these steps: +1. **Enable CloudTrail for Management Events:** + - Open the AWS Console > CloudTrail > Trails + - Click Create trail or edit an existing trail + - Under Management events: + - Enable Read and Write management events + - This will capture all AwsApiCall events — including those from **qbusiness.amazonaws.com** +2. **Forward Events to CloudWatch Logs** + - In the same CloudTrail trail configuration, under CloudWatch Logs: + - Enable CloudWatch Logs + - Specify a log group name (e.g., `/aws/cloudtrail/qbusiness`) + - Create or select an IAM role that allows CloudTrail to publish logs to CloudWatch +3. **Create Lambda Subscription Filter** + - Go to the CloudWatch Logs console + - Select the log group created in step 2 (e.g., `/aws/cloudtrail/qbusiness`) + - Click on Actions > Create Lambda subscription filter + - Choose the Lambda function you created (e.g., “LMLogsForwarder”) + - Provide a name for the subscription filter and click Start streaming +4. **Verify Logs in LogicMonitor** + - After a few minutes, check your LogicMonitor portal to see if the API call logs from AWS Q Business are being ingested correctly. + - The logs should be associated with the AWS account resource created in LogicMonitor. \ No newline at end of file diff --git a/cloudformation.yaml b/cloudformation.yaml index a9a61b7..999b77f 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.7.0 + Version: 1.8.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/parse.go b/code/parse.go index 579b7bf..b5e75ce 100644 --- a/code/parse.go +++ b/code/parse.go @@ -495,7 +495,41 @@ func processResourceMapping(message string, accountId string) map[string]interfa } } - } + } else if strings.Contains(eventSource, "qbusiness") { + fmt.Sprintf("#### inside qbusiness block ") + fmt.Printf("#### inside qbusiness block via printf ") + // Regex to match application ID from ARN-like values: application/ + qBusinessAppRegex := regexp.MustCompile(qbusinessApplicationIdRegex) + var applicationId string + + // Extract requestParameters as JSON + var jsonMap map[string]interface{} + if err := json.Unmarshal([]byte(message), &jsonMap); err == nil { + if reqParams, ok := jsonMap["requestParameters"].(map[string]interface{}); ok { + // Priority 1: Direct applicationId field + if id, ok := reqParams["applicationId"].(string); ok && id != "" { + applicationId = id + } + + // Priority 2: Scan all keys for value matching "application/" + if applicationId == "" { + for _, v := range reqParams { + if strVal, ok := v.(string); ok { + if match := qBusinessAppRegex.FindStringSubmatch(strVal); len(match) > 1 { + applicationId = match[1] + break + } + } + } + } + } + } + + if applicationId != "" { + resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:qbusiness:%s:%s:application/%s", awsRegion, accountId, applicationId) + accountLevelLog = false + } + } if accountLevelLog { resoureIDMap["system.aws.accountid"] = accountId diff --git a/code/regex_constants.go b/code/regex_constants.go index 652f83f..5767dc1 100644 --- a/code/regex_constants.go +++ b/code/regex_constants.go @@ -18,6 +18,7 @@ var kinesisFirehoseRegex = `("deliveryStreamName":"|"deliveryStreamName": "|:del var kinesisDataStreamRegex = `("streamName":"|"streamName": "|:stream/)([^/][^,][^"]*)` var ecsStreamRegex = `("cluster":"|"cluster": "|:cluster/)([^/][^,][^"]*)` var qbusinessRegex = `qbusiness/application/EVENT_LOGS/(.*)` +var qbusinessApplicationIdRegex = `application/([0-9a-fA-F\-]{36})` var sagemakerEndpointRegex = `Endpoints/([^)]*)` func regexCompile(regexStr string) *regexp.Regexp { var regex, _ = regexp.Compile(regexStr) diff --git a/code/version.properties b/code/version.properties index be570df..41864f0 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.7.0 +version=1.8.0 From 3b321c0b5c68c50bb6125c04fbdc378bccff53a8 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 12 Aug 2025 18:44:31 +0530 Subject: [PATCH 095/102] DEV-197633: support-for-amazon-q-business-api-call-logs --- code/parse.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/code/parse.go b/code/parse.go index b5e75ce..e543da7 100644 --- a/code/parse.go +++ b/code/parse.go @@ -386,6 +386,8 @@ func processResourceMapping(message string, accountId string) map[string]interfa accountLevelLog := true var resoureIDMap = make(map[string]interface{}) var resourceProperty string = "system.aws.arn" + var applicationId string + var jsonMap map[string]interface{} if strings.Contains(eventSource, "firehose") { deliveryStreamArray := regexCompile(kinesisFirehoseRegex).FindStringSubmatch(message) @@ -496,14 +498,9 @@ func processResourceMapping(message string, accountId string) map[string]interfa } } else if strings.Contains(eventSource, "qbusiness") { - fmt.Sprintf("#### inside qbusiness block ") - fmt.Printf("#### inside qbusiness block via printf ") // Regex to match application ID from ARN-like values: application/ qBusinessAppRegex := regexp.MustCompile(qbusinessApplicationIdRegex) - var applicationId string - // Extract requestParameters as JSON - var jsonMap map[string]interface{} if err := json.Unmarshal([]byte(message), &jsonMap); err == nil { if reqParams, ok := jsonMap["requestParameters"].(map[string]interface{}); ok { // Priority 1: Direct applicationId field From f044ee0f9a547db184caf58757c39c7320bff0e1 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 26 Aug 2025 15:14:45 +0530 Subject: [PATCH 096/102] dummy: dummy --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b97902..5c06afd 100644 --- a/README.md +++ b/README.md @@ -274,4 +274,4 @@ To send API call logs from AWS Q Business to LogicMonitor using cloudtrail, foll - Provide a name for the subscription filter and click Start streaming 4. **Verify Logs in LogicMonitor** - After a few minutes, check your LogicMonitor portal to see if the API call logs from AWS Q Business are being ingested correctly. - - The logs should be associated with the AWS account resource created in LogicMonitor. \ No newline at end of file + - The logs should be associated with the AWS account resource created in your LogicMonitor portal. \ No newline at end of file From c73ce7dccca20f22fac7c41275121c2fdd76a338 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Fri, 20 Feb 2026 12:44:30 +0530 Subject: [PATCH 097/102] DEVTS-23602 fixes for vulnerability --- Dockerfile | 4 +- code/go.mod | 25 +- code/go.sum | 2284 +------------------------------------------------ code/parse.go | 16 +- 4 files changed, 60 insertions(+), 2269 deletions(-) diff --git a/Dockerfile b/Dockerfile index 05f897d..4911c36 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19-alpine as base +FROM golang:1.24-alpine as base ENV GOOS linux ENV GOARCH amd64 ENV CGO_ENABLED 0 @@ -15,7 +15,7 @@ RUN go build -o bootstrap *.go \ FROM base as test RUN go test RUN wget -O- -nv 'https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh' \ - | sh -s -- -b "$(go env GOPATH)/bin" 'v1.49.0' + | sh -s -- -b "$(go env GOPATH)/bin" 'v1.62.2' RUN golangci-lint run . FROM alpine as release diff --git a/code/go.mod b/code/go.mod index c11ee59..ddff355 100644 --- a/code/go.mod +++ b/code/go.mod @@ -1,11 +1,26 @@ module lm-logs-aws -go 1.14 +go 1.24.0 require ( - github.com/aws/aws-lambda-go v1.41.0 - github.com/aws/aws-sdk-go v1.44.287 - github.com/logicmonitor/lm-data-sdk-go v1.3.0 - github.com/stretchr/testify v1.8.4 + github.com/aws/aws-lambda-go v1.52.0 + github.com/aws/aws-sdk-go v1.55.8 + github.com/logicmonitor/lm-data-sdk-go v1.3.4 + github.com/stretchr/testify v1.11.1 github.com/thedevsaddam/gojsonq/v2 v2.5.2 ) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/go-version v1.8.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/collector/featuregate v1.51.0 // indirect + go.opentelemetry.io/collector/pdata v1.51.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/code/go.sum b/code/go.sum index 45322c9..69b7b12 100644 --- a/code/go.sum +++ b/code/go.sum @@ -1,2289 +1,65 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= -cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= -cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= -cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= -cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= -cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= -cloud.google.com/go/accessapproval v1.7.2/go.mod h1:/gShiq9/kK/h8T/eEn1BTzalDvk0mZxJlhfw0p+Xuc0= -cloud.google.com/go/accessapproval v1.7.3/go.mod h1:4l8+pwIxGTNqSf4T3ds8nLO94NQf0W/KnMNuQ9PbnP8= -cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= -cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= -cloud.google.com/go/accesscontextmanager v1.8.2/go.mod h1:E6/SCRM30elQJ2PKtFMs2YhfJpZSNcJyejhuzoId4Zk= -cloud.google.com/go/accesscontextmanager v1.8.3/go.mod h1:4i/JkF2JiFbhLnnpnfoTX5vRXfhf9ukhU1ANOTALTOQ= -cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= -cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= -cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= -cloud.google.com/go/aiplatform v1.50.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= -cloud.google.com/go/aiplatform v1.51.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= -cloud.google.com/go/aiplatform v1.51.1/go.mod h1:kY3nIMAVQOK2XDqDPHaOuD9e+FdMA6OOpfBjsvaFSOo= -cloud.google.com/go/aiplatform v1.51.2/go.mod h1:hCqVYB3mY45w99TmetEoe8eCQEwZEp9WHxeZdcv9phw= -cloud.google.com/go/aiplatform v1.54.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= -cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= -cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= -cloud.google.com/go/analytics v0.21.4/go.mod h1:zZgNCxLCy8b2rKKVfC1YkC2vTrpfZmeRCySM3aUbskA= -cloud.google.com/go/analytics v0.21.5/go.mod h1:BQtOBHWTlJ96axpPPnw5CvGJ6i3Ve/qX2fTxR8qWyr8= -cloud.google.com/go/analytics v0.21.6/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= -cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= -cloud.google.com/go/apigateway v1.6.2/go.mod h1:CwMC90nnZElorCW63P2pAYm25AtQrHfuOkbRSHj0bT8= -cloud.google.com/go/apigateway v1.6.3/go.mod h1:k68PXWpEs6BVDTtnLQAyG606Q3mz8pshItwPXjgv44Y= -cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= -cloud.google.com/go/apigeeconnect v1.6.2/go.mod h1:s6O0CgXT9RgAxlq3DLXvG8riw8PYYbU/v25jqP3Dy18= -cloud.google.com/go/apigeeconnect v1.6.3/go.mod h1:peG0HFQ0si2bN15M6QSjEW/W7Gy3NYkWGz7pFz13cbo= -cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= -cloud.google.com/go/apigeeregistry v0.7.2/go.mod h1:9CA2B2+TGsPKtfi3F7/1ncCCsL62NXBRfM6iPoGSM+8= -cloud.google.com/go/apigeeregistry v0.8.1/go.mod h1:MW4ig1N4JZQsXmBSwH4rwpgDonocz7FPBSw6XPGHmYw= -cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= -cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= -cloud.google.com/go/appengine v1.8.2/go.mod h1:WMeJV9oZ51pvclqFN2PqHoGnys7rK0rz6s3Mp6yMvDo= -cloud.google.com/go/appengine v1.8.3/go.mod h1:2oUPZ1LVZ5EXi+AF1ihNAF+S8JrzQ3till5m9VQkrsk= -cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= -cloud.google.com/go/area120 v0.8.2/go.mod h1:a5qfo+x77SRLXnCynFWPUZhnZGeSgvQ+Y0v1kSItkh4= -cloud.google.com/go/area120 v0.8.3/go.mod h1:5zj6pMzVTH+SVHljdSKC35sriR/CVvQZzG/Icdyriw0= -cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= -cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= -cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= -cloud.google.com/go/artifactregistry v1.14.2/go.mod h1:Xk+QbsKEb0ElmyeMfdHAey41B+qBq3q5R5f5xD4XT3U= -cloud.google.com/go/artifactregistry v1.14.3/go.mod h1:A2/E9GXnsyXl7GUvQ/2CjHA+mVRoWAXC0brg2os+kNI= -cloud.google.com/go/artifactregistry v1.14.4/go.mod h1:SJJcZTMv6ce0LDMUnihCN7WSrI+kBSFV0KIKo8S8aYU= -cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= -cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= -cloud.google.com/go/asset v1.15.0/go.mod h1:tpKafV6mEut3+vN9ScGvCHXHj7FALFVta+okxFECHcg= -cloud.google.com/go/asset v1.15.1/go.mod h1:yX/amTvFWRpp5rcFq6XbCxzKT8RJUam1UoboE179jU4= -cloud.google.com/go/asset v1.15.2/go.mod h1:B6H5tclkXvXz7PD22qCA2TDxSVQfasa3iDlM89O2NXs= -cloud.google.com/go/asset v1.15.3/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= -cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4= -cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs= -cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= -cloud.google.com/go/automl v1.13.2/go.mod h1:gNY/fUmDEN40sP8amAX3MaXkxcqPIn7F1UIIPZpy4Mg= -cloud.google.com/go/automl v1.13.3/go.mod h1:Y8KwvyAZFOsMAPqUCfNu1AyclbC6ivCUF/MTwORymyY= -cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= -cloud.google.com/go/baremetalsolution v1.2.0/go.mod h1:68wi9AwPYkEWIUT4SvSGS9UJwKzNpshjHsH4lzk8iOw= -cloud.google.com/go/baremetalsolution v1.2.1/go.mod h1:3qKpKIw12RPXStwQXcbhfxVj1dqQGEvcmA+SX/mUR88= -cloud.google.com/go/baremetalsolution v1.2.2/go.mod h1:O5V6Uu1vzVelYahKfwEWRMaS3AbCkeYHy3145s1FkhM= -cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= -cloud.google.com/go/batch v1.4.1/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= -cloud.google.com/go/batch v1.5.0/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= -cloud.google.com/go/batch v1.5.1/go.mod h1:RpBuIYLkQu8+CWDk3dFD/t/jOCGuUpkpX+Y0n1Xccs8= -cloud.google.com/go/batch v1.6.1/go.mod h1:urdpD13zPe6YOK+6iZs/8/x2VBRofvblLpx0t57vM98= -cloud.google.com/go/batch v1.6.3/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= -cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= -cloud.google.com/go/beyondcorp v1.0.1/go.mod h1:zl/rWWAFVeV+kx+X2Javly7o1EIQThU4WlkynffL/lk= -cloud.google.com/go/beyondcorp v1.0.2/go.mod h1:m8cpG7caD+5su+1eZr+TSvF6r21NdLJk4f9u4SP2Ntc= -cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= -cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= -cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= -cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= -cloud.google.com/go/bigquery v1.55.0/go.mod h1:9Y5I3PN9kQWuid6183JFhOGOW3GcirA5LpsKCUn+2ec= -cloud.google.com/go/bigquery v1.56.0/go.mod h1:KDcsploXTEY7XT3fDQzMUZlpQLHzE4itubHrnmhUrZA= -cloud.google.com/go/bigquery v1.57.1/go.mod h1:iYzC0tGVWt1jqSzBHqCr3lrRn0u13E8e+AqowBsDgug= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= -cloud.google.com/go/billing v1.17.0/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= -cloud.google.com/go/billing v1.17.1/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= -cloud.google.com/go/billing v1.17.2/go.mod h1:u/AdV/3wr3xoRBk5xvUzYMS1IawOAPwQMuHgHMdljDg= -cloud.google.com/go/billing v1.17.3/go.mod h1:z83AkoZ7mZwBGT3yTnt6rSGI1OOsHSIi6a5M3mJ8NaU= -cloud.google.com/go/billing v1.17.4/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= -cloud.google.com/go/binaryauthorization v1.7.0/go.mod h1:Zn+S6QqTMn6odcMU1zDZCJxPjU2tZPV1oDl45lWY154= -cloud.google.com/go/binaryauthorization v1.7.1/go.mod h1:GTAyfRWYgcbsP3NJogpV3yeunbUIjx2T9xVeYovtURE= -cloud.google.com/go/binaryauthorization v1.7.2/go.mod h1:kFK5fQtxEp97m92ziy+hbu+uKocka1qRRL8MVJIgjv0= -cloud.google.com/go/binaryauthorization v1.7.3/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= -cloud.google.com/go/certificatemanager v1.7.2/go.mod h1:15SYTDQMd00kdoW0+XY5d9e+JbOPjp24AvF48D8BbcQ= -cloud.google.com/go/certificatemanager v1.7.3/go.mod h1:T/sZYuC30PTag0TLo28VedIRIj1KPGcOQzjWAptHa00= -cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= -cloud.google.com/go/channel v1.17.0/go.mod h1:RpbhJsGi/lXWAUM1eF4IbQGbsfVlg2o8Iiy2/YLfVT0= -cloud.google.com/go/channel v1.17.1/go.mod h1:xqfzcOZAcP4b/hUDH0GkGg1Sd5to6di1HOJn/pi5uBQ= -cloud.google.com/go/channel v1.17.2/go.mod h1:aT2LhnftnyfQceFql5I/mP8mIbiiJS4lWqgXA815zMk= -cloud.google.com/go/channel v1.17.3/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= -cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= -cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= -cloud.google.com/go/cloudbuild v1.14.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= -cloud.google.com/go/cloudbuild v1.14.1/go.mod h1:K7wGc/3zfvmYWOWwYTgF/d/UVJhS4pu+HAy7PL7mCsU= -cloud.google.com/go/cloudbuild v1.14.2/go.mod h1:Bn6RO0mBYk8Vlrt+8NLrru7WXlQ9/RDWz2uo5KG1/sg= -cloud.google.com/go/cloudbuild v1.15.0/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= -cloud.google.com/go/clouddms v1.7.0/go.mod h1:MW1dC6SOtI/tPNCciTsXtsGNEM0i0OccykPvv3hiYeM= -cloud.google.com/go/clouddms v1.7.1/go.mod h1:o4SR8U95+P7gZ/TX+YbJxehOCsM+fe6/brlrFquiszk= -cloud.google.com/go/clouddms v1.7.2/go.mod h1:Rk32TmWmHo64XqDvW7jgkFQet1tUKNVzs7oajtJT3jU= -cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= -cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= -cloud.google.com/go/cloudtasks v1.12.2/go.mod h1:A7nYkjNlW2gUoROg1kvJrQGhJP/38UaWwsnuBDOBVUk= -cloud.google.com/go/cloudtasks v1.12.3/go.mod h1:GPVXhIOSGEaR+3xT4Fp72ScI+HjHffSS4B8+BaBB5Ys= -cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute v1.21.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= -cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= -cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= -cloud.google.com/go/contactcenterinsights v1.11.0/go.mod h1:hutBdImE4XNZ1NV4vbPJKSFOnQruhC5Lj9bZqWMTKiU= -cloud.google.com/go/contactcenterinsights v1.11.1/go.mod h1:FeNP3Kg8iteKM80lMwSk3zZZKVxr+PGnAId6soKuXwE= -cloud.google.com/go/contactcenterinsights v1.11.2/go.mod h1:A9PIR5ov5cRcd28KlDbmmXE8Aay+Gccer2h4wzkYFso= -cloud.google.com/go/contactcenterinsights v1.12.0/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= -cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= -cloud.google.com/go/container v1.26.0/go.mod h1:YJCmRet6+6jnYYRS000T6k0D0xUXQgBSaJ7VwI8FBj4= -cloud.google.com/go/container v1.26.1/go.mod h1:5smONjPRUxeEpDG7bMKWfDL4sauswqEtnBK1/KKpR04= -cloud.google.com/go/container v1.26.2/go.mod h1:YlO84xCt5xupVbLaMY4s3XNE79MUJ+49VmkInr6HvF4= -cloud.google.com/go/container v1.28.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= -cloud.google.com/go/containeranalysis v0.11.0/go.mod h1:4n2e99ZwpGxpNcz+YsFT1dfOHPQFGcAC8FN2M2/ne/U= -cloud.google.com/go/containeranalysis v0.11.1/go.mod h1:rYlUOM7nem1OJMKwE1SadufX0JP3wnXj844EtZAwWLY= -cloud.google.com/go/containeranalysis v0.11.2/go.mod h1:xibioGBC1MD2j4reTyV1xY1/MvKaz+fyM9ENWhmIeP8= -cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= -cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= -cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= -cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= -cloud.google.com/go/datacatalog v1.17.1/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= -cloud.google.com/go/datacatalog v1.18.0/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= -cloud.google.com/go/datacatalog v1.18.1/go.mod h1:TzAWaz+ON1tkNr4MOcak8EBHX7wIRX/gZKM+yTVsv+A= -cloud.google.com/go/datacatalog v1.18.2/go.mod h1:SPVgWW2WEMuWHA+fHodYjmxPiMqcOiWfhc9OD5msigk= -cloud.google.com/go/datacatalog v1.19.0/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= -cloud.google.com/go/dataflow v0.9.2/go.mod h1:vBfdBZ/ejlTaYIGB3zB4T08UshH70vbtZeMD+urnUSo= -cloud.google.com/go/dataflow v0.9.3/go.mod h1:HI4kMVjcHGTs3jTHW/kv3501YW+eloiJSLxkJa/vqFE= -cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= -cloud.google.com/go/dataform v0.8.2/go.mod h1:X9RIqDs6NbGPLR80tnYoPNiO1w0wenKTb8PxxlhTMKM= -cloud.google.com/go/dataform v0.8.3/go.mod h1:8nI/tvv5Fso0drO3pEjtowz58lodx8MVkdV2q0aPlqg= -cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= -cloud.google.com/go/datafusion v1.7.2/go.mod h1:62K2NEC6DRlpNmI43WHMWf9Vg/YvN6QVi8EVwifElI0= -cloud.google.com/go/datafusion v1.7.3/go.mod h1:eoLt1uFXKGBq48jy9LZ+Is8EAVLnmn50lNncLzwYokE= -cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= -cloud.google.com/go/datalabeling v0.8.2/go.mod h1:cyDvGHuJWu9U/cLDA7d8sb9a0tWLEletStu2sTmg3BE= -cloud.google.com/go/datalabeling v0.8.3/go.mod h1:tvPhpGyS/V7lqjmb3V0TaDdGvhzgR1JoW7G2bpi2UTI= -cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= -cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= -cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= -cloud.google.com/go/dataplex v1.9.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= -cloud.google.com/go/dataplex v1.10.1/go.mod h1:1MzmBv8FvjYfc7vDdxhnLFNskikkB+3vl475/XdCDhs= -cloud.google.com/go/dataplex v1.10.2/go.mod h1:xdC8URdTrCrZMW6keY779ZT1cTOfV8KEPNsw+LTRT1Y= -cloud.google.com/go/dataplex v1.11.2/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= -cloud.google.com/go/dataproc/v2 v2.2.0/go.mod h1:lZR7AQtwZPvmINx5J87DSOOpTfof9LVZju6/Qo4lmcY= -cloud.google.com/go/dataproc/v2 v2.2.1/go.mod h1:QdAJLaBjh+l4PVlVZcmrmhGccosY/omC1qwfQ61Zv/o= -cloud.google.com/go/dataproc/v2 v2.2.2/go.mod h1:aocQywVmQVF4i8CL740rNI/ZRpsaaC1Wh2++BJ7HEJ4= -cloud.google.com/go/dataproc/v2 v2.3.0/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= -cloud.google.com/go/dataqna v0.8.2/go.mod h1:KNEqgx8TTmUipnQsScOoDpq/VlXVptUqVMZnt30WAPs= -cloud.google.com/go/dataqna v0.8.3/go.mod h1:wXNBW2uvc9e7Gl5k8adyAMnLush1KVV6lZUhB+rqNu4= -cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= -cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= -cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= -cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= -cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= -cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= -cloud.google.com/go/datastream v1.10.1/go.mod h1:7ngSYwnw95YFyTd5tOGBxHlOZiL+OtpjheqU7t2/s/c= -cloud.google.com/go/datastream v1.10.2/go.mod h1:W42TFgKAs/om6x/CdXX5E4oiAsKlH+e8MTGy81zdYt0= -cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= -cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= -cloud.google.com/go/deploy v1.13.1/go.mod h1:8jeadyLkH9qu9xgO3hVWw8jVr29N1mnW42gRJT8GY6g= -cloud.google.com/go/deploy v1.14.1/go.mod h1:N8S0b+aIHSEeSr5ORVoC0+/mOPUysVt8ae4QkZYolAw= -cloud.google.com/go/deploy v1.15.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= -cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= -cloud.google.com/go/dialogflow v1.43.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= -cloud.google.com/go/dialogflow v1.44.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= -cloud.google.com/go/dialogflow v1.44.1/go.mod h1:n/h+/N2ouKOO+rbe/ZnI186xImpqvCVj2DdsWS/0EAk= -cloud.google.com/go/dialogflow v1.44.2/go.mod h1:QzFYndeJhpVPElnFkUXxdlptx0wPnBWLCBT9BvtC3/c= -cloud.google.com/go/dialogflow v1.44.3/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= -cloud.google.com/go/dlp v1.10.2/go.mod h1:ZbdKIhcnyhILgccwVDzkwqybthh7+MplGC3kZVZsIOQ= -cloud.google.com/go/dlp v1.10.3/go.mod h1:iUaTc/ln8I+QT6Ai5vmuwfw8fqTk2kaz0FvCwhLCom0= -cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= -cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= -cloud.google.com/go/documentai v1.22.1/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= -cloud.google.com/go/documentai v1.23.0/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= -cloud.google.com/go/documentai v1.23.2/go.mod h1:Q/wcRT+qnuXOpjAkvOV4A+IeQl04q2/ReT7SSbytLSo= -cloud.google.com/go/documentai v1.23.4/go.mod h1:4MYAaEMnADPN1LPN5xboDR5QVB6AgsaxgFdJhitlE2Y= -cloud.google.com/go/documentai v1.23.5/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= -cloud.google.com/go/domains v0.9.2/go.mod h1:3YvXGYzZG1Temjbk7EyGCuGGiXHJwVNmwIf+E/cUp5I= -cloud.google.com/go/domains v0.9.3/go.mod h1:29k66YNDLDY9LCFKpGFeh6Nj9r62ZKm5EsUJxAl84KU= -cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= -cloud.google.com/go/edgecontainer v1.1.2/go.mod h1:wQRjIzqxEs9e9wrtle4hQPSR1Y51kqN75dgF7UllZZ4= -cloud.google.com/go/edgecontainer v1.1.3/go.mod h1:Ll2DtIABzEfaxaVSbwj3QHFaOOovlDFiWVDu349jSsA= -cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= -cloud.google.com/go/essentialcontacts v1.6.3/go.mod h1:yiPCD7f2TkP82oJEFXFTou8Jl8L6LBRPeBEkTaO0Ggo= -cloud.google.com/go/essentialcontacts v1.6.4/go.mod h1:iju5Vy3d9tJUg0PYMd1nHhjV7xoCXaOAVabrwLaPBEM= -cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= -cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= -cloud.google.com/go/eventarc v1.13.1/go.mod h1:EqBxmGHFrruIara4FUQ3RHlgfCn7yo1HYsu2Hpt/C3Y= -cloud.google.com/go/eventarc v1.13.2/go.mod h1:X9A80ShVu19fb4e5sc/OLV7mpFUKZMwfJFeeWhcIObM= -cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= -cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= -cloud.google.com/go/filestore v1.7.2/go.mod h1:TYOlyJs25f/omgj+vY7/tIG/E7BX369triSPzE4LdgE= -cloud.google.com/go/filestore v1.7.3/go.mod h1:Qp8WaEERR3cSkxToxFPHh/b8AACkSut+4qlCjAmKTV0= -cloud.google.com/go/filestore v1.8.0/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= -cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= -cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= -cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= -cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= -cloud.google.com/go/functions v1.15.2/go.mod h1:CHAjtcR6OU4XF2HuiVeriEdELNcnvRZSk1Q8RMqy4lE= -cloud.google.com/go/functions v1.15.3/go.mod h1:r/AMHwBheapkkySEhiZYLDBwVJCdlRwsm4ieJu35/Ug= -cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= -cloud.google.com/go/gkebackup v1.3.1/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= -cloud.google.com/go/gkebackup v1.3.2/go.mod h1:OMZbXzEJloyXMC7gqdSB+EOEQ1AKcpGYvO3s1ec5ixk= -cloud.google.com/go/gkebackup v1.3.3/go.mod h1:eMk7/wVV5P22KBakhQnJxWSVftL1p4VBFLpv0kIft7I= -cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= -cloud.google.com/go/gkeconnect v0.8.2/go.mod h1:6nAVhwchBJYgQCXD2pHBFQNiJNyAd/wyxljpaa6ZPrY= -cloud.google.com/go/gkeconnect v0.8.3/go.mod h1:i9GDTrfzBSUZGCe98qSu1B8YB8qfapT57PenIb820Jo= -cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= -cloud.google.com/go/gkehub v0.14.2/go.mod h1:iyjYH23XzAxSdhrbmfoQdePnlMj2EWcvnR+tHdBQsCY= -cloud.google.com/go/gkehub v0.14.3/go.mod h1:jAl6WafkHHW18qgq7kqcrXYzN08hXeK/Va3utN8VKg8= -cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= -cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= -cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= -cloud.google.com/go/gkemulticloud v1.0.1/go.mod h1:AcrGoin6VLKT/fwZEYuqvVominLriQBCKmbjtnbMjG8= -cloud.google.com/go/gkemulticloud v1.0.2/go.mod h1:+ee5VXxKb3H1l4LZAcgWB/rvI16VTNTrInWxDjAGsGo= -cloud.google.com/go/gkemulticloud v1.0.3/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= -cloud.google.com/go/gsuiteaddons v1.6.2/go.mod h1:K65m9XSgs8hTF3X9nNTPi8IQueljSdYo9F+Mi+s4MyU= -cloud.google.com/go/gsuiteaddons v1.6.3/go.mod h1:sCFJkZoMrLZT3JTb8uJqgKPNshH2tfXeCwTFRebTq48= -cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= -cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= -cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= -cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= -cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= -cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= -cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= -cloud.google.com/go/iap v1.9.0/go.mod h1:01OFxd1R+NFrg78S+hoPV5PxEzv22HXaNqUUlmNHFuY= -cloud.google.com/go/iap v1.9.1/go.mod h1:SIAkY7cGMLohLSdBR25BuIxO+I4fXJiL06IBL7cy/5Q= -cloud.google.com/go/iap v1.9.2/go.mod h1:GwDTOs047PPSnwRD0Us5FKf4WDRcVvHg1q9WVkKBhdI= -cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= -cloud.google.com/go/ids v1.4.2/go.mod h1:3vw8DX6YddRu9BncxuzMyWn0g8+ooUjI2gslJ7FH3vk= -cloud.google.com/go/ids v1.4.3/go.mod h1:9CXPqI3GedjmkjbMWCUhMZ2P2N7TUMzAkVXYEH2orYU= -cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= -cloud.google.com/go/iot v1.7.2/go.mod h1:q+0P5zr1wRFpw7/MOgDXrG/HVA+l+cSwdObffkrpnSg= -cloud.google.com/go/iot v1.7.3/go.mod h1:t8itFchkol4VgNbHnIq9lXoOOtHNR3uAACQMYbN9N4I= -cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= -cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= -cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= -cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= -cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= -cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUEhbT/w= -cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ= -cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= -cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= -cloud.google.com/go/language v1.11.0/go.mod h1:uDx+pFDdAKTY8ehpWbiXyQdz8tDSYLJbQcXsCkjYyvQ= -cloud.google.com/go/language v1.11.1/go.mod h1:Xyid9MG9WOX3utvDbpX7j3tXDmmDooMyMDqgUVpH17U= -cloud.google.com/go/language v1.12.1/go.mod h1:zQhalE2QlQIxbKIZt54IASBzmZpN/aDASea5zl1l+J4= -cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= -cloud.google.com/go/lifesciences v0.9.2/go.mod h1:QHEOO4tDzcSAzeJg7s2qwnLM2ji8IRpQl4p6m5Z9yTA= -cloud.google.com/go/lifesciences v0.9.3/go.mod h1:gNGBOJV80IWZdkd+xz4GQj4mbqaz737SCLHn2aRhQKM= -cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= -cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= -cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= -cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= -cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y= -cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= -cloud.google.com/go/managedidentities v1.6.2/go.mod h1:5c2VG66eCa0WIq6IylRk3TBW83l161zkFvCj28X7jn8= -cloud.google.com/go/managedidentities v1.6.3/go.mod h1:tewiat9WLyFN0Fi7q1fDD5+0N4VUoL0SCX0OTCthZq4= -cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= -cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= -cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= -cloud.google.com/go/maps v1.4.1/go.mod h1:BxSa0BnW1g2U2gNdbq5zikLlHUuHW0GFWh7sgML2kIY= -cloud.google.com/go/maps v1.5.1/go.mod h1:NPMZw1LJwQZYCfz4y+EIw+SI+24A4bpdFJqdKVr0lt4= -cloud.google.com/go/maps v1.6.1/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= -cloud.google.com/go/mediatranslation v0.8.2/go.mod h1:c9pUaDRLkgHRx3irYE5ZC8tfXGrMYwNZdmDqKMSfFp8= -cloud.google.com/go/mediatranslation v0.8.3/go.mod h1:F9OnXTy336rteOEywtY7FOqCk+J43o2RF638hkOQl4Y= -cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= -cloud.google.com/go/memcache v1.10.2/go.mod h1:f9ZzJHLBrmd4BkguIAa/l/Vle6uTHzHokdnzSWOdQ6A= -cloud.google.com/go/memcache v1.10.3/go.mod h1:6z89A41MT2DVAW0P4iIRdu5cmRTsbsFn4cyiIx8gbwo= -cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= -cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= -cloud.google.com/go/metastore v1.13.0/go.mod h1:URDhpG6XLeh5K+Glq0NOt74OfrPKTwS62gEPZzb5SOk= -cloud.google.com/go/metastore v1.13.1/go.mod h1:IbF62JLxuZmhItCppcIfzBBfUFq0DIB9HPDoLgWrVOU= -cloud.google.com/go/metastore v1.13.2/go.mod h1:KS59dD+unBji/kFebVp8XU/quNSyo8b6N6tPGspKszA= -cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= -cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY= -cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4= -cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc= -cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= -cloud.google.com/go/networkconnectivity v1.13.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= -cloud.google.com/go/networkconnectivity v1.14.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= -cloud.google.com/go/networkconnectivity v1.14.1/go.mod h1:LyGPXR742uQcDxZ/wv4EI0Vu5N6NKJ77ZYVnDe69Zug= -cloud.google.com/go/networkconnectivity v1.14.2/go.mod h1:5UFlwIisZylSkGG1AdwK/WZUaoz12PKu6wODwIbFzJo= -cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= -cloud.google.com/go/networkmanagement v1.9.0/go.mod h1:UTUaEU9YwbCAhhz3jEOHr+2/K/MrBk2XxOLS89LQzFw= -cloud.google.com/go/networkmanagement v1.9.1/go.mod h1:CCSYgrQQvW73EJawO2QamemYcOb57LvrDdDU51F0mcI= -cloud.google.com/go/networkmanagement v1.9.2/go.mod h1:iDGvGzAoYRghhp4j2Cji7sF899GnfGQcQRQwgVOWnDw= -cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= -cloud.google.com/go/networksecurity v0.9.2/go.mod h1:jG0SeAttWzPMUILEHDUvFYdQTl8L/E/KC8iZDj85lEI= -cloud.google.com/go/networksecurity v0.9.3/go.mod h1:l+C0ynM6P+KV9YjOnx+kk5IZqMSLccdBqW6GUoF4p/0= -cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= -cloud.google.com/go/notebooks v1.10.0/go.mod h1:SOPYMZnttHxqot0SGSFSkRrwE29eqnKPBJFqgWmiK2k= -cloud.google.com/go/notebooks v1.10.1/go.mod h1:5PdJc2SgAybE76kFQCWrTfJolCOUQXF97e+gteUUA6A= -cloud.google.com/go/notebooks v1.11.1/go.mod h1:V2Zkv8wX9kDCGRJqYoI+bQAaoVeE5kSiz4yYHd2yJwQ= -cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= -cloud.google.com/go/optimization v1.5.0/go.mod h1:evo1OvTxeBRBu6ydPlrIRizKY/LJKo/drDMMRKqGEUU= -cloud.google.com/go/optimization v1.5.1/go.mod h1:NC0gnUD5MWVAF7XLdoYVPmYYVth93Q6BUzqAq3ZwtV8= -cloud.google.com/go/optimization v1.6.1/go.mod h1:hH2RYPTTM9e9zOiTaYPTiGPcGdNZVnBSBxjIAJzUkqo= -cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= -cloud.google.com/go/orchestration v1.8.2/go.mod h1:T1cP+6WyTmh6LSZzeUhvGf0uZVmJyTx7t8z7Vg87+A0= -cloud.google.com/go/orchestration v1.8.3/go.mod h1:xhgWAYqlbYjlz2ftbFghdyqENYW+JXuhBx9KsjMoGHs= -cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= -cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= -cloud.google.com/go/orgpolicy v1.11.2/go.mod h1:biRDpNwfyytYnmCRWZWxrKF22Nkz9eNVj9zyaBdpm1o= -cloud.google.com/go/orgpolicy v1.11.3/go.mod h1:oKAtJ/gkMjum5icv2aujkP4CxROxPXsBbYGCDbPO8MM= -cloud.google.com/go/orgpolicy v1.11.4/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= -cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= -cloud.google.com/go/osconfig v1.12.2/go.mod h1:eh9GPaMZpI6mEJEuhEjUJmaxvQ3gav+fFEJon1Y8Iw0= -cloud.google.com/go/osconfig v1.12.3/go.mod h1:L/fPS8LL6bEYUi1au832WtMnPeQNT94Zo3FwwV1/xGM= -cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= -cloud.google.com/go/oslogin v1.11.0/go.mod h1:8GMTJs4X2nOAUVJiPGqIWVcDaF0eniEto3xlOxaboXE= -cloud.google.com/go/oslogin v1.11.1/go.mod h1:OhD2icArCVNUxKqtK0mcSmKL7lgr0LVlQz+v9s1ujTg= -cloud.google.com/go/oslogin v1.12.1/go.mod h1:VfwTeFJGbnakxAY236eN8fsnglLiVXndlbcNomY4iZU= -cloud.google.com/go/oslogin v1.12.2/go.mod h1:CQ3V8Jvw4Qo4WRhNPF0o+HAM4DiLuE27Ul9CX9g2QdY= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= -cloud.google.com/go/phishingprotection v0.8.2/go.mod h1:LhJ91uyVHEYKSKcMGhOa14zMMWfbEdxG032oT6ECbC8= -cloud.google.com/go/phishingprotection v0.8.3/go.mod h1:3B01yO7T2Ra/TMojifn8EoGd4G9jts/6cIO0DgDY9J8= -cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= -cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= -cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= -cloud.google.com/go/policytroubleshooter v1.9.0/go.mod h1:+E2Lga7TycpeSTj2FsH4oXxTnrbHJGRlKhVZBLGgU64= -cloud.google.com/go/policytroubleshooter v1.9.1/go.mod h1:MYI8i0bCrL8cW+VHN1PoiBTyNZTstCg2WUw2eVC4c4U= -cloud.google.com/go/policytroubleshooter v1.10.1/go.mod h1:5C0rhT3TDZVxAu8813bwmTvd57Phbl8mr9F4ipOsxEs= -cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= -cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= -cloud.google.com/go/privatecatalog v0.9.2/go.mod h1:RMA4ATa8IXfzvjrhhK8J6H4wwcztab+oZph3c6WmtFc= -cloud.google.com/go/privatecatalog v0.9.3/go.mod h1:K5pn2GrVmOPjXz3T26mzwXLcKivfIJ9R5N79AFCF9UE= -cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= -cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= -cloud.google.com/go/recaptchaenterprise/v2 v2.8.0/go.mod h1:QuE8EdU9dEnesG8/kG3XuJyNsjEqMlMzg3v3scCJ46c= -cloud.google.com/go/recaptchaenterprise/v2 v2.8.1/go.mod h1:JZYZJOeZjgSSTGP4uz7NlQ4/d1w5hGmksVgM0lbEij0= -cloud.google.com/go/recaptchaenterprise/v2 v2.8.2/go.mod h1:kpaDBOpkwD4G0GVMzG1W6Doy1tFFC97XAV3xy+Rd/pw= -cloud.google.com/go/recaptchaenterprise/v2 v2.8.4/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= -cloud.google.com/go/recommendationengine v0.8.2/go.mod h1:QIybYHPK58qir9CV2ix/re/M//Ty10OxjnnhWdaKS1Y= -cloud.google.com/go/recommendationengine v0.8.3/go.mod h1:m3b0RZV02BnODE9FeSvGv1qibFo8g0OnmB/RMwYy4V8= -cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= -cloud.google.com/go/recommender v1.11.0/go.mod h1:kPiRQhPyTJ9kyXPCG6u/dlPLbYfFlkwHNRwdzPVAoII= -cloud.google.com/go/recommender v1.11.1/go.mod h1:sGwFFAyI57v2Hc5LbIj+lTwXipGu9NW015rkaEM5B18= -cloud.google.com/go/recommender v1.11.2/go.mod h1:AeoJuzOvFR/emIcXdVFkspVXVTYpliRCmKNYDnyBv6Y= -cloud.google.com/go/recommender v1.11.3/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= -cloud.google.com/go/redis v1.13.2/go.mod h1:0Hg7pCMXS9uz02q+LoEVl5dNHUkIQv+C/3L76fandSA= -cloud.google.com/go/redis v1.13.3/go.mod h1:vbUpCKUAZSYzFcWKmICnYgRAhTFg9r+djWqFxDYXi4U= -cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= -cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= -cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= -cloud.google.com/go/resourcemanager v1.9.2/go.mod h1:OujkBg1UZg5lX2yIyMo5Vz9O5hf7XQOSV7WxqxxMtQE= -cloud.google.com/go/resourcemanager v1.9.3/go.mod h1:IqrY+g0ZgLsihcfcmqSe+RKp1hzjXwG904B92AwBz6U= -cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= -cloud.google.com/go/resourcesettings v1.6.2/go.mod h1:mJIEDd9MobzunWMeniaMp6tzg4I2GvD3TTmPkc8vBXk= -cloud.google.com/go/resourcesettings v1.6.3/go.mod h1:pno5D+7oDYkMWZ5BpPsb4SO0ewg3IXcmmrUZaMJrFic= -cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= -cloud.google.com/go/retail v1.14.2/go.mod h1:W7rrNRChAEChX336QF7bnMxbsjugcOCPU44i5kbLiL8= -cloud.google.com/go/retail v1.14.3/go.mod h1:Omz2akDHeSlfCq8ArPKiBxlnRpKEBjUH386JYFLUvXo= -cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= -cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= -cloud.google.com/go/run v1.3.0/go.mod h1:S/osX/4jIPZGg+ssuqh6GNgg7syixKe3YnprwehzHKU= -cloud.google.com/go/run v1.3.1/go.mod h1:cymddtZOzdwLIAsmS6s+Asl4JoXIDm/K1cpZTxV4Q5s= -cloud.google.com/go/run v1.3.2/go.mod h1:SIhmqArbjdU/D9M6JoHaAqnAMKLFtXaVdNeq04NjnVE= -cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= -cloud.google.com/go/scheduler v1.10.2/go.mod h1:O3jX6HRH5eKCA3FutMw375XHZJudNIKVonSCHv7ropY= -cloud.google.com/go/scheduler v1.10.3/go.mod h1:8ANskEM33+sIbpJ+R4xRfw/jzOG+ZFE8WVLy7/yGvbc= -cloud.google.com/go/scheduler v1.10.5/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= -cloud.google.com/go/secretmanager v1.11.2/go.mod h1:MQm4t3deoSub7+WNwiC4/tRYgDBHJgJPvswqQVB1Vss= -cloud.google.com/go/secretmanager v1.11.3/go.mod h1:0bA2o6FabmShrEy328i67aV+65XoUFFSmVeLBn/51jI= -cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= -cloud.google.com/go/security v1.15.2/go.mod h1:2GVE/v1oixIRHDaClVbHuPcZwAqFM28mXuAKCfMgYIg= -cloud.google.com/go/security v1.15.3/go.mod h1:gQ/7Q2JYUZZgOzqKtw9McShH+MjNvtDpL40J1cT+vBs= -cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= -cloud.google.com/go/securitycenter v1.23.1/go.mod h1:w2HV3Mv/yKhbXKwOCu2i8bCuLtNP1IMHuiYQn4HJq5s= -cloud.google.com/go/securitycenter v1.24.1/go.mod h1:3h9IdjjHhVMXdQnmqzVnM7b0wMn/1O/U20eWVpMpZjI= -cloud.google.com/go/securitycenter v1.24.2/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= -cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= -cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= -cloud.google.com/go/servicedirectory v1.11.1/go.mod h1:tJywXimEWzNzw9FvtNjsQxxJ3/41jseeILgwU/QLrGI= -cloud.google.com/go/servicedirectory v1.11.2/go.mod h1:KD9hCLhncWRV5jJphwIpugKwM5bn1x0GyVVD4NO8mGg= -cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= -cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= -cloud.google.com/go/shell v1.7.2/go.mod h1:KqRPKwBV0UyLickMn0+BY1qIyE98kKyI216sH/TuHmc= -cloud.google.com/go/shell v1.7.3/go.mod h1:cTTEz/JdaBsQAeTQ3B6HHldZudFoYBOqjteev07FbIc= -cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= -cloud.google.com/go/spanner v1.49.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= -cloud.google.com/go/spanner v1.50.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= -cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0= -cloud.google.com/go/spanner v1.53.0/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= -cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= -cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= -cloud.google.com/go/speech v1.19.1/go.mod h1:WcuaWz/3hOlzPFOVo9DUsblMIHwxP589y6ZMtaG+iAA= -cloud.google.com/go/speech v1.19.2/go.mod h1:2OYFfj+Ch5LWjsaSINuCZsre/789zlcCI3SY4oAi2oI= -cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= -cloud.google.com/go/storagetransfer v1.10.1/go.mod h1:rS7Sy0BtPviWYTTJVWCSV4QrbBitgPeuK4/FKa4IdLs= -cloud.google.com/go/storagetransfer v1.10.2/go.mod h1:meIhYQup5rg9juQJdyppnA/WLQCOguxtk1pr3/vBWzA= -cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= -cloud.google.com/go/talent v1.6.3/go.mod h1:xoDO97Qd4AK43rGjJvyBHMskiEf3KulgYzcH6YWOVoo= -cloud.google.com/go/talent v1.6.4/go.mod h1:QsWvi5eKeh6gG2DlBkpMaFYZYrYUnIpo34f6/V5QykY= -cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= -cloud.google.com/go/texttospeech v1.7.2/go.mod h1:VYPT6aTOEl3herQjFHYErTlSZJ4vB00Q2ZTmuVgluD4= -cloud.google.com/go/texttospeech v1.7.3/go.mod h1:Av/zpkcgWfXlDLRYob17lqMstGZ3GqlvJXqKMp2u8so= -cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= -cloud.google.com/go/tpu v1.6.2/go.mod h1:NXh3NDwt71TsPZdtGWgAG5ThDfGd32X1mJ2cMaRlVgU= -cloud.google.com/go/tpu v1.6.3/go.mod h1:lxiueqfVMlSToZY1151IaZqp89ELPSrk+3HIQ5HRkbY= -cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= -cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA= -cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY= -cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= -cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= -cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= -cloud.google.com/go/translate v1.9.0/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= -cloud.google.com/go/translate v1.9.1/go.mod h1:TWIgDZknq2+JD4iRcojgeDtqGEp154HN/uL6hMvylS8= -cloud.google.com/go/translate v1.9.2/go.mod h1:E3Tc6rUTsQkVrXW6avbUhKJSr7ZE3j7zNmqzXKHqRrY= -cloud.google.com/go/translate v1.9.3/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= -cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= -cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= -cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= -cloud.google.com/go/video v1.20.0/go.mod h1:U3G3FTnsvAGqglq9LxgqzOiBc/Nt8zis8S+850N2DUM= -cloud.google.com/go/video v1.20.1/go.mod h1:3gJS+iDprnj8SY6pe0SwLeC5BUW80NjhwX7INWEuWGU= -cloud.google.com/go/video v1.20.2/go.mod h1:lrixr5JeKNThsgfM9gqtwb6Okuqzfo4VrY2xynaViTA= -cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= -cloud.google.com/go/videointelligence v1.11.2/go.mod h1:ocfIGYtIVmIcWk1DsSGOoDiXca4vaZQII1C85qtoplc= -cloud.google.com/go/videointelligence v1.11.3/go.mod h1:tf0NUaGTjU1iS2KEkGWvO5hRHeCkFK3nPo0/cOZhZAo= -cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= -cloud.google.com/go/vision/v2 v2.7.3/go.mod h1:V0IcLCY7W+hpMKXK1JYE0LV5llEqVmj+UJChjvA1WsM= -cloud.google.com/go/vision/v2 v2.7.4/go.mod h1:ynDKnsDN/0RtqkKxQZ2iatv3Dm9O+HfRb5djl7l4Vvw= -cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= -cloud.google.com/go/vmmigration v1.7.2/go.mod h1:iA2hVj22sm2LLYXGPT1pB63mXHhrH1m/ruux9TwWLd8= -cloud.google.com/go/vmmigration v1.7.3/go.mod h1:ZCQC7cENwmSWlwyTrZcWivchn78YnFniEQYRWQ65tBo= -cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= -cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= -cloud.google.com/go/vmwareengine v1.0.1/go.mod h1:aT3Xsm5sNx0QShk1Jc1B8OddrxAScYLwzVoaiXfdzzk= -cloud.google.com/go/vmwareengine v1.0.2/go.mod h1:xMSNjIk8/itYrz1JA8nV3Ajg4L4n3N+ugP8JKzk3OaA= -cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= -cloud.google.com/go/vpcaccess v1.7.2/go.mod h1:mmg/MnRHv+3e8FJUjeSibVFvQF1cCy2MsFaFqxeY1HU= -cloud.google.com/go/vpcaccess v1.7.3/go.mod h1:YX4skyfW3NC8vI3Fk+EegJnlYFatA+dXK4o236EUCUc= -cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= -cloud.google.com/go/webrisk v1.9.2/go.mod h1:pY9kfDgAqxUpDBOrG4w8deLfhvJmejKB0qd/5uQIPBc= -cloud.google.com/go/webrisk v1.9.3/go.mod h1:RUYXe9X/wBDXhVilss7EDLW9ZNa06aowPuinUOPCXH8= -cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= -cloud.google.com/go/websecurityscanner v1.6.2/go.mod h1:7YgjuU5tun7Eg2kpKgGnDuEOXWIrh8x8lWrJT4zfmas= -cloud.google.com/go/websecurityscanner v1.6.3/go.mod h1:x9XANObUFR+83Cya3g/B9M/yoHVqzxPnFtgF8yYGAXw= -cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= -cloud.google.com/go/workflows v1.12.0/go.mod h1:PYhSk2b6DhZ508tj8HXKaBh+OFe+xdl0dHF/tJdzPQM= -cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCwLM1P1tBRGHM= -cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= -cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= -github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= -github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= -github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= -github.com/aws/aws-lambda-go v1.41.0 h1:l/5fyVb6Ud9uYd411xdHZzSf2n86TakxzpvIoz7l+3Y= -github.com/aws/aws-lambda-go v1.41.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM= -github.com/aws/aws-sdk-go v1.44.287 h1:CUq2/h0gZ2LOCF61AgQSEMPMfas4gTiQfHBO88gGET0= -github.com/aws/aws-sdk-go v1.44.287/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/aws/aws-lambda-go v1.52.0 h1:5NfiRaVl9FafUIt2Ld/Bv22kT371mfAI+l1Hd+tV7ZE= +github.com/aws/aws-lambda-go v1.52.0/go.mod h1:dpMpZgvWx5vuQJfBt0zqBha60q7Dd7RfgJv23DymV8A= +github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= +github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= -github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= -github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= -github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= -github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= +github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/logicmonitor/lm-data-sdk-go v1.3.0 h1:Obrexk35IKupFQezngkesR/kMfHQdAEUR1zYbJrOrzg= -github.com/logicmonitor/lm-data-sdk-go v1.3.0/go.mod h1:nIHr4uOPfg6AM7mG1rewg3L4O3rfge34o7UYB7joBM4= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= -github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/logicmonitor/lm-data-sdk-go v1.3.4 h1:ucZVZBBfFeF4VnoksRI6zYfPAdGcaWMUzb+fuUcFoCo= +github.com/logicmonitor/lm-data-sdk-go v1.3.4/go.mod h1:Hp/eMI2wMmpUX0MP/ZIpx+4MUpwFmkPRkeEAXb+W+vk= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0= github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector/pdata v1.0.0 h1:ECP2jnLztewsHmL1opL8BeMtWVc7/oSlKNhfY9jP8ec= -go.opentelemetry.io/collector/pdata v1.0.0/go.mod h1:TsDFgs4JLNG7t6x9D8kGswXUz4mme+MyNChHx8zSF6k= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/collector/featuregate v1.51.0 h1:dxJuv/3T84dhNKp7fz5+8srHz1dhquGzDpLW4OZTFBw= +go.opentelemetry.io/collector/featuregate v1.51.0/go.mod h1:/1bclXgP91pISaEeNulRxzzmzMTm4I5Xih2SnI4HRSo= +go.opentelemetry.io/collector/internal/testutil v0.145.0 h1:H/KL0GH3kGqSMKxZvnQ0B0CulfO9xdTg4DZf28uV7fY= +go.opentelemetry.io/collector/internal/testutil v0.145.0/go.mod h1:YAD9EAkwh/l5asZNbEBEUCqEjoL1OKMjAMoPjPqH76c= +go.opentelemetry.io/collector/pdata v1.51.0 h1:DnDhSEuDXNdzGRB7f6oOfXpbDApwBX3tY+3K69oUrDA= +go.opentelemetry.io/collector/pdata v1.51.0/go.mod h1:GoX1bjKDR++mgFKdT7Hynv9+mdgQ1DDXbjs7/Ww209Q= +go.opentelemetry.io/proto/slim/otlp v1.9.0 h1:fPVMv8tP3TrsqlkH1HWYUpbCY9cAIemx184VGkS6vlE= +go.opentelemetry.io/proto/slim/otlp v1.9.0/go.mod h1:xXdeJJ90Gqyll+orzUkY4bOd2HECo5JofeoLpymVqdI= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0 h1:o13nadWDNkH/quoDomDUClnQBpdQQ2Qqv0lQBjIXjE8= +go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.2.0/go.mod h1:Gyb6Xe7FTi/6xBHwMmngGoHqL0w29Y4eW8TGFzpefGA= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.2.0 h1:EiUYvtwu6PMrMHVjcPfnsG3v+ajPkbUeH+IL93+QYyk= +go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.2.0/go.mod h1:mUUHKFiN2SST3AhJ8XhJxEoeVW12oqfXog0Bo8W3Ec4= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= -golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= -google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= -google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= -google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= -google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk= -google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= -google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= -google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= -google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= -google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= -google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= -google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= -google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= -google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= -google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= -google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= -google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg= -google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= -google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= -google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= -google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= -google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= -google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= -google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230920183334-c177e329c48b/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= -google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= -google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= -google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= -modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= -modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= -modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= -modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= -modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= -modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= -modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= -modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= -modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= -modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/code/parse.go b/code/parse.go index e543da7..fa08fdb 100644 --- a/code/parse.go +++ b/code/parse.go @@ -4,7 +4,7 @@ import ( "compress/gzip" "encoding/json" "fmt" - "io/ioutil" + "io" "log" "net/http" "regexp" @@ -263,7 +263,7 @@ func decompressGzip(content string) string { defer ioReaderContent.Close() - strContent, _ := ioutil.ReadAll(ioReaderContent) + strContent, _ := io.ReadAll(ioReaderContent) return string(strContent) } @@ -302,20 +302,20 @@ func extractMetadataForCloudTrail(message string) map[string]interface{} { regionRegexArray := regexCompile(awsRegionRegex).FindStringSubmatch(message) awsRegion := regexCompile(awsRegionRegex).SubexpIndex("awsRegion") if len(regionRegexArray) > 0 && awsRegion != 0 { - metadataMap["region"] = fmt.Sprintf(regionRegexArray[awsRegion]) + metadataMap["region"] = fmt.Sprintf("%s",regionRegexArray[awsRegion]) } } else if strings.TrimSpace(str) == "arn" { arnRegexArray := regexCompile(awsARNRegex).FindStringSubmatch(message) awsARN := regexCompile(awsARNRegex).SubexpIndex("arn") if len(arnRegexArray) > 0 && awsARN != 0 { - metadataMap["arn"] = fmt.Sprintf(arnRegexArray[awsARN]) + metadataMap["arn"] = fmt.Sprintf("%s",arnRegexArray[awsARN]) } } } eventSourceRegexArray := regexCompile(awsEventSourceRegex).FindStringSubmatch(message) eventSourceRegex := regexCompile(awsEventSourceRegex).SubexpIndex("eventSource") if len(eventSourceRegexArray) > 0 && eventSourceRegex != 0 { - metadataMap["_type"] = fmt.Sprintf(eventSourceRegexArray[eventSourceRegex]) + metadataMap["_type"] = fmt.Sprintf("%s",eventSourceRegexArray[eventSourceRegex]) } addCustomMetadataFromRawJson(metadataMap, message, defaultJsonMetadataKeys) if strings.TrimSpace(lmTenantID) != "" { @@ -418,7 +418,7 @@ func processResourceMapping(message string, accountId string) map[string]interfa resoureIDMap[resourceProperty] = fmt.Sprintf("arn:aws:s3:::%s", s3RegexArray[s3Bucket]) accountLevelLog = false } else if s3RegexArray[s3Arn] != "" { - resoureIDMap[resourceProperty] = fmt.Sprintf(s3RegexArray[s3Arn]) + resoureIDMap[resourceProperty] = fmt.Sprintf("%s",s3RegexArray[s3Arn]) accountLevelLog = false } } @@ -561,9 +561,9 @@ func parseCloudWatchEvents(request events.CloudWatchEvent) []model.LogInput { cloudwatchResourceRegexArray := regexCompile(cloudwatchResourceRegex).FindStringSubmatch(event) cloudwatchResource := regexCompile(cloudwatchResourceRegex).SubexpIndex("resources") if len(cloudwatchResourceRegexArray) > 0 && cloudwatchResource != 0 { - resoureIDMap["system.aws.arn"] = fmt.Sprintf(cloudwatchResourceRegexArray[cloudwatchResource]) + resoureIDMap["system.aws.arn"] = fmt.Sprintf("%s",cloudwatchResourceRegexArray[cloudwatchResource]) } - metadataMap = extractMetadata(request.Region, fmt.Sprintf(cloudwatchResourceRegexArray[cloudwatchResource]), request.Source) + metadataMap = extractMetadata(request.Region, fmt.Sprintf("%s",cloudwatchResourceRegexArray[cloudwatchResource]), request.Source) } From a5d26ca7cc52f618c1acb35da242359c64800eb1 Mon Sep 17 00:00:00 2001 From: Prakalp Jain Date: Mon, 23 Feb 2026 14:28:25 +0530 Subject: [PATCH 098/102] version update from 1.8.0 to 1.9.0 - updated golang version --- cloudformation.yaml | 2 +- code/version.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index 999b77f..8a4c292 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,7 +4,7 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.8.0 + Version: 1.9.0 RegionToLayerArnMap: us-east-1: "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" diff --git a/code/version.properties b/code/version.properties index 41864f0..6a5f51e 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.8.0 +version=1.9.0 From 338d9f19f05143b2e2be944aeb18691a88402d84 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Fri, 10 Apr 2026 13:12:58 +0530 Subject: [PATCH 099/102] DEVTS-23962: DEVTS-23962-need-to-add-ap-southeast-6-region-in-logs-forwarder-lambda --- cloudformation.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cloudformation.yaml b/cloudformation.yaml index 8a4c292..d75f8fb 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -52,6 +52,8 @@ Mappings: "LayerArn": "arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" ap-southeast-3: "LayerArn": "arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + ap-southeast-6: + "LayerArn": "arn:aws:lambda:ap-southeast-6:995508174458:layer:AWS-Parameters-and-Secrets-Lambda-Extension:42" ap-south-1: "LayerArn": "arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" sa-east-1: From 24893b388523b0a4beef80dcafb52ee221c67757 Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Mon, 13 Apr 2026 14:42:26 +0530 Subject: [PATCH 100/102] DEVTS-23962: DEVTS-23962-need-to-add-ap-southeast-6-region-in-logs-forwarder-lambda --- cloudformation.yaml | 62 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/cloudformation.yaml b/cloudformation.yaml index d75f8fb..f449397 100644 --- a/cloudformation.yaml +++ b/cloudformation.yaml @@ -4,70 +4,70 @@ Description: Pushes logs from AWS to LogicMonitor logs endpoint. Mappings: Constants: LMForwarder: - Version: 1.9.0 + Version: 1.10.0 RegionToLayerArnMap: us-east-1: - "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61" us-east-2: - "LayerArn": "arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:67" eu-west-1: - "LayerArn": "arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:63" eu-west-2: - "LayerArn": "arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:59" eu-west-3: - "LayerArn": "arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" us-west-2: - "LayerArn": "arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61" us-west-1: - "LayerArn": "arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:59" ca-central-1: - "LayerArn": "arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:65" eu-central-1: - "LayerArn": "arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61" eu-central-2: - "LayerArn": "arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1" + "LayerArn": "arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:42" eu-north-1: - "LayerArn": "arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" eu-south-1: - "LayerArn": "arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" eu-south-2: - "LayerArn": "arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1" + "LayerArn": "arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:54" cn-north-1: - "LayerArn": "arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:64" cn-northwest-1: - "LayerArn": "arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61" ap-east-1: - "LayerArn": "arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:60" ap-south-2: - "LayerArn": "arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1" + "LayerArn": "arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:55" ap-northeast-1: - "LayerArn": "arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:60" ap-northeast-3: - "LayerArn": "arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" ap-northeast-2: - "LayerArn": "arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:59" ap-southeast-1: - "LayerArn": "arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61" ap-southeast-2: - "LayerArn": "arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:63" ap-southeast-3: - "LayerArn": "arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" ap-southeast-6: "LayerArn": "arn:aws:lambda:ap-southeast-6:995508174458:layer:AWS-Parameters-and-Secrets-Lambda-Extension:42" ap-south-1: - "LayerArn": "arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" sa-east-1: - "LayerArn": "arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61" af-south-1: - "LayerArn": "arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:60" me-central-1: - "LayerArn": "arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" me-south-1: - "LayerArn": "arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" us-gov-east-1: - "LayerArn": "arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" us-gov-west-1: - "LayerArn": "arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:4" + "LayerArn": "arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58" Parameters: LMCompanyName: Type: String From f2339b3de584e729bbbb69c98195df6672e7710b Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Tue, 14 Apr 2026 15:31:03 +0530 Subject: [PATCH 101/102] DEVTS-23962: DEVTS-23962-need-to-add-ap-southeast-6-region-in-logs-forwarder-lambda --- code/version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/version.properties b/code/version.properties index 6a5f51e..7931247 100644 --- a/code/version.properties +++ b/code/version.properties @@ -1 +1 @@ -version=1.9.0 +version=1.10.0 From acbce18a63965341fbfeba9472b7a0b899cf0caf Mon Sep 17 00:00:00 2001 From: Vishal Charpe Date: Thu, 28 May 2026 21:45:52 +0530 Subject: [PATCH 102/102] merge-stash: --- .github/workflows/build.yml | 28 ----------------- .github/workflows/production-release.yml | 38 ---------------------- .github/workflows/staging-master.yml | 40 ------------------------ 3 files changed, 106 deletions(-) delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/production-release.yml delete mode 100644 .github/workflows/staging-master.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index d2eaa45..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Go - -on: - pull_request: - branches: [ master ] - -jobs: - - build: - name: Build - runs-on: ubuntu-latest - steps: - - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - - name: Dockerfile build & test - run: docker build -t lambda . - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-west-1 - - - name: Validate cloudformtion template - run: aws cloudformation validate-template --template-body file://cloudformation.yaml diff --git a/.github/workflows/production-release.yml b/.github/workflows/production-release.yml deleted file mode 100644 index 679ce45..0000000 --- a/.github/workflows/production-release.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Go - -on: - release: - types: - - created - -jobs: - - prod-deploy: - name: Production-Deploy - runs-on: ubuntu-latest - steps: - - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - - name: Dockerfile build & test - run: docker build -t lambda . - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-west-1 - - - name: Validate cloudformtion template - run: aws cloudformation validate-template --template-body file://cloudformation.yaml - - - name: Deploying cloudformation.yaml to production - run: aws s3 cp cloudformation.yaml s3://lm-logs-forwarder/latest.yaml - - - name: Creating lambda zip - run: id=$(docker create lambda) && docker cp $id:/code/lambda.zip lambda.zip && docker rm -f $id - - - name: Deploying lambda to production - run: aws s3 cp lambda.zip s3://lm-logs-forwarder/source/1.0.0/ && rm lambda.zip \ No newline at end of file diff --git a/.github/workflows/staging-master.yml b/.github/workflows/staging-master.yml deleted file mode 100644 index 578c53e..0000000 --- a/.github/workflows/staging-master.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Go - -on: - push: - branches: [ master ] - -jobs: - - staging-deploy: - name: Staging-Deploy - runs-on: ubuntu-latest - steps: - - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - - name: Dockerfile build & test - run: docker build -t lambda . - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-west-1 - - - name: Validate cloudformtion template - run: aws cloudformation validate-template --template-body file://cloudformation.yaml - - - name: Deploying cloudformation.yaml to staging - run: aws s3 cp cloudformation.yaml s3://lm-logs-forwarder/staging/latest.yaml - - - name: Creating lambda zip - run: id=$(docker create lambda) && docker cp $id:/code/lambda.zip lambda.zip && docker rm -f $id - - - name: Deploying lambda to staging - run: aws s3 cp lambda.zip s3://lm-logs-forwarder/staging/code/1.0.0/ && rm lambda.zip - - - name: Update lambda on QAUAT - run: aws lambda update-function-code --function-name LMLogsForwarderQAUAT --s3-bucket lm-logs-forwarder --s3-key staging/code/1.0.0/lambda.zip \ No newline at end of file